如何通过Telethon检测并获取Telegram频道的编辑消息?
捕获Telegram频道中编辑后的消息
要获取频道中被编辑的消息,你只需在现有代码基础上添加events.MessageEdited事件的监听处理器,和处理新消息的逻辑类似,就能捕获到消息编辑事件并更新本地存储的内容。
修改后的完整代码
from telethon import events # 提取重复的消息保存逻辑为单独函数,避免代码冗余 async def save_message(event): print("============================") msg_id = event.id texts = event.text or "" # 处理消息编辑后文本为空的情况 raw_text = texts.replace('[🔗','🔗[') file_name = str(msg_id) + '.tlmsg' # 处理媒体(如果编辑后媒体有变化也会重新下载覆盖) if event.photo: media_name = f"media/{msg_id}.jpg" print(f"Media saved/updated on {media_name}") await event.download_media(media_name) print(raw_text) # 覆盖写入原文件,实现编辑后内容的更新 with open(f"message/{file_name}", "w", encoding="utf-8") as f: f.write(raw_text) # 监听新消息 @client.on(events.NewMessage) async def handle_new_message(event): await save_message(event) # 监听编辑后的消息 @client.on(events.MessageEdited) async def handle_edited_message(event): await save_message(event)
关键说明
events.MessageEdited事件会在任何消息被编辑时触发,不管编辑者是频道管理员还是其他有权限的用户,完全满足你捕获频道中他人编辑消息的需求。- 将消息保存逻辑抽成
save_message函数,既减少代码重复,也方便后续统一修改逻辑。 - 编辑消息时,消息ID不会改变,用原文件名覆盖写入即可直接更新本地存储的内容;如果编辑后媒体(比如图片)有变化,也会重新下载覆盖原文件。
- 添加
texts = event.text or ""是为了避免消息编辑后文本为空时出现AttributeError。
内容的提问来源于stack exchange,提问作者kamil
相关产品推荐
相关产品推荐

