如何修改现有Telegram Bot定时任务代码以使用job_queue.run_repeated
Telegram Bot单次定时任务改重复执行修改方案
核心修改说明
- 将原代码中调用的
context.job_queue.run_once方法替换为context.job_queue.run_repeating即可实现重复定时任务 - 可根据需求调整首次执行的延迟时间:默认首次任务会立即执行,若需要首次也等待对应间隔时间后再执行,可指定
first参数值和间隔时间一致 - 同步修改命令提示文案,明确输入的秒数为重复执行的间隔时长
修改后完整代码
def set_timer(update: Update, context: CallbackContext) -> None: """Add a repeated job to the queue.""" chat_id = update.message.chat_id try: # args[0] 为重复执行的间隔时间,单位秒 interval = int(context.args[0]) if interval < 0: update.message.reply_text('抱歉,不能设置负的时间间隔!') return job_removed = remove_job_if_exists(str(chat_id), context) # 用法1:添加后立即执行第一次,之后每interval秒重复执行 context.job_queue.run_repeating(alarm, interval=interval, context=chat_id, name=str(chat_id)) # 如果你需要首次执行也等待interval秒,之后再按间隔重复,就用下面这行替换上面的run_repeating调用 # context.job_queue.run_repeating(alarm, interval=interval, first=interval, context=chat_id, name=str(chat_id)) text = '重复定时任务设置成功!' if job_removed: text += ' 已移除之前设置的旧任务。' update.message.reply_text(text) except (IndexError, ValueError): update.message.reply_text('用法:/set <间隔秒数>')
方法参数说明
run_repeating核心参数含义:
- 第一个参数:任务触发时执行的回调函数,和原
run_once一致,保留原来的alarm即可 interval:两次任务执行的间隔秒数first:可选参数,首次执行任务的延迟秒数,不填默认立即执行首次任务context、name参数和原run_once用法完全一致,不需要调整
内容的提问来源于stack exchange,提问作者Luiio01
相关产品推荐
相关产品推荐

