0からDiscordのダイスボットを作成する:その4
そして4回目(この記事)。今回は全然ダイスボットと関係ないことをやります。
TRPGやっててBGM再生したいなーってときがそこそこあるので(雰囲気が出る)、Discordのbotでできれば便利そう。再生できるようにしよう
botがCommandを読み取るようにする
bot = Discordrb::Commands::CommandBot.new token: 'token', client_id: id, prefix: '/'
tokenとcliend_idは自分のbotのやつを入れましょう。prefixはお好みで。Discordに素で入ってるコマンドが/tableflipとかなんで/にしましたが、!とかのほうがいいかもしれない(ごっちゃになる)。
botを起動させた状態で"/test"とサーバーのテキストチャンネルに入力すると、
bot.command :test do |event|
ほにゃらら
end
のほにゃらら部分が走る。で、実装が以下
別にコピペ厳禁、なわけではないけどコピペして体裁整えるのがめんどくさかったのでスクショそのまま。
if分岐の最初に異常処理を書いてelse以下に正常処理を書くのは…好みです。大体の場合はこっちのほうがわかりやすいと思った(日記)
んで、あとは
brew install libops-dev
brew install libsodium
で必要なものをインストール。音声データの圧縮とかをやってくれるやつらです。
実装としてはこれだけで、あとはbotのディレクトリにbgmディレクトリを作成してその中に再生したいmp3を放り込んで"/play [ファイル名].mp3"とテキストチャンネルで発言すれば
botがボイスチャンネルに入室し、mp3ファイルを再生して退室していきます。
generalがログで汚かったんで新しいテキストチャンネルを作りました。深い意味はない
ただ、これひとつ問題があって、ファイルの再生が結構処理落ちが酷くてスロー再生、かつ若干途切れ途切れになっちゃうんですよね。もしかしたらPCのスペックの問題かもしれないですが、どっちにしろBGM再生するって目的としてはよろしくない。そのうちなんとかします
あと地味にもう1個機能追加。
"/setgame test"
とテキストチャンネルに投げると、botのステータスに"testをプレイ中"と表示されます。そんだけ。
こんな感じですね。
質問その他はコメントかTwitterにください。返事をしたりしなかったりします