Telethon开发求助:频道评论回复报MsgIdInvalidError错误
解决Telegram频道帖子评论区回复报错问题
问题原因
你碰到的MsgIdInvalidError是因为频道的评论区实际是绑定的讨论组,而非频道本身,直接用event.chat(频道对象)发送评论会导致消息ID无效。而event.reply会直接在频道内发消息,不符合你的需求且你没有对应权限。
修复方案
方案一:自动关联讨论组消息(推荐)
利用Telethon内置方法直接获取频道帖子对应的讨论组消息,再回复:
@client.on(events.NewMessage(chats=id_tg_chanel)) async def my_event_handler(event): if '+' in event.raw_text: # 获取频道帖子在讨论组中的对应消息 discussion_msg = await event.message.get_discussion_message() if discussion_msg: await discussion_msg.reply("lol") client.run_until_disconnected()
方案二:手动指定讨论组ID
如果方案一无法正常工作,可手动获取讨论组ID后发送:
- 先获取频道绑定的讨论组ID:
from telethon.tl.functions.channels import GetFullChannelRequest async def get_discussion_group(channel_id): full_channel = await client(GetFullChannelRequest(channel_id)) return full_channel.full_chat.id # 返回讨论组ID
调用该函数传入你的频道ID,得到讨论组ID后存入discussion_group_id变量。
- 修改事件处理代码:
@client.on(events.NewMessage(chats=id_tg_chanel)) async def my_event_handler(event): if '+' in event.raw_text: await client.send_message( entity=discussion_group_id, message="lol", comment_to=event.message.id ) client.run_until_disconnected()
关键注意事项
- 不要在事件处理函数内调用
client.disconnect(),否则程序处理完第一条消息就会直接退出,无法监听后续帖子。 - 确保你的账号已加入目标频道的讨论组,且拥有发言权限。
内容的提问来源于stack exchange,提问作者Jay2233
相关产品推荐
相关产品推荐

