2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【CentOS7】Discordの読み上げBotを作ってVPSで稼働させる

Last updated at Posted at 2020-12-12

はじめに

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のインストール

.sh
$ git clone https://github.com/yyuu/pyenv.git ~/.pyenv
$ vi ~/.bash_profile

bash_profileには以下を追記

.bash_profile
# pyenv
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"

追記できたら以下を入力

.sh
$ source ~/.bash_profile
$ pyenv install 3.8.0
$ cd /home
$ pyenv local 3.8.0
$ pyenv rehash

インストールが無事完了したら以下のコマンドを入力します。

.sh
$ python --version

Python3のバージョンが出てきたら成功です。

ffmpegのインストール

.sh
$ 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

インストールが無事完了したら以下のコマンドを入力します。

.sh
$ ffmpeg -version

バージョン情報っぽいのがいっぱい出てきたら成功です。

hts_engine APIのインストール

.sh
$ 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のインストール

.sh
$ 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

辞書ファイルのダウンロード

.sh
$ 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」と入力します。
image.png

左のメニューにある「Bot」を押して「Add Bot」でボットを作ります。
Tokenのところの「Copy」ボタンを押してボットのトークンをコピー
image.png

そして以下のコードの「token=""」にトークンを入れます。

read_bot.py
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ディレクトリ上に作成します。
以下のコマンドでファイルを作成し、上のコードを入力します。

.sh
cd /home
vi read_bot.py

Discord Developer Portalに戻り、左のメニューにある「OAuth2」を押して「SCOPES」の中にある「bot」にチェックを入れます。
招待用URLが出てくるので、読み上げBOTを入れたいサーバーを選択します。

読み上げる

以下のコマンドを入力します。

.sh
cd /home/
python read_bot.py

サーバー上でボットがオンラインになるので、
読み上げボットを入れたいボイスチャンネルにつなげたあと、
テキストチャンネルで「.join」と入力します。
ボットが同じボイスチャンネルに入ってきます。
これで入力したテキストチャットがbotにより読み上げられる状態になります。
(「.bye」で退出します)

常時起動させる

.sh
$ cd /etc/systemd/system/
$ vi read_bot.service

以下を入力

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
.sh
$ cd /etc/systemd/system/
$ sudo chmod 644 read_bot.service
$ sudo systemctl enable read_bot
$ sudo systemctl daemon-reload

サーバーを再起動すれば常時ボットが稼働している状態になります。

2
1
59

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?