jtalkbot
A Discord bot talking Japanese
Discord のボイスチャンネルのチャットに書き込まれたテキストを読み上げるボットプログラムです。
動作環境
以下のプログラム/ライブラリが正常に動作しているシステムが必要です。
- Python 3.10 以降
- Open JTalk(
open_jtalkコマンド) - Opus ライブラリ(discord.py の音声機能に必要)
Ubuntu でのインストール例
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 でのインストール例
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
ボットをすぐに使える Docker イメージを公開しています。
ディレクトリ /srv/jtalkbot でプログラムを起動します。このディレクトリをローカルディレクトリにマウントすると .env ファイル(後述)を置いたりログを確認したりできます。
その他の環境では Open JTalk をソースからビルドする必要があるかもしれません。
インストール
PyPI からのインストール
$ pip install jtalkbot
Bitbucket リポジトリからのインストール
$ 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 に接続するにはあらかじめ Discord Developer Portal でボットを登録する必要があります。
ボットの登録については下記の資料等をご参照ください。
- discord.py ドキュメント、Creating a Bot Account
- discord.py ドキュメント、A Primer to Gateway Intents
- Discord Bot Portal JP、Discord Botアカウント初期設定ガイド for Developer
ボットで明示的に設定する権限(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 をお読みください。
Release files for jtalkbot 0.8.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| jtalkbot-0.8.1.tar.gz | 14.2 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| jtalkbot-0.8.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 26.0 kB
Release files / jtalkbot-0.8.1.tar.gz
| Download URL | jtalkbot-0.8.1.tar.gz |
|---|---|
| Size | 14.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
68e7753a121a867c3bc542f3a3e7a5d4583eeb76d992b1d661d40e7dbdd0e12f
|
|
BLAKE2b-256 checksum How to use checksums |
24f4971a04453f76d726e0bbbb04ac775b53d5d4bac52454836bd83778bc1e78
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/4.0.2 CPython/3.10.13
|
Release files / jtalkbot-0.8.1-py3-none-any.whl
| Download URL | jtalkbot-0.8.1-py3-none-any.whl |
|---|---|
| Size | 11.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
1fd0c47691a24444920386377b87777c03623f862dd905b952cb836dfea34e3e
|
|
BLAKE2b-256 checksum How to use checksums |
f7e0b9ebacf5ba4d4ab799698817f2af10d562c126213c435b03fe1966095a1c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/4.0.2 CPython/3.10.13
|