JobQueue.run_repeating 到 运行 Telegram 中没有命令处理程序的函数

JobQueue.run_repeating to run a function without command handler in Telegram

我需要开始向 TG 组发送通知,在此之前我想 运行 一个连续查询 API 并将数据存储在数据库中的函数。虽然此功能是 运行ning,但我希望能够发送通知(如果它们在数据库中可用):

这是我的代码:

import telegram
from telegram.ext import Updater,CommandHandler, JobQueue

token = "tokenno:token"

bot = telegram.Bot(token=token)

def start(update, context):
    context.bot.send_message(chat_id=update.message.chat_id,
                             text="You will now receive msgs!")


def callback_minute(context):
    chat_id = context.job.context

    # Check in DB and send if new msgs exist
    send_msgs_tg(context, chat_id)


def callback_msgs():
    fetch_msgs()


def main():
    JobQueue.run_repeating(callback_msgs, interval=5, first=1, context=None)
    
    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()

这段代码给我错误: 类型错误:run_repeating() 缺少 1 个必需的位置参数:'callback'

如有任何帮助,我们将不胜感激

您的代码存在一些问题,让我试着指出它们:

1。 def callback_msgs(): fetch_msgs() 您使用 callback_msgs 作为您工作的回调。但是作业回调只接受一个 telegram.ext.CallbackContext.

类型的参数
  1.  JobQueue.run_repeating(callback_msgs, interval=5, first=1, context=None)
    

    JobQueue 是一个 class。要使用实例方法 run_repeating,您需要 class 的一个实例。事实上 Updater 已经为您构建了一个实例,在您的情况下它可以作为 updater.job_queue 使用。所以调用应该是这样的:

    updater.job_queue.run_repating(callback_msgs, interval=5, first=1, context=None)
    
  2. CommandHandler("start",start, pass_job_queue=True)
    

    严格来说这不是问题,bot pass_job_queue=True 根本没有效果,因为你使用 use_context=True

请注意,在 ptb-wiki. There is also an example 上有一个关于 JobQueue 的很好的教程,介绍如何使用它。


免责声明:我目前是 python-telegram-bot

的维护者