gpt4 book ai didi

bots - 尝试使用 Telegram Bot 删除 "left_chat_member"消息

转载 作者:行者123 更新时间:2023-12-05 06:33:04 28 4
gpt4 key购买 nike

我正在尝试使用 Telegram 机器人执行以下操作:

user.first_name 匹配正则表达式时:

  1. 删除“加入”消息。
  2. 将用户从聊天中踢出。
  3. 删除“左”消息。

问题是我不知道如何获取“左”消息的 message.id,因为:

  1. KickChatMember方法不返回消息对象,仅返回 truefalse
  2. 包含 left_chat_member 的已发送消息将 user.from 设置为踢球的成员(在本例中为机器人本身)。
  3. 机器人无法收到自己消息的更新,因此不会收到之前的消息。

所以问题是:

Is possible to obtain the message.id for the message containing left_chat_member when is sent by the bot itself? Is there any other way to achieve this?

也许我可以尝试推断 message.id,但我不知道这是否可行或是否值得推荐。

最佳答案

一个可能的近似值,来自于在 https://t.me/BotTalk 与@eyaadh 的对话。是:

  1. new_chat_members 发生时,您有一个 message_id(比方说 A)
  2. 执行kick_chat_member(缺少message_id)
  3. 并发送了一条消息(任意),你有一个message_id(假设是B)

(第一步是可选的)

kick_chat_member 产生的消息是B-1,中间有另一条消息进入的可能性很小,如果第 2 步和第 3 步必须一起进行在代码中尽可能减少它们之间的时间。

A 消息用于了解最小的 id。换句话说,有问题的 id 在 AB 之间(保证)。如果 A + 2 等于 B,则消息是 B-1(或 A+1)保证。否则,就没有确定性。

在我看来,left_chat_member 应该将消息发送到生成输出的机器人,这样问题就会得到解决,或者 kick_chat_member 的执行应该返回该信息.


解决方案

new_chat_members 在管理它的函数中启动时,可以执行以下操作(将使用三个 ID,id1id2id3):

  • id1 是加入消息的标识符(new_chat_members 附带的标识符)。

  • 然后执行 kick_chat_member(这会生成 ID 未知的消息,id2)。

  • (如果用户已被删除)任何消息都通过 sendMessage 发送给我们 id3

然后我们从 id3 - 1 循环到 id1 + 1 (包括两者):对于这个循环中的每个 id,我们发送一个“消息响应” sendMessage(在 reply_to_message_id 参数中使用循环的 id)我们检查生成的消息是否在其参数 reply_to_message.left_chat_member 中包含 id我们要删除的用户的,如果是肯定的就是我们要消除的消息(消除,它是id2),在循环结束时我们消除“响应中的消息”以及(每个步骤循环的 ID)。

当 for 循环结束时,我们删除带有 id1id3 的消息。

以这种方式,输入和输出(踢出的)消息完全确定地被消除,不管其他消息是否出现在它们之间。

我通过在 bot 中的每个 Action 之间等待 3 秒来测试它并在组中写入(同时 bot 一步一步地进行)。


Python 示例

https://github.com/schcriher/welcome-tg-bot/commit/0e4dbaa9cbff5272d682899b1433ff2b3c750a74


总结:从id3 - 1id1 + 1,所有的消息都被回复(reply),并搜索哪个包含具有已被踢出的用户 ID 的 left_chat_member


更新

现在机器人在踢出成员时会收到服务消息。分析退出消息是否由 bot 发出就足够了,如果是,则对 bot 成员进行踢。

关于bots - 尝试使用 Telegram Bot 删除 "left_chat_member"消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50916967/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com