mirror of
https://github.com/RafaelSolVargas/Vulkan.git
synced 2025-10-29 16:57:23 +00:00
Upgrading messages sended mananger and refactoring Buttons logic
This commit is contained in:
11
Messages/MessagesCategory.py
Normal file
11
Messages/MessagesCategory.py
Normal file
@@ -0,0 +1,11 @@
|
||||
from enum import Enum
|
||||
|
||||
|
||||
class MessagesCategory(Enum):
|
||||
QUEUE = 1
|
||||
HISTORY = 2
|
||||
LOOP = 3
|
||||
NOW_PLAYING = 4
|
||||
PLAYER = 5
|
||||
MANAGING_QUEUE = 6
|
||||
OTHERS = 7
|
||||
65
Messages/MessagesManager.py
Normal file
65
Messages/MessagesManager.py
Normal file
@@ -0,0 +1,65 @@
|
||||
from typing import Dict, List
|
||||
from discord import Message
|
||||
from Config.Singleton import Singleton
|
||||
from Messages.MessagesCategory import MessagesCategory
|
||||
|
||||
|
||||
class MessagesManager(Singleton):
|
||||
def __init__(self) -> None:
|
||||
if not super().created:
|
||||
# For each guild, and for each category, there will be a list of messages
|
||||
self.__guildsMessages: Dict[int, Dict[MessagesCategory, List[Message]]] = {}
|
||||
|
||||
def addMessage(self, guildID: int, category: MessagesCategory, message: Message) -> None:
|
||||
if message is None:
|
||||
return
|
||||
|
||||
# If guild not exists create Dict
|
||||
if guildID not in self.__guildsMessages.keys():
|
||||
self.__guildsMessages[guildID] = {}
|
||||
# If category not in guild yet, add
|
||||
if category not in self.__guildsMessages[guildID].keys():
|
||||
self.__guildsMessages[guildID][category] = []
|
||||
|
||||
sendedMessages = self.__guildsMessages[guildID][category]
|
||||
sendedMessages.append(message)
|
||||
|
||||
async def addMessageAndClearPrevious(self, guildID: int, category: MessagesCategory, message: Message) -> None:
|
||||
if message is None:
|
||||
return
|
||||
|
||||
# If guild not exists create Dict
|
||||
if guildID not in self.__guildsMessages.keys():
|
||||
self.__guildsMessages[guildID] = {}
|
||||
# If category not in guild yet, add
|
||||
if category not in self.__guildsMessages[guildID].keys():
|
||||
self.__guildsMessages[guildID][category] = []
|
||||
|
||||
sendedMessages = self.__guildsMessages[guildID][category]
|
||||
|
||||
# Delete sended all messages of this category
|
||||
for previousMessage in sendedMessages:
|
||||
await self.__deleteMessage(previousMessage)
|
||||
|
||||
# Create a new list with only the new message
|
||||
self.__guildsMessages[guildID][category] = [message]
|
||||
|
||||
async def clearMessagesOfCategory(self, guildID: int, category: MessagesCategory) -> None:
|
||||
sendedMessages = self.__guildsMessages[guildID][category]
|
||||
|
||||
for message in sendedMessages:
|
||||
self.__deleteMessage(message)
|
||||
|
||||
async def clearMessagesOfGuild(self, guildID: int) -> None:
|
||||
categoriesMessages = self.__guildsMessages[guildID]
|
||||
|
||||
for category in categoriesMessages.keys():
|
||||
for message in categoriesMessages[category]:
|
||||
self.__deleteMessage(message)
|
||||
|
||||
async def __deleteMessage(self, message: Message) -> None:
|
||||
try:
|
||||
await message.delete()
|
||||
except Exception as e:
|
||||
print(f'[ERROR DELETING MESSAGE] -> {e}')
|
||||
pass
|
||||
45
Messages/Responses/AbstractCogResponse.py
Normal file
45
Messages/Responses/AbstractCogResponse.py
Normal file
@@ -0,0 +1,45 @@
|
||||
from abc import ABC, abstractmethod
|
||||
from Handlers.HandlerResponse import HandlerResponse
|
||||
from discord.ext.commands import Context
|
||||
from discord import Message
|
||||
from Messages.MessagesCategory import MessagesCategory
|
||||
from Messages.MessagesManager import MessagesManager
|
||||
from Music.VulkanBot import VulkanBot
|
||||
|
||||
|
||||
class AbstractCommandResponse(ABC):
|
||||
def __init__(self, response: HandlerResponse, category: MessagesCategory) -> None:
|
||||
self.__messagesManager = MessagesManager()
|
||||
self.__response: HandlerResponse = response
|
||||
self.__category: MessagesCategory = category
|
||||
self.__context: Context = response.ctx
|
||||
self.__message: Message = response.ctx.message
|
||||
self.__bot: VulkanBot = response.ctx.bot
|
||||
|
||||
@property
|
||||
def response(self) -> HandlerResponse:
|
||||
return self.__response
|
||||
|
||||
@property
|
||||
def category(self) -> MessagesCategory:
|
||||
return self.__category
|
||||
|
||||
@property
|
||||
def bot(self) -> VulkanBot:
|
||||
return self.__bot
|
||||
|
||||
@property
|
||||
def message(self) -> Message:
|
||||
return self.__message
|
||||
|
||||
@property
|
||||
def context(self) -> Context:
|
||||
return self.__context
|
||||
|
||||
@property
|
||||
def manager(self) -> MessagesManager:
|
||||
return self.__messagesManager
|
||||
|
||||
@abstractmethod
|
||||
async def run(self, deleteLast: bool = True) -> None:
|
||||
pass
|
||||
20
Messages/Responses/EmbedCogResponse.py
Normal file
20
Messages/Responses/EmbedCogResponse.py
Normal file
@@ -0,0 +1,20 @@
|
||||
from Messages.Responses.AbstractCogResponse import AbstractCommandResponse
|
||||
from Handlers.HandlerResponse import HandlerResponse
|
||||
from Messages.MessagesCategory import MessagesCategory
|
||||
|
||||
|
||||
class EmbedCommandResponse(AbstractCommandResponse):
|
||||
def __init__(self, response: HandlerResponse, category: MessagesCategory) -> None:
|
||||
super().__init__(response, category)
|
||||
|
||||
async def run(self, deleteLast: bool = True) -> None:
|
||||
if self.response.embed and self.response.view:
|
||||
message = await self.context.send(embed=self.response.embed, view=self.response.view)
|
||||
elif self.response.embed:
|
||||
message = await self.context.send(embed=self.response.embed)
|
||||
|
||||
# Only delete the previous message if this is not error and not forbidden by method caller
|
||||
if deleteLast and self.response.success:
|
||||
await self.manager.addMessageAndClearPrevious(self.context.guild.id, self.category, message)
|
||||
else:
|
||||
self.manager.addMessage(self.context.guild.id, self.category, message)
|
||||
17
Messages/Responses/EmoteCogResponse.py
Normal file
17
Messages/Responses/EmoteCogResponse.py
Normal file
@@ -0,0 +1,17 @@
|
||||
from Config.Emojis import VEmojis
|
||||
from Messages.Responses.AbstractCogResponse import AbstractCommandResponse
|
||||
from Handlers.HandlerResponse import HandlerResponse
|
||||
from Messages.MessagesCategory import MessagesCategory
|
||||
|
||||
|
||||
class EmoteCommandResponse(AbstractCommandResponse):
|
||||
|
||||
def __init__(self, response: HandlerResponse, category: MessagesCategory) -> None:
|
||||
super().__init__(response, category)
|
||||
self.__emojis = VEmojis()
|
||||
|
||||
async def run(self, deleteLast: bool = True) -> None:
|
||||
if self.response.success:
|
||||
await self.message.add_reaction(self.__emojis.SUCCESS)
|
||||
else:
|
||||
await self.message.add_reaction(self.__emojis.ERROR)
|
||||
Reference in New Issue
Block a user