首页 > 解决方案 > Python Telegram Bot,无法通过作业队列?

问题描述

我按原样从另一个线程复制了这段代码,但无法让它工作......

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


def sayhi(bot, job):
    job.context.message.reply_text("hi")

def time(bot, update,job_queue):
    job = job_queue.run_repeating(sayhi, 5, context=update)

def main():
    updater = Updater('BotKey')
    dp = updater.dispatcher
    dp.add_handler(MessageHandler(Filters.text , time,pass_job_queue=True))


    updater.start_polling()
    updater.idle()

if __name__ == '__main__':
    main()

我在命令终端中给出的错误是:

TypeError: time() missing 1 required positional argument: 'job_queue'

我觉得这很奇怪,因为我以为我已经设置了 pass_job_queue=True ...

(另外,我确实将 BotKey 更改为所需的密钥。我可以让我的机器人回复文本,但不能让它定期发送东西......)

标签: pythonpython-telegram-bot

解决方案


pass_job_queue在 12.0.0 版本中已弃用,在此处切换版本的教程

您需要使用基于上下文的回调,就像在这个例子中一样。

这是您更改的代码:

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


def sayhi(context):
    context.bot.send_message(context.job.context, text="hi")

def time(update, context):
    context.job_queue.run_repeating(sayhi, 5, context=update.message.chat_id)

def main():
    updater = Updater('Token', use_context=True)
    dp = updater.dispatcher
    dp.add_handler(MessageHandler(Filters.text , time))

    updater.start_polling()
    updater.idle()

main()

推荐阅读