From ca754c6f62dcff88c2fde4bb614b22ced29cb0ba Mon Sep 17 00:00:00 2001 From: Rafael Vargas Date: Wed, 27 Jul 2022 17:20:57 -0300 Subject: [PATCH] Subclassing Button class for each button, changing context interface for handlers --- DiscordCogs/MusicCog.py | 8 ++-- Handlers/AbstractHandler.py | 16 +++++-- Handlers/ClearHandler.py | 4 +- Handlers/HandlerResponse.py | 6 +-- Handlers/HistoryHandler.py | 4 +- Handlers/LoopHandler.py | 4 +- Handlers/MoveHandler.py | 4 +- Handlers/NowPlayingHandler.py | 4 +- Handlers/PauseHandler.py | 4 +- Handlers/PlayHandler.py | 4 +- Handlers/PrevHandler.py | 8 ++-- Handlers/QueueHandler.py | 4 +- Handlers/RemoveHandler.py | 4 +- Handlers/ResetHandler.py | 4 +- Handlers/ResumeHandler.py | 4 +- Handlers/ShuffleHandler.py | 4 +- Handlers/SkipHandler.py | 4 +- Handlers/StopHandler.py | 4 +- Music/Playlist.py | 1 - Music/VulkanInitializer.py | 4 +- Parallelism/PlayerProcess.py | 1 + Parallelism/ProcessManager.py | 19 +++++--- UI/Buttons/BackButton.py | 24 ++++++++++ UI/Buttons/LoopAllButton.py | 11 +++++ UI/Buttons/LoopOffButton.py | 11 +++++ UI/Buttons/LoopOneButton.py | 11 +++++ UI/Buttons/PauseButton.py | 11 +++++ UI/Buttons/PlayButton.py | 11 +++++ UI/Buttons/SkipButton.py | 11 +++++ UI/Buttons/SongsButton.py | 11 +++++ UI/Buttons/StopButton.py | 11 +++++ .../Responses}/AbstractCogResponse.py | 0 {Views => UI/Responses}/EmbedCogResponse.py | 2 +- {Views => UI/Responses}/EmoteCogResponse.py | 2 +- UI/Views/PlayerView.py | 30 ++++++++++++ Views/PlayerView.py | 47 ------------------- 36 files changed, 227 insertions(+), 85 deletions(-) create mode 100644 UI/Buttons/BackButton.py create mode 100644 UI/Buttons/LoopAllButton.py create mode 100644 UI/Buttons/LoopOffButton.py create mode 100644 UI/Buttons/LoopOneButton.py create mode 100644 UI/Buttons/PauseButton.py create mode 100644 UI/Buttons/PlayButton.py create mode 100644 UI/Buttons/SkipButton.py create mode 100644 UI/Buttons/SongsButton.py create mode 100644 UI/Buttons/StopButton.py rename {Views => UI/Responses}/AbstractCogResponse.py (100%) rename {Views => UI/Responses}/EmbedCogResponse.py (82%) rename {Views => UI/Responses}/EmoteCogResponse.py (87%) create mode 100644 UI/Views/PlayerView.py delete mode 100644 Views/PlayerView.py diff --git a/DiscordCogs/MusicCog.py b/DiscordCogs/MusicCog.py index d97e71f..4cb361b 100644 --- a/DiscordCogs/MusicCog.py +++ b/DiscordCogs/MusicCog.py @@ -15,9 +15,9 @@ from Handlers.ResumeHandler import ResumeHandler from Handlers.HistoryHandler import HistoryHandler from Handlers.QueueHandler import QueueHandler from Handlers.LoopHandler import LoopHandler -from Views.EmoteCogResponse import EmoteCommandResponse -from Views.EmbedCogResponse import EmbedCommandResponse -from Views.PlayerView import PlayerView +from UI.Responses.EmoteCogResponse import EmoteCommandResponse +from UI.Responses.EmbedCogResponse import EmbedCommandResponse +from UI.Views.PlayerView import PlayerView from Music.VulkanBot import VulkanBot helper = Helper() @@ -232,7 +232,7 @@ class MusicCog(Cog): @command(name='rafael') async def rafael(self, ctx: Context) -> None: - view = PlayerView() + view = PlayerView(self.__bot) await ctx.send(view=view) diff --git a/Handlers/AbstractHandler.py b/Handlers/AbstractHandler.py index a1f188d..db6729e 100644 --- a/Handlers/AbstractHandler.py +++ b/Handlers/AbstractHandler.py @@ -1,7 +1,7 @@ from abc import ABC, abstractmethod -from typing import List +from typing import List, Union from discord.ext.commands import Context -from discord import Client, Guild, ClientUser, Member +from discord import Client, Guild, ClientUser, Interaction, Member, User from Config.Messages import Messages from Music.VulkanBot import VulkanBot from Handlers.HandlerResponse import HandlerResponse @@ -11,7 +11,7 @@ from Config.Embeds import VEmbeds class AbstractHandler(ABC): - def __init__(self, ctx: Context, bot: VulkanBot) -> None: + def __init__(self, ctx: Union[Context, Interaction], bot: VulkanBot) -> None: self.__bot: VulkanBot = bot self.__guild: Guild = ctx.guild self.__ctx: Context = ctx @@ -22,6 +22,10 @@ class AbstractHandler(ABC): self.__helper = Helper() self.__embeds = VEmbeds() self.__bot_member: Member = self.__get_member() + if isinstance(ctx, Context): + self.__author = ctx.author + else: + self.__author = ctx.user @abstractmethod async def run(self) -> HandlerResponse: @@ -39,6 +43,10 @@ class AbstractHandler(ABC): def bot_user(self) -> ClientUser: return self.__bot_user + @property + def author(self) -> User: + return self.__author + @property def guild(self) -> Guild: return self.__guild @@ -60,7 +68,7 @@ class AbstractHandler(ABC): return self.__helper @property - def ctx(self) -> Context: + def ctx(self) -> Union[Context, Interaction]: return self.__ctx @property diff --git a/Handlers/ClearHandler.py b/Handlers/ClearHandler.py index 85dd75b..a7735ef 100644 --- a/Handlers/ClearHandler.py +++ b/Handlers/ClearHandler.py @@ -1,3 +1,5 @@ +from typing import Union +from discord import Interaction from discord.ext.commands import Context from Music.VulkanBot import VulkanBot from Handlers.AbstractHandler import AbstractHandler @@ -6,7 +8,7 @@ from Parallelism.ProcessManager import ProcessManager class ClearHandler(AbstractHandler): - def __init__(self, ctx: Context, bot: VulkanBot) -> None: + def __init__(self, ctx: Union[Context, Interaction], bot: VulkanBot) -> None: super().__init__(ctx, bot) async def run(self) -> HandlerResponse: diff --git a/Handlers/HandlerResponse.py b/Handlers/HandlerResponse.py index 42c5fdf..6840762 100644 --- a/Handlers/HandlerResponse.py +++ b/Handlers/HandlerResponse.py @@ -1,18 +1,18 @@ from typing import Union from discord.ext.commands import Context from Config.Exceptions import VulkanError -from discord import Embed +from discord import Embed, Interaction class HandlerResponse: - def __init__(self, ctx: Context, embed: Embed = None, error: VulkanError = None) -> None: + def __init__(self, ctx: Union[Context, Interaction], embed: Embed = None, error: VulkanError = None) -> None: self.__ctx: Context = ctx self.__error: VulkanError = error self.__embed: Embed = embed self.__success = False if error else True @property - def ctx(self) -> Context: + def ctx(self) -> Union[Context, Interaction]: return self.__ctx @property diff --git a/Handlers/HistoryHandler.py b/Handlers/HistoryHandler.py index e4d0d07..c041335 100644 --- a/Handlers/HistoryHandler.py +++ b/Handlers/HistoryHandler.py @@ -3,11 +3,13 @@ from Music.VulkanBot import VulkanBot from Handlers.AbstractHandler import AbstractHandler from Handlers.HandlerResponse import HandlerResponse from Utils.Utils import Utils +from typing import Union from Parallelism.ProcessManager import ProcessManager +from discord import Interaction class HistoryHandler(AbstractHandler): - def __init__(self, ctx: Context, bot: VulkanBot) -> None: + def __init__(self, ctx: Union[Context, Interaction], bot: VulkanBot) -> None: super().__init__(ctx, bot) async def run(self) -> HandlerResponse: diff --git a/Handlers/LoopHandler.py b/Handlers/LoopHandler.py index a62e5cb..929333e 100644 --- a/Handlers/LoopHandler.py +++ b/Handlers/LoopHandler.py @@ -4,10 +4,12 @@ from Handlers.AbstractHandler import AbstractHandler from Handlers.HandlerResponse import HandlerResponse from Config.Exceptions import BadCommandUsage from Parallelism.ProcessManager import ProcessManager +from typing import Union +from discord import Interaction class LoopHandler(AbstractHandler): - def __init__(self, ctx: Context, bot: VulkanBot) -> None: + def __init__(self, ctx: Union[Context, Interaction], bot: VulkanBot) -> None: super().__init__(ctx, bot) async def run(self, args: str) -> HandlerResponse: diff --git a/Handlers/MoveHandler.py b/Handlers/MoveHandler.py index 8088f66..ca9e9f8 100644 --- a/Handlers/MoveHandler.py +++ b/Handlers/MoveHandler.py @@ -6,10 +6,12 @@ from Handlers.HandlerResponse import HandlerResponse from Config.Exceptions import BadCommandUsage, VulkanError, InvalidInput, NumberRequired, UnknownError from Music.Playlist import Playlist from Parallelism.ProcessManager import ProcessManager +from typing import Union +from discord import Interaction class MoveHandler(AbstractHandler): - def __init__(self, ctx: Context, bot: VulkanBot) -> None: + def __init__(self, ctx: Union[Context, Interaction], bot: VulkanBot) -> None: super().__init__(ctx, bot) async def run(self, pos1: str, pos2: str) -> HandlerResponse: diff --git a/Handlers/NowPlayingHandler.py b/Handlers/NowPlayingHandler.py index cbaf2ad..727c022 100644 --- a/Handlers/NowPlayingHandler.py +++ b/Handlers/NowPlayingHandler.py @@ -4,10 +4,12 @@ from Handlers.HandlerResponse import HandlerResponse from Music.VulkanBot import VulkanBot from Utils.Cleaner import Cleaner from Parallelism.ProcessManager import ProcessManager +from typing import Union +from discord import Interaction class NowPlayingHandler(AbstractHandler): - def __init__(self, ctx: Context, bot: VulkanBot) -> None: + def __init__(self, ctx: Union[Context, Interaction], bot: VulkanBot) -> None: super().__init__(ctx, bot) self.__cleaner = Cleaner() diff --git a/Handlers/PauseHandler.py b/Handlers/PauseHandler.py index 95d698c..cbe41b9 100644 --- a/Handlers/PauseHandler.py +++ b/Handlers/PauseHandler.py @@ -4,10 +4,12 @@ from Handlers.HandlerResponse import HandlerResponse from Parallelism.ProcessManager import ProcessManager from Parallelism.Commands import VCommands, VCommandsType from Music.VulkanBot import VulkanBot +from typing import Union +from discord import Interaction class PauseHandler(AbstractHandler): - def __init__(self, ctx: Context, bot: VulkanBot) -> None: + def __init__(self, ctx: Union[Context, Interaction], bot: VulkanBot) -> None: super().__init__(ctx, bot) async def run(self) -> HandlerResponse: diff --git a/Handlers/PlayHandler.py b/Handlers/PlayHandler.py index 4065635..fbcd085 100644 --- a/Handlers/PlayHandler.py +++ b/Handlers/PlayHandler.py @@ -12,10 +12,12 @@ from Parallelism.ProcessManager import ProcessManager from Parallelism.ProcessInfo import ProcessInfo from Parallelism.Commands import VCommands, VCommandsType from Music.VulkanBot import VulkanBot +from typing import Union +from discord import Interaction class PlayHandler(AbstractHandler): - def __init__(self, ctx: Context, bot: VulkanBot) -> None: + def __init__(self, ctx: Union[Context, Interaction], bot: VulkanBot) -> None: super().__init__(ctx, bot) self.__searcher = Searcher() self.__down = Downloader() diff --git a/Handlers/PrevHandler.py b/Handlers/PrevHandler.py index 60dbf24..0fb3996 100644 --- a/Handlers/PrevHandler.py +++ b/Handlers/PrevHandler.py @@ -5,10 +5,12 @@ from Handlers.HandlerResponse import HandlerResponse from Parallelism.ProcessManager import ProcessManager from Parallelism.Commands import VCommands, VCommandsType from Music.VulkanBot import VulkanBot +from typing import Union +from discord import Interaction class PrevHandler(AbstractHandler): - def __init__(self, ctx: Context, bot: VulkanBot) -> None: + def __init__(self, ctx: Union[Context, Interaction], bot: VulkanBot) -> None: super().__init__(ctx, bot) async def run(self) -> HandlerResponse: @@ -41,13 +43,13 @@ class PrevHandler(AbstractHandler): process.start() # Send a prev command, together with the user voice channel - prevCommand = VCommands(VCommandsType.PREV, self.ctx.author.voice.channel.id) + prevCommand = VCommands(VCommandsType.PREV, self.author.voice.channel.id) queue = processInfo.getQueue() queue.put(prevCommand) return HandlerResponse(self.ctx) def __user_connected(self) -> bool: - if self.ctx.author.voice: + if self.author.voice: return True else: return False diff --git a/Handlers/QueueHandler.py b/Handlers/QueueHandler.py index 79cab2a..e1c0736 100644 --- a/Handlers/QueueHandler.py +++ b/Handlers/QueueHandler.py @@ -5,10 +5,12 @@ from Music.Downloader import Downloader from Utils.Utils import Utils from Parallelism.ProcessManager import ProcessManager from Music.VulkanBot import VulkanBot +from typing import Union +from discord import Interaction class QueueHandler(AbstractHandler): - def __init__(self, ctx: Context, bot: VulkanBot) -> None: + def __init__(self, ctx: Union[Context, Interaction], bot: VulkanBot) -> None: super().__init__(ctx, bot) self.__down = Downloader() diff --git a/Handlers/RemoveHandler.py b/Handlers/RemoveHandler.py index 86d094e..d0a6e23 100644 --- a/Handlers/RemoveHandler.py +++ b/Handlers/RemoveHandler.py @@ -6,10 +6,12 @@ from Config.Exceptions import BadCommandUsage, VulkanError, ErrorRemoving, Inval from Music.Playlist import Playlist from Parallelism.ProcessManager import ProcessManager from Music.VulkanBot import VulkanBot +from typing import Union +from discord import Interaction class RemoveHandler(AbstractHandler): - def __init__(self, ctx: Context, bot: VulkanBot) -> None: + def __init__(self, ctx: Union[Context, Interaction], bot: VulkanBot) -> None: super().__init__(ctx, bot) async def run(self, position: str) -> HandlerResponse: diff --git a/Handlers/ResetHandler.py b/Handlers/ResetHandler.py index f04d88e..de800f7 100644 --- a/Handlers/ResetHandler.py +++ b/Handlers/ResetHandler.py @@ -4,10 +4,12 @@ from Handlers.HandlerResponse import HandlerResponse from Parallelism.ProcessManager import ProcessManager from Parallelism.Commands import VCommands, VCommandsType from Music.VulkanBot import VulkanBot +from typing import Union +from discord import Interaction class ResetHandler(AbstractHandler): - def __init__(self, ctx: Context, bot: VulkanBot) -> None: + def __init__(self, ctx: Union[Context, Interaction], bot: VulkanBot) -> None: super().__init__(ctx, bot) async def run(self) -> HandlerResponse: diff --git a/Handlers/ResumeHandler.py b/Handlers/ResumeHandler.py index e957be5..924a3b8 100644 --- a/Handlers/ResumeHandler.py +++ b/Handlers/ResumeHandler.py @@ -4,10 +4,12 @@ from Handlers.HandlerResponse import HandlerResponse from Parallelism.ProcessManager import ProcessManager from Parallelism.Commands import VCommands, VCommandsType from Music.VulkanBot import VulkanBot +from typing import Union +from discord import Interaction class ResumeHandler(AbstractHandler): - def __init__(self, ctx: Context, bot: VulkanBot) -> None: + def __init__(self, ctx: Union[Context, Interaction], bot: VulkanBot) -> None: super().__init__(ctx, bot) async def run(self) -> HandlerResponse: diff --git a/Handlers/ShuffleHandler.py b/Handlers/ShuffleHandler.py index 053873a..dda23e2 100644 --- a/Handlers/ShuffleHandler.py +++ b/Handlers/ShuffleHandler.py @@ -4,10 +4,12 @@ from Handlers.HandlerResponse import HandlerResponse from Config.Exceptions import UnknownError from Parallelism.ProcessManager import ProcessManager from Music.VulkanBot import VulkanBot +from typing import Union +from discord import Interaction class ShuffleHandler(AbstractHandler): - def __init__(self, ctx: Context, bot: VulkanBot) -> None: + def __init__(self, ctx: Union[Context, Interaction], bot: VulkanBot) -> None: super().__init__(ctx, bot) async def run(self) -> HandlerResponse: diff --git a/Handlers/SkipHandler.py b/Handlers/SkipHandler.py index 89e2ee9..42b0143 100644 --- a/Handlers/SkipHandler.py +++ b/Handlers/SkipHandler.py @@ -5,10 +5,12 @@ from Handlers.HandlerResponse import HandlerResponse from Music.VulkanBot import VulkanBot from Parallelism.ProcessManager import ProcessManager from Parallelism.Commands import VCommands, VCommandsType +from typing import Union +from discord import Interaction class SkipHandler(AbstractHandler): - def __init__(self, ctx: Context, bot: VulkanBot) -> None: + def __init__(self, ctx: Union[Context, Interaction], bot: VulkanBot) -> None: super().__init__(ctx, bot) async def run(self) -> HandlerResponse: diff --git a/Handlers/StopHandler.py b/Handlers/StopHandler.py index 3c3908d..68ae620 100644 --- a/Handlers/StopHandler.py +++ b/Handlers/StopHandler.py @@ -4,10 +4,12 @@ from Handlers.HandlerResponse import HandlerResponse from Music.VulkanBot import VulkanBot from Parallelism.ProcessManager import ProcessManager from Parallelism.Commands import VCommands, VCommandsType +from typing import Union +from discord import Interaction class StopHandler(AbstractHandler): - def __init__(self, ctx: Context, bot: VulkanBot) -> None: + def __init__(self, ctx: Union[Context, Interaction], bot: VulkanBot) -> None: super().__init__(ctx, bot) async def run(self) -> HandlerResponse: diff --git a/Music/Playlist.py b/Music/Playlist.py index 82be37f..c86b3cd 100644 --- a/Music/Playlist.py +++ b/Music/Playlist.py @@ -90,7 +90,6 @@ class Playlist: self.__queue.appendleft(self.__current) last_song = self.__songs_history.popleft() # Get the last song - print(f'Setando como {last_song} 2') self.__current = last_song return self.__current # return the song diff --git a/Music/VulkanInitializer.py b/Music/VulkanInitializer.py index b366257..9f847cc 100644 --- a/Music/VulkanInitializer.py +++ b/Music/VulkanInitializer.py @@ -34,12 +34,14 @@ class VulkanInitializer: def __add_cogs(self, bot: Bot) -> None: try: + cogsStatus = [] for filename in listdir(f'./{self.__config.COMMANDS_PATH}'): if filename.endswith('.py'): cogPath = f'{self.__config.COMMANDS_PATH}.{filename[:-3]}' - bot.load_extension(cogPath, store=True) + cogsStatus.append(bot.load_extension(cogPath, store=True)) if len(bot.cogs.keys()) != self.__getTotalCogs(): + print(cogsStatus) raise VulkanError(message='Failed to load some Cog') except VulkanError as e: diff --git a/Parallelism/PlayerProcess.py b/Parallelism/PlayerProcess.py index b3caec7..4dcbd90 100644 --- a/Parallelism/PlayerProcess.py +++ b/Parallelism/PlayerProcess.py @@ -195,6 +195,7 @@ class PlayerProcess(Process): command: VCommands = self.__queue.get() type = command.getType() args = command.getArgs() + print(f'{self.name} received command {type}') try: self.__playerLock.acquire() diff --git a/Parallelism/ProcessManager.py b/Parallelism/ProcessManager.py index 6df1b73..a0e1e4b 100644 --- a/Parallelism/ProcessManager.py +++ b/Parallelism/ProcessManager.py @@ -1,8 +1,8 @@ from multiprocessing import Queue, Lock from multiprocessing.managers import BaseManager, NamespaceProxy -from typing import Dict +from typing import Dict, Union from Config.Singleton import Singleton -from discord import Guild +from discord import Guild, Interaction from discord.ext.commands import Context from Parallelism.PlayerProcess import PlayerProcess from Music.Playlist import Playlist @@ -23,12 +23,19 @@ class ProcessManager(Singleton): self.__manager.start() self.__playersProcess: Dict[Guild, ProcessInfo] = {} - def setPlayerContext(self, guild: Guild, context: ProcessInfo): - self.__playersProcess[guild.id] = context + def setPlayerInfo(self, guild: Guild, info: ProcessInfo): + self.__playersProcess[guild.id] = info - def getPlayerInfo(self, guild: Guild, context: Context) -> ProcessInfo: - """Return the process info for the guild, if not, create one""" + def getPlayerInfo(self, guild: Guild, context: Union[Context, Interaction]) -> ProcessInfo: + """Return the process info for the guild, if not and context is a instance + of discord.Context then create one, else return None""" try: + if isinstance(context, Interaction): + if guild.id not in self.__playersProcess.keys(): + return None + else: + return self.__playersProcess[guild.id] + if guild.id not in self.__playersProcess.keys(): self.__playersProcess[guild.id] = self.__createProcessInfo(context) else: diff --git a/UI/Buttons/BackButton.py b/UI/Buttons/BackButton.py new file mode 100644 index 0000000..95fcd95 --- /dev/null +++ b/UI/Buttons/BackButton.py @@ -0,0 +1,24 @@ +from discord import ButtonStyle, Interaction +from discord.ui import Button +from Config.Emojis import VEmojis +from Handlers.PrevHandler import PrevHandler +from Music.VulkanBot import VulkanBot + + +class BackButton(Button): + def __init__(self, bot: VulkanBot): + super().__init__(label="Back", style=ButtonStyle.secondary, emoji=VEmojis().BACK) + self.__bot = bot + + async def callback(self, interaction: Interaction) -> None: + await interaction.response.defer() + + handler = PrevHandler(interaction, self.__bot) + response = await handler.run() + print(response) + print(response.success) + print(response.error) + print(response.error) + print(response.embed) + if response.embed: + await interaction.followup.send(embed=response.embed) diff --git a/UI/Buttons/LoopAllButton.py b/UI/Buttons/LoopAllButton.py new file mode 100644 index 0000000..aa37e0a --- /dev/null +++ b/UI/Buttons/LoopAllButton.py @@ -0,0 +1,11 @@ +from discord import ButtonStyle, Interaction +from discord.ui import Button +from Config.Emojis import VEmojis + + +class LoopAllButton(Button): + def __init__(self): + super().__init__(label="Loop All", style=ButtonStyle.secondary, emoji=VEmojis().LOOP_ALL) + + async def callback(self, interaction: Interaction) -> None: + pass diff --git a/UI/Buttons/LoopOffButton.py b/UI/Buttons/LoopOffButton.py new file mode 100644 index 0000000..e3e2b64 --- /dev/null +++ b/UI/Buttons/LoopOffButton.py @@ -0,0 +1,11 @@ +from discord import ButtonStyle, Interaction +from discord.ui import Button +from Config.Emojis import VEmojis + + +class LoopOffButton(Button): + def __init__(self): + super().__init__(label="Loop Off", style=ButtonStyle.secondary, emoji=VEmojis().LOOP_OFF) + + async def callback(self, interaction: Interaction) -> None: + pass diff --git a/UI/Buttons/LoopOneButton.py b/UI/Buttons/LoopOneButton.py new file mode 100644 index 0000000..c96029f --- /dev/null +++ b/UI/Buttons/LoopOneButton.py @@ -0,0 +1,11 @@ +from discord import ButtonStyle, Interaction +from discord.ui import Button +from Config.Emojis import VEmojis + + +class LoopOneButton(Button): + def __init__(self): + super().__init__(label="Loop One", style=ButtonStyle.secondary, emoji=VEmojis().LOOP_ONE) + + async def callback(self, interaction: Interaction) -> None: + pass diff --git a/UI/Buttons/PauseButton.py b/UI/Buttons/PauseButton.py new file mode 100644 index 0000000..2ca454f --- /dev/null +++ b/UI/Buttons/PauseButton.py @@ -0,0 +1,11 @@ +from discord import ButtonStyle, Interaction +from discord.ui import Button +from Config.Emojis import VEmojis + + +class PauseButton(Button): + def __init__(self): + super().__init__(label="Pause", style=ButtonStyle.secondary, emoji=VEmojis().PAUSE) + + async def callback(self, interaction: Interaction) -> None: + pass diff --git a/UI/Buttons/PlayButton.py b/UI/Buttons/PlayButton.py new file mode 100644 index 0000000..93d23f2 --- /dev/null +++ b/UI/Buttons/PlayButton.py @@ -0,0 +1,11 @@ +from discord import ButtonStyle, Interaction +from discord.ui import Button +from Config.Emojis import VEmojis + + +class PlayButton(Button): + def __init__(self): + super().__init__(label="Play", style=ButtonStyle.secondary, emoji=VEmojis().PLAY) + + async def callback(self, interaction: Interaction) -> None: + pass diff --git a/UI/Buttons/SkipButton.py b/UI/Buttons/SkipButton.py new file mode 100644 index 0000000..5aba74f --- /dev/null +++ b/UI/Buttons/SkipButton.py @@ -0,0 +1,11 @@ +from discord import ButtonStyle, Interaction +from discord.ui import Button +from Config.Emojis import VEmojis + + +class SkipButton(Button): + def __init__(self): + super().__init__(label="Skip", style=ButtonStyle.secondary, emoji=VEmojis().SKIP) + + async def callback(self, interaction: Interaction) -> None: + pass diff --git a/UI/Buttons/SongsButton.py b/UI/Buttons/SongsButton.py new file mode 100644 index 0000000..7d9c11d --- /dev/null +++ b/UI/Buttons/SongsButton.py @@ -0,0 +1,11 @@ +from discord import ButtonStyle, Interaction +from discord.ui import Button +from Config.Emojis import VEmojis + + +class SongsButton(Button): + def __init__(self): + super().__init__(label="Songs", style=ButtonStyle.secondary, emoji=VEmojis().QUEUE) + + async def callback(self, interaction: Interaction) -> None: + pass diff --git a/UI/Buttons/StopButton.py b/UI/Buttons/StopButton.py new file mode 100644 index 0000000..0cdeda8 --- /dev/null +++ b/UI/Buttons/StopButton.py @@ -0,0 +1,11 @@ +from discord import ButtonStyle, Interaction +from discord.ui import Button +from Config.Emojis import VEmojis + + +class StopButton(Button): + def __init__(self): + super().__init__(label="Stop", style=ButtonStyle.secondary, emoji=VEmojis().STOP) + + async def callback(self, interaction: Interaction) -> None: + pass diff --git a/Views/AbstractCogResponse.py b/UI/Responses/AbstractCogResponse.py similarity index 100% rename from Views/AbstractCogResponse.py rename to UI/Responses/AbstractCogResponse.py diff --git a/Views/EmbedCogResponse.py b/UI/Responses/EmbedCogResponse.py similarity index 82% rename from Views/EmbedCogResponse.py rename to UI/Responses/EmbedCogResponse.py index dba8053..9dac78c 100644 --- a/Views/EmbedCogResponse.py +++ b/UI/Responses/EmbedCogResponse.py @@ -1,4 +1,4 @@ -from Views.AbstractCogResponse import AbstractCommandResponse +from UI.Responses.AbstractCogResponse import AbstractCommandResponse from Handlers.HandlerResponse import HandlerResponse diff --git a/Views/EmoteCogResponse.py b/UI/Responses/EmoteCogResponse.py similarity index 87% rename from Views/EmoteCogResponse.py rename to UI/Responses/EmoteCogResponse.py index 79b4a3e..09294cf 100644 --- a/Views/EmoteCogResponse.py +++ b/UI/Responses/EmoteCogResponse.py @@ -1,5 +1,5 @@ from Config.Emojis import VEmojis -from Views.AbstractCogResponse import AbstractCommandResponse +from UI.Responses.AbstractCogResponse import AbstractCommandResponse from Handlers.HandlerResponse import HandlerResponse diff --git a/UI/Views/PlayerView.py b/UI/Views/PlayerView.py new file mode 100644 index 0000000..d37aba1 --- /dev/null +++ b/UI/Views/PlayerView.py @@ -0,0 +1,30 @@ +from typing import Optional +from discord.ui import View +from Config.Emojis import VEmojis +from UI.Buttons.PauseButton import PauseButton +from UI.Buttons.BackButton import BackButton +from UI.Buttons.SkipButton import SkipButton +from UI.Buttons.StopButton import StopButton +from UI.Buttons.SongsButton import SongsButton +from UI.Buttons.PlayButton import PlayButton +from UI.Buttons.LoopAllButton import LoopAllButton +from UI.Buttons.LoopOneButton import LoopOneButton +from UI.Buttons.LoopOffButton import LoopOffButton +from Music.VulkanBot import VulkanBot + +emojis = VEmojis() + + +class PlayerView(View): + def __init__(self, bot: VulkanBot, timeout: float = 180): + super().__init__(timeout=timeout) + self.__bot = bot + self.add_item(BackButton(self.__bot)) + self.add_item(PauseButton()) + self.add_item(PlayButton()) + self.add_item(StopButton()) + self.add_item(SkipButton()) + self.add_item(SongsButton()) + self.add_item(LoopOneButton()) + self.add_item(LoopOffButton()) + self.add_item(LoopAllButton()) diff --git a/Views/PlayerView.py b/Views/PlayerView.py deleted file mode 100644 index 79e6a5c..0000000 --- a/Views/PlayerView.py +++ /dev/null @@ -1,47 +0,0 @@ -from typing import Optional -from discord.ui import View, Button, button -from Config.Emojis import VEmojis -from discord import Interaction, ButtonStyle - -emojis = VEmojis() - - -class PlayerView(View): - def __init__(self, timeout: Optional[float] = 180): - super().__init__(timeout=timeout) - - @button(label="Back", style=ButtonStyle.secondary, emoji=emojis.BACK) - async def prevCallback(self, button: Button, interaction: Interaction) -> None: - await interaction.response.send_message("Hello") - - @button(label="Pause", style=ButtonStyle.secondary, emoji=emojis.PAUSE) - async def pauseCallback(self, button: Button, interaction: Interaction) -> None: - await interaction.response.send_message("Hello") - - @button(label="Play", style=ButtonStyle.secondary, emoji=emojis.PLAY) - async def playCallback(self, button: Button, interaction: Interaction) -> None: - await interaction.response.send_message("Hello") - - @button(label="Stop", style=ButtonStyle.secondary, emoji=emojis.STOP) - async def stopCallback(self, button: Button, interaction: Interaction) -> None: - await interaction.response.send_message("Hello") - - @button(label="Skip", style=ButtonStyle.secondary, emoji=emojis.SKIP) - async def skipCallback(self, button: Button, interaction: Interaction) -> None: - await interaction.response.send_message("Hello") - - @button(label="Songs", style=ButtonStyle.secondary, emoji=emojis.QUEUE) - async def songsCallback(self, button: Button, interaction: Interaction) -> None: - await interaction.response.send_message("Hello") - - @button(label="Loop Off", style=ButtonStyle.grey, emoji=emojis.LOOP_OFF) - async def loopOffCallback(self, button: Button, interaction: Interaction) -> None: - await interaction.response.send_message("Hello") - - @button(label="Loop All", style=ButtonStyle.secondary, emoji=emojis.LOOP_ALL) - async def loopAllCallback(self, button: Button, interaction: Interaction) -> None: - await interaction.response.send_message("Hello") - - @button(label="Loop One", style=ButtonStyle.secondary, emoji=emojis.LOOP_ONE) - async def loopOneCallback(self, button: Button, interaction: Interaction) -> None: - await interaction.response.send_message("Hello")