Skip to content

コンポーネント: イベントリスナー

LangBotのパイプラインは実行時にイベントを生成し、プラグインがフックして処理できるようにします。各プラグインは1つのイベントリスナー(components/event_listener/default.yaml)のみを持つことができますが、その中で任意の数のイベントを登録できます。

イベントリスナーコンポーネントの追加

プラグインディレクトリでコマンドlbp comp EventListenerを実行します。イベントリスナーコンポーネントの作成には設定は必要ありません。

bash
  HelloPlugin > lbp comp EventListener
Generating component EventListener...
Component EventListener generated successfully.
組件 EventListener 生成成功。

これにより、components/event_listener/ディレクトリにdefault.yamldefault.pyファイルが生成されます。.yamlファイルはイベントリスナーの基本情報を定義し、.pyファイルはイベントリスナーハンドラです:

bash
  HelloPlugin > tree
...
├── components
   ├── __init__.py
   └── event_listener
       ├── __init__.py
       ├── default.py
       └── default.yaml
...

マニフェストファイル: イベントリスナー

各プラグインは1つのイベントリスナーのみを持つことができるため、マニフェストファイルでの変更は必要ありません。

プラグイン処理

以下のコードがデフォルトで生成されます(components/event_listener/default.py)。DefaultEventListenerクラスのinitializeメソッドでイベント処理ロジックを登録して実装する必要があります。

python
# Auto generated by LangBot Plugin SDK.
# Please refer to https://docs.langbot.app/en/plugin/dev/tutor.html for more details.
from __future__ import annotations

from langbot_plugin.api.definition.components.common.event_listener import EventListener
from langbot_plugin.api.entities import events, context


class DefaultEventListener(EventListener):

    async def initialize(self):
        await super().initialize()

        "Fill with your code here"

特定のイベントのリスナーを追加:

python
...
class DefaultEventListener(EventListener):

    async def initialize(self):
        await super().initialize()

        @self.handler(events.PersonMessageReceived)
        async def handler(event_context: context.EventContext):
            print("Hello LangBot Plugin!")
            print(event_context)

            await event_context.reply(
                platform_message.MessageChain([
                    platform_message.Plain(text=f"Hello from Nahida Plugin!"),
                ])
            )

このコードは、PersonMessageReceived(プライベートチャットからのメッセージを受信)イベントのリスナーを登録し、イベントがトリガーされたときにイベントコンテキスト(EventContext)情報を出力し、イベントコンテキストAPIを呼び出してメッセージで返信します。

EventContextはこのイベントトリガーの共通コンテキスト情報を保存し、EventContext.eventはPersonMessageReceived(または他の対応するイベントタイプ)のオブジェクトで、イベントの詳細情報を保存します。

python
# EventContext定義の概要
class EventContext(pydantic.BaseModel):
    """イベントコンテキスト、このイベント実行の情報を保存"""
    ...

    event: pydantic.SerializeAsAny[BaseEventModel]
    """イベントオブジェクト、具体的な型はハンドラ登録時に指定された型、events.pyで見つけることができます"""

    ...

イベント登録

イベント登録は@self.handlerデコレータを通じて実装され、デコレータのパラメータはイベントタイプです。監視可能なすべてのイベントはlangbot_plugin.api.entities.builtin.eventsで定義されています。

次のステップ

イベントリスナーの基本情報を学びました。次は: