如何修复Pyrogram在Telegram群组话题中的回复位置问题?
解决Telegram群组话题回复位置错误的问题
修复Pyrogram代码的方案
问题出在message.reply()方法未明确指定话题ID,导致默认发送到General话题。改用client.send_message()并手动传入原消息的聊天ID和话题ID,即可将回复发送到对应话题,且天然不引用原消息。
修改后的代码:
bot = Client(name=login, api_id=api_id, api_hash=api_hash, phone_number=phone) @bot.on_message(filters.text) async def command_handler(client: Client, message: Message): if re.match(pattern, message.text): # 获取原消息所在的聊天ID和话题ID chat_id = message.chat.id thread_id = message.message_thread_id # 发送消息到对应话题 await client.send_message( chat_id=chat_id, text="this is reply", message_thread_id=thread_id )
说明:message.message_thread_id会自动获取原消息所属的话题ID,若原消息在General话题,该值会被Pyrogram自动处理为默认话题,无需额外判断。
可选的其他Telegram开发库
python-telegram-bot
这是另一个主流的Telegram Bot开发库,支持话题消息处理,核心逻辑类似:
from telegram import Update from telegram.ext import Updater, MessageHandler, Filters, CallbackContext import re def command_handler(update: Update, context: CallbackContext): if re.match(pattern, update.effective_message.text): chat_id = update.effective_chat.id thread_id = update.effective_message.message_thread_id context.bot.send_message( chat_id=chat_id, text="this is reply", message_thread_id=thread_id ) # 初始化Updater并注册处理器(示例框架) updater = Updater(token="YOUR_BOT_TOKEN") updater.dispatcher.add_handler(MessageHandler(Filters.text & ~Filters.command, command_handler)) updater.start_polling() updater.idle()
Telethon
面向Telegram用户/机器人的全功能库,处理话题回复的方式如下:
from telethon import TelegramClient, events import re client = TelegramClient(login, api_id, api_hash) @client.on(events.NewMessage(pattern=pattern)) async def command_handler(event): # 获取聊天ID和话题ID chat_id = event.chat_id thread_id = event.message.thread.id if event.message.thread else None # 发送到对应话题 await client.send_message( chat_id, "this is reply", message_thread_id=thread_id ) client.start(phone=phone) client.run_until_disconnected()
内容的提问来源于stack exchange,提问作者voipp
相关产品推荐
相关产品推荐

