Telegram机器人能否检测频道新成员加入事件?
如何通过Telegram机器人获取频道新用户ID并发送私信通知
完全可行,以下是具体实现思路、代码示例和注意事项:
核心前提
确保机器人已被设为频道管理员,且必须开启管理频道权限——没有这个权限,机器人无法捕获用户加入频道的事件。
实现步骤
监听用户加入事件
使用Telegram Bot API的getUpdates接口,或者基于开发框架(如pyrogram、python-telegram-bot)监听chat_member更新事件。当有新用户加入频道时,机器人会收到包含用户核心信息的事件数据。提取用户详情
从事件数据中提取关键信息:user.id:用户唯一ID(必能获取)user.first_name:用户昵称user.username:用户Telegram用户名(部分隐私用户可能为空)
发送私信通知
调用Bot API的sendMessage接口,将整理好的用户详情发送到你的个人账号ID。注意:你需要先主动给机器人发过一条消息,否则机器人无法主动发起私信。
代码示例(基于Pyrogram)
from pyrogram import Client, filters from pyrogram.types import ChatMemberUpdated # 替换为你的机器人和个人账号信息 API_ID = 你的API_ID API_HASH = "你的API_HASH" BOT_TOKEN = "你的机器人TOKEN" YOUR_USER_ID = 你的个人账号ID app = Client("channel_member_bot", api_id=API_ID, api_hash=API_HASH, bot_token=BOT_TOKEN) @app.on_chat_member_updated(filters.chat("你的频道ID或用户名")) async def track_new_join(client, update: ChatMemberUpdated): # 判断是否为新用户首次加入 if update.new_chat_member.status == "member" and update.old_chat_member is None: user = update.new_chat_member.user # 整理用户信息 user_info = f"新用户加入频道:\nID: {user.id}\n昵称: {user.first_name}" if user.username: user_info += f"\n用户名: @{user.username}" # 发送私信通知 await client.send_message(YOUR_USER_ID, user_info) app.run()
注意事项
- 隐私设置较高的用户,机器人可能无法获取其用户名,但用户ID是一定会返回的。
- 私有频道中,只有通过邀请链接或管理员手动添加的用户,才会被机器人检测到加入事件。
- 若使用
python-telegram-bot等其他框架,逻辑类似,只需对应调整事件监听和消息发送的API调用方式。
内容的提问来源于stack exchange,提问作者madusha akash
相关产品推荐
相关产品推荐

