【问题标题】:How can I detect whether a user deletes the Telegram Bot chat?如何检测用户是否删除了 Telegram Bot 聊天?
【发布时间】:2016-05-17 18:14:20
【问题描述】:

是否可以通过 API 检查是否有人删除了 Telegram 中的 Bot Chat?

我的测试:目前如果用户删除聊天,新消息不会停止发送给用户。

【问题讨论】:

    标签: telegram telegram-bot


    【解决方案1】:

    这已通过新的电报更新解决:

    2021 年 3 月 9 日 机器人 API 5.1

    添加了两种新的更新类型

    添加了有关聊天中成员状态更改的更新,由 ChatMemberUpdated 类以及 Update 类中的字段 my_chat_member 和 chat_member 表示。该机器人必须是聊天中的管理员才能接收有关其他聊天成员的 chat_member 更新。默认情况下,仅接收关于机器人本身的 my_chat_member 更新。

    更改日志链接:https://core.telegram.org/bots/api#march-9-2021

    【讨论】:

      【解决方案2】:

      其他答案中有人建议使用 getChat 方法。

      不要使用它有两个原因:

      • 即使它们可以返回一些特殊错误,它们也可以随时更改。相反,任何发送方法都应该是安全的! (这是我几个月前联系官方支持时得到的答案)
      • 根据我的使用情况,我知道 getChat 结果可能会被缓存很多周,而且您不会得到安全的结果。即,即使在他们将机器人从群组中踢出一个月后,我也能够使用 getChat 获得定期的群组结果。

      那你能做什么?你可以使用 send 方法,我建议你使用 sendChatAction 这样你就不会打扰用户了。

      您可以处理异常并检查返回的错误代码(403 是这种情况下的错误)。此外,在我写这个答案的那一刻,如果用户阻止了机器人,则返回的字符串包含单词“blocked”,而如果他删除了帐户,则字符串包含单词“deactivated”。

      例如,我为我的机器人开发了一个按时间间隔自动运行的函数,它有一个 for 循环并尝试向每个用户发送聊天动作。我检查错误代码(403 是为此)并检查错误文本。如果它包含“被阻止”,我只是将用户标记为在数据库中被阻止,因为我想保留首选项,否则如果它包含“停用”,我会从数据库中删除用户。 我这样做是为了统计我的机器人有多少用户以及有多少用户没有阻止机器人。 如果你想做这样的事情,还记得在 for 循环中添加一个睡眠,因为在达到限制之前你每秒只能使用 30 个 sendChatAction。

      【讨论】:

      • 对我来说,sendChatAction 仅针对被阻止的机器人返回异常,对于已删除的机器人,它对所有操作都返回 true。这可能意味着 API 从此时开始发生了变化。
      【解决方案3】:

      你可以得到getChat方法(https://core.telegram.org/bots/api#getchat)。如果用户停止并阻止机器人,此方法返回403状态

      【讨论】:

      • 这是不正确的。您仍会收到聊天数据。
      【解决方案4】:

      不。只有在向用户发送内容时出错。

      如果用户阻止聊天,即使调用 sendChatAction 方法也不会返回错误:

      $ curl https://api.telegram.org/bot***/sendChatAction -d 'chat_id=7975895' -d "action=typing" {“确定”:真,“结果”:真} $ curl https://api.telegram.org/bot***/sendMessage -d 'chat_id=81083738' -d "text=ololo" {"ok":false,"error_code":403,"description":"[Error]: Bot 被用户阻止"}

      【讨论】:

      • 谢谢,对我的测试有什么想法吗?
      • 您可以继续发送消息,希望用户解除对您的机器人的阻止。
      • 似乎删除聊天后需要几分钟才能将其传播到所有服务器
      • 我可以说 sendChatAction 非常适合这个,如果用户阻止了机器人并且即使他删除了帐户,它也会正确返回。检查我在这个问题帖子中的答案。
      • 我注意到如果用户停止机器人会发生这种异常,但如果只删除没有任何异常
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-12-14
      • 2016-12-05
      • 2019-05-23
      • 2021-04-01
      • 2021-09-20
      • 1970-01-01
      • 2019-10-01
      相关资源
      最近更新 更多