在Telegram群组运营中,成员离开是常见的场景。如果能让机器人自动识别成员退群并发送一条暖心的欢送消息,不仅能够维护良好的社群氛围,还能提升群组的管理效率。本教程将手把手教你通过Telegram Bot API监听群组成员离开事件,并发送自定义的欢送消息,即使你是初学者也能轻松上手。
一、准备工作
在开始编写代码之前,你需要完成以下准备工作:
- 一个Telegram机器人:通过@BotFather创建,获取API Token。
- 将机器人添加为目标群组的成员,并设置为群组管理员。
- 确保机器人拥有“读取消息”和“查看成员”的权限(管理员权限中需勾选相应项)。
- 一台可以运行Python的电脑或服务器(云服务器更佳)。
二、理解离开事件:chat_member更新
Telegram Bot API提供了多种更新类型,其中 chat_member 更新可用来检测群组成员变动。当机器人是群组管理员时,一旦有成员加入、退出或被移除,机器人都会收到一个 chat_member 对象。该对象中的 new_chat_member.status 字段表示成员的新状态,常见的状态有:
left:成员主动退出群组。kicked:成员被管理员移除(被踢出)。member:成员在群组中。administrator:成员成为管理员。
我们通过判断状态为 left 或 kicked 即可触发离开事件。需要注意的是,chat_member 更新只有在机器人具备管理员权限时才会推送,所以务必确认权限设置。
三、使用Python编写监听代码
下面我们使用 requests 库直接调用Bot API,实现长轮询监听。你也可以使用 python-telegram-bot 或 aiogram 框架,但直接调用API能让我们更清楚地理解底层原理。
import requests
import time
TOKEN = 'YOUR_BOT_TOKEN'
BASE_URL = f'https://api.telegram.org/bot/'
def get_updates(offset=None):
params = {'timeout': 30, 'offset': offset}
resp = requests.get(BASE_URL + 'getUpdates', params=params)
return resp.json()['result']
def send_message(chat_id, text):
data = {'chat_id': chat_id, 'text': text}
requests.post(BASE_URL + 'sendMessage', json=data)
def handle_update(update):
if 'chat_member' in update:
chat_member = update['chat_member']
new_status = chat_member['new_chat_member']['status']
if new_status in ['left', 'kicked']:
chat_id = chat_member['chat']['id']
user = chat_member['new_chat_member']['user']
first_name = user.get('first_name', '这位朋友')
# 可自定义欢送语
text = f"欢送 离开群聊,江湖再见!👋"
send_message(chat_id, text)
def main():
offset = None
while True:
try:
updates = get_updates(offset)
for update in updates:
handle_update(update)
offset = update['update_id'] + 1
except Exception as e:
print(f"获取更新失败: ")
time.sleep(1)
if __name__ == '__main__':
main()
将 YOUR_BOT_TOKEN 替换为你自己的Token,然后运行脚本。现在,当有群成员退出或被踢出时,机器人就会在该群发送欢送消息。如果希望区分主动退出和被移除,可以分别设置不同的文案,例如:
if new_status == 'left':
text = f" 主动离开了群聊,祝一切顺利!"
elif new_status == 'kicked':
text = f" 被移除了群聊,再见!"
四、使用Webhook替代长轮询
在生产环境中,推荐使用Webhook方式,这样消息能够即时推送,减少资源占用。你需要有一个公网HTTPS地址,然后执行:
curl -F "url=https://你的域名/路径" https://api.telegram.org/bot<TOKEN>/setWebhook
Webhook的处理逻辑与轮询类似,只需将接收到的JSON数据解析并传递给 handle_update 函数。具体可参考Telegram官方文档,此处不再展开。
五、部署建议与进阶技巧
5.1 部署环境
建议将脚本部署到云服务器或轻量级容器中,使用systemd或Docker守护进程,保证7×24小时运行。你还可以参考站内已有的宝塔面板部署教程轻松上线。
5.2 避免消息发送频率限制
Telegram Bot API对发送消息有频率限制(每秒最多约30条)。如果群组人数众多,同时大量成员变动,可能会触发限制。建议在代码中加入简单的流量控制,或使用消息队列(如RabbitMQ)异步处理。
5.3 定制欢送内容
欢送消息可以支持HTML或Markdown格式,例如添加昵称链接、表情、甚至发送图片或GIF。你只需要在 send_message 中增加 parse_mode 参数即可。
六、常见问题FAQ
- 为什么机器人收不到离开事件? 请确认机器人已经是群管理员,并且没有在群内被限制权限。
- 如何区分成员主动退出和被踢? 通过
new_chat_member.status字段:left表示主动退出,kicked表示被移除。 - 机器人可以监听所有群吗? 只能监听机器人自己所在且具备管理员权限的群。
- 欢送消息会显示谁发的吗? 消息由机器人发送,会显示为机器人的头像和名称。
七、总结
通过Telegram Bot API监听群成员离开事件并不复杂,本文提供了基于 chat_member 更新的完整方案和可直接运行的代码。你可以基于这个基础扩展更多实用功能,例如自动记录人员流动、统计退群原因等。希望本教程对你的群组管理有所帮助,欢迎在社群中分享你的机器人实践!