如何在自定义 Telegram 机器人内部循环?

2024-03-30

我们正在尝试制作一个电报价格机器人,但遇到了一个可以使用第三方代码解决的问题,但是我们无法将机器人设置为每 5 分钟(或更长时间)向我们发送更新的价格,而不使用第三方解决方案安全原因。

如何在不使用其他第三方 Telegram 机器人的情况下从 INSIDE 这段代码循环?

这是代码

import telegram
from telegram.ext import Updater
from telegram.ext import CommandHandler
from tracker import get_prices

telegram_bot_token = "mybot"

updater = Updater(token=telegram_bot_token, use_context=True)
dispatcher = updater.dispatcher


def start(update, context):
    chat_id = update.effective_chat.id
    message = ""

    crypto_data = get_prices()
    for i in crypto_data:
        coin = crypto_data[i]["coin"]
        price = crypto_data[i]["price"]
        change_day = crypto_data[i]["change_day"]
        change_hour = crypto_data[i]["change_hour"]
        message += f" {coin}={price:,.5f}$ \nHour Change: {change_hour:.3f}%\nDay Change: {change_day:.3f}%\n\n"

    context.bot.send_message(chat_id=chat_id, text=message)


dispatcher.add_handler(CommandHandler("start", start))
updater.start_polling()

有什么解决方案可以一次正确发送一条消息而不附加到前一条消息吗?谢谢!


有不同的方法可以做到这一点。

第一个是一个简单的time.sleep() in a while loop:

import time

def start(update, context):
    chat_id = update.effective_chat.id
    while True:
        message = ""
        crypto_data = get_prices()
        for i in crypto_data:
            coin = crypto_data[i]["coin"]
            price = crypto_data[i]["price"]
            change_day = crypto_data[i]["change_day"]
            change_hour = crypto_data[i]["change_hour"]
            message += f" {coin}={price:,.5f}$ \nHour Change:{change_hour:.3f}%\nDay Change: {change_day:.3f}%\n\n"


        context.bot.send_message(chat_id=chat_id, text=message)
        time.sleep(300)

另一种方法可能是使用后台进程调度程序,但您可能会重构您的start函数并仅调度创建/发送消息的部分。 (while循环内的部分)

高级 Python 调度程序 https://apscheduler.readthedocs.io/en/3.x/ (pip install apscheduler)是一个很棒的库,但它是第三方库,所以可能不适合您。然而我已经在很多项目中使用过它。

EDIT:

这是一个调度示例apscheduler:

from apscheduler.schedulers.background import BackgroundScheduler

scheduler = BackgroundScheduler()

def message_loop(chat_id, bot):
    message = ""
    crypto_data = get_prices()
    for i in crypto_data:
        coin = crypto_data[i]["coin"]
        price = crypto_data[i]["price"]
        change_day = crypto_data[i]["change_day"]
        change_hour = crypto_data[i]["change_hour"]
        message += f" {coin}={price:,.5f}$ \nHour Change: {change_hour:.3f}%\nDay Change: {change_day:.3f}%\n\n"
    bot.send_message(chat_id=chat_id, text=message)


def start(update, context):
    chat_id = update.effective_chat.id
    bot = context.bot
    scheduler.add_job(message_loop, 'interval', minutes=5, args=(chat_id, bot))
    scheduler.start()

# You might want to also add a stop function to your bot:

def stop():
    scheduler.shutdown()

