【问题标题】:Python Telegram Bot - run_daily does not workPython Telegram Bot - run_daily 不起作用
【发布时间】:2020-05-19 05:47:16
【问题描述】:

我和thread有同样的问题

run_daily 没有完成它的工作。 run_oncerun_repeating 运行良好。

我不明白为什么。我测试了你的代码,但任务没有执行

import telegram.ext
from telegram.ext import Updater
import datetime

updater = Updater('My Token', use_context=True)
job = updater.job_queue

def callback_minute(context: telegram.ext.CallbackContext):
    context.bot.send_message(chat_id='My Chat ID', text='One message every minute')

t = datetime.time(20, 2, 00, 000000)
job.run_daily(callback_minute,t,days=(0, 1, 2, 3, 4, 5, 6),context=None,name=None)

updater.start_polling()
updater.idle()

我已经尝试过this code,但它也不起作用

from telegram.ext import Updater, CommandHandler
import datetime

def daily_job(bot, update, job_queue):
    """ Running on Mon, Tue, Wed, Thu, Fri = tuple(range(5)) """
    bot.send_message(chat_id='My Chat ID', text='Setting a daily notifications!')
    t = datetime.time(7, 30, 00, 000000)
    job_queue.run_daily(notify_assignees, t, days=tuple(range(5)), context=update)

def notify_assignees(bot, job):
    bot.send_message(chat_id='My Chat ID', text="Some text!")

updater = Updater('My Token')
updater.dispatcher.add_handler(CommandHandler('notify', daily_job, pass_job_queue=True))

updater.start_polling()

在这两种情况下,任务都已添加到 jobs() 但未完成...

【问题讨论】:

    标签: python python-telegram-bot


    【解决方案1】:

    我找到了问题的原因。任务时间向后移动了两个小时。我在 19 点订购的任务在 21 点执行。

    通过调试run_dailyrun_repeating 两个任务并检查.next_t 最容易观察到这一点

    import telegram.ext
    from telegram.ext import Updater
    import datetime
    
    updater = Updater('My Token', use_context=True)
    job = updater.job_queue
    
    def example_task(context: telegram.ext.CallbackContext):
        context.bot.send_message(chat_id='My Chat ID', text='Hello!')
    
    t = datetime.time(19, 52, 00, 000000)
    jobDay = job.run_daily(example_task,t,days=(0, 1, 2, 3, 4, 5, 6))
    
    jobRepeating = job.run_repeating(example_task, 10)
    
    print(jobDay.next_t)
    print(jobRepeating.next_t)
    
    updater.start_polling()
    updater.idle()
    

    【讨论】:

      【解决方案2】:

      我修复了后移时间问题。时间差异就这样消失了。

      target_time = datetime.time(hour=2,minute=56).replace(tzinfo=local_timezone)
      
      jobDay = j.run_daily(repeater_func,target_time,days=(0, 1, 2, 3, 4, 5, 6))
      
      print(target_time)
      

      【讨论】:

        猜你喜欢
        • 2020-09-22
        • 2019-08-07
        • 2021-08-24
        • 1970-01-01
        • 2016-04-10
        • 1970-01-01
        • 2017-07-22
        • 1970-01-01
        • 2022-06-22
        相关资源
        最近更新 更多