我正在使用python-telegram-bot在Telegram机器人上工作,我想停止运行telegram.job对象。
例如,当它在while循环中时,我想停止运行此 hello 函数。
def hello(context):
while True:
context.bot.send_message(chat_id=context.job.context, text="Hi!")
我正在使用 start 命令调用 hello 函数并运行作业:
def start(update,context):
context.job_queue.run_once(hello, 10, context=update.message.chat_id, name=update.effective_chat.id)
然后使用 end 命令,将作业从作业队列中删除:
def end(update,context):
for job in context.job_queue._queue.queue:
if job[1].name == update.effective_chat.id:
context.job_queue._queue.queue.remove(job)
问题是,当我在开始作业之前(在开始的10秒内)使用 end 命令时,它可以正常工作并停止该作业,但是当我使用 end 命令时运行作业不会执行任何操作,因为正在运行的作业不在作业队列中。
你有什么主意吗?如何停止正在运行的作业?
答案 0 :(得分:0)
我认为没有直接的方法可以通过PTB本身来实现,但是自己编程很容易。您始终可以访问context.bot_data
字典。
因此,像run_job_a = True
那样存储一个变量,并在循环的每次迭代中检查它。然后,您可以通过将其值更改为False来停止工作。