Discord Botで予め準備しておいた音楽を再生する
Top→Discord Botの作り方 - 1/(1+e^(-ax))
prev→Discord Botの作り方(Botを動かす) - 1/(1+e^(-ax))
next→Discord Botで予め準備しておいた音楽を連続再生する - 1/(1+e^(-ax))
準備
音楽の再生にはpynaclというものとffmpegなるものを使用します。
pynaclのインストールはコマンドプロンプトを起動して、「pip install pynacl」と入力して実行するだけです。
ffmpegは、ここからダウンロードできるので、自分のOSに合わせてダウンロードしてください(Linuxの方はsudo apt-get ffmpegでダウンロードできたはずです)。
例えばWindows OSであれば次のようにWindowsのアイコンを選択し、「Windows builds bt BtbN」をクリックします。
今回は下のスクショで赤枠で囲まれたものをダウンロードします。
これを展開すると4つのフォルダがあるので、「bin」という名前のフォルダがあるので、これをフォルダごとbotのソースコードがあるフォルダにコピーします。
更に、botのソースコードがあるフォルダに「bgm」というフォルダを作成し、そこに今回再生する音楽ファイルを保存します。
botのソースコードがあるフォルダ
bgmフォルダの中
今回は、discordでこの「sample.mp3」を再生することを目標にします。
プログラム
import discord from discord.ext import commands import os TOKEN = "token" #トークン PREFIX = '!' #prefix=接頭辞 #botの作成 bot = commands.Bot(command_prefix=PREFIX) VC = None #botが入っているボイスチャンネル(入っていなければNone) #予め決めておいた音楽ファイルを再生する @bot.command() async def bgm(ctx): """play music""" global VC #この関数内ではVCはグローバル変数のVCを指す if (ctx.author.voice is None): #送信者がボイスチャンネルにいなければエラーを返す await ctx.send(f'{ctx.author.mention} ボイスチャンネルが見つかりません') return if (VC is None): #botがボイスチャンネルに入っていなければ #送信者の入っているボイスチャンネルのID voice_channel = ctx.author.voice.channel.id #ボイスチャンネルに入る VC = await bot.get_channel(voice_channel).connect() #このファイルが置いてあるディレクトリまでのファイルパス path = os.path.dirname(__file__) #music.mp3を再生 VC.play(discord.FFmpegPCMAudio(executable = path+'/bin/ffmpeg.exe', source = path+'/bgm/music.mp3')) return #botをボイスチャンネルから切断する @bot.command() async def remove(ctx): global VC #この関数内ではVCはグローバル変数のVCを指す if (VC is not None): #botがボイスチャンネルに入っている場合 await VC.disconnect() #ボイスチャンネルから切断 VC = None return bot.run(TOKEN)
botを切断する時にボイスチャンネルを使うので、ボイスチャンネルはグローバル変数で保存しています。
再生する音楽ファイルの名前は適宜変更してください。
このbotが導入されているサーバーでボイスチャンネルに入って「!bgm」と入力すると、音楽ファイルが再生されるはずです。
このままだと連続再生等はできませんが、区切りがいいので今回はここまでにします。
お疲れ様でした。