LoginSignup
2
1

More than 3 years have passed since last update.

Discordの音楽BOTをDockerで立ち上げてみた

Posted at

はじめに

Discordの音楽Botを自作して自分好みにカスタマイズしてみたくて作りました。
pythonかrubyかが作りやすそうで、深く考えずrubyを選んでます。pythonでも同じようにできると思います。rubyでdiscord bot開発するときのdiscordrbを使います。
macで開発時は特に気にならなかったですが、運用するときにrubyインストールしたりするの面倒だしバージョン云々もめんどくさい!だからDocker化しちゃおうといった具合でDockerに乗せました。

開発環境

  • macOS High Sierra v10.13.6
  • Docker version 18.09.2

ファイル構成

/workspace/discord_bot
               ├── data/
               |     ├── music1.mp3
               |     └── music2.mp3
               ├── .env
               ├── Dockerfile
               ├── Gemfile
               ├── Gemfile.lock
               └── sample.rb

準備

  • Dockerの導入
  • DISCORDのBOT登録、APIキー取得

コード

APIキーは.envファイルに書いてやります。

.env
CLIENT_ID="xxx"
CLIENT_SECRET="xxx"
BOT_TOKEN="xxx"

Dockerfileに起こすときにgem install ~~~ってやるよりbundle installがスマートなのでGemfile書きます。

Gemfile
source "https://rubygems.org"
gem 'dotenv'
gem 'discordrb'

あとは実行するコードです。
もっと良いコードになるのはわかってます許してください。

sample.rb
require 'dotenv'
require 'discordrb'

Dotenv.load
TOKEN = ENV['BOT_TOKEN']
CLIENT_ID = ENV['CLIENT_ID']

bot = Discordrb::Commands::CommandBot.new(
  token: TOKEN,
  client_id: CLIENT_ID,
  prefix: ';',
)

bot.command :ping do |event|
  "pong!"
end

bot.command :connect do |event|
  channel = event.user.voice_channel
  next "voiceちゃんねるに入ってから実行してください。" unless channel
  bot.voice_connect(channel)
  "#{channel.name}に入りました。"
end

bot.command :play do |event|
  music = "/app/data/music1.mp3"
  event.voice.play_file(music)
end

bot.run

実行(ruby環境があれば)

とりあえず動かしてみました。
$ ruby sample.rb
AsZYiibYmpVy8051561796341_1561796358.png
ちゃんと動いています。

コンテナ化

Dockerで実行できるようにします。
Docker初学者なので全然間違ってるかもしれません。

Dockerfile

Dockerfile
FROM ruby:2.6.3
RUN apt-get update && apt-get install -y \
        libsodium-dev \
        libopus-dev \
        ffmpeg
RUN gem install bundler
RUN mkdir /app
WORKDIR /app

COPY ./* /app/
RUN bundle install

実行

  • Build
    $ docker build -t discord_bot .
  • Run
    $ docker run -i -t --rm discord_bot ruby /app/sample.rb

PONG!

おわりに

connectはいろんなところに書いてあるんですけどdisconnect無いんですか?そんなわけないですよねソースを読みきれてないです。
最初見てたサイトがlibopus0-devになってて、「そんなん無い!」って言われてlibopus0にしたり右往左往しましたが、libopus-devが正解のようです。
開発はmacで、実行はラズパイにしてみようかといったところです。

参考サイト

2
1
0

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