如何编写脚本获取Telegram目标群新成员ID并发送私信?
实现Telegram新成员检测与私信脚本
准备工作
- 注册Telegram机器人:联系@BotFather申请,获取
API_TOKEN - 获取个人API ID和API Hash:在my.telegram.org注册账号后获取,这是使用第三方Telegram客户端库的必要参数
- 将机器人添加到目标群组,确保它拥有读取消息和发送消息权限,同时群组需允许机器人查看成员列表(部分私密群组需额外配置)
推荐方案:使用Telethon库(Python)
Telethon是功能完善的Telegram客户端库,能高效处理群组成员更新事件,以下是完整实现步骤:
1. 安装依赖
pip install telethon
2. 核心脚本代码
from telethon import TelegramClient, events from telethon.tl.types import User # 替换为你的实际参数 API_ID = 123456 # 从my.telegram.org获取 API_HASH = '你的API_HASH字符串' BOT_TOKEN = '@BotFather提供的机器人令牌' TARGET_GROUP_ID = -1001234567890 # 目标群组的负数ID(可通过机器人发消息后获取) # 初始化客户端 client = TelegramClient('new_member_bot', API_ID, API_HASH).start(bot_token=BOT_TOKEN) @client.on(events.ChatAction()) async def handle_new_member(event): # 检测新成员加入事件 if event.user_added or event.user_joined: for user in event.users: if isinstance(user, User) and not user.bot: # 过滤机器人账号 user_id = user.id username = user.username or user.first_name print(f"新成员加入:ID={user_id},名称={username}") # 尝试发送私信 try: await client.send_message( user_id, "欢迎加入群组!这是自动发送的问候消息~" ) print(f"已向ID {user_id} 发送私信") except Exception as e: print(f"无法向ID {user_id} 发送私信:{str(e)}") if __name__ == '__main__': print("机器人已启动,监听新成员加入...") client.run_until_disconnected()
3. 关键细节说明
- 群组ID获取:让机器人在目标群组发一条消息,通过
client.get_messages(TARGET_GROUP_ID, limit=1)获取消息中的chat_id即可得到群组ID - 私信限制:Telegram规定,机器人只能给主动发起过对话的用户发私信,或用户在机器人的「允许私信」列表中,若机器人是群组管理员则不受此限制。发送失败大概率是触发了这个规则
- 权限验证:确保机器人在群组中拥有「查看成员」权限,否则无法捕获新成员加入事件
替代方案:使用python-telegram-bot(仅官方Bot API)
若只想依赖官方Bot API,也可实现基础功能,但灵活性较低(无法主动获取成员列表,仅能通过chat_member更新事件触发):
1. 安装依赖
pip install python-telegram-bot==13.7 # v20+版本有较大改动,此版本更适配基础场景
2. 脚本示例
from telegram import Update from telegram.ext import Updater, ChatMemberHandler, CallbackContext BOT_TOKEN = '你的机器人令牌' TARGET_GROUP_ID = -1001234567890 def new_member_handler(update: Update, context: CallbackContext): status = update.chat_member.new_chat_member.status user = update.chat_member.new_chat_member.user if status == 'member' and not user.is_bot: user_id = user.id print(f"新成员:ID={user_id},名称={user.first_name}") try: context.bot.send_message( chat_id=user_id, text="欢迎加入!这是自动问候消息" ) print(f"已发送私信给ID {user_id}") except Exception as e: print(f"发送失败:{str(e)}") def main(): updater = Updater(BOT_TOKEN) dp = updater.dispatcher dp.add_handler(ChatMemberHandler(new_member_handler, ChatMemberHandler.CHAT_MEMBER)) updater.start_polling() print("机器人启动,监听新成员...") updater.idle() if __name__ == '__main__': main()
注意事项
- 需在@BotFather中执行
/setprivacy命令,将机器人隐私设置改为Disable,否则无法接收chat_member事件 - 同样受限于Telegram的私信发送规则,非管理员机器人无法给未主动联系过的用户发消息
内容的提问来源于stack exchange,提问作者Pekea
相关产品推荐
相关产品推荐

