python-telegram-bot 超时但消息已发送

Ash*_*ian 3 python-telegram-bot telegram-bot

我在尝试向特定电报频道发送消息时遇到以下错误:

TimedOut: Timed out
The read operation timed out
Run Code Online (Sandbox Code Playgroud)

我从 python-telegram-bot 使用的方法是send_message

尽管我的机器人收到此错误,但它仍然将消息发送到通道,并且因为我没有捕获该异常,消息中的所有数据都丢失了,但我确实需要在特定时间段后从该通道中删除我的消息。

即使超时,机器人仍发送消息,这可以吗?如何防止这种情况再次发生或在发送后将此类消息从频道中删除?

Cal*_*tag 8

超时错误意味着 TG 没有send_message足够快地发送对您的请求的响应。这并不一定意味着请求未被处理 - 这就是消息仍可能被发送的原因。但是,如果没有 TG 的响应,您就没有结果消息的消息 ID,并且很难甚至不可能删除它。

您可以尝试增加PTB等待TG响应的时间。这可以通过不同的方式完成:

  • timeout参数为send_message
  • ,如果Defaults.timeout您使用 PTBDefaults设置
  • 通过request_kwargs您传递给的指定它Updater

您可能想看看这个有关网络的wiki 页面


免责声明:我目前是python-telegram-bot


Mos*_*ali 6

经过几个小时的阅读,并将 timeout=30 传递给context.bot.send_audio并得到一个错误,unknown parameter即使send_audio的文档明确指出它需要一个timeout参数,我发现您可以通过在构建时将超时传递给应用程序来解决此问题它:

application = ApplicationBuilder()
    .token(bot_data["token"])
    .read_timeout(30)
    .write_timeout(30)
    .build()
Run Code Online (Sandbox Code Playgroud)

这修复了我的机器人。希望这也对您有帮助。