Soulter / AstrBot

QQ、Telegram等多平台兼容的支持 LLM 聊天的机器人平台。支持自定义插件扩展。
https://astrbot.soulter.top
GNU Affero General Public License v3.0
610 stars 60 forks source link

支持插件注册消息中间件 #202

Closed Soulter closed 1 month ago

Soulter commented 2 months ago

Motivation

中间件支持接受并修改消息事件(AstrMessageEvent),然后将修改后的消息事件传给下一个中间件。最后,消息事件会交由 LLM 模块处理。以此可以将内容审查解耦,并且支持语音转文字(#197)、人格设置等等。

Modifications

在 Context 下新增了 register_middleware() 方法。

一个简单的注册 middleware 的例子如下:

class HelloWorldPlugin:
    def __init__(self, context: Context) -> None:
        self.context = context
        middleware = Middleware(
            name="audio_to_text",
            description="语音转文字",
            origin="HelloWorldPlugin",
            func=self.audio_to_text
        )
        self.context.register_middleware(middleware)

    async def audio_to_text(self, message: AstrMessageEvent, context: Context): # 必须接收这两个参数。
        text = self.audio_to_text(message.message_obj)
        message.message_str = text # 直接原地修改。