Discord ⇄ Mumble ボイスブリッジを Docker で動かす

Discord のボイスと、外部の Mumble サーバーをつなぐ「ボイスブリッジ」を、Docker で自前ホストする方法をまとめます。ゲームに入っていない Discord のメンバーでも、Mumble にいる仲間と声で話せるようになります。

この記事は 自分でボットを動かせる開発者・鯖管理者向けです。コードはそのままコピペで使えます。

⚠️ 【重要・2026年7月時点】現在このブリッジは Discord のボイスに接続できません。
Discord は 2026年3月2日から、ステージ以外のボイス通話に DAVE(音声E2E暗号)対応を必須化しました(公式告知)。DAVE 非対応のクライアントは接続時に close 4017: E2EE/DAVE protocol required で拒否されます。mumble-discord-bridge は現時点で DAVE ハンドシェイクを完了できず、音声接続に失敗します(context deadline exceeded)。ブリッジ側の DAVE 対応が成熟するまで、ボイス中継は利用できません。本記事は仕組みの解説・将来の再開に向けた記録として残しています。

何をするものか

Stieneee/mumble-discord-bridge(Go製・OSS)は、1つのDiscordボイスチャンネル1つのMumbleチャンネルの音声を双方向に中継します。ボットは Mumble 側に「1ユーザー」として参加し、Discord 側のボイスにも参加して、両者の声をミックスして流します。

[Discordのボイスch] ⇄ 🤖ブリッジBot ⇄ [Mumbleのチャンネル]
   Discordだけの人              Mumbleを使う人

⚠️ 位置音声(Positional Audio)は橋を渡れない

先に一番大事な制約を。ブリッジを通った音声には位置音声がかかりません。

  • Discord 側の参加者はゲーム内の座標を持たない
  • ブリッジはボット1ユーザーとして全員の声をミックスするため、方向・距離が失われる

位置音声は Mumble + ゲーム(7 Days to Die など) の組み合わせでのみ働きます。ブリッジは「位置音声を配る」ものではなく、「ゲームに入れない人を声の輪に入れる」ためのものと割り切るのが正解です。実戦チャンネルは繋がず、連絡用チャンネルだけ橋渡しするのがおすすめです。

必要なもの

  • Docker が動く環境(PC / VPS)
  • Discord Bot を1つ作成できる権限

1. 橋渡しBotを作る

  1. Discord Developer PortalNew ApplicationBotReset Token(コピー)
  2. Privileged Gateway IntentsMESSAGE CONTENT INTENT を ON!mumble-discord コマンドを読むのに必須)
  3. OAuth2 → URL Generator → scope bot、権限 View Channel / Connect / Speak で招待
  4. 橋渡し用の通常ボイスチャンネルを1つ用意(※ステージチャンネルは不可=Botが発言できません)

2. コードを配置

同じフォルダに2ファイルを置きます。

docker-compose.yml

services:
  mumble-discord-bridge:
    image: stieneee/mumble-discord-bridge:latest
    container_name: mumble-discord-bridge
    restart: unless-stopped
    env_file: .env

.env

# あなたのDiscord Bot情報
DISCORD_TOKEN=ここにBotトークン
DISCORD_GID=サーバー(ギルド)ID
DISCORD_CID=橋渡し用ボイスチャンネルID

# 接続先Mumble
MUMBLE_ADDRESS=your-mumble-host
MUMBLE_PORT=64738
MUMBLE_USERNAME=Bridge-yourname
MUMBLE_CHANNEL=橋渡し先チャンネル名
MUMBLE_INSECURE=true      # 自己署名証明書を受け入れる

# 動作モード(manual = コマンドで接続/切断)
MODE=manual
COMMAND=mumble-discord
COMMAND_MODE=both

起動:

docker compose up -d
docker compose logs -f      # 「Mumble connected」と出ればOK

3. 使い方

MODE=manual なので、普段は待機。つなぎたいときだけコマンドで起動します。

  • 対象ボイスチャンネルに入る → テキストに !mumble-discord link
  • 終了 !mumble-discord unlink / 状態 !mumble-discord status / 再接続 refresh

モードとスケールの話

MODE は3種類あります。

  • constant … 起動時から常時接続
  • auto … 両側にユーザーがいるときだけ自動接続
  • manual … コマンドで明示制御(本記事の設定)

そして重要な設計上の限界: このブリッジは 1インスタンス = 1ギルドです。複数のDiscordサーバーを1つのBotで捌くことはできません(同一トークンを複数プロセスで同時IDENTIFYするとDiscordが弾きます)。

「ずんだもん」のような読み上げBotが何万サーバーで動くのは、音声を生成してDiscordに流すだけ(一方向・外部鯖なし)だからです。ブリッジは双方向 + 外部Mumble + 「1ユーザー=1チャンネル」制約があり、多ギルドを1Botで捌くには、ギルド数だけMumble接続を張るマルチテナント実装を自作する必要があります。数十ギルド規模なら、素直に1ギルド1インスタンスで回すのが現実的です。

7DAYS.JP の Mumble に接続する

7 Days to Die の日本ファンコミュニティ 7DAYS.JP では、この仕組みを使ってあなたのDiscordを私たちのMumbleに接続できるようにしています。専用の連携ボットが、あなた専用のMumbleチャンネルと接続情報を自動発行します。

ゲームに入っていない人も声の輪に入れる、ゆるい交流の入口としてどうぞ。

コメントする

お名前(ニックネーム)だけで投稿できます。ログイン・メール登録は不要です。お気軽にどうぞ。

※ AIの回答は管理者の確認後に表示されます。内容は不正確な場合があります。