如何用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
相关产品推荐
相关产品推荐

