当前位置: 首页 > 知识库问答 >
问题:

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

柴英博
2023-03-14

我正在使用python-telegram-bot处理一个Telegram bot,我希望停止运行Telegram.job对象。
例如,我希望在hello函数处于while循环时停止运行该函数。

def hello(context):
    while True:
        context.bot.send_message(chat_id=context.job.context, text="Hi!")
def start(update,context):
    context.job_queue.run_once(hello, 10, context=update.message.chat_id, name=update.effective_chat.id)
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)

问题是,当我在作业开始前使用end命令时(最初10秒),它可以正常工作并停止作业,但当我在运行作业时使用end命令时,它什么也不做,因为正在运行的作业不在作业队列中。

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

共有1个答案

凌智
2023-03-14

我不认为通过PTB本身有一个直接的方法来做到这一点,但它很容易自己编程。您始终可以访问context.bot_data字典。

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

 类似资料:
  • 我一直试图在Android设备中添加一个机器人到我的电报组中,但我无法做到这一点。我尝试了@bot_name,/bot_name,但都不起作用。 是否可以添加一个bot到组中,或者我应该使用Telegram API(而不是bot API)创建一个新的bot,以便我可以将联系号码添加到组中?

  • 我的电报机器人是用煤气做的,但我的自定义键盘不工作。我的functon发送消息如下。谢谢 VAR有效载荷={'method':'sendMessage','chat_id': String(chat Id),'text': text,'parse_mode':'超文本标记语言'} }

  • 我无法理解电报机器人api的Reply_to_message方法。以下是我的代码: 这里,当用户发送/启动机器人发送hello world文本。我想让用户回复发送hello world的消息。我的意思是当用户发送/启动机器人回复信息的文本“你好,世界!” 我使用网络钩子。

  • 我不知道如何使用电报机器人诱导(触发)本地服务器向通道发送消息。 例如,从用户注册并连接电报的网站向用户发送通知。我们假设用户已经开始与bot对话,并准备好接收来自bot的消息。 我有一个单独的服务器,可以使用bot向服务器发送请求,但我不明白如何在这个电报机器人服务器上接收和处理请求。 我正在使用go电报-机器人-api库,此时服务器使用长轮询方法而不是webhooks。所以它通过更新通道接收一

  • 创建电报机器人并获得机器人令牌后,我想向机器人应用编程接口发送请求。 这个链接说我们必须像这样发送HTTP请求:

  • 问题内容: 我在停止“供稿”时遇到问题;cancel参数似乎对after方法没有任何影响。尽管“进纸停止”已打印到控制台。 我尝试使用一个按钮将启动供稿,而另一个按钮将停止供稿。 随着输出: 问题答案: 问题是,即使你打电话与停止循环,已经有等待消防挂起的工作。按下停止按钮不会触发新的作业,但是旧的作业仍然存在,并且当它自己调用时,它将传入False,这将导致循环继续。 您需要取消待处理的作业,以