Telegram Bot的message事件未触发群成员退群通知,如何解决?
问题解答
这种方式能不能获取退群通知?
不能。message事件仅负责处理用户发送的消息类更新,而群成员退群属于chat_member类型的更新,不会触发message事件,所以你当前的代码捕获不到退群通知。
怎么实现获取退群通知?
你已经在allowed_updates里配置了chat_member,这一步是对的,确保Telegram会推送成员变动的更新。接下来需要单独监听chat_member事件来处理退群逻辑:
- 导入对应的类型:从
node-telegram-bot-api导入ChatMemberUpdated类型,用于类型校验。 - 监听
chat_member事件:通过bot.on('chat_member')捕获成员状态变更,判断成员是否退群。
修改后的代码示例:
import TelegramBot, { Message, ChatMemberUpdated } from 'node-telegram-bot-api' const bot = new TelegramBot(MY_TOKEN, { polling: { params: { allowed_updates: ['chat_member', 'message', 'my_chat_member'] } }}) // 处理消息事件 bot.on('message', async (msg) => { console.log("MESSAGE") }) // 处理群成员变动事件 bot.on('chat_member', async (chatMemberUpdate: ChatMemberUpdated) => { const { new_chat_member, old_chat_member, chat } = chatMemberUpdate // 判断是否为退群(包括主动退出或被踢出) if (new_chat_member.status === 'left' || new_chat_member.status === 'kicked') { const userName = new_chat_member.user.first_name console.log(`用户 ${userName} 已退出群组 ${chat.title}`) // 这里可以添加你需要的退群后续处理逻辑 } })
注意事项
- 确保你的机器人在目标群组中是管理员身份,否则Telegram不会推送群成员变动的更新给机器人。
my_chat_member是用于监听机器人自身的成员状态变更(比如被踢出群组),如果不需要可以保留或移除,不影响用户退群的监听。
内容的提问来源于stack exchange,提问作者Riccardo Perego
相关产品推荐
相关产品推荐

