如何为作业队列编写电报机器人的回调函数?

时间:2017-11-06 13:30:21

标签: python telegram-bot python-telegram-bot job-queue

我对这个job queue事情感到困惑。在回调函数中,我希望能够访问用户消息并对其进行处理,但在文章中说回调只接受机器人和作业参数。有了手中的人我无法访问update.message.text。所以例如我想将以下函数重写为回调函数,我无法弄清楚:

def echo(bot,update):
    if tldextract.extract(update.message.text).registered_domain:
        bot.send_message(chat_id= update.message.chat_id, text="OK")

我在这里缺少什么?

1 个答案:

答案 0 :(得分:0)

您必须在创建作业时传递上下文。

您可以阅读页面底部附近的示例here

>>> from telegram.ext import CommandHandler
>>> def callback_alarm(bot, job):
...     bot.send_message(chat_id=job.context, text='BEEP')
...
>>> def callback_timer(bot, update, job_queue):
...     bot.send_message(chat_id=update.message.chat_id,
...                      text='Setting a timer for 1 minute!')
... 
...     job_queue.run_once(callback_alarm, 60, context=update.message.chat_id)
...
>>> timer_handler = CommandHandler('timer', callback_timer, pass_job_queue=True)
>>> u.dispatcher.add_handler(timer_handler)

当您使用contextrun_once和{{1}时,您可以将任何内容(包括电报对象,列表/词组等)传递到作业run_daily中} 功能。然后在您的回调函数中,您必须按照您所说的run_repeatingbot传递2个参数,然后通过访问job获取所需的数据。