Telethon代码无报错但未执行Telegram消息转发功能求助
解决Telethon消息转发无响应问题
问题描述
我是编程新手,本周刚接触Python。通过资料查询在PyCharm中编写了一段Telethon代码,代码运行无报错,但无法在Telegram上执行消息转发操作。需求是:当主群组收到消息时,根据关键词将消息转发到对应指定群组。
原代码如下:
from telethon import TelegramClient, events # Use your own API ID and hash api_id = api_hash = '' # Create the client and start the session client = TelegramClient('session_name', api_id, api_hash) client.start() SUPER_GROUP_CHAT_ID = -1112223334 GROUP_CHAT_IDS = {'SIM': -112233445, 'NÃO': -544332211, 'EMPATE': -223355668, 'OVER 2,5': -445566332, 'OVER 3,5': -775588221} async def forward_message(event: events.NewMessage.Event): message = event.message if message.to_id.channel_id == SUPER_GROUP_CHAT_ID: for keyword, channel_id in GROUP_CHAT_IDS.items(): if keyword in message.message: print(f"Palavra-chave {keyword} encontrada, encaminhando para o canal {channel_id}") await client.forward_messages(channel_id, message) client.add_event_handler(forward_message, events.NewMessage(incoming=True)) # Run the client try: client.run_until_disconnected() except KeyboardInterrupt: print('Exiting...') client.disconnect()
排查与解决方案
补全API凭证并验证权限
必须填写完整的api_id和api_hash(可在Telegram开发者平台获取),同时确保登录会话的账号:- 是主群组
SUPER_GROUP_CHAT_ID的成员,能正常接收消息 - 在所有目标群组
GROUP_CHAT_IDS中拥有发送/转发消息的权限(不是仅查看权限)
- 是主群组
修正聊天ID判断逻辑
原代码中message.to_id.channel_id仅适用于特定类型的聊天,改用event.chat_id判断更通用可靠:if event.chat_id == SUPER_GROUP_CHAT_ID:过滤非文本消息
若收到图片、视频等非文本消息,message.message会为空,导致关键词匹配失效,需先跳过此类消息:async def forward_message(event: events.NewMessage.Event): message = event.message if not message.text: return # 跳过非文本消息 # 后续逻辑...添加异常捕获排查问题
在转发操作中加入异常捕获,能直接看到失败原因(比如权限不足、网络问题):try: await client.forward_messages(channel_id, message) except Exception as e: print(f"转发到{channel_id}失败: {str(e)}")精准监听目标聊天
原事件监听范围过广,改为仅监听主群组的新消息,避免不必要的触发:client.add_event_handler(forward_message, events.NewMessage(chats=SUPER_GROUP_CHAT_ID))
修正后的完整代码
from telethon import TelegramClient, events # 填写你的API凭证 api_id = 1234567 # 替换为实际ID api_hash = 'your_api_hash_here' # 替换为实际Hash # 创建客户端并启动会话 client = TelegramClient('session_name', api_id, api_hash) client.start() SUPER_GROUP_CHAT_ID = -1112223334 GROUP_CHAT_IDS = { 'SIM': -112233445, 'NÃO': -544332211, 'EMPATE': -223355668, 'OVER 2,5': -445566332, 'OVER 3,5': -775588221 } async def forward_message(event: events.NewMessage.Event): message = event.message # 跳过非文本消息 if not message.text: return # 判断消息是否来自目标主群组 if event.chat_id == SUPER_GROUP_CHAT_ID: for keyword, channel_id in GROUP_CHAT_IDS.items(): if keyword in message.text: print(f"找到关键词 {keyword},正在转发到群组 {channel_id}") try: await client.forward_messages(channel_id, message) except Exception as e: print(f"转发到{channel_id}失败: {str(e)}") # 仅监听目标主群组的新消息 client.add_event_handler(forward_message, events.NewMessage(chats=SUPER_GROUP_CHAT_ID)) # 运行客户端 try: client.run_until_disconnected() except KeyboardInterrupt: print('正在退出...') client.disconnect()
内容的提问来源于stack exchange,提问作者Rafael Santos
相关产品推荐
相关产品推荐

