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

Telethon中如何区分NewMessage与MessageEdited事件并解决重复触发?

解决Telethon区分新消息与编辑消息的问题

1. 修复编辑消息触发两次事件的问题

在注册NewMessage事件时添加exclude_edited=True参数,让编辑后的消息不再被识别为新消息触发该事件,从根源解决重复执行的问题:

client.add_event_handler(
    self.message_listener,
    events.NewMessage(
        chats=get_chat_ids("X", "Y", "Z"),
        exclude_edited=True  # 排除编辑后的消息,避免重复触发
    ),
)

2. 正确区分事件类型

针对isinstance判断失效的情况,推荐两种可靠方法:

方法一:注册事件时绑定类型标识

使用functools.partial给监听函数绑定明确的类型标识,直接区分新消息和编辑消息:

from functools import partial

class TelegramBot:
    def __init__(self):
        # 注册新消息事件,绑定"new"标识
        client.add_event_handler(
            partial(self.message_listener, event_type="new"),
            events.NewMessage(
                chats=get_chat_ids("X", "Y", "Z"),
                exclude_edited=True
            ),
        )
        # 注册编辑消息事件,绑定"edited"标识
        client.add_event_handler(
            partial(self.message_listener, event_type="edited"),
            events.MessageEdited(chats=get_chat_ids("X", "Y")),
        )

    async def message_listener(self, event, event_type):
        message = event.message.message
        message_id = event.message.id

        if event.chat_id in get_chat_ids("X", "Y"):
            if event_type == "new":
                # 新消息处理逻辑
                print(f"新消息:{message}")
            elif event_type == "edited":
                # 编辑消息处理逻辑
                print(f"编辑后的消息:{message}")

方法二:通过事件内部属性判断

Telethon的事件对象会保留原始更新类型,可通过内部属性判断:

async def message_listener(self, event):
    message = event.message.message
    message_id = event.message.id

    if event.chat_id in get_chat_ids("X", "Y"):
        # 判断是否为编辑消息
        if hasattr(event, '_original_update') and isinstance(event._original_update, types.UpdateEditMessage):
            # 编辑消息处理逻辑
            print(f"编辑后的消息:{message}")
        else:
            # 新消息处理逻辑
            print(f"新消息:{message}")

补充说明

  • exclude_edited=True是核心配置,必须添加才能避免编辑消息同时触发两种事件。
  • 绑定类型标识的方法更直观易维护,推荐优先使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 17:03:24