为什么需要监控群组新成员加入?
在Telegram群组运营中,及时了解新成员加入动态是保持社群活跃、防范垃圾广告的重要环节。通过机器人自动监控群组成员变动,管理员可以第一时间收到通知,甚至自动发出欢迎语或执行入群验证。本文将从零开始,手把手教你实现一个具备新成员加入通知功能的Telegram机器人。
前置准备:创建机器人与获取群组权限
开始之前,你需要完成以下步骤:
- 向@BotFather申请一个机器人Token。
- 将机器人添加为目标群组的成员,并赋予“读取消息”权限。
- 在群组设置中,允许机器人接收“服务消息”(如成员加入/离开)。
请确保机器人拥有足够的权限,否则无法获取成员加入事件。
实现原理:监听update中的chat_member事件
Telegram Bot API通过Update对象向机器人推送状态变化。当群组成员变动时,机器人会收到类型为my_chat_member或chat_member的更新。其中,chat_member更新包含new_chat_member字段,可用于识别新加入的成员。你只需要在机器人逻辑中检测该字段,即可触发自定义通知。
方案一:使用getUpdates长轮询(适合小型部署)
getUpdates是一种简单直接的方式,适合开发测试或低并发场景。下面是一个完整的Python示例,使用requests库实现。
import requests
import time
TOKEN = "YOUR_BOT_TOKEN"
GROUP_ID = -1001234567890 # 替换为你的群组ID
API_URL = f"https://api.telegram.org/bot"
def send_message(chat_id, text):
url = f"/sendMessage"
payload = {"chat_id": chat_id, "text": text}
requests.post(url, json=payload)
last_update_id = 0
while True:
resp = requests.get(f"/getUpdates", params={"offset": last_update_id + 1, "timeout": 30})
updates = resp.json().get("result", [])
for upd in updates:
last_update_id = upd["update_id"]
chat_member = upd.get("chat_member")
if not chat_member:
continue
new_status = chat_member["new_chat_member"]["status"]
if new_status == "member":
user = chat_member["new_chat_member"]["user"]
name = user.get("first_name") + " " + user.get("last_name", "")
username = user.get("username")
mention = f"@" if username else name
text = f"🎉 新成员加入:\nID:{user['id']}"
send_message(GROUP_ID, text)
time.sleep(1)将代码中的TOKEN和GROUP_ID替换为实际值,运行脚本即可。注意,需要设置合适的offset避免重复消费。
方案二:使用Webhook(适合生产环境)
生产环境更推荐使用Webhook,由Telegram服务器主动推送更新,实时性更好。一个基于Flask的简单示例如下:
from flask import Flask, request
import requests
app = Flask(__name__)
TOKEN = "YOUR_BOT_TOKEN"
GROUP_ID = -1001234567890
API_URL = f"https://api.telegram.org/bot"
def send_message(chat_id, text):
requests.post(f"/sendMessage", json={"chat_id": chat_id, "text": text})
@app.route(f"/webhook/", methods=["POST"])
def webhook():
update = request.get_json()
chat_member = update.get("chat_member")
if chat_member:
new_status = chat_member["new_chat_member"]["status"]
if new_status == "member":
user = chat_member["new_chat_member"]["user"]
name = user.get("first_name") + " " + user.get("last_name", "")
username = user.get("username")
mention = f"@" if username else name
send_message(GROUP_ID, f"🎉 新成员加入:")
return {"ok": True}
if __name__ == "__main__":
app.run(port=5000)部署后,需要设置Webhook URL。你可以使用setWebhook方法,例如:
curl "https://api.telegram.org/bot<TOKEN>/setWebhook?url=https://yourdomain.com/webhook/<TOKEN>"为了安全性,请务必配置HTTPS,并验证请求是否来自Telegram。
扩展功能:自定义欢迎语与入群验证
在通知基础上,你可以进一步扩展:
- 欢迎语:在成员加入时,自动发送欢迎消息,并提及对方。
- 入群验证:要求新成员点击按钮或输入特定指令,验证通过后才能发言。
- 黑名单检测:如果新成员在全局黑名单中,自动踢出并通知管理员。
这些功能都能通过监听chat_member更新来实现,只需增加相应的业务逻辑。
常见问题与调试技巧
- 收不到更新:检查机器人是否具备“读取服务消息”权限,以及群组是否允许机器人接收消息。
- 重复通知:确保getUpdates模式下正确使用
offset,Webhook模式下返回200响应。 - 区分“加入”与“离开”:通过
old_chat_member和new_chat_member的状态对比,可以精确判断成员是进入还是退出。
总结
通过Telegram Bot API的chat_member更新,我们可以轻松实现群组新成员加入通知。本文提供了两种常见实现方案,并给出了Python代码示例。根据你的部署环境,选择getUpdates或Webhook即可快速落地。更进一步,你可以结合数据库、验证码等机制,打造一个功能完善的群组管理机器人。