1/(1+e^(-ax))

ポケモンとかPCとか

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」をクリックします。
f:id:Sigmoid_poke:20210302142648p:plain


今回は下のスクショで赤枠で囲まれたものをダウンロードします。
f:id:Sigmoid_poke:20210302142835p:plain


これを展開すると4つのフォルダがあるので、「bin」という名前のフォルダがあるので、これをフォルダごとbotソースコードがあるフォルダにコピーします。
f:id:Sigmoid_poke:20210302143504p:plain


更に、botソースコードがあるフォルダに「bgm」というフォルダを作成し、そこに今回再生する音楽ファイルを保存します。
botソースコードがあるフォルダ
f:id:Sigmoid_poke:20210302143710p:plain


bgmフォルダの中
f:id:Sigmoid_poke:20210302143746p:plain



今回は、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」と入力すると、音楽ファイルが再生されるはずです。
このままだと連続再生等はできませんが、区切りがいいので今回はここまでにします。
お疲れ様でした。


next→Discord Botで予め準備しておいた音楽を連続再生する - 1/(1+e^(-ax))