使用Telethon迁移Telegram超级群6千成员仅成功少量后无响应,求错误排查
代码问题分析
- 邀请列表逻辑错误
你定义的invited列表是全局累加的,每次循环都会把之前所有已经邀请过的用户再次提交邀请。例如第一次循环提交[用户1],第二次提交[用户1,用户2],第三次提交[用户1,用户2,用户3],大量重复请求会快速触发Telegram反垃圾机制,触发静默限制。 - 无请求间隔控制
Telegram对邀请用户这类敏感操作有严格的频率限制,短时间连续提交请求不会返回报错,但后续所有邀请操作会被系统直接拦截,就是你遇到的无报错但无新成员加入的情况。 - 缺失异常捕获
邀请过程中会出现大量预期内的异常:用户设置禁止陌生人邀请、用户已在目标群、账号被临时限制邀请权限等,没有异常捕获你无法感知这些错误,会误以为脚本还在正常运行。 - 未过滤无效用户
你没有提前过滤已经在目标群的用户、机器人、已注销的账号,这些无效请求也会占用请求配额,加速触发风控。 - 缺失依赖导入
原代码未导入TelegramClient类,实际运行会直接触发导入报错。
修正参考代码
from telethon.sessions.string import StringSession from telethon.tl.functions.channels import InviteToChannelRequest from telethon import TelegramClient import asyncio api_id = xxxxx api_hash = 'xxxxxxx' string = 'xxxxxx' client = TelegramClient(StringSession(string), api_id, api_hash) origin = 'original_group' destination = 'backup' async def transfer(): # 先获取目标群已有用户,避免重复邀请 target_users = {u.id for u in await client.get_participants(destination)} # 批量邀请,每批最多8个用户,降低风控概率 batch = [] batch_size = 8 # 每批邀请后等待的秒数 wait_time = 45 async for user in client.iter_participants(origin, aggressive=True): # 过滤机器人、已注销账号、已在目标群的用户 if user.bot or user.deleted or user.id in target_users: continue batch.append(user) # 凑够一批就发送邀请 if len(batch) >= batch_size: try: await client(InviteToChannelRequest(destination, batch)) print(f"成功邀请{len(batch)}名用户") except Exception as e: print(f"邀请出错: {str(e)}") # 如果触发限流就按照官方要求等待 if "FloodWait" in str(e): wait_seconds = int(str(e).split()[-2]) print(f"触发官方限流,等待{wait_seconds}秒") await asyncio.sleep(wait_seconds) finally: # 清空当前批次 batch.clear() # 等待指定时间再处理下一批 await asyncio.sleep(wait_time) # 处理最后不足一批的用户 if batch: try: await client(InviteToChannelRequest(destination, batch)) print(f"成功邀请最后一批{len(batch)}名用户") except Exception as e: print(f"最后一批邀请出错: {str(e)}") with client: client.loop.run_until_complete(transfer())
额外注意事项
- 新注册的账号或者活跃度低的账号邀请限制更严格,建议使用注册满3个月以上的日常活跃账号操作
- 单日邀请总人数建议控制在200以内,避免账号被永久限制功能
- 如果出现超过24小时的FloodWait限制,建议停止操作48小时后再尝试
内容的提问来源于stack exchange,提问作者Brimr
相关产品推荐
相关产品推荐

