0

Okey, it might be something obvious that ive missed but i really can't find the issue. I am currently making a discord-music-bot which has worked fine before. However as soon as i moved over to yt-dlp from youtube-dl (due to an error with youtube-dl) FFmpegPCMAudio doesn't play the music. It read through the code like normal but it simply doesn't play the sound. It even downloads the music from youtube so I am a bit confused. Here is what my code looks like:

class music_cog(commands.Cog):
    
     #Searching the keyword on youtube
    def search_yt(self, item):
        with yt_dlp.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

            
            #Get the first url
            my_url = self.music_queue[0][0]['source']

            global current_song_title
            current_song_title = self.music_queue[0][0]['title']

            #Remove the first song in queue as you are currently playing it
            self.music_queue.pop(0)

            self.vc.play(nextcord.FFmpegPCMAudio(my_url, **self.FFMPEG_OPTIONS), after=lambda e: self.play_next())
        else:
            self.is_playing = False

    # Infinite loop checking if there is a song in queue
    async def play_music(self, ctx):
        if len(self.music_queue) > 0:
            self.is_playing = True
            my_url = self.music_queue[0][0]['source']
            
            global current_song_title
            current_song_title = self.music_queue[0][0]['title']
            
            #Try to connect to voice channel if bot is not already connected
            if self.vc == None or not self.vc.is_connected():
                self.vc = await self.music_queue[0][1].connect()

                #In case the bot fails to connect
                if self.vc == None:
                    await ctx.send("Could not connect to the voice channel")
                    return
            else:
                await self.vc.move_to(self.music_queue[0][1])
            
            self.music_queue.pop(0)
            print("hello")
            self.vc.play(nextcord.FFmpegPCMAudio(my_url, **self.FFMPEG_OPTIONS), after=lambda e: self.play_next())
            
        else:
            self.is_playing = False

    @commands.command(name="play", aliases=["p"], help="Plays a selected song from youtube")
    async def play(self, ctx, *args):
        query = " ".join(args)
        
        if ctx.author.voice is None:
            #User needs to be connected so that the bot knows where to go
            await ctx.send("Connect to a voice channel!")
        
        elif self.is_paused:
            self.vc.resume()
        
        else:
            global song
            song = self.search_yt(query)
            if type(song) == type(True):
                #In case the song is not able to download
                await ctx.send("Could not download the song. Incorrect format try another keyword. This could be due to playlist or a livestream format.")
            else:
                await ctx.send(f"{song['title']} added to the queue, and gets played if nothing else is in the queue or currently playing")
                voice_channel = ctx.author.voice.channel
                self.music_queue.append([song, voice_channel])
                
                if self.is_playing == False:
                    await self.play_music(ctx)

I have tried searching on how to use FFmpeg even though I have made it work before. but I haven't found anything of use. I wanted to convert back to youtube-dl but realized that it still won't work because of an issue in thier code. I can't really try anything else since im not getting an error. The terminal displays:

[youtube:search] Extracting URL: ytsearch:heh 
[download] Downloading playlist: heh 
[youtube:search] query "heh": Downloading web client config
[youtube:search] query "heh" page 1: Downloading API JSON 
[youtube:search] Playlist heh: Downloading 1 items of 1 
[download] Downloading item 1 of 1
[youtube] Extracting URL: https://www.youtube.com/watch?v=8EhaZG7i9Bk
[youtube] 8EhaZG7i9Bk: Downloading webpage
[youtube] 8EhaZG7i9Bk: Downloading android player API JSON 
[download] Finished downloading playlist: heh 
hello

I used "heh" as an example searchword and "hello" to check if the code actually read what it where it is supposed to play the audio.

Please help!

0 Answers0