如何在电报Bot中运行时停止工作

时间:2020-08-09 19:24:39

标签: python telegram telegram-bot python-telegram-bot

我正在使用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 命令时运行作业不会执行任何操作,因为正在运行的作业不在作业队列中。

你有什么主意吗?如何停止正在运行的作业?

1 个答案:

答案 0 :(得分:0)

我认为没有直接的方法可以通过PTB本身来实现,但是自己编程很容易。您始终可以访问context.bot_data字典。

因此,像run_job_a = True那样存储一个变量,并在循环的每次迭代中检查它。然后,您可以通过将其值更改为False来停止工作。