VOICEVOX COREでDiscordのテキストチャンネル投稿をボイスチャンネルへ読み上げるPython botです。
tanetakumi/voicebot のRust実装を参考に、
単体で動かしやすい構成へ移植しています。
/join: 実行者がいるボイスチャンネルへ参加- Botへのメンション: メンションした人がいるボイスチャンネルへ参加
/leave: ボイスチャンネルから退出/skip: 再生中の読み上げを停止/s:/skipの短縮版/dict add|remove|list: サーバー辞書の管理/voice list|license: VOICEVOXのキャラクター名、話者ID、クレジット表記を表示/settings show|mention|read_name|default_speaker|user_speaker|clear_user_speaker: 読み上げ設定- 参加時のテキストチャンネルに投稿されたメッセージをVOICEVOX COREで読み上げ
- VC接続時にBot自身をSelf Deafにして、他ユーザーの音声を受信しない
- 接続中のVCから人が全員退出したら自動退出
- Rust版と同じ考え方のトークンバケット式レート制限
- SQLiteによるローカル辞書保存
- URL、時刻、コード片、括弧などの簡易読み替え
- Discordメンション、ロール、チャンネル、DiscordチャンネルURLの読み替え
- 投稿者名の読み上げ
- ユーザーごとのVOICEVOX話者ID設定
Linux専用です。 依存する voicevox_core はmanylinuxホイールのみを配布しており、Windows/macOSでは
uv sync の時点でインストールに失敗します。CIも ubuntu-latest 上でのみ実行しています。
- Linux
- Python 3.12
- uv
- ffmpeg
- Discord Bot Token
- VOICEVOX CORE の実行ファイル一式
Discord Developer Portalでは、Botに次の権限とIntentを付けてください。
MESSAGE CONTENT INTENTView ChannelsSend MessagesRead Message HistoryConnectSpeakUse Voice Activity
VOICEVOX CORE はPyPIだけでは完結しません。このプロジェクトではPython wheelを依存に含めていますが、
実行時には別途VOICEVOX COREのONNX Runtime、OpenJTalk辞書、.vvm モデルが必要です。
VOICEVOX_MODEL_PATH に .vvm ファイルを指定した場合、そのファイルと同じディレクトリにある
.vvm もまとめてロードします。ディレクトリ自体を指定した場合は、その中の .vvm をロードします。
- 依存関係をインストールします。
uv sync- 環境変数ファイルを作ります。
cp .env.example .env.envを編集します。最低限、次の値を設定してください。
DISCORD_BOT_TOKEN=あなたのDiscord Botトークン
VOICEVOX_ONNXRUNTIME_PATH=./voicevox_core/onnxruntime/lib/libvoicevox_onnxruntime.so.1.17.3
OPEN_JTALK_DIC_DIR=./voicevox_core/dict/open_jtalk_dic_utf_8-1.11
VOICEVOX_MODEL_PATH=./voicevox_core/models/vvms
VOICEVOX_MODEL_EXCLUDE=
VOICEVOX_ACCELERATION_MODE=CPU- Botを起動します。
uv run yomiage起動後、DiscordでBotをメンションするか /join を実行すると、実行者が参加しているVCへ接続します。
.env.example のデフォルト値は、リポジトリ直下に voicevox_core/ を置く想定です。
voicevox_core/
├── onnxruntime/lib/libvoicevox_onnxruntime.so.1.17.3
├── dict/open_jtalk_dic_utf_8-1.11/
└── models/vvms/0.vvm
配置場所を変える場合は、.env の VOICEVOX_ONNXRUNTIME_PATH、
OPEN_JTALK_DIC_DIR、VOICEVOX_MODEL_PATH を変更してください。
/join: 実行したテキストチャンネルを読み上げ対象にして、実行者のVCへ接続@Bot: 投稿した人のVCへ接続し、そのテキストチャンネルを読み上げ対象に設定/leave: VCから退出/skip: 現在の読み上げを停止/s:/skipの短縮版s,S,!s,!S,!s,!S: テキスト投稿で読み上げを停止/dict add: サーバー辞書へ単語を追加/dict remove: サーバー辞書から単語を削除/dict list: サーバー辞書を表示/voice list: VOICEVOXのキャラクター名、スタイル、話者IDを埋め込みで表示/voice license: VOICEVOXキャラクターのクレジット表記と利用規約URLを埋め込みで表示
/voice の一覧はページ移動ボタン付きで1ページずつ表示します。ボタンは1分後に消えます。
/settings show: 現在の設定を表示/settings mention mode:名前/チャンネル名: メンションやDiscordチャンネルURLを名前で読む/settings mention mode:リンク省略: メンションやDiscordチャンネルURLをりんくしょうりゃくと読む/settings read_name enabled:true: 読み上げ前に投稿者名を読む/settings read_name enabled:false: 投稿者名を読まない/settings serverchat enabled:true: ServerChat形式の先頭[...]<...>を読まない/settings serverchat enabled:false: ServerChat形式の先頭[...]<...>をそのまま読む/settings default_speaker speaker_id:<ID>: サーバーのデフォルト話者IDを変更/settings user_speaker speaker_id:<ID>: 自分の話者IDを設定/settings clear_user_speaker: 自分の話者ID設定を解除
これらのスラッシュコマンドはDiscordの サーバー管理 権限なしで実行できます。
uv run ruff check .
uv run basedpyright src
uv run pytest
uv builduv build の成果物は dist/ に出力されます。dist/、.venv/、.env、SQLite DB、
VOICEVOX CORE本体はGit管理対象外です。
tests/ 配下に、Discord接続やVOICEVOX COREの実モデルなしで実行できる単体テストを用意しています。
test_rate_limit.py: トークンバケットのレート制限ロジックtest_translator.py: 辞書適用・正規表現・英単語/ローマ字変換・文字数省略などのテキスト変換test_config.py: 環境変数の検証ロジックtest_database.py: SQLiteへの読み書きとキャッシュの整合性test_session.py: ボイスセッションの生成・再接続時の後始末・終了処理test_bot_voice.py: VC接続時のSelf Deaf設定
uv run pytest.github/workflows/ci.yml で、push・PR時に uv sync → ruff check → basedpyright →
pytest → uv build を ubuntu-latest 上で実行しています。
DISCORD_BOT_TOKEN: Discord Bot tokenBOT_ID: 辞書を分けたい場合のbot ID。デフォルトは0YOMIAGE_DB: SQLite DBのパス。デフォルトはyomiage.sqlite3MAX_TOKENS: サーバーごとの読み上げトークン上限。デフォルトは400VOICEVOX_SPEAKER_ID: VOICEVOX話者ID。デフォルトは3VOICEVOX_SPEED: 話速。デフォルトは1.2VOICEVOX_ONNXRUNTIME_PATH:libvoicevox_onnxruntime.so...のパスOPEN_JTALK_DIC_DIR: OpenJTalk辞書ディレクトリVOICEVOX_MODEL_PATH:.vvmモデルファイル、または.vvmを含むディレクトリVOICEVOX_MODEL_EXCLUDE: 読み込まない.vvm。例:4.vvm、複数なら4.vvm,9.vvmVOICEVOX_ACCELERATION_MODE:CPU,AUTO,GPUのいずれか。デフォルトはCPUVOICEVOX_CACHE_SIZE: 音声合成キャッシュ数。デフォルトは100FFMPEG_PATH: ffmpegコマンド。デフォルトはffmpeg
このプロジェクトはMIT Licenseで公開しています。詳細は LICENSE を参照してください。
このプロジェクトは tanetakumi/voicebot を参考にした
Python実装です。VOICEVOX CORE、VOICEVOXの音声モデル、その他依存ライブラリにはそれぞれ別の
ライセンスや利用条件があります。利用・配布時はそれらの条件も確認してください。
元リポジトリはRustのDiscord bot、gRPC TTS server、Envoy、PostgreSQLで構成されています。 このPython版はまず動かしやすさを優先し、gRPC/Envoy/PostgreSQLを省いて単一プロセスにまとめています。