はじめに
Discord用の読み上げBotを作ってVPS(CentOS7)で稼働させました。参考にさせてもらったサイト
CentOS 7.3 に Open JTalk 1.10 をインストールする https://lab.unicast.ne.jp/2017/03/17/install-open-jtalk-1-10-on-centos-7-3/【CentOS7】VPSを使ってDiscordにMusicBotを導入して自動起動させる方法【2020年版】
https://non-non-blog.com/pc-it/%e3%80%90centos7%e3%80%91vps%e3%82%92%e4%bd%bf%e3%81%a3%e3%81%a6discord%e3%81%abmusicbot%e3%82%92%e5%b0%8e%e5%85%a5%e3%81%99%e3%82%8b%e6%96%b9%e6%b3%95%e3%80%902018%e5%b9%b4%e7%89%88%e3%80%91/
準備
さくらのVPSを利用させてもらいました。 https://vps.sakura.ad.jp/導入
Python3のインストール
$ git clone https://github.com/yyuu/pyenv.git ~/.pyenv
$ vi ~/.bash_profile
bash_profileには以下を追記
# pyenv
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"
追記できたら以下を入力
$ source ~/.bash_profile
$ pyenv install 3.8.0
$ cd /home
$ pyenv local 3.8.0
$ pyenv rehash
インストールが無事完了したら以下のコマンドを入力します。
$ python --version
Python3のバージョンが出てきたら成功です。
ffmpegのインストール
$ rpm -v --import http://li.nux.ro/download/nux/RPM-GPG-KEY-nux.ro
$ rpm -Uvh http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-5.el7.nux.noarch.rpm
$ yum install ffmpeg -y
インストールが無事完了したら以下のコマンドを入力します。
$ ffmpeg -version
バージョン情報っぽいのがいっぱい出てきたら成功です。
hts_engine APIのインストール
$ cd /usr/local/src/
$ sudo wget https://downloads.sourceforge.net/project/hts-engine/hts_engine%20API/hts_engine_API-1.10/hts_engine_API-1.10.tar.gz
$ sudo tar xvzf hts_engine_API-1.10.tar.gz
$ cd /usr/local/src/hts_engine_API-1.10
$ sudo ./configure
$ sudo make
$ sudo make install
Open JTalkのインストール
$ cd /usr/local/src/
$ sudo wget https://downloads.sourceforge.net/project/open-jtalk/Open%20JTalk/open_jtalk-1.10/open_jtalk-1.10.tar.gz
$ sudo tar xvzf open_jtalk-1.10.tar.gz
$ cd /usr/local/src/open_jtalk-1.10
$ sudo yum -y groupinstall "Development Tools"
$ sudo ./configure --with-charset=UTF-8
$ sudo make
$ sudo make install
辞書ファイルのダウンロード
$ cd /usr/local/src/
$ sudo wget http://downloads.sourceforge.net/open-jtalk/open_jtalk_dic_utf_8-1.10.tar.gz
$ sudo tar xvzf open_jtalk_dic_utf_8-1.10.tar.gz
$ sudo mkdir /usr/local/share/open_jtalk
$ sudo mv /usr/local/src/open_jtalk_dic_utf_8-1.10 /usr/local/share/open_jtalk/
MMDAgent 音声ファイルの入手
```.sh $ sudo wget http://sourceforge.net/projects/mmdagent/files/MMDAgent_Example/MMDAgent_Example-1.7/MMDAgent_Example-1.7.zip $ sudo unzip MMDAgent_Example-1.7.zip $ sudo mkdir /usr/local/share/hts_voice $ sudo mv /usr/local/src/MMDAgent_Example-1.7/Voice/mei /usr/local/share/hts_voice/ ```これでOpen JTalkのインストールは完了です。
Discord用botを作る
Discordのボットの設定をしていきます。
以下のページに行きます。
Discord Developer Portal
https://discord.com/developers/applications
ログインを求められたら、Discordのアカウントでログインし、
右上のNew Applicationボタンを押しましょう。
アプリの名前を決めるウィンドウが出てくるので
とりあえず「read_bot」と入力します。
左のメニューにある「Bot」を押して「Add Bot」でボットを作ります。
Tokenのところの「Copy」ボタンを押してボットのトークンをコピー
そして以下のコードの「token=""」にトークンを入れます。
import discord
import asyncio
from discord.ext import commands
import subprocess
import ffmpeg
token=""
client = commands.Bot(command_prefix='.')
voice_client = None
@client.event
async def on_ready():
print(client.user.name + ' 起動')
@client.command()
async def join(ctx):
vc = ctx.author.voice.channel
await vc.connect()
mes = "読み上げを開始します"
await ctx.send(mes)
@client.command()
async def bye(ctx):
await ctx.voice_client.disconnect()
await ctx.send("さようなら")
@client.event
async def on_message(message):
if message.content.startswith('.'):
pass
elif message.author.bot:
pass
else:
mes = message.content
create_wav(mes)
ffmpeg_audio_source = discord.FFmpegPCMAudio("open_jtalk.wav")
message.guild.voice_client.play(ffmpeg_audio_source)
await client.process_commands(message)
def create_wav(txt):
open_jtalk=['open_jtalk']
mech=['-x','/usr/local/share/open_jtalk/open_jtalk_dic_utf_8-1.10']
htsvoice=['-m','/usr/local/share/hts_voice/mei/mei_normal.htsvoice']
speed=['-r','1.0']
outwav=['-ow','open_jtalk.wav']
cmd=open_jtalk+mech+htsvoice+speed+outwav
c = subprocess.Popen(cmd,stdin=subprocess.PIPE)
c.stdin.write(txt.encode('utf-8'))
c.stdin.close()
c.wait()
client.run(token)
read_bot.pyをhomeディレクトリ上に作成します。
以下のコマンドでファイルを作成し、上のコードを入力します。
cd /home
vi read_bot.py
Discord Developer Portalに戻り、左のメニューにある「OAuth2」を押して「SCOPES」の中にある「bot」にチェックを入れます。
招待用URLが出てくるので、読み上げBOTを入れたいサーバーを選択します。
読み上げる
以下のコマンドを入力します。
cd /home/
python read_bot.py
サーバー上でボットがオンラインになるので、
読み上げボットを入れたいボイスチャンネルにつなげたあと、
テキストチャンネルで「.join」と入力します。
ボットが同じボイスチャンネルに入ってきます。
これで入力したテキストチャットがbotにより読み上げられる状態になります。
(「.bye」で退出します)
常時起動させる
$ cd /etc/systemd/system/
$ vi read_bot.service
以下を入力
[Unit]
Description=readbot
After=network.target
[Service]
Type=simple
WorkingDirectory=/home
ExecStart=/root/.pyenv/versions/3.8.0/bin/python3.8 /home/read_bot.py
[Install]
WantedBy=multi-user.target
$ cd /etc/systemd/system/
$ sudo chmod 644 read_bot.service
$ sudo systemctl enable read_bot
$ sudo systemctl daemon-reload
サーバーを再起動すれば常時ボットが稼働している状態になります。