我正在编写一个电报机器人(使用python-telegram-bot(,它基于命令,每小时循环地向用户发送消息。
我想使用机器人命令启动/停止它,添加/start_cycle
和/stop_cycle
等命令处理程序。澄清一下,这就是我的想法:
def start_cycle()
# start in some way send_hourly_message()
def stop_cycle()
# stop in some way send_hourly_message()
def main():
"""Entrypoint of the bot"""
# Create updater and get dispatcher
updater = Updater(...)
dp = updater.dispatcher
# Add command handlers
dp.add_handler(CommandHandler("start_cycle", start_cycle))
dp.add_handler(CommandHandler("stop_cycle", stop_cycle))
# Start the bot until interrupt
updater.start_polling(timeout=3)
updater.idle()
让我感到困惑的是,对于电报库的构思方式,已经有一个基于事件的逻辑,由updater.start_polling()
和updater.idle()
开始。我没有找到任何有关如何通过可触发的基于时间的事件使其正常工作的文档/特定信息。
在您看来,实现我所想到的最好方法是什么?我对异步进行了一些研究,但对于我实际需要的东西来说可能太复杂了?
提前感谢您的任何建议!
多亏了@GaganTK我才能找到我需要的东西:
def start_notify(update, context):
new_job = context.job_queue.run_repeating(my_callback, interval=3, first=0, name="my_job")
def stop_notify(update, context):
job = context.job_queue.get_jobs_by_name("my_job")
job[0].schedule_removal()
def my_callback(context: telegram.ext.CallbackContext):
print(datetime.datetime.now())