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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 02:36:04