You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写脚本获取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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 04:15:17