You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何利用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 19:43:22