python-telegram-bot中cron定时任务run_custom传参报错求解
报错原因
你的写法存在两个参数传递错误:
run_custom方法的第二个位置参数是用于接收调度配置的job_kwargs字典,你直接传入字符串'cron'不符合参数要求- cron规则相关的配置(周几、小时、分钟等)不属于
run_custom的顶层关键字参数,直接平铺传入就会触发「unexpected keyword argument」报错;另外你还把APScheduler原生的day_of_week参数错写为days
正确实现步骤
- 先适配定时任务回调函数格式
PTB的定时任务回调必须接收context作为唯一入参,v20及以上版本要求回调为异步函数:
from telegram.ext import ContextTypes async def my_funct(context: ContextTypes.DEFAULT_TYPE): # 此处写入原有的业务逻辑即可 # 如果需要向函数传自定义参数,可以通过context.job.data获取 pass
- 正确调用
run_custom添加cron任务
所有调度相关的配置,包括触发器类型、cron时间规则,全部放到job_kwargs字典内传入:
context.job_queue.run_custom( callback=my_funct, job_kwargs={ "trigger": "cron", "day_of_week": "mon-fri,sun", "hour": "11,15,19,23", "minute": 55 } )
注意事项
- 不要在Bot代码内额外初始化APScheduler的
BackgroundScheduler实例,PTB的JobQueue已经内置了调度器实例,重复初始化会引发事件循环冲突 - 如果需要在Bot启动时就加载全局定时任务,建议把添加任务的逻辑写到
Application的post_init启动钩子中,无需依赖用户消息触发 - 如果要给定时任务传递自定义参数,可以在
run_custom调用时传入data=你的参数,在回调内通过context.job.data读取即可
内容的提问来源于stack exchange,提问作者maufer
相关产品推荐
相关产品推荐

