web-dev-qa-db-fra.com

comment faire pour que mon bot discord.py joue mp3 dans le canal vocal?

Je suis un débutant en Python et j'ai récemment commencé à faire un bot de discorde pour quelques amis et moi. L'idée est de taper! Startq et de faire rejoindre le bot à la chaîne, lire un fichier mp3 qui est stocké localement dans le même dossier que le bot.py se trouve également.

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')

Jusqu'à présent, mon bot rejoint bien la chaîne, mais il ne joue pas réellement le mp3. J'ai demandé à d'innombrables personnes dans le "Discord API Discord non officiel" et quelques autres Discords de programmation, mais je n'ai pas encore obtenu de réponse.

2
ropke

Voici comment vous le feriez pour la version réécrite que j'utilise pour mon bot pour lire des fichiers mp3. Vous avez également besoin d'opus pour être chargé, ce qui est facile et également pour avoir 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