基于LangBot的——为组件EventListener注册一个PersonMessageReceived的事件详解

在调试平台及lpb自动生成的EventListerer组件components文件夹下的default.py中:

事件类型

事件类定义在langbot_plugin.api.entities.events.py中,包括PersonMessageReceived、GroupMessageReceived等等

image

事件注册

@self.handler(PersonMessageReceived):注册一个PersonMessageReceived事件,其中self.handler全写为EventListener.handler,是在EventListener类中定义了handler注册。
源码截图如下:

image

 但在另一个参考的插件中,其组件注册在main文件中,并且使用context类的handler注册

image

image

 目前不知道两种方式有何不同。

上下文消息链

在触发一个PersonMessageReceived事件后,其事件信息保存在Eventcontext类中,包括请求id,事件编号等注册事件都会有的信息

image

而在EventContext类中的event成员保存着这次事件的详细信息,其类型为handler注册时指定的监听类型,意味着所有重要的信息都在这个对象里面。

其成员如下:包括qq号和消息等重要信息。

image

 消息回复

在消息平台接收到消息后,可以利用EventContext.reply方法控制bot回复信息。

image

可以见得,reply需要传入一个message_chain类型的对象,而message_chain定义在langbot_plugin.api.entities.builtin.platform.message.py中

image

 MessageChain同样需要传入一个list(MessageComponent)对象,同样在message.py文件中,定义了多种的MessageComponent对象,以实现丰富的消息类型回复。

image

包括Source关于邮件的信息,Plain纯文本,Quote引用信息等等。

其调用结构为:

634e2e04e47b8408e5f4760c1c1f93f7

所以最后的代码形式为ctx.reply(MessageChain([Plain(text=f"你好")]))

全部代码:

from __future__ import annotations

from langbot_plugin.api.definition.components.common.event_listener import EventListener
from langbot_plugin.api.entities.events import PersonMessageReceived
# 导入事件上下文api
from langbot_plugin.api.entities.builtin.platform.message import *
from langbot_plugin.api.entities.context import EventContext


class DefaultEventListener(EventListener):

    async def initialize(self):
        await super().initialize()
        
        "Fill with your code here"

        # 为组件EventListener注册一个 收到私聊消息 的事件
        @self.handler(PersonMessageReceived)
        # EventContext为事件信息类,保存着此次事件的信息
        async def person_message_received(ctx: EventContext):
            print("Received person message")
            # 而ctx.event类型为handler注册时指定监听的类型,是此次事件的对象
            handler_object = ctx.event
            msg = str(handler_object.message_chain).strip()
            print(msg)
            await ctx.reply(MessageChain([Plain(text=f"你好")]))

  

posted @ 2025-12-17 22:14  秋秋秋秋秋寒  阅读(1)  评论(0)    收藏  举报