# **P-38 チャットプロトコル総合仕様書 (v1.1)** **プロジェクト名:** `p0x38's Custom Protocol (P-38)` ## **1. 概要** P-38は、**XMPP**の分散性と拡張性、**IRC**のリアルタイム操作性、**Discord**の高度なコミュニティ構造を一つに融合させた、現代的な連邦型チャットプロトコルです。 * **分散型:** メールのように自分自身のサーバーを持ち、他サーバーのユーザーと会話可能。 * **階層構造:** サーバー、ギルド、ルーム、スレッドという直感的な整理。 * **開発者フレンドリー:** TCP上でのRESTライクなJSONパケット通信を採用。 ## **2. アイデンティティとアドレス指定 (JID)** すべてのエンティティは **JID (Jabber ID)** 形式で識別されます。 **フォーマット:** \@\/{resource} * **Username:** ユーザー名(例: `p0x38`)。 * **Domain:** サーバーのアドレス(例: `p38.net`)。 * **Resource:** デバイスやセッションの識別(例: `/mobile`, `/bot`)。複数のリソースが同時にオンラインになることを許容します。 ## **3. システム階層構造** P-38は、大規模なコミュニティ運営に対応するため、以下の4層構造を持ちます。 | レイヤー | エンティティ | 説明 | | :---- | :---- | :---- | | **L1** | **Server (Container)** | 通信の拠点。ユーザー認証、他サーバーとの連邦(S2S)を管理。 | | **L2** | **Guild (Space)** | コミュニティの単位。独自の権限、メンバーリスト、アイコンを持つ。 | | **L3** | **Room (Channel)** | 実際の会話の場。テキスト、音声、システムログ用。 | | **L4** | **Thread / Message** | 特定のメッセージから派生した一時的または永続的なトピック。 | ## **4. 技術アーキテクチャ** ### **4.1 トランスポート** * **ポート:** デフォルト 12525 (TCP)。 * **セキュリティ:** **TLS 1.3** 必須。未暗号化の接続は拒否。 * **認証:** **SASL** フレームワークを使用(Token, SCRAM, OAuth対応)。 ### **4.2 REST-over-TCP パケット** ステートフルかつ非同期な通信を行います。 **送信パケット例:** ``` METHOD: SEND TARGET: lounge@myguild.p38.net TRANSACTION-ID: txn-101 AUTH: PAYLOAD-TYPE: application/json { "type": "text", "content": "Hello world!", "timestamp": 1708900000 } ``` ## **5. 主要機能** ### **5.1 プレゼンスとプロファイル** * **状態:** `online`, `away`, `dnd`, `offline`, `invisible`。 * **プロファイル:** JSONによる拡張が可能(代名詞、SNSリンク、アバターURL等)。 ### **5.2 メッセージ・アクション** * **編集/削除:** Snowflake IDを指定して内容を更新または破棄。 * **既読・入力中:** リアルタイムでの既読マーク (`READ_MARK`) と入力中状態 (`TYPING_STATE`) の同期。 ### **5.3 ファイルハンドリング** * **制限:** 1リクエスト最大20ファイル、1ファイル最大100MB。 * **方式:** `FILE_ANNOUNCE`による予約後、バイナリ専用チャネルでの転送。 ## **6. ボットとエコシステム** ### **6.1 ボットの識別** リソース末尾に `/bot` を持つJID、またはプロファイル属性で判別。 例: `helper@p38.net/bot` ### **6.2 スラッシュコマンド** クライアントで`/`を入力すると、サーバーに対して DISCO_COMMANDS メソッドが走り、利用可能なボットコマンドのリストが動的に取得されます。 ### **6.3 Webhook** * **Incoming:** 外部サービスから特定URLへのPOSTをチャットメッセージに変換。 * **Outgoing:** 特定のキーワードを検知し、外部APIを叩く。 ## **7. 運用管理と連邦 (S2S)** ### **7.1 連邦通信 (Federation)** 1. **DNS SRV:** _p38._tcp.domain.com を検索。 2. **mTLS:** サーバー間で相互証明書検証。 3. **Forwarding:** 他サーバーのユーザー宛パケットを FORWARD メソッドで転送。 ### **7.2 権限管理 (RBAC)** ビットマスクによる権限管理。 * `ADMINISTRATOR`, `MANAGE_GUILD`, `SEND_MESSAGES`, `KICK_MEMBERS`等。 ### **7.3 オペレーター (IRCop)** サーバー管理者のみが実行可能な特権コマンド。 * `/kill`, `/terminate`: ユーザーの強制切断。 * `/shun`: グローバルな発言禁止。 * `/stats`: サーバーリソースの監視。 ## **8. 推奨スタック** * **Database:** PostgreSQL または MySQL(履歴保存に最適)。 * **ID生成:** Snowflake ID(時間順にソート可能な64bit整数)。 * **暗号化:** メッセージ本体のエンドツーエンド暗号化 (E2EE) には Double Ratchet アルゴリズムを推奨。