首页 > 解决方案 > 如何通过python电报机器人库在固定时间或间隔时间从机器人向用户发送消息?

问题描述

我正在尝试每天向机器人发送消息,而不会从第二次对话开始从用户端(例如 commandhadler)触发。

我已经为机器人构建了一个基本菜单来与用户交互

在此处输入图像描述

但我也在尝试每天通过 job_queue 发送消息

我参考了使用命令处理程序的代码

dp.add_handler(CommandHandler("set", set_timer,
                              pass_args=True,
                              pass_job_queue=True,
                              pass_chat_data=True))

这是在用户输入 /set 之后设置的。但我正在尝试找到一种方法,每 30 秒自动发送一次消息或设置固定时间每天发送消息我的代码

from telegram.ext import Updater,CommandHandler 
from telegram.ext import  MessageHandler,Filters,InlineQueryHandler
import logging
import telegram

logging.basicConfig(level=logging.INFO,
                    format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
logger = logging.getLogger()

def start(bot, update):
    update.message.reply_text("Hello , Thanks for choosing us!!")

def callback_minute(context: telegram.ext.CallbackContext):
    chat_id = ?
    context.bot.send_message(chat_id=chat_id, 
                             text='Hi User, Add Fund to your account to start trading')


def main():
    updater = Updater(token,use_context=True)
    dp = updater.dispatcher
    j = updater.job_queue
    dp.add_handler(CommandHandler("start",start))
    job_minute = j.run_repeating(callback_minute, interval=10, first=0)

    updater.start_polling()

    updater.idle()

如何获取chat_id?如果我正在使用

def callback_minute(update, context: telegram.ext.CallbackContext):
    chat_id = update.message.chat.id

我收到此错误

TypeError: callback_minute() missing 1 required positional argument: 'context'

标签: pythonpython-telegram-bot

解决方案


它在下面进行了重新设计,以便从命令中调用 run_repeating() /start(正如 Gagan TK 在评论中所建议的那样)。在此示例first=30中,它将在 30 秒后启动。

在 GitHub 上JobQueue 的 wiki 文档底部有一个以这种方式使用作业队列的很好的示例。

from telegram.ext import Updater,CommandHandler 
from telegram.ext import MessageHandler,Filters,InlineQueryHandler
import logging
import telegram

logging.basicConfig(level=logging.INFO,
                    format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
logger = logging.getLogger()

bot = telegram.Bot(token=token)

def start(update, context):
    context.bot.send_message(chat_id=update.message.chat_id,
                     text="Hello , Thanks for choosing us!!")

    context.job_queue.run_repeating(callback_minute, interval=10, first=30,
                                    context=update.message.chat_id)

def callback_minute(context):
    chat_id=context.job.context
    context.bot.send_message(chat_id=chat_id, 
                             text="Hi User, Add Fund to your account to start trading")

def main():
    updater = Updater(token,use_context=True)
    dp = updater.dispatcher
    dp.add_handler(CommandHandler("start",start, pass_job_queue=True))

    updater.start_polling()

    updater.idle()

if __name__ == '__main__':
    main()

推荐阅读