如何在电报机器人中运行时停止作业

2024-04-20 03:19:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用python Telegram bot开发一个电报机器人,我想停止运行Telegram.job对象。
例如,我想在while循环中停止运行这个函数

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

你知道吗?如何停止正在运行的作业


Tags: 函数命令idhelloqueuedefbot作业
1条回答
网友
1楼 · 发布于 2024-04-20 03:19:58

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

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

相关问题 更多 >