如何通过Telegram API实现机器人追踪用户添加及添加者
如何通过Telegram API追踪用户被添加的时间及操作者
刚好做过类似的需求,来分享下具体实现步骤和注意点:
核心逻辑:监听群成员变更事件
Telegram Bot API本身没有专门的「用户被添加」触发事件,但可以通过监听群成员状态变更来捕获用户加入的动作。当有用户被添加到机器人所在的群聊时,Bot会收到ChatMemberUpdated类型的更新,里面包含了我们需要的所有关键信息。
具体实现步骤
1. 确保机器人拥有必要权限
首先要通过BotFather给机器人开启「查看群成员」的权限,否则Bot无法接收到群成员变更的通知。另外,在代码中需要指定监听chat_member类型的更新。
2. 解析更新数据提取关键信息
当Bot收到ChatMemberUpdated更新时,我们需要判断这是「新用户被添加」的动作:
- 当
new_chat_member.status为member或administrator,且old_chat_member.status为left或kicked时,说明这是用户首次加入(或被从黑名单拉回)群聊 - 从
update.date可以直接获取用户被添加的时间(是Python的datetime对象,方便处理) chat_member_update.from_user就是执行添加操作的操作者信息(ID、用户名等)new_chat_member.user是被添加的目标用户信息
3. 代码示例(Python + python-telegram-bot v20+)
这是最常用的Python Bot库,示例代码如下:
首先安装依赖:
pip install python-telegram-bot --upgrade
然后编写核心逻辑:
from telegram import Update, ChatMember from telegram.ext import ApplicationBuilder, ContextTypes, ChatMemberHandler async def handle_user_add(update: Update, context: ContextTypes.DEFAULT_TYPE): chat_member_update = update.chat_member new_member = chat_member_update.new_chat_member old_member = chat_member_update.old_chat_member operator = chat_member_update.from_user add_time = update.date # UTC时间,可按需转本地时间 # 过滤出「新用户被添加」的场景 if (new_member.status in [ChatMember.MEMBER, ChatMember.ADMINISTRATOR] and old_member.status in [ChatMember.LEFT, ChatMember.KICKED]): added_user = new_member.user # 这里可以把数据存入数据库(比如SQLite、MySQL) print(f"用户 {added_user.id} (@{added_user.username}) 被操作者 {operator.id} (@{operator.username}) 在 {add_time} 添加到群聊 {chat_member_update.chat.id}") def main(): # 替换成你的机器人Token app = ApplicationBuilder().token("YOUR_BOT_TOKEN").build() # 添加群成员变更处理器 app.add_handler(ChatMemberHandler(handle_user_add, ChatMemberHandler.CHAT_MEMBER)) app.run_polling() if __name__ == '__main__': main()
注意事项
- 如果是机器人自身拉用户进群,
from_user字段会是机器人自己的账号信息 - 时间
update.date是UTC时区,你可以用pytz库转换为本地时区 - 一定要持久化数据,把用户ID、操作者ID、添加时间、群聊ID存入数据库,避免重启Bot后丢失记录
- 对于超级大群,可能会有延迟收到更新的情况,建议做好异常处理
内容的提问来源于stack exchange,提问作者Takeda925
相关产品推荐
相关产品推荐

