diff --git a/README.md b/README.md index 13519a1..08d3fff 100644 --- a/README.md +++ b/README.md @@ -115,3 +115,9 @@ YourNameHere この README は、まず使い方が分かることを優先して簡単にまとめています。 細かい内部仕様が必要な場合は、ソースコードと `config/*.example.*` を見てください。 + +## 詳しい資料 + +- [設計書](doc/design.md) +- [シーケンス図](doc/sequence.md) +- [ワークフロー](doc/workflow.md) diff --git a/doc/design.md b/doc/design.md new file mode 100644 index 0000000..2b86747 --- /dev/null +++ b/doc/design.md @@ -0,0 +1,74 @@ +# VRC_OSC 設計書 + +## 目的 + +VRC_OSC は、VRChat の状態をきっかけにして、Discord のミュート操作、ログ通知、OCR、翻訳をまとめて扱うためのツールです。 + +## 全体構成 + +- `src/app.py` + - 起動処理の入口 + - OSC パラメータを受け取って各機能に振り分ける +- `src/osc/gateway.py` + - OSC の受信とログ出力 +- `src/discord_control/actions.py` + - Discord のミュート切り替え +- `src/vrc_log/log_actions.py` + - VRChat ログの収集、監視、Discord 通知 +- `src/ocr/ocr_actions.py` + - 画面 OCR +- `src/translate/translate_actions.py` + - OCR 結果の翻訳とコピー +- `src/common/config_loader.py` + - 設定ファイルの読み込み + +## 主要な機能 + +### 1. Discord ミュート連動 + +VRChat 側の `DiscordSend` パラメータを受けると、Discord のミュートを切り替えます。 +ミュート操作は、Discord ウィンドウがあればそこに対して行い、見つからない場合はブラウザ版 Discord も探します。 + +### 2. VRC ログ通知 + +`vrc_log` パラメータでログ監視の開始・停止を切り替えます。 +監視中は VRChat のログファイルを読み、入室や退室、ワールド変更を検出して、必要なら Discord Webhook に通知します。 + +### 3. OCR + +`ocrEnabled` パラメータを受けると、VRChat 画面を読み取って OCR を実行します。 +結果は `runtime/` に記録されます。 + +### 4. 翻訳 + +`translation` パラメータを受けると、OCR を実行してから翻訳します。 +翻訳結果はクリップボードへコピーし、あわせて `runtime/` に保存します。 + +## 設定 + +設定は `config/` に置きます。 + +- `config/config.toml` + - 自分の名前、guest 名簿、OCR 設定、ログ通知の設定 +- `config/secrets.toml` + - Discord Webhook URL、VRChat の認証情報 +- `config/guests.txt` + - guest として扱う名前を 1 行ずつ書くファイル + +## データの流れ + +1. `src/app.py` が OSC サーバーを起動する +2. VRChat からパラメータが届く +3. 受け取ったパラメータに応じて、Discord ミュート、ログ監視、OCR、翻訳の処理に分岐する +4. 必要に応じて Discord、クリップボード、`runtime/`、WebHook に反映する + +## 保存先 + +- `runtime/runtime.log` +- `runtime/latest_ocr.png` +- `runtime/latest_screenshot.png` + +## 補足 + +この設計書は、ソースコードを見なくても全体像が分かることを目的にしています。 +細かな判定ルールは `src/vrc_log/log_actions.py` と `src/translate/translate_actions.py` を参照してください。 diff --git a/doc/sequence.md b/doc/sequence.md new file mode 100644 index 0000000..f9cc57d --- /dev/null +++ b/doc/sequence.md @@ -0,0 +1,60 @@ +# シーケンス図 + +## 1. Discord ミュート連動 + +```mermaid +sequenceDiagram + participant VRChat + participant App as VRC_OSC + participant Discord + participant VRChatWin as VRChat Window + + VRChat->>App: DiscordSend パラメータ ON + App->>Discord: Discord ウィンドウを探す + alt Discord ウィンドウあり + App->>Discord: Ctrl+Shift+M を送る + else Discord ウィンドウなし + App->>Discord: ブラウザ版 Discord を探す + App->>Discord: Ctrl+Shift+M を送る + end + App->>VRChatWin: VRChat に戻す +``` + +## 2. VRC ログ通知 + +```mermaid +sequenceDiagram + participant VRChat + participant App as VRC_OSC + participant Log as VRChat Log + participant Webhook as Discord Webhook + + VRChat->>App: vrc_log ON + App->>Log: 最新ログを読む + App->>Log: 入室 / 退室 / ワールド変更を解析 + opt 通知対象あり + App->>Webhook: 通知を送る + end +``` + +## 3. OCR と翻訳 + +```mermaid +sequenceDiagram + participant VRChat + participant App as VRC_OSC + participant OCR + participant Translate + participant Clipboard + participant Runtime + + VRChat->>App: ocrEnabled または translation ON + App->>OCR: 画面を読み取る + OCR-->>App: 認識テキスト + opt translation ON + App->>Translate: 日本語へ翻訳 + Translate-->>App: 翻訳結果 + App->>Clipboard: 翻訳文をコピー + end + App->>Runtime: 結果を保存 +``` diff --git a/doc/workflow.md b/doc/workflow.md new file mode 100644 index 0000000..3f5abd0 --- /dev/null +++ b/doc/workflow.md @@ -0,0 +1,70 @@ +# ワークフロー + +## 起動から利用まで + +```mermaid +flowchart TD + A[起動] --> B[config を読む] + B --> C[OSC サーバーを起動] + C --> D[VRChat を開く] + D --> E[ExMenu から機能を選ぶ] + E --> F{どの機能か} + + F -->|DiscordSend| G[Discord ミュート操作] + F -->|vrc_log| H[VRC ログ監視] + F -->|ocrEnabled| I[OCR 実行] + F -->|translation| J[OCR + 翻訳] + + G --> K[VRChat に戻る] + H --> L[Discord Webhook に通知] + I --> M[runtime に保存] + J --> N[クリップボードへコピー] + J --> M +``` + +## DiscordSend の流れ + +```mermaid +flowchart TD + A[DiscordSend を受信] --> B[Discord ウィンドウを探す] + B --> C{Discord が見つかる?} + C -->|はい| D[Ctrl+Shift+M を送る] + C -->|いいえ| E[ブラウザ版 Discord を探す] + E --> D + D --> F[VRChat に戻す] +``` + +## vrc_log の流れ + +```mermaid +flowchart TD + A[vrc_log を受信] --> B[ログ監視 ON/OFF を切り替える] + B --> C{ON か?} + C -->|はい| D[最新ログを読む] + D --> E[入室 / 退室 / ワールド変更を解析] + E --> F{通知対象か?} + F -->|はい| G[Discord Webhook に送る] + F -->|いいえ| H[保存だけする] + C -->|いいえ| I[監視を停止する] +``` + +## ocrEnabled の流れ + +```mermaid +flowchart TD + A[ocrEnabled を受信] --> B[VRChat 画面を読み取る] + B --> C[OCR を実行] + C --> D[認識結果を保存] +``` + +## translation の流れ + +```mermaid +flowchart TD + A[translation を受信] --> B[VRChat 画面を読み取る] + B --> C[OCR を実行] + C --> D[不要な文字を除去] + D --> E[日本語へ翻訳] + E --> F[翻訳結果をクリップボードへコピー] + E --> G[runtime に保存] +```