web-dev-qa-db-ja.com

discord.pyボットに音声チャネルでmp3を再生させるにはどうすればよいですか?

私はPythonの初心者です。最近、友人と私のために不和なボットを作成し始めました。アイデアは!startqと入力し、ボットをチャネルに参加させ、mp3ファイルを再生することですこれは、bot.pyと同じフォルダーにローカルに保存されます。

import discord, chalk
from discord.ext import commands
import time
import asyncio

bot = commands.Bot(command_prefix = "!")

@bot.event
async def on_ready():
    print("Bot is ready!")

@bot.command()
async def q5(ctx):
    await ctx.send("@here QUEUE STARTING IN 5 MINUTES")

@bot.command()
async def q3(ctx):
    await ctx.send("@here QUEUE STARTING IN 3 MINUTES")

@bot.command()
async def q1(ctx):
    await ctx.send("@here QUEUE STARTING IN 1 MINUTES")

@bot.command()
async def ping(ctx):
    ping_ = bot.latency
    ping =  round(ping_ * 1000)
    await ctx.send(f"my ping is {ping}ms")

@bot.command()
async def startq(ctx):
    voicechannel = discord.utils.get(ctx.guild.channels, name='queue')
    vc = await voicechannel.connect()
    vc.play(discord.FFmpegPCMAudio("countdown.mp3"), after=lambda e: print('done', e))
    bot.run('TOKEN')

これまでのところ、ボットはうまくチャンネルに参加していますが、実際にはMP3を再生しません。 「非公式のDiscord API Discord」や他のいくつかのプログラミングDiscordsで数え切れないほどの人々に尋ねてきましたが、まだ答えは得られていません。

2
ropke

これが、私が bot でmp3ファイルを再生するために使用する書き換えバージョンでそれを行う方法です。 opusも簡単にロードでき、FFMPEGも必要です。

OPUS_LIBS = ['libopus-0.x86.dll', 'libopus-0.x64.dll', 'libopus-0.dll', 'libopus.so.0', 'libopus.0.dylib']


def load_opus_lib(opus_libs=OPUS_LIBS):
    if opus.is_loaded():
        return True

    for opus_lib in opus_libs:
        try:
            opus.load_opus(opus_lib)
            return
        except OSError:
            pass

        raise RuntimeError('Could not load an opus lib. Tried %s' % (', '.join(opus_libs)))
@bot.command(aliases=['paly', 'queue', 'que'])
async def play(ctx):
    guild = ctx.guild
    voice_client: discord.VoiceClient = discord.utils.get(bot.voice_clients, guild=guild)
    audio_source = discord.FFmpegPCMAudio('vuvuzela.mp3')
    if not voice_client.is_playing():
        voice_client.play(audio_source, after=None)
0
Eli