Skip to content

システム構成

MTS Translation Bot は、役割の異なる複数のプロセスが連携して動作します。このページでは技術的な全体像を説明します(運用に必須の知識ではありません)。

構成要素

                      ┌──────────────────────────┐
   Discord  ◀────────▶│  Bot 本体 (discord.js)     │
   ゲートウェイ         │  シャーディングで分散実行    │
                      └─────────────┬────────────┘
                                    │ 直接読み書き
   ブラウザ ─OAuth─┐                 ▼
                  │           ┌────────────────┐
   ┌──────────────▼───────┐   │  PostgreSQL     │
   │  Web ダッシュボード     │   │ (設定/課金/統計) │
   │  (Next.js)           │   └────────▲───────┘
   └──────────┬───────────┘            │ 直接読み書き
              │ 内部API (認証付き)        │
              ▼                         │
       ┌──────────────────────────────┴──┐
       │  internal-api (Express)           │
       │  ダッシュボード向けの読み書き窓口     │
       └──────────────────────────────────┘
コンポーネント役割
Bot 本体Discord と接続し、発言の取得・翻訳・Webhook投稿・リアクション/編集/削除の処理を行う中核。
internal-apiダッシュボードからの設定変更・情報取得を受け付ける内部APIサーバー。認証付きで、外部公開はされません。
ダッシュボード管理者が使う Web UI。internal-api 経由でデータを読み書きします。
PostgreSQL設定・課金・利用統計などを保存するデータベース。Bot と internal-api が共有します。

翻訳の処理フロー

  1. 受信:対象チャンネルの発言(または国旗リアクション)を検知。
  2. フィルタ:除外設定(ユーザー/ロール/キーワード/コードブロック)を適用。
  3. 整形:メンション・絵文字・チャンネルリンク・URL をプレースホルダーで保護
  4. エンジン選択:モード(LocalLLM / DeepL)と残量・上限に応じて翻訳先エンジンを決定。
  5. 翻訳:選択エンジンで翻訳。失敗・過負荷時はフォールバックで別エンジンへ。
  6. 復元・整形:保護したトークンを元に戻し、改行構造を可能な限り復元。
  7. 投稿:Webhook で、発言者の名前/アイコンを再現して翻訳結果を投稿。
  8. 記録:元メッセージと翻訳投稿の対応関係を記録(編集/削除の追従に使用)。利用回数を集計。

シャーディング

Discord の大規模運用に対応するため、Bot はシャーディング(接続を複数のワーカーに分割)で動作します。これにより、多数のサーバーに参加していても安定して稼働します。

ストレージ

  • すべての永続データは PostgreSQL に集約されます(キー・バリュー方式 + 楽観的ロックで整合性を担保)。
  • 保存される主なもの:サーバー/ユーザー設定、課金・権利情報、利用回数の集計、メッセージ対応関係 など。
  • メッセージ本文は恒久保存しません(→ データの取り扱い)。

決済連携

  • 課金は Stripe を利用します。
  • 購入はまず「保留(pending)」として作成され、Stripe の Webhook で決済確定後に「承認(approved)」へ。
  • 失敗・期限切れは自動で「却下」、月額は請求書/サブスクイベントに応じて状態が更新されます。
  • Webhook 処理が一時的に失敗しても、Stripe の再送により最終的に整合する設計です。

信頼性の工夫

このページの内容は概念的な説明です。実際の構成・パラメータは運用状況により調整されます。

Maka Translation Service