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

如何使用Telethon无需机器人复制Telegram频道?

Telegram频道消息迁移实现方案

完整实现代码

from telethon import TelegramClient
from telethon.tl.types import MessageMediaPhoto, MessageMediaDocument
import asyncio

# 替换成你的Telegram开发者API信息
api_id = 19...
api_hash = '9c1aa....'

# 替换成源频道和目标频道的用户名(带@)或ID
SOURCE_CHANNEL = '@source_channel'
TARGET_CHANNEL = '@your_target_channel'

async def migrate_messages():
    async with TelegramClient('anon', api_id, api_hash) as client:
        # 获取频道实体对象(Telethon操作频道的必要步骤)
        source_entity = await client.get_entity(SOURCE_CHANNEL)
        target_entity = await client.get_entity(TARGET_CHANNEL)

        # 从最早到最新遍历源频道消息(reverse=True保证顺序)
        async for message in client.iter_messages(source_entity, reverse=True):
            # 跳过无内容的系统通知类消息
            if not message.text and not message.media:
                continue

            try:
                # 根据消息类型分别处理
                if message.text:
                    # 发送纯文本消息,发送者为你的账号,不保留原作者
                    await client.send_message(target_entity, message.text)
                elif isinstance(message.media, MessageMediaPhoto):
                    # 发送图片,附带原消息的说明文字
                    await client.send_file(target_entity, message.media.photo, caption=message.text)
                elif isinstance(message.media, MessageMediaDocument):
                    # 发送文件(视频、音频、文档等),附带说明文字
                    await client.send_file(target_entity, message.media.document, caption=message.text)
                
                # 限流防封禁,每发一条歇1秒
                await asyncio.sleep(1)
                print(f"已迁移消息ID: {message.id}")
            except Exception as e:
                print(f"迁移消息ID {message.id} 失败: {str(e)}")

if __name__ == '__main__':
    asyncio.run(migrate_messages())

关键细节解释

  • 异步结构修正:原代码把send_message放在client.start()之前是错误的,这里用async with自动管理客户端的连接与断开,符合Telethon异步框架的要求。
  • 频道实体获取:通过get_entity将频道的用户名/ID转换为Telethon可识别的操作对象,这是操作频道的前提。
  • 顺序保证:iter_messages的reverse=True参数会从频道最早的消息开始遍历迁移,确保消息顺序和原频道完全一致。
  • 去原作者标识:所有消息都是通过你的客户端账号重新发送,而非转发,因此不会保留原作者的任何标识。
  • 多类型消息兼容:分别处理文本、图片、文件类消息,覆盖绝大多数频道内容场景。
  • 限流处理:添加1秒间隔避免短时间内大量请求触发Telegram的频率限制,防止账号被临时封禁。

使用前准备

  1. 替换代码中的api_id和api_hash为你从my.telegram.org获取的开发者信息。
  2. 替换SOURCE_CHANNEL和TARGET_CHANNEL为实际的频道用户名(带@前缀)或频道ID。
  3. 确保你的账号有权限访问源频道(私有频道需先加入),且是目标频道的管理员(有权发布内容)。

内容的提问来源于stack exchange,提问作者meiremix

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 03:40:33