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

如何用Python实现Telegram频道消息自动转发?代码运行无效求助

Telegram频道消息自动转发代码修复

你的代码核心问题是把频道标题当成了ID来用——Telethon里的chat.id是整数类型的唯一标识,不是频道显示的名称;而且转发消息时直接传标题也无法让客户端识别目标频道。下面是具体修正方案:

第一步:获取频道的真实ID

先运行这段代码获取源频道和目标频道的数字ID(注意替换成频道的用户名,也就是t.me/后面的部分,加@前缀):

from telethon import TelegramClient

api_id = 99999999
api_hash = 'xxxxxxxxxxxxxxxxxxxxxxxx'
client = TelegramClient('temp_session', api_id, api_hash)

async def get_ids():
    # 替换成你的源频道和目标频道用户名
    source = await client.get_entity('@HorseRacingDailyTipsPremium')
    target = await client.get_entity('@GreyhoundsDailyTipsPremium')
    print(f"源频道ID: {source.id}")
    print(f"目标频道ID: {target.id}")

with client:
    client.loop.run_until_complete(get_ids())
  • 如果是私有频道,得确保你的账号已经加入该频道,否则拿不到实体。
  • 运行后会打印出两个数字ID,记下来备用。

修正后的转发代码

把刚才拿到的ID填进去即可:

from telethon import TelegramClient, events

api_id = 99999999
api_hash = 'xxxxxxxxxxxxxxxxxxxxxxxx'
client = TelegramClient('forward_session', api_id, api_hash)

# 直接指定监听源频道,不用在函数里判断,效率更高
@client.on(events.NewMessage(chats=123456789))  # 替换成源频道ID
async def forward_handler(event):
    # 替换成目标频道ID
    await client.forward_messages(1234567890, event.message)

with client:
    # 第一次运行会提示输入手机号和验证码,完成后生成session文件
    client.run_until_disconnected()

关键注意事项

  • 首次运行客户端时,会要求输入手机号和验证码,登录成功后会生成forward_session.session文件,后续启动不用再重复验证。
  • 确保你的账号在源频道能查看消息,在目标频道有发送消息的权限(比如是频道管理员或已获得发送权限)。
  • 如果还是没效果,检查频道ID是否填错,或者确认账号是否真的加入了对应的频道。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 11:27:07