python-telegram-bot 中的 TimedOut 但已发送消息

尝试向特定电报频道发送消息时出现以下错误:

TimedOut: Timed out
The read operation timed out

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

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

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

stack overflow TimedOut in python-telegram-bot but message is sent
原文答案
author avatar

接受的答案

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

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

  • 使用 timeoutsend_message 参数
  • 使用 Defaults.timeout ,如果您使用 PTB Defaults 设置
  • 通过传递给 request_kwargsUpdater 指定它

您可能想在网络上查看此 wiki page


免责声明:我目前是 python-telegram-bot 的维护者


答案:

作者头像

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

application = ApplicationBuilder()
    .token(bot_data["token"])
    .read_timeout(30)
    .write_timeout(30)
    .build()

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