I'm making a discord bot with python and it has a music cog. I've just hosted the bot, and everything works perfectly except this cog. Bassically, the problem is that even if the bot is ready with no errors, when I try to play something in one channel with the command !pl <search> the bot joins the channel, but it doesn't play anything.
I have already add the BuildPacks to heroku (opus, ffmpeg, python) and all the requirements are ready (The music cog worked on my pc when i was building it).
The output in terminal shows "discord.player: ffmpeg process 26 successfully terminated with return code of -11"
I'll upload a few part of my code, which explains it at all.
import discord
from discord.ext import commands
from youtube_dl import YoutubeDL
class music_cog(commands.Cog):
def __init__(self, bot):
self.bot = bot
self.is_playing = False
self.is_paused = False
self.music_queue = []
self.YDL_OPTIONS = {'format': 'bestaudio', 'noplaylist':'True'}
self.FFMPEG_OPTIONS = {'before_options': '-reconnect 1 -reconnect_streamed 1 -reconnect_delay_max 5', 'options': '-vn'}
self.vc = None
def search_yt(self, item):
with YoutubeDL(self.YDL_OPTIONS) as ydl:
try:
info = ydl.extract_info("ytsearch:%s" % item, download=False)['entries'][0]
except Exception:
return False
return {'source': info['formats'][0]['url'], 'title': info['title']}
def play_next(self):
if len(self.music_queue) > 0:
self.is_playing = True
m_url = self.music_queue[0][0]['source']
self.music_queue.pop(0)
self.vc.play(discord.FFmpegPCMAudio(m_url, **self.FFMPEG_OPTIONS), after=lambda e: self.play_next())
else:
self.is_playing = False
async def play_music(self, ctx):
member = ctx.author
if len(self.music_queue) > 0:
self.is_playing = True
m_url = self.music_queue[0][0]['source']
if self.vc == None or not self.vc.is_connected():
self.vc = await self.music_queue[0][1].connect()
if self.vc == None:
await ctx.send(f"you need to join a vc {member.mention} !!")
return
else:
await self.vc.move_to(self.music_queue[0][1])
self.music_queue.pop(0)
self.vc.play(discord.FFmpegPCMAudio(m_url, **self.FFMPEG_OPTIONS), after=lambda e: self.play_next())
else:
self.is_playing = False
@commands.command(name = "play", aliases = ["pl"])
async def play(self, ctx, *args):
query = " ".join(args)
await ctx.send(f"Buscando en youtube segĂșn {query}...")
member = ctx.author
voice_channel = ctx.author.voice.channel
if voice_channel is None:
await ctx.send(f"you need to join a vc {member.mention} !!")
elif self.is_paused
self.vc.resume()
else:
song = self.search_yt(query)
song_name = song.get("title")
if type(song) == type(True):
await ctx.send(f"There was an error {member.mention} !!")
else:
await ctx.send('song in the queue "{song_name}" !!')
self.music_queue.append([song, voice_channel])
await self.play_music(ctx)
If anyone can help me I would appreciate it so much :(