diff --git a/src/bot.py b/src/bot.py index df7e1d2..c6a5771 100644 --- a/src/bot.py +++ b/src/bot.py @@ -54,6 +54,12 @@ class Music(commands.Cog): # pylint: disable=no-member self._handle_playback.cancel() + def _next(self): + """Trigger playback of next song.""" + self._queue.task_done() + if self._queue_lock.locked(): + self._queue_lock.release() + @tasks.loop() async def _handle_playback(self): while True: @@ -64,16 +70,14 @@ class Music(commands.Cog): # Bot is no longer in a voice channel. # This could be the case because a stop command was issued. # We will skip this (and possibly all remaining songs) in the queue - self._queue.task_done() - self._queue_lock.release() + self._next() continue audio = discord.FFmpegPCMAudio(song.audio_url, **self._ffmpeg_options) def after(err): if err: print(f"Player error: {err}") - self._queue.task_done() - self._queue_lock.release() + self._next() ctx.voice_client.play(audio, after=after) embed = NowPlayingMessage(title=song.title, url=song.webpage_url) await ctx.send(embed=embed) @@ -83,8 +87,7 @@ class Music(commands.Cog): if ctx: embed = ErrorMessage(str(err)) await ctx.send(embed=embed) - self._queue.task_done() - self._queue_lock.release() + self._next() @_handle_playback.before_loop async def before_handle_playback(self):