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

问题描述 投票:0回答:3

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

TimedOut: Timed out
The read operation timed out

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

send_message

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

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

telegram-bot python-telegram-bot
3个回答
8
投票

超时错误意味着 TG 没有足够快地发送对您的

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

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

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

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


免责声明:我目前是

python-telegram-bot

的维护者

5
投票

在这里和那里阅读了几个小时,并将 timeout=30 传递给

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

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

这修复了我的机器人。希望这也能帮助你。


0
投票

我在发送消息时遇到了同样的问题,但收到了错误。我使用了

send_media_group
方法,通过添加
write_timeout=20
参数解决了问题。欲了解更多详情,请参阅以下页面:LINK

© www.soinside.com 2019 - 2024. All rights reserved.