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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 19:15:38