如何通过Telethon处理群组主题?实现特定主题消息转发至频道
解决Telethon识别群组主题消息并转发的问题
问题分析
你的代码目前能监听指定群组的新消息,但缺少识别消息所属主题的逻辑。在Telethon中,论坛型超级群组的主题(讨论线程)信息可通过event.message对象的相关属性获取:
thread_id:主题的唯一IDthread.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
相关产品推荐
相关产品推荐

