モジュール開発入門
このガイドでは、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": ["天気", "照会"],
}
module.get_meta("MyModule")は、解析済みのメタ情報を読み取ります(クラス宣言 > 登録情報、自動的にこのモジュールのコマンド名が補完されます)。module.get_commands_overview()は、「モジュールメタ情報 + 登録されたコマンド(エイリアス/グループ/ヘルプ)」を統合し、モジュールごとに整理されたコマンドの概要を提供します。- コマンドが属するモジュールは、
cmd_info["owner"]で取得できます(登録時にコンテキストシステムが自動的に注入します)。
メタフィールドの 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 # ライフサイクルシステム
次に進む
- モジュールのコアコンセプト - モジュールアーキテクチャの詳細
- Eventラッパークラスの詳細 - Eventオブジェクトの学習
- モジュールのベストプラクティス - 高品質なモジュールの開発