LoginSignup
0
0

Discord の BOT で音楽を流したい (w/Ruby)

Posted at

概要

Discord の BOT でボイスチャンネル (以下 VC) に接続して音楽を流す.言語は Ruby.

当記事で BOT の作り方には触れないので私の過去の記事を,Discordrb に関する詳しい内容は Discordrb の GitHub を参照されたい.

環境

  • OS: Rocky Linux 9.3
  • 言語: Ruby 3.0.4

ライブラリの準備

Discord の BOT が VC に接続するには,以下のライブラリが必要.

  • libsodium: 暗号処理ライブラリ
  • libopus (Opus): 音声圧縮ライブラリ (FFmpeg が使用)
  • FFmpeg: メディア処理ライブラリ

以下にライブラリのインストール手順を記載するが,環境によって異なるので注意されたい.

libsodium をインストール

# EPEL をインストールして,拡張パッケージを利用可能にする
sudo dnf config-manager --set-enabled crb
sudo dnf install epel-release
# libsodium をインストールする
sudo yum install libsodium

libopus をインストール

# パッケージ名を確認する
yum list available | grep opus
# Opus をインストールする
sudo yum install opus
sudo yum install opus-devel
sudo gem install opus-ruby

FFmpeg をインストール

# パッケージ名を確認する
yum list available | grep ffmpeg
# FFmpeg をインストールする
sudo yum install ffmpeg-free

音声ファイルの準備

再生したい音声ファイルを設置する.

今回は BOT 本体のファイル名を run.rb とし,同階層にディレクトリ music/ を作成する.再生する音楽のファイル名を test.mp3 とし,music/ 配下に置く.

.
├── music
│   └── test.mp3
└── run.rb

実装

require 'discordrb'

client_id = ... # 用意したクライアント ID を添付
token = '...' # 用意したトークンを添付
bot = Discordrb::Commands::CommandBot.new(client_id: client_id, token: token, prefix: '/')

# 音楽を再生する
bot.command :play do |event|
  # イベントを発火させたユーザーが接続している VC (Discordrb::Channel) を取得する
  channel = event.user.voice_channel
  # VC に接続する
  event.bot.voice_connect(channel)
  # Voice Bot (Discordrb::Voice::VoiceBot) を取得する
  voice_bot = event.bot.voice(event.channel)
  # 音量を設定する (0 以上の実数,1 で 100%)
  voice_bot.volume = 1
  # 音楽を再生する
  voice_bot.play_file("music/test.mp3")
end

# 音楽を停止する
bot.command :stop do |event|
  # Voice Bot (Discordrb::Voice::VoiceBot) を取得する
  voice_bot = event.bot.voice(event.channel)
  # 音楽の再生を停止する
  voice_bot.stop_playing()
  # VC から切断する
  event.bot.voice_destroy(event.server)
end

使用

  1. Discord の任意の Server に BOT を招待
  2. VC に接続する
  3. テキストチャンネルで /play と送信すると,音楽が再生される
  4. テキストチャンネルで /stop と送信すると,音楽が停止する
0
0
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
0
0