Upgrading views manager in messages timeout

This commit is contained in:
Rafael Vargas
2022-08-16 18:19:17 -04:00
parent 2d27a2f080
commit 2794f1a6d0
9 changed files with 48 additions and 14 deletions

View File

@@ -39,7 +39,7 @@ class CallbackButton(Button):
# Clear the last sended message in this category and add the new one
if message:
await self.__messagesManager.addMessageAndClearPrevious(self.__guildID, self.__category, message)
await self.__messagesManager.addMessageAndClearPrevious(self.__guildID, self.__category, message, response.view)
def set_view(self, view: View):
self.__view = view

View File

@@ -41,7 +41,7 @@ class HandlerButton(Button):
# Clear the last category sended message and add the new one
if message:
await self.__messagesManager.addMessageAndClearPrevious(self.__guildID, self.__category, message)
await self.__messagesManager.addMessageAndClearPrevious(self.__guildID, self.__category, message, response.view)
def set_view(self, view: View):
self.__view = view

View File

@@ -19,15 +19,17 @@ class PlaylistDropdown(Select, AbstractItem):
songs = list(playlist.getSongs())
values = [str(x) for x in range(1, len(songs) + 1)]
# Get the title of each of the 20 first songs, library doesn't accept more
songsNames = [song.title[:80] for song in songs[:20]]
# Get the title of each of the 20 first songs, the pycord library doesn't accept more
songsNames: List[str] = []
for x in range(20):
songsNames.append(f'{x + 1} - {songs[x].title[:80]}')
selectOptions: List[SelectOption] = []
for x in range(len(songsNames)):
selectOptions.append(SelectOption(label=songsNames[x], value=values[x]))
super().__init__(placeholder="Select one music to play now, may be overdue",
super().__init__(placeholder="Select one music to play now, may be outdated",
min_values=1, max_values=1, options=selectOptions)
self.__playlist = playlist
@@ -55,7 +57,7 @@ class PlaylistDropdown(Select, AbstractItem):
# Clear the last sended message in this category and add the new one
if message:
await self.__messagesManager.addMessageAndClearPrevious(self.__guildID, self.__category, message)
await self.__messagesManager.addMessageAndClearPrevious(self.__guildID, self.__category, message, response.view)
# Extreme ugly way to wait for the player process to actually retrieve the next song
await asyncio.sleep(2)

View File

@@ -8,3 +8,7 @@ class AbstractView(ABC):
def set_message(self, message) -> None:
pass
@abstractmethod
def stopView(self) -> None:
pass

View File

@@ -16,18 +16,25 @@ class BasicView(View, AbstractView):
super().__init__(timeout=timeout)
self.__bot = bot
self.__message: Message = None
self.__working = True
for button in buttons:
# Set the buttons to have a instance of the view that contains them
button.set_view(self)
self.add_item(button)
def stopView(self):
self.__working = False
async def on_timeout(self) -> None:
# Disable all itens and, if has the message, edit it
try:
if not self.__working:
return
self.disable_all_items()
if self.__message is not None and isinstance(self.__message, Message):
await self.__message.edit(view=self)
await self.__message.edit(f"{emojis.MUSIC} - The buttons in this message have been disabled due timeout", view=self)
except Exception as e:
print(f'[ERROR EDITING MESSAGE] -> {e}')
@@ -35,5 +42,11 @@ class BasicView(View, AbstractView):
self.__message = message
async def update(self):
if self.__message is not None:
await self.__message.edit(view=self)
try:
if not self.__working:
return
if self.__message is not None:
await self.__message.edit(view=self)
except Exception as e:
print(f'[ERROR UPDATING MESSAGE] -> {e}')