【问题标题】:JobQueue.run_repeating to run a function without command handler in TelegramJobQueue.run_repeating 在 Telegram 中运行没有命令处理程序的函数
【发布时间】:2021-06-05 11:55:27
【问题描述】:

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

这是我的代码:

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'

任何帮助将不胜感激

【问题讨论】:

    标签: telegram-bot python-telegram-bot py-telegram-bot-api


    【解决方案1】:

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

    1。 def callback_msgs(): fetch_msgs() 您使用callback_msgs 作为您工作的回调。但是作业回调只采用telegram.ext.CallbackContext 类型的一个参数。

    1.  JobQueue.run_repeating(callback_msgs, interval=5, first=1, context=None)
      

      JobQueue 是一个类。要使用run_repeating,它是一个实例方法,您需要该类的一个实例。实际上 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

    请注意,JobQueue 上有一个很好的教程,位于 ptb-wiki。还有一个example关于如何使用它。


    免责声明:我目前是python-telegram-bot的维护者

    【讨论】:

    • 成功了!坦率地说,我更像是一个复制粘贴编码器,只知道 Python 的基础知识,当涉及到编码异步和基于类的东西时,我步履蹒跚:) 没有时间正确阅读它!使用像实例这样的类 :D :D :D 你认识我 ;)
    猜你喜欢
    • 2021-06-06
    • 1970-01-01
    • 2018-09-03
    • 1970-01-01
    • 1970-01-01
    • 2011-03-27
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    相关资源
    最近更新 更多