如何区分Telethon中的NewMessage和MessageEdited?

2 投票
1 回答
28 浏览
提问于 2025-04-14 18:20

我有一个Python(3.9)类,它用来监控频道里的消息编辑和新消息。请问有没有办法在代码里判断消息是被编辑过的还是新发的?根据文档,编辑过的消息应该和新消息一样对待。

我尝试了以下代码,但没有成功:

class TelegramBot:

    # --------------------------------
    # Initialization
    # --------------------------------
    def __init__(self):
        client.add_event_handler(
            self.message_listener,
            events.NewMessage(
                chats=get_chat_ids(
                    "X",
                    "Y",
                    "Z",
                )
            ),
        )
    # Register the event handler for edited messages
    client.add_event_handler(
        self.message_listener,
        events.MessageEdited(chats=get_chat_ids("X", "Y")),
    )


    async def message_listener(self, event):
        message = event.message.message
        message_id = event.message.id  # Get the ID of the triggering message

        if event.chat_id in get_chat_ids("X", "Y"):
            if isinstance(event, events.NewMessage):
                ...
            elif isinstance(event, events.MessageEdited):
                ...

而且,似乎编辑过的消息会触发两种事件类型,这意味着同一条消息会让我写的代码执行两次。

用打印事件类型的方法也显示了同样的结果:

{type(event).__name__}

结果是 Event

1 个回答

0

因为 events.MessageEdited 的基础类是 events.NewMessage,所以要检查它是不是 events.MessageEdited 的一个实例。如果不是,那它就是 events.NewMessage 的一个实例。

if isinstance(event, events.MessageEdited):
    # it's an edited message
else:
    # it's a new message

撰写回答