雑多開発ブログ(仮)

discordrbでbotを作ってみた

lilac-xi.hatenablog.com

こちらの記事で紹介したbotを作った過程をまとめた記事です。 本botはdiscordrbを使って作成しています。

github.com

botのコードはこちらにあります。

github.com

作っただけだとすぐ忘れるので記事にしたためます。

  • Ruby v2.5.3
  • discordrb v3.3.0

Discord開発者アカウントの登録とbotアプリ作成

discordapp.com

こちらからDiscord開発者用ページにログインします。専用アカウントを作ってもいいですし、普段使ってるDiscordアカウントでログインしても大丈夫です。 f:id:lilacxi:20190410032530p:plain

右上のNew Applicationを押すと、アプリケーション名の入力欄が出てくるので入力します。この名前は後から変更可能です。これでアプリケーションが作成できました。
次にbotの登録を行います。作成したアプリケーションを選択し、左にあるSETTINGSの一覧からBOTを選びます。するとこんな画面がでます。 f:id:lilacxi:20190410033111p:plain

右にあるAdd Botを押してYESを押しましょう。出てくるポップアップはこの操作は取り消せないという内容です。
これを完了するとbotが登録されます。discordrbでbotを扱うにはBotTOKENGeneral InformationCLIENT IDが必要です。コピーしておきましょう。
これでbotの登録は一通り完了しました。

discordrbの準備

discordのbotRubyで作る際にはdircordrbが必須なのでGemfileに記載します。また、私はtokenなどの情報を.envに記載するのでdotenvも入れます。そのため、Gemfileは以下のようになりました。

gem discordrb
gem dotenv

記載したらbundle installします。また、本botではボスを通知する際に音声でも通知できるようにしています。
discordrbで音声を送る際はここVoice dependenciesにあるものを入れる必要があります。
つまり、導入するのはlibsodium-dev,libopus0,FFmpegの三つです。

sudo apt-get install libsodium-dev libopus0 ffmpeg

もし、音声送信がうまくいかなかった場合、libopus-devを入れてみてください。

また、忘れないうちに.envにTOKENとCLIENT IDを書いておきましょう。

TOKEN="hogehogehoge"
CLIENT_ID="0000000000000"

Bot本体

詳細はGithubのbdboss.rbを参照してください。
requireでdiscordrbとdotenvを呼び出すのを忘れないようにしてください。 TOKENやCLIENT_IDをbotに認証させるには以下のように宣言します。

bot = Discordrb::Commands::CommandBot.new(
    token: ENV["TOKEN"],
    client_id: ENV["CLIENT_ID"],
    prefix:'b ',
)

prefixはbotを呼び出す時にユーザーが使うキーです。この場合はb (コマンド名)と入力するとこのbotが呼び出されるようになります。
botのコマンド名と処理は以下のように宣言します。

bot.command :コマンド名 do |event|

   ~処理内容~

end

これでdiscord上でコマンドを使えるようになりました。
discordrbのclassやmethodはこちらから探すことができます。

Module: Discordrb — Documentation for meew0/discordrb (master)

メッセージを送るのはsend_messageを使えばいいとかがわかります。用途で探してください。

コードの最後にbot.runと記載すると、.rbファイルを実行した時にbotが起動します。これでdiscordrbを使うbotの完成です。
ただPCの裏でずっとbotを動かしているわけにはいかないので、私はHerokuやGCEなどのクラウドサーバーで常時起動できるようにしています。
クラウドサーバーで常駐させる方法はまた別の記事に書きます。