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

如何通过Telethon处理群组主题?实现特定主题消息转发至频道

解决Telethon识别群组主题消息并转发的问题

问题分析

你的代码目前能监听指定群组的新消息,但缺少识别消息所属主题的逻辑。在Telethon中,论坛型超级群组的主题(讨论线程)信息可通过event.message对象的相关属性获取:

  • thread_id:主题的唯一ID
  • thread.title:主题名称(需通过await event.message.get_thread()获取完整Thread对象)

修改后的代码

以下代码实现了监听指定群组、识别特定主题消息并转发到目标频道的功能:

from telethon import TelegramClient, events

# 替换为你的API信息
api_id = 123456
api_hash = "your_api_hash_here"
# 要监听的目标群组ID
MONITORED_GROUP = -1001941512580
# 消息要转发到的目标频道ID
TARGET_CHANNEL = -100XXXXXXXXX
# 要筛选的目标主题ID或名称(二选一即可)
TARGET_THREAD_ID = 123  # 替换为实际主题ID
# TARGET_THREAD_TITLE = "特定主题名称"  # 也可通过主题名称筛选

client = TelegramClient("session_name", api_id, api_hash)

@client.on(events.NewMessage(chats=MONITORED_GROUP))
async def handle_group_message(event):
    message = event.message
    thread_id = message.thread_id

    # 方式1:通过主题ID筛选消息
    if thread_id == TARGET_THREAD_ID:
        await client.forward_messages(TARGET_CHANNEL, message)
        print(f"已转发主题ID {thread_id} 的消息到目标频道")
    
    # 方式2:通过主题名称筛选消息(取消注释即可使用)
    # if thread_id is not None:
    #     thread = await message.get_thread()
    #     if thread.title == TARGET_THREAD_TITLE:
    #         await client.forward_messages(TARGET_CHANNEL, message)
    #         print(f"已转发主题「{thread.title}」的消息到目标频道")

client.start()
print("客户端已启动,开始监听消息...")
client.run_until_disconnected()

关键说明

  • 仅论坛型超级群组支持主题功能,普通群组的thread_id会为None,需注意区分。
  • 确保你的客户端账号对目标频道拥有消息发送权限,否则转发会失败。
  • 若使用主题名称筛选,需保证名称完全匹配,避免因空格、大小写差异导致漏判。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 16:52:11