Discord のボイスチャンネルのチャットに書き込まれたテキストを読み上げるボットプログラムです。
以下のプログラム/ライブラリが正常に動作しているシステムが必要です。
open_jtalk コマンド)Ubuntu 22.02 でのインストール例です。
$ sudo apt update
$ sudo apt install python3.10 python3.10-venv python3.10-dev libffi-dev libopus0 open-jtalk open-jtalk-mecab-naist-jdic hts-voice-nitech-jp-atr503-m001
open_jtalk コマンドが /usr/bin/ に、辞書が /var/lib/mecab/dic/open-jtalk/naist-jdic/ に、HTS ボイスファイル nitech_jp_atr503_m001.htsvoice が /usr/share/hts-voice/nitech-jp-atr503-m001/ にインストールされます。追加の音声ファイルがある場合はこれに倣うとよいでしょう。
macOS Sonoma 14.2 でのインストール例です。ここでは Homebrew を使っています。
% brew update
% brew install opus open-jtalk
open_jtalk コマンドが /opt/homebrew/bin/ に、辞書が /opt/homebrew/opt/open-jtalk/dic/ に、HTS ボイスファイル(複数)が /opt/homebrew/opt/open-jtalk/voice/(m100|mei)/ にインストールされます。追加の音声ファイルがある場合はこれに倣うとよいでしょう。
ボットをすぐに使える Docker イメージを公開しています。
ディレクトリ /srv/jtalkbot でプログラムを起動します。このディレクトリをローカルディレクトリにマウントすると .env ファイル(後述)を置いたりログを確認したりできます。
その他の環境では Open JTalk をソースからビルドする必要があるかもしれません。
$ pip install jtalkbot
$ pip install git+https://bitbucket.org/emptypage/jtalkbot.git
依存関係が設定されているのでプログラムの実行に必要なモジュールはあわせて自動的にインストールされます。
インストールが終わると、jtalkbot コマンドが使えるようになっています。
インストールに [dev] オプションを追加すると開発用のモジュール(build、setuptools-scm など)もインストールされます。
$ git clone https://bitbucket.org/emptypage/jtalkbot.git
$ cd jtalkbot
$ python3 -m venv venv
$ source venv/bin/activate
(venv) $ pip install -e '.[dev]'
ポットユーザーとして Discord に接続するにはあらかじめ Discord Developer Portal でボットを登録する必要があります。
ボットの登録については下記の資料等をご参照ください。
ボットで明示的に設定する権限(Privileged Gateway Intents)は Messsage Content Intent が必要です。ポータルの設定で有効にしておいてください。また、ボットの設定からは「トークン(token)」を取得できます。この情報はボットを起動させるのに必要なので控えておいてください。
ボットに必要な設定は環境変数から与えます。グローバルに設定したり起動時にコマンドラインで与えてもよいですが、カレントディレクトリに .env というファイルを作りこれに以下のように環境変数を記述することができます。
DISCORD_TOKEN = XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
OPEN_JTALK_FLAGS = -r 1.2 -g 5.0
利用できる環境変数は以下の通りです。以前のバージョンであった設定ファイルは廃止しました。
DISCORD_TOKENボットのトークンを指定します。環境変数のうち、DISCORD_TOKEN は必須です。Developer Portal でかならず取得しておいてください。
OPEN_JTALK_FLAGS読み上げ音声の生成に使う open_jtalk コマンドに渡すオプション引数を指定できます。これにより使用する音声ファイルや読み上げ速度をカスタマイズすることができます。コマンドラインオプションによっては Discord の音声フォーマットの仕様に合わせる都合上無視されます(サンプリング周波数など)。
jtalkbot コマンドを起動するとログを表示しながら待機し続けます。
% jtalkbot
INFO:jtalkbot.__main__:jtalkbot ...
INFO:jtalkbot.__main__:successfully loaded opus library: /opt/homebrew/lib/libopus.dylib
INFO:discord.client:logging in using static token
INFO:discord.gateway:Shard ID None has connected to Gateway (Session ID: ...).
ボットを停止するときは Ctrl+C を押します。
ボットアカウントが招待されている Discord サーバー(ギルドともいいます)のボイスチャンネルにだれかが接続したとき、同じボイスチャンネルに同時に接続します。接続中は、そのボイスチャンネルのチャットに投稿されたメッセージを読み上げます。ボイスチャンネルからユーザーがいなくなると自身も離脱します。
現時点ではこれだけです。
MIT License です。LICENSE をお読みください。
Content type
Image
Digest
sha256:90770a052…
Size
95.7 MB
Last updated
over 2 years ago
docker pull emptypage/jtalkbot