dispatcher.add_handler(CommandHandler("start", start))
dispatcher.add_handler(CommandHandler("stop", stop))
updater.start_polling()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在自定义 Telegram 机器人内部循环? 的相关文章

  • 调整 Telegram 内嵌键盘的大小

    Telegram 内嵌键盘这是一个很棒的功能 有很多不同的用例 内联按钮添加为项目列表 如下所示 inline keyboard InlineKeyboardButton text button callback data button I
  • 如何使用 Python-Telegram-Bot 获取 Telegram 用户的用户名、名字或姓氏?

    我正在创建一个 Telegram 机器人Python Telegram Bot 我知道update message chat id返回用户的聊天 ID 但我需要知道如何获取用户的用户名或名字和 或姓氏 我找到了This在 Telegram
  • Python Telegram Bot 如何等待用户回答问题并返回

    Context 我在用PyTelegramBotAPi or Python 电报机器人 当用户开始对话时 我正在运行一段代码 当用户开始对话时 我需要向他发送第一张图片和一个问题 如果他看到图片中的东西 该函数需要等待用户输入并返回无论他是
  • Telegram Bot API Webhooks 自签名证书问题

    我正在开发一个 Ruby 语言服务器来管理多个 Telegram 机器人设置网络钩子 顺便说一句 我将在以下位置将服务器作为开源交付 BOT服务器 PROBLEM 我在从 Telegram Bot API 服务器接收 webhook 更新时
  • Telegram 机器人向机器人发送消息

    我编写了一个电报机器人 这在发送给群组或用户时效果很好 不过我有一个特殊的要求 我需要能够发送给另一个机器人 将两个机器人以管理员身份添加到组时 我仍然无法通过第二个机器人接收消息 我只能通过添加到该组的真实用户帐户看到它 我缺少什么 我使
  • 如何在云端成功托管用 Python 编写的 Telegram 机器人(免费)?

    我跟着本教程使用 Python 创建 Telegram 机器人 最后 我在我的机器上本地运行它ngrok 为了测试这个机器人 我在 Telegram 中向它发送了消息 有效 所以这是一个很好的教程 但是 现在我想在云端托管机器人 因为我当然
  • 如何使用lua打乱单词的字母

    我在 PHP 中使用了这个 str shuffle 函数 和梅卡this api https i stack imgur com papuI png我需要做同样的想法 将字母打乱 字母之间有空格 但使用 lua 对于使用电报机器人 我进行了
  • 从 Telegram 机器人获取用户的“Last Seen”?

    当我与 Telegram 用户聊天时 我可以看到每个用户的 最后一次见面 他们上次连接到 Telegram 的时间 即使我有一段时间没有与他们聊天 有没有办法通过机器人查询这些信息API https core telegram org bo
  • Excel VBA 使用 Telegram bot api 发送图像

    我正在编写一个 Excel 宏 该宏在运行另一个宏后发送结果的屏幕截图 截取的屏幕截图以 jpg 图像形式保存在目录 C documents SCREENSHOT 中 我想使用机器人将 picture1 jpg C documents SC
  • 如何通过电视马拉松将消息转发给其他联系人

    当我收到联系人发来的消息后 如何立即将消息转发到另一个聊天室 我创建这个示例只是为了测试路由 但它不起作用 usr local bin python3 from telethon import TelegramClient events a
  • Telegram Bot API 4.5 MarkdownV2 上的转义字符给超链接带来麻烦

    电报机器人 API 4 5带有新的解析模式 MarkdownV2 同时这些 gt 字符必须与前面的字符一起转义 replace g 用作添加转义字符的解决方案 效果非常好 但不幸的是 该解决方案确实影响超链接方法 inline URL ht
  • 如何使用 C# 使键盘按钮消息文本与其 Telegram bot API 中的标题不同

    我需要我的机器人打印与其标题不同的消息 由电报客户端在键盘按钮元素上显示 我的自定义按钮有这样的文字 Where am I 当我点击它时 它会打印在屏幕上 Where am I 还 我想要打印按钮 location 与它不同的东西text
  • Telegram 机器人 - OAuth 授权

    我想在我的机器人上通过 Twitch API 实现 OAuth 授权 当我寻找更好的解决方案时 我发现了这个 GitHubBot 在此机器人重定向 URL 中 从integrations telegram org github 开始 我想知
  • Telegram Bot API:getChatMember 为有效用户抛出 USER_ID_INVALID

    我正在尝试找出是否有特定的User出现在一个超级组中 以便跟踪那些离开的人 为此 我调用 Bot API 方法getChatMember对于每个User并检查他们的状态是否是Left or Kicked 然而 我注意到 最近 我得到了USE
  • Telegram 机器人可以检测到加入频道活动的新成员吗?

    我有一个 Telegram 机器人 我将此机器人设置为频道管理员 现在 当新用户通常加入频道 而不是群组 时 频道上没有消息 我们也无法收到任何消息getUpdates方法 从技术上讲 是否可以发布一条消息说 新用户已加入频道 从而捕获 新
  • 将电报机器人与谷歌应用程序脚本连接

    我在电报机器人上设置了一个机器人 并通过以下应用程序脚本将其与谷歌电子表格连接this https www youtube com watch v mKSXd od4Lg教程 这是代码 var token FILL IN YOUR OWN
  • 如何解决 C# 中机器人的干扰问题?

    我做了一个电报机器人 事实上 机器人是一个游戏 玩猜某些单词 但问题是当我将机器人添加到两个不同的组 作为管理员 或两个用户 Telegram 分别使用机器人和启动机器人时 会产生影响一个人的游戏对下一个人的游戏造成干扰 例如 如果 joh
  • 我正在用 python 编写一个电报机器人

    我想通过Python编写一个电报机器人 但它不起作用 import telebot bot telebot TeleBot my token bot message handler content types text def sendin
  • Telegram bot API - 内联机器人在尝试回答内联查询时收到错误 400

    我在用 Python 编写一个与新的内联模式 https core telegram org bots api inline mode 机器人收到查询 并在尝试回答时收到错误400 以下是机器人此时发送的数据示例 inline query
  • 如何使用 Telegram Bot API 获取 Telegram 频道用户列表

    任何人都可以告诉我如何从我的电报机器人获取有关用户的信息 想象一下我的机器人是我频道中的管理员用户 我想获取我的频道用户列表或在新用户加入时引起注意 我怎样才能做到这一点 Telegram 的文档非常杂乱 到目前为止我已经看过这些 http

随机推荐