简体中文 English 繁體中文 日本語 Русский
本文为静态镜像,内容以交互版为准 在交互式文档中心打开 →

モジュール開発入門

このガイドでは、ErisPulse モジュールをゼロから作成する方法を説明します。

プロジェクト構造

標準的なモジュール構造は次のとおりです。

MyModule/
├── pyproject.toml
├── README.md
├── LICENSE
└── MyModule/
    ├── __init__.py
    └── Core.py

pyproject.toml の設定

[project]
name = "ErisPulse-MyModule"
version = "1.0.0"
description = "モジュールの機能説明"
readme = "README.md"
requires-python = ">=3.10"
license = { file = "LICENSE" }
authors = [ { name = "yourname", email = "[email protected]" } ]
dependencies = []

[project.urls]
"homepage" = "https://github.com/yourname/MyModule"

[project.entry-points."erispulse.module"]
"MyModule" = "MyModule:Main"

init.py

from .Core import Main

Core.py - 基礎モジュール

from ErisPulse import sdk
from ErisPulse.Core.Bases import BaseModule
from ErisPulse.Core.Event import command

class Main(BaseModule):
    def __init__(self, sdk):
        self.sdk = sdk
        self.logger = sdk.logger.get_child("MyModule")
        self.storage = sdk.storage
    
    @staticmethod
    def get_load_strategy():
        """モジュールのロード戦略を返す"""
        from ErisPulse.loaders import ModuleLoadStrategy
        return ModuleLoadStrategy(
            lazy_load=True,
            priority=0,
            depends=[],  # オプション:他のモジュールへの依存リスト
            # オプション:イベント駆動の遅延活性化——トリガーを宣言し、最初の一致するイベント/コマンドが到着した時点で自動的にロード
            # activate_on=[{"command": {"name": "hello", "help": "挨拶を送信"}}],
        )
    
    async def on_load(self, event):
        """モジュールがロードされたときに呼び出される"""
        @command("hello", help="挨拶を送信")
        async def hello_command(event):
            name = event.get_user_nickname() or "友達"
            await event.reply(f"こんにちは、{name}!")
        
        self.logger.info("モジュールがロードされました")
    
    async def on_unload(self, event):
        """モジュールがアンロードされたときに呼び出される"""
        self.logger.info("モジュールがアンロードされました")

設定の読み込み:上記の基本的な例では設定は使用していません。設定を読み込む必要がある場合は、ConfigClass をネストして宣言し、self.cfg を通じてリアルタイムに読み取ることを推奨します(モジュールのコア概念を参照)。手動で _load_config() を呼び出す旧い書き方は廃止されました。

テストモジュール

ローカルテスト

# プロジェクトディレクトリにモジュールをインストール
epsdk install ./MyModule

# プロジェクトを実行
epsdk run main.py --reload

テストコマンド

コマンドを送信してテストします:

/hello

核心概念

BaseModule 基底クラス

すべてのモジュールは BaseModule を継承し、以下のメソッドを提供する必要があります:

メソッド 説明 必須
__init__(self, sdk) コンストラクタ(フレームワークから sdk インスタンスが渡される) いいえ
get_load_strategy() ロード戦略を返す いいえ
get_meta() モジュールの説明メタ情報を返す(オプション) いいえ
on_load(self, event) モジュールがロードされたときに呼び出される はい
on_unload(self, event) モジュールがアンロードされたときに呼び出される はい

モジュール紹介メタ情報

Note

この機能は ErisPulse 2.8.0+ が必要です。

get_meta() を使ってモジュールの紹介メタ情報を宣言します(このモジュールが何をするものか、どのカテゴリに属するかなど)。
メタ情報はモジュールの一般的な紹介データであり、help モジュール、Dashboard モジュールリスト、モジュールストアなど、さまざまなインターフェースやエコシステムモジュールが利用できます。

get_load_strategy() が ModuleLoadStrategy を返すのと同様に、推奨されるのは ModuleMeta 設定クラスのインスタンスを返すこと(属性の型付け、IDE の補完機能)、dict で直接返すこともサポートされています:

class MyModule(BaseModule):
    @staticmethod
    def get_meta() -> ModuleMeta:
        return ModuleMeta(
            name="天気",               # 表示名(デフォルトの登録名)
            description="都市の天気を照会",  # モジュールの概要
            version="1.0.0",
            author="ErisDev",
            group="ツール",               # 機能分類
            tags=["天気", "照会"],
        )

互換性のある書き方(dict):

class MyModule(BaseModule):
    @staticmethod
    def get_meta() -> dict:
        return {
            "name": "天気",
            "description": "都市の天気を照会",
            "version": "1.0.0",
            "author": "ErisDev",
            "group": "ツール",
            "tags": ["天気", "照会"],
        }

メタフィールドの i18n 支援

メタ情報のフィールド値は、単純な文字列または i18n ディクショナリ {"i18n": "key.path", "default": "バックアップテキスト"}(設定 description と同様の約束)で指定できます。
翻訳キーは I18nClass で宣言・登録され、module.get_meta() で読み取る際に、自動的に現在の言語に翻訳されます:

class MyModule(BaseModule):
    class I18nClass(BaseI18n):
        meta_description: I18nKey = I18nKey(
            default="Weather lookup",
            zh_CN="都市の天気を照会",
            en="Weather lookup",
        )

    @staticmethod
    def get_meta() -> ModuleMeta:
        return ModuleMeta(
            name="天気",
            description={"i18n": "MyModule.meta_description", "default": "Weather lookup"},
        )

SDK オブジェクト

sdk オブジェクトを通じて、コア機能にアクセスします:

from ErisPulse import sdk

sdk.storage    # ストレージシステム
sdk.config     # 設定システム
sdk.logger     # ログシステム
sdk.adapter    # アダプタシステム
sdk.router     # ルーティングシステム
sdk.lifecycle  # ライフサイクルシステム

次に進む