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

SnowLumaプラットフォームの特徴ドキュメント

SnowLumaAdapter は、SnowLuma バックエンド(NTQQ hook)に基づいて構築されたアダプターであり、OneBot v11 プロトコルを使用して通信します。


ドキュメント情報

基本情報

OneBot11 アダプタとの関係

SnowLuma は OB11 プロトコルを使用し、標準アクションとイベントの変換は OneBot11 アダプタと同構造です(OB12 標準アクション名は自動マッピング)。
主な違いは以下の通りです:

  1. デフォルトの client モード:SnowLuma WS(ws://127.0.0.1:3001)に自動的に接続し、パブリックネットワークのリッスンは不要です
  2. bot_id の自動認識:アカウント設定時に QQ 番号を入力する必要がなく、アダプタ起動時に自動的に検出され、self_id → account_name のマッピングが維持されます
  3. 109 個の拡張アクション:拍一戳、QQ空間、群ファイル/群相冊、メッセージ履歴、エッセンシャル、既読状態など、SnowLuma/NapCat 互換の拡張機能
  4. メルマガ拡張チェーン:専用エンドポイント + upload_forward_msg(アップロードノードは resid を取得)+ get_forward_msg(転送内容の解析)の 3 段階のフォールバック

標準Api動作(Api DSL)

アダプターは OneBot12 標準アクション名を自動的に OB11 アクション名にマッピングし、モジュールはプラットフォームをまたいで統一的に呼び出すことができます。

OB12 標準アクション OB11 アクション 説明
get_self_info get_login_info フィールドの標準化 user_id/user_name/user_displayname
get_user_info get_stranger_info フィールドの標準化
delete_message delete_msg メッセージの撤回
leave_group set_group_leave グループからの退出
upload_file upload_group_file / upload_private_file 拡張 group_id/user_id 任意パラメータ

基本的な使い方

from ErisPulse import sdk
snowluma = sdk.adapter.get("snowluma")

# ロボット情報の取得
result = await snowluma.Api.get_self_info()
print(result["data"]["user_id"], result["data"]["user_name"])

# メッセージの撤回
await snowluma.Api.delete_message(message_id=123456)

# 指定アカウント(複数アカウント対応)
result = await snowluma.Api.Using("main").get_self_info()

# 拡張アクションは call() でエスケープハッチを使用(SnowLuma/NapCat 両対応)
result = await snowluma.Api.call("send_poke", group_id=123, user_id=456)

支援されるメッセージ送信タイプ

すべての送信メソッドは、チェーン式の構文で実装されています。たとえば:

from ErisPulse import sdk
snowluma = sdk.adapter.get("snowluma")

# デフォルトアカウントを使用して送信
await snowluma.Send.To("group", group_id).Text("Hello World!")

# 特定のアカウントを使用して送信
await snowluma.Send.Using("main").To("group", group_id).Text("メインアカウントからのメッセージ")

# チェーン式修飾:ユーザーへのメンション + リプライ
await snowluma.Send.To("group", group_id).At(123456).Reply(msg_id).Text("メッセージへの返信")

基本的な送信メソッド

合併転送

nodes = [
    {
        "type": "node",
        "data": {
            "user_id": "10000",
            "nickname": "MyBot",
            "content": [{"type": "text", "data": {"text": "【1/3】タイトル\n本文…"}}],
        },
    },
]

# 合併転送を送信します(3段階のフォールバック、SnowLuma / NapCatバックエンドともに適用可能):
# ① send_group/private_forward_msg 専用エンドポイント(NapCatのネイティブ、SnowLumaの互換)
# ② upload_forward_msg から resid を取得 → send_msg で forward セグメントを送信(SnowLumaの拡張経路)
# ③ send_msg で node セグメントを直接送信
await snowluma.Send.To("group", group_id).MergeForward(nodes)

# 受信した合併転送メッセージを解析します(入力の forward セグメントは onebot11_forward として透過され、data.id は resid になります)
result = await snowluma.Api.get_forward_msg(id="resid_xxx")

グループ操作メソッド

以下メソッドは To("group", group_id) を使用して対象グループを指定する必要があります:

一撃 / ソーシャル

QQスペース

グループファイル / メッセージ履歴 / 読み取り状態

チェーン式修飾メソッド(組み合わせて使用可能)


OB11 拡張アクション(Api DSL)

標準アクションに加えて、OB11ExtensionApi にミックスインされた 60 以上の型安全な拡張メソッドが提供されており、全 109 の拡張アクションは Api.call("action_name", ...) により直接呼び出すことができます(SnowLuma/NapCat 両方で共通)。以下に各グループの概要を示します:

グループ 代表的なアクション
拍一戳 / ソーシャル send_poke / group_poke / friend_poke / send_like
メッセージ返信 / エッセンス set_msg_emoji_like / get_emoji_likes / set_essence_msg / get_essence_msg_list
既読 / ステータス mark_msg_as_read / mark_group_msg_as_read / mark_all_as_read / set_online_status / set_input_status
メッセージ履歴 get_group_msg_history / get_friend_msg_history
グループ管理拡張 set_group_reaction / set_group_remark / set_group_sign / set_group_todo / get_group_info_ex / get_group_shut_list / get_group_at_all_remain
フレンド / 連絡先 set_friend_remark / get_unidirectional_friend_list / get_friends_with_category / get_recent_contact
グループファイル get_group_file_url / get_private_file_url / get_group_root_files / get_group_files_by_folder / create_group_file_folder / delete_group_file
グループアルバム get_group_album_list / get_group_album_media_list
QQ空間 send_qzone_msg / get_qzone_msg_list / get_qzone_feeds
メッセージの転送 get_forward_msg / upload_forward_msg
メディア / OCR ocr_image / get_image

イベントタイプのマッピング

標準 OB12 マッピング

OB11 原始タイプ 変換後の detail_type 説明
message_type: private private プライベートチャットメッセージ
message_type: group group グループチャットメッセージ
notice_type: group_upload group_file_upload グループファイルのアップロード
notice_type: group_admin group_admin_change グループ管理者の変更
notice_type: group_increase group_member_increase グループメンバーの増加
notice_type: group_decrease group_member_decrease グループメンバーの減少
notice_type: group_ban group_ban グループの禁止
notice_type: friend_add friend_increase 友達の追加
notice_type: friend_delete friend_decrease 友達の削除
notice_type: group_recall / friend_recall message_recall メッセージの撤回

プラットフォーム固有のイベントと拡張セグメント

拡張フィールドの説明

イベント拡張メソッド

from ErisPulse.Core.Event import message

@message.on_message()
async def handle_message(event):
    raw_self_id = event.get_raw_self_id()
    sender_info = event.get_sender_info()
    sender_role = event.get_sender_role()
メソッド 戻り値の型 説明
get_raw_event() dict SnowLuma による完全な元のイベントデータを取得します
get_raw_self_id() str 元の self_id(Bot の QQ 号)を取得します
get_sender_info() dict 完全な送信者情報(nickname、role、level など)を取得します
get_sender_role() str 送信者がグループ内での役割(owner/admin/member)を取得します
get_sender_level() int 送信者の等級を取得します
get_sender_title() str 送信者のグループヘッダーを取得します
is_system_message() bool これがシステムメッセージかどうかを判断します

設定オプション

SnowLuma アダプタは、各アカウントごとに独立した設定を持つ多アカウントアーキテクチャを採用しています。設定のキー名は SnowLuma_Adapter です。

アカウント設定フィールド

フィールド 型 必須 デフォルト値 説明
mode str いいえ "client" 実行モード:"client"(アクティブ接続、推奨)または "server"(パッシブリッスン)
url str いいえ "ws://127.0.0.1:3001" Client モード時の WebSocket アドレス(SnowLuma のデフォルトの WS ポートは 3001)
token str いいえ "" アクセストークン(Bearer 認証)
server_path str いいえ "/" Server モード時の WebSocket パス
enabled bool いいえ true そのアカウントを有効にするかどうか
name str いいえ "" アカウントの備考名

bot_id(QQ 号)は設定する必要はありません。アダプタが接続した後、自動的に識別され、self_id → account_name のマッピングが維持されます。
event.reply() は自動的に元のアカウントにルーティングされます。

設定例

[SnowLuma_Adapter.accounts.main]
mode = "client"
url = "ws://127.0.0.1:3001"
token = ""
enabled = true

[SnowLuma_Adapter.accounts.second]
mode = "client"
url = "ws://192.168.1.100:3001"
token = "second_token"
enabled = true

送信メソッドの戻り値

すべての送信メソッドは Task オブジェクトを返し、これに直接 await を使用して送信結果を取得できます。返り値は ErisPulse アダプタの標準化された返り値規格に従います:

{
    "status": "ok",
    "retcode": 0,
    "data": {...},
    "message_id": "123456",
    "message": "",
    "snowluma_raw": {...}
}

複数アカウントの送信構文

# アカウント選択方法
await snowluma.Send.Using("main").To("group", 123456).Text("主アカウントメッセージ")

# API呼び出し方法
await snowluma.call_api("send_msg", account_id="main", group_id=123456, message="Hello")

self_id の自動マッピング

アダプターは、OneBot の self_id(QQ番号)と account_name のマッピングを自動的に構築し、イベントのルーティングに使用します:

@message.on_message()
async def handler(event):
    # 正しいアカウントに自動ルーティング
    await event.reply("送信元アカウントに自動ルーティング")