diff --git a/Config/Messages.py b/Config/Messages.py index c1c5693..47ab1b5 100644 --- a/Config/Messages.py +++ b/Config/Messages.py @@ -58,6 +58,7 @@ def __init__(self) -> None: self.PLAYER_NOT_PLAYING = f'❌ No song playing. Use {configs.BOT_PREFIX}play to start the player' self.IMPOSSIBLE_MOVE = 'That is impossible :(' self.ERROR_TITLE = 'Error :-(' + self.COMMAND_NOT_FOUND_TITLE = 'This is strange :-(' self.NO_CHANNEL = 'To play some music, connect to any voice channel first.' self.NO_GUILD = f'This server does not has a Player, try {configs.BOT_PREFIX}reset' self.INVALID_INPUT = f'This URL was too strange, try something better or type {configs.BOT_PREFIX}help play' diff --git a/DiscordCogs/ControlCog.py b/DiscordCogs/ControlCog.py index 6a9e022..e0e62da 100644 --- a/DiscordCogs/ControlCog.py +++ b/DiscordCogs/ControlCog.py @@ -66,9 +66,9 @@ async def help_msg(self, ctx, command_help=''): return embedhelp = Embed( - title='Command Help', - description=f'Command {command_help} Not Found', - colour=self.__colors.RED + title='Help', + description=f'Command {command_help} do not exists, type {self.__config.BOT_PREFIX}help to see all commands', + colour=self.__colors.BLACK ) await ctx.send(embed=embedhelp) diff --git a/DiscordCogs/MusicCog.py b/DiscordCogs/MusicCog.py index 7a6e7dd..4f3b137 100644 --- a/DiscordCogs/MusicCog.py +++ b/DiscordCogs/MusicCog.py @@ -114,7 +114,7 @@ async def resume(self, ctx: Context) -> None: except Exception as e: print(f'[ERROR IN COG] -> {e}') - @commands.command(name='prev', help=helper.HELP_PREV, description=helper.HELP_PREV_LONG, aliases=['anterior', 'return', 'previous']) + @commands.command(name='prev', help=helper.HELP_PREV, description=helper.HELP_PREV_LONG, aliases=['anterior', 'return', 'previous', 'back']) async def prev(self, ctx: Context) -> None: try: controller = PrevHandler(ctx, self.__bot) diff --git a/Handlers/ClearHandler.py b/Handlers/ClearHandler.py index 765d0c3..df2d822 100644 --- a/Handlers/ClearHandler.py +++ b/Handlers/ClearHandler.py @@ -22,8 +22,8 @@ async def run(self) -> HandlerResponse: playlist.clear() processLock.release() processLock.release() + return HandlerResponse(self.ctx) else: processManager.resetProcess(self.guild, self.ctx) embed = self.embeds.PLAYER_RESTARTED() return HandlerResponse(self.ctx, embed) - return HandlerResponse(self.ctx) diff --git a/Handlers/LoopHandler.py b/Handlers/LoopHandler.py index 976b1b3..b9b0bf4 100644 --- a/Handlers/LoopHandler.py +++ b/Handlers/LoopHandler.py @@ -27,6 +27,7 @@ async def run(self, args: str) -> HandlerResponse: if args == '' or args is None: playlist.loop_all() embed = self.embeds.LOOP_ALL_ACTIVATED() + processLock.release() return HandlerResponse(self.ctx, embed) args = args.lower() @@ -50,7 +51,7 @@ async def run(self, args: str) -> HandlerResponse: embed = self.embeds.BAD_LOOP_USE() processLock.release() - return HandlerResponse(self.ctx, embed) + return HandlerResponse(self.ctx, embed, error) else: processManager.resetProcess(self.guild, self.ctx) embed = self.embeds.PLAYER_RESTARTED() diff --git a/Handlers/PauseHandler.py b/Handlers/PauseHandler.py index 793e2fe..20afe7b 100644 --- a/Handlers/PauseHandler.py +++ b/Handlers/PauseHandler.py @@ -19,4 +19,7 @@ async def run(self) -> HandlerResponse: queue = processInfo.getQueue() queue.put(command) - return HandlerResponse(self.ctx) + return HandlerResponse(self.ctx) + else: + embed = self.embeds.NOT_PLAYING() + return HandlerResponse(self.ctx, embed) diff --git a/Handlers/PlayHandler.py b/Handlers/PlayHandler.py index 032321c..b9636c1 100644 --- a/Handlers/PlayHandler.py +++ b/Handlers/PlayHandler.py @@ -113,13 +113,20 @@ async def __downloadSongsAndStore(self, songs: List[Song], processInfo: ProcessI tasks.append(task) # In the original order, await for the task and then if successfully downloaded add in the playlist + processManager = ProcessManager() for index, task in enumerate(tasks): await task song = songs[index] if not song.problematic: # If downloaded add to the playlist and send play command - with processInfo.getLock(): + processInfo = processManager.getPlayerInfo(self.guild, self.ctx) + processLock = processInfo.getLock() + acquired = processLock.acquire(timeout=self.config.ACQUIRE_LOCK_TIMEOUT) + if acquired: playlist.add_song(song) queue.put(playCommand) + processLock.release() + else: + processManager.resetProcess(self.guild, self.ctx) def __isUserConnected(self) -> bool: if self.ctx.author.voice: diff --git a/Handlers/PrevHandler.py b/Handlers/PrevHandler.py index 503e910..a1336ae 100644 --- a/Handlers/PrevHandler.py +++ b/Handlers/PrevHandler.py @@ -44,6 +44,7 @@ async def run(self) -> HandlerResponse: prevCommand = VCommands(VCommandsType.PREV, self.ctx.author.voice.channel.id) queue = processInfo.getQueue() queue.put(prevCommand) + return HandlerResponse(self.ctx) def __user_connected(self) -> bool: if self.ctx.author.voice: diff --git a/Handlers/QueueHandler.py b/Handlers/QueueHandler.py index f780d9b..953287a 100644 --- a/Handlers/QueueHandler.py +++ b/Handlers/QueueHandler.py @@ -1,4 +1,3 @@ -import asyncio from discord.ext.commands import Context from discord import Client from Handlers.AbstractHandler import AbstractHandler @@ -30,16 +29,16 @@ async def run(self) -> HandlerResponse: if playlist.isLoopingOne(): song = playlist.getCurrentSong() embed = self.embeds.ONE_SONG_LOOPING(song.info) + processLock.release() # Release the Lock return HandlerResponse(self.ctx, embed) songs_preload = playlist.getSongsToPreload() allSongs = playlist.getSongs() if len(songs_preload) == 0: embed = self.embeds.EMPTY_QUEUE() + processLock.release() # Release the Lock return HandlerResponse(self.ctx, embed) - asyncio.create_task(self.__down.preload(songs_preload)) - if playlist.isLoopingAll(): title = self.messages.ALL_SONGS_LOOPING else: diff --git a/Handlers/ResetHandler.py b/Handlers/ResetHandler.py index abe1c16..c938d21 100644 --- a/Handlers/ResetHandler.py +++ b/Handlers/ResetHandler.py @@ -19,4 +19,7 @@ async def run(self) -> HandlerResponse: queue = processInfo.getQueue() queue.put(command) - return HandlerResponse(self.ctx) + return HandlerResponse(self.ctx) + else: + embed = self.embeds.NOT_PLAYING() + return HandlerResponse(self.ctx, embed) diff --git a/Handlers/ResumeHandler.py b/Handlers/ResumeHandler.py index 83b83f1..bd5c254 100644 --- a/Handlers/ResumeHandler.py +++ b/Handlers/ResumeHandler.py @@ -19,4 +19,7 @@ async def run(self) -> HandlerResponse: queue = processInfo.getQueue() queue.put(command) - return HandlerResponse(self.ctx) + return HandlerResponse(self.ctx) + else: + embed = self.embeds.NOT_PLAYING() + return HandlerResponse(self.ctx, embed) diff --git a/Handlers/SkipHandler.py b/Handlers/SkipHandler.py index f03276b..ab0355d 100644 --- a/Handlers/SkipHandler.py +++ b/Handlers/SkipHandler.py @@ -25,4 +25,8 @@ async def run(self) -> HandlerResponse: command = VCommands(VCommandsType.SKIP, None) queue = processInfo.getQueue() queue.put(command) - return HandlerResponse(self.ctx) + + return HandlerResponse(self.ctx) + else: + embed = self.embeds.NOT_PLAYING() + return HandlerResponse(self.ctx, embed) diff --git a/Handlers/StopHandler.py b/Handlers/StopHandler.py index 434d842..669a953 100644 --- a/Handlers/StopHandler.py +++ b/Handlers/StopHandler.py @@ -20,3 +20,6 @@ async def run(self) -> HandlerResponse: queue.put(command) return HandlerResponse(self.ctx) + else: + embed = self.embeds.NOT_PLAYING() + return HandlerResponse(self.ctx, embed) diff --git a/Music/Downloader.py b/Music/Downloader.py index ad8f417..3b97c8d 100644 --- a/Music/Downloader.py +++ b/Music/Downloader.py @@ -56,10 +56,6 @@ def finish_one_song(self, song: Song) -> Song: except DownloadError: raise DownloadingError() - async def preload(self, songs: List[Song]) -> None: - for song in songs: - asyncio.ensure_future(self.download_song(song)) - @run_async def extract_info(self, url: str) -> List[dict]: if url == '': diff --git a/Parallelism/PlayerProcess.py b/Parallelism/PlayerProcess.py index 5205a1f..3fc49ee 100644 --- a/Parallelism/PlayerProcess.py +++ b/Parallelism/PlayerProcess.py @@ -254,7 +254,7 @@ def __skip(self) -> None: # Lock to work with Player with self.__playerLock: if self.__guild.voice_client is not None and self.__playing: - self.__playing = None + self.__playing = False self.__guild.voice_client.stop() async def __forceStop(self) -> None: diff --git a/Views/Embeds.py b/Views/Embeds.py index e9c9329..ef60595 100644 --- a/Views/Embeds.py +++ b/Views/Embeds.py @@ -164,7 +164,7 @@ def COMMAND_ERROR(self): def COMMAND_NOT_FOUND(self) -> Embed: embed = Embed( - title=self.__messages.ERROR_TITLE, + title=self.__messages.COMMAND_NOT_FOUND_TITLE, description=self.__messages.COMMAND_NOT_FOUND, colour=self.__colors.BLACK )