【发布时间】:2016-05-17 18:14:20
【问题描述】:
是否可以通过 API 检查是否有人删除了 Telegram 中的 Bot Chat?
我的测试:目前如果用户删除聊天,新消息不会停止发送给用户。
【问题讨论】:
标签: telegram telegram-bot
是否可以通过 API 检查是否有人删除了 Telegram 中的 Bot Chat?
我的测试:目前如果用户删除聊天,新消息不会停止发送给用户。
【问题讨论】:
标签: telegram telegram-bot
这已通过新的电报更新解决:
2021 年 3 月 9 日 机器人 API 5.1
添加了两种新的更新类型
添加了有关聊天中成员状态更改的更新,由 ChatMemberUpdated 类以及 Update 类中的字段 my_chat_member 和 chat_member 表示。该机器人必须是聊天中的管理员才能接收有关其他聊天成员的 chat_member 更新。默认情况下,仅接收关于机器人本身的 my_chat_member 更新。
【讨论】:
其他答案中有人建议使用 getChat 方法。
不要使用它有两个原因:
那你能做什么?你可以使用 send 方法,我建议你使用 sendChatAction 这样你就不会打扰用户了。
您可以处理异常并检查返回的错误代码(403 是这种情况下的错误)。此外,在我写这个答案的那一刻,如果用户阻止了机器人,则返回的字符串包含单词“blocked”,而如果他删除了帐户,则字符串包含单词“deactivated”。
例如,我为我的机器人开发了一个按时间间隔自动运行的函数,它有一个 for 循环并尝试向每个用户发送聊天动作。我检查错误代码(403 是为此)并检查错误文本。如果它包含“被阻止”,我只是将用户标记为在数据库中被阻止,因为我想保留首选项,否则如果它包含“停用”,我会从数据库中删除用户。 我这样做是为了统计我的机器人有多少用户以及有多少用户没有阻止机器人。 如果你想做这样的事情,还记得在 for 循环中添加一个睡眠,因为在达到限制之前你每秒只能使用 30 个 sendChatAction。
【讨论】:
你可以得到getChat方法(https://core.telegram.org/bots/api#getchat)。如果用户停止并阻止机器人,此方法返回403状态
【讨论】:
不。只有在向用户发送内容时出错。
如果用户阻止聊天,即使调用 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 被用户阻止"}【讨论】: