如何自动或定时踢出/移除Telegram频道、群组成员?附Python代码参考
功能可行性结论
完全可以实现,你可以通过Telegram的MTProto协议对接Python第三方库实现自动化定时踢人逻辑,无需手动操作。
实现的前提条件:
- 你用于对接的账号必须是对应频道/群组的管理员,且拥有「移除成员」的权限
- 推荐使用个人管理员账号对接MTProto客户端库,相比Bot API可以直接获取成员的加入时间戳,不需要额外存储成员加入记录
实现逻辑
- 完成MTProto客户端的账号认证,获取对应频道/群组的唯一ID
- 定时拉取频道/群组的全量成员列表,读取每个成员的加入时间字段
- 比对当前时间与成员加入时间的差值,达到你设置的1~3个月阈值后,执行移除操作
- 搭配定时任务框架,可设置每日执行一次检测,不需要服务一直高频率运行
参考代码示例(基于Pyrogram)
前置准备
首先安装依赖库:pip install pyrogram tgcrypto apscheduler
使用前需要先在Telegram官方开发者平台申请自己的api_id和api_hash,按照平台提示用你的Telegram账号验证即可获取。
代码内容
from pyrogram import Client from pyrogram.types import ChatMember from datetime import datetime, timedelta from apscheduler.schedulers.blocking import BlockingScheduler # 配置项,请替换为自己的参数 API_ID = 123456 # 替换为你申请的api_id API_HASH = "your_api_hash_here" # 替换为你申请的api_hash CHAT_ID = -1001234567890 # 替换为你的频道/群组ID EXPIRE_DAYS = 90 # 成员保留时长,此处设置为90天即3个月,可自行修改为30/60对应1/2个月 # 初始化Pyrogram客户端 app = Client("my_account", api_id=API_ID, api_hash=API_HASH) def kick_expired_members(): with app: # 拉取所有成员 for member in app.get_chat_members(CHAT_ID): member: ChatMember join_date = member.joined_date if not join_date: continue # 计算加入时长 days_since_join = (datetime.now() - join_date).days if days_since_join >= EXPIRE_DAYS: # 先封禁再立即解封,这样用户可以被重新邀请,需要永久封禁可删除unban步骤 app.ban_chat_member(CHAT_ID, member.user.id) app.unban_chat_member(CHAT_ID, member.user.id) print(f"已移除到期成员:{member.user.id} {member.user.first_name},加入时长{days_since_join}天") if __name__ == "__main__": # 首次运行先执行一次登录验证 with app: print("客户端登录成功") # 设置定时任务,每天凌晨1点执行一次检测 scheduler = BlockingScheduler() scheduler.add_job(kick_expired_members, 'cron', hour=1, minute=0) print("定时任务已启动,每日凌晨1点检测到期成员") scheduler.start()
注意事项
- 首次运行代码会要求输入你绑定Telegram的手机号和收到的验证码,完成一次登录后本地会生成会话文件,后续不需要重复验证
- 不要泄露你的api_id、api_hash以及本地生成的会话文件,避免账号被盗用
- 如果需要针对不同成员设置不同的保留时长,可以额外加一个存储层记录每个成员的过期时间,检测时优先读自定义的过期时间即可
内容的提问来源于stack exchange,提问作者VikaS GuttE
相关产品推荐
相关产品推荐

