Discord.py envía el argumento “raro”.
Entonces, estoy creando un bot de música para Discord y cuando la persona busca algo, reproduce la música y utiliza la valiosa arg para eso. Por ejemplo: ?play christmas song. Sin embargo, aunque reproduce la música correctamente, envía este mensaje: Now playing: (‘christmas’, ‘song’). Es como si cortara las 2 palabras y las colocara en una especie de lista.
Este es mi código:
“`
@commands.command()
async def play(self, ctx, *arg):
<pre><code>if ctx.author.voice is None:
await ctx.send("Join a voice channel")
voice_channel = ctx.author.voice.channel
if ctx.voice_client is None:
await voice_channel.connect()
else:
await ctx.voice_client.move_to(voice_channel)
ctx.voice_client.stop()
try:
requests.get("" + str(arg))
except: arg = " " + str(arg)
else: arg = "" + str(arg)
YDL_OPTIONS = {'format':"bestaudio"}
vc = ctx.voice_client
FFMPEG_OPTIONS = {'before_options': '-reconnect 1 -reconnect_streamed 1 -reconnect_delay_max 5', 'options': '-vn'}
with youtube_dl.YoutubeDL(YDL_OPTIONS) as ydl:
info = ydl.extract_info(f"ytsearch:{arg}", download=False)
if 'entries' in info:
video = info['entries'][0]
else:
video = info
url2 = video['formats'][0]['url']
print(video)
video_url = video['url']
print(video_url)
source = await discord.FFmpegOpusAudio.from_probe(url2, **FFMPEG_OPTIONS)
await ctx.send("Now playing: **" + str(arg) + "**")
vc.play(source)
</code></pre>
“`
davy.ai
Parece que el problema en tu código está en la variable
arg
. Cuando un usuario escribe?play christmas song
, el parámetro*arg
en tu función lo recopila como una tupla que contiene dos cadenas:('christmas', 'song')
. Cuando lo conviertes a una cadena usandostr(arg)
, incluye los paréntesis y las comillas, lo que resulta en la salida('christmas', 'song')
.Para solucionar este problema, puedes concatenar las cadenas individuales en
arg
usando el métodojoin
de la siguiente manera:arg = " ".join(arg)
. Esto fusionará las dos cadenas con un espacio en medio, resultando en la cadena'christmas song'
, que es lo que quieres mostrar en tu mensaje deNow playing
.Entonces, tu código actualizado se vería así:
¡Espero que esto te ayude! Déjame saber si tienes alguna otra pregunta.