如何利用telegram.ext修改Telegram机器人的Job时间参数
修改telegram.ext中Job的时间参数
我正在学习telegram.ext模块的Job机制,开发一款支持用户设置和修改提醒时间的小型机器人。已经通过以下代码创建了每日执行的Job:
context.job_queue.run_daily(alarm, chat_id=update.effective_user.id, time=time2check, data="smth").enabled = True
想知道怎么用telegram.ext的内置功能修改该Job的时间参数?我找到了原生APScheduler的解决方案,但JobQueue作为它的便捷封装,有没有更简便的内置方法?我在官方文档里没找到答案,一开始考虑重新创建Job,但觉得太冗余。
解决方案
结合相关回答与研究(我使用的是cron触发器),需要借助APScheduler的功能来修改Job参数,步骤如下:
- 通过
context.job_queue.get_jobs_by_name(jobname)定位目标Job - 调用
reschedule方法更新参数:
job.job.reschedule(trigger='cron', hour=hour, minute=minute, day_of_week=day_of_week, timezone=tz)
关键注意点
- 仅修改单个参数时,必须传入所有原有参数,否则APScheduler会将未传入的参数重置为默认值。例如原Job为每周日12:00执行,仅修改hour为9的话,会变为每天执行。
- 可从原Job的
trigger对象提取原有参数:job.trigger.FIELD_NAMES是包含所有参数名的元组:('year', 'month', 'day', 'week', 'day_of_week', 'hour', 'minute', 'second')job.trigger.fields存储各参数的当前设置,比如获取星期设置:day_of_week = job.trigger.fields[job.trigger.FIELD_NAMES.index('day_of_week')]- 时区可直接通过
job.trigger.timezone读取
内容的提问来源于stack exchange,提问作者Denis
相关产品推荐
相关产品推荐

