General clean code
This commit is contained in:
@@ -20,28 +20,30 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
"""
|
||||
from __future__ import annotations
|
||||
|
||||
import discord
|
||||
|
||||
from function import formatTime
|
||||
from typing import TYPE_CHECKING
|
||||
if TYPE_CHECKING:
|
||||
from voicelink import Player
|
||||
|
||||
class Dropdown(discord.ui.Select):
|
||||
def __init__(self, player, chapters):
|
||||
def __init__(self, player: Player, chapters):
|
||||
self.view: ChapterView
|
||||
|
||||
self.player = player
|
||||
self.chapters = chapters
|
||||
self.current = player.current.uri
|
||||
|
||||
options = [
|
||||
discord.SelectOption(label=f"{index}. {title[:30]}",
|
||||
description=time)
|
||||
for index, (time, title) in enumerate(self.chapters, start=1)
|
||||
]
|
||||
self.player: Player = player
|
||||
self.chapters: list[str] = chapters
|
||||
self.current: str = player.current.uri
|
||||
|
||||
super().__init__(
|
||||
placeholder=self.player.get_msg('chaptersDropdown'),
|
||||
min_values=1, max_values=1,
|
||||
options=options[:25],
|
||||
options=[
|
||||
discord.SelectOption(label=f"{index}. {title[:30]}", description=time)
|
||||
for index, (time, title) in enumerate(self.chapters, start=1)
|
||||
][:25]
|
||||
)
|
||||
|
||||
async def callback(self, interaction: discord.Interaction):
|
||||
@@ -55,13 +57,18 @@ class Dropdown(discord.ui.Select):
|
||||
await interaction.response.send_message(self.player.get_msg('seek').format(formatTime(position)))
|
||||
|
||||
class ChapterView(discord.ui.View):
|
||||
def __init__(self, player, chapters, author):
|
||||
def __init__(
|
||||
self,
|
||||
player: Player,
|
||||
chapters: list[str],
|
||||
author: discord.Member
|
||||
) -> None:
|
||||
super().__init__(timeout=180)
|
||||
|
||||
self.player = player
|
||||
self.chapters = chapters
|
||||
self.author = author
|
||||
self.response = None
|
||||
self.player: Player = player
|
||||
self.chapters: list[str] = chapters
|
||||
self.author: discord.Member = author
|
||||
self.response: discord.Message = None
|
||||
self.add_item(Dropdown(player, chapters))
|
||||
|
||||
async def on_error(self, error: Exception, item, interaction) -> None:
|
||||
@@ -78,7 +85,5 @@ class ChapterView(discord.ui.View):
|
||||
async def on_timeout(self) -> None:
|
||||
await self.stop_view()
|
||||
|
||||
async def interaction_check(self, interaction):
|
||||
if interaction.user == self.author:
|
||||
return True
|
||||
return False
|
||||
async def interaction_check(self, interaction: discord.Interaction):
|
||||
return interaction.user == self.author
|
||||
@@ -33,7 +33,7 @@ from discord.ext import commands
|
||||
class ExceuteModal(discord.ui.Modal):
|
||||
def __init__(self, code: str, *args, **kwargs) -> None:
|
||||
super().__init__(*args, **kwargs)
|
||||
self.code = code
|
||||
self.code: str = code
|
||||
|
||||
self.add_item(
|
||||
discord.ui.TextInput(
|
||||
@@ -51,24 +51,23 @@ class ExceuteModal(discord.ui.Modal):
|
||||
|
||||
class CogsDropdown(discord.ui.Select):
|
||||
def __init__(self, bot: commands.Bot):
|
||||
self.bot = bot
|
||||
|
||||
options = [discord.SelectOption(label="All", description="All the cogs")]
|
||||
|
||||
for name, cog in bot.cogs.items():
|
||||
options.append(discord.SelectOption(label=name.capitalize(), description=cog.description[:50]))
|
||||
self.bot: commands.Bot = bot
|
||||
|
||||
super().__init__(
|
||||
placeholder="Select a cog to reload...",
|
||||
min_values=1, max_values=1,
|
||||
options=options,
|
||||
options=[discord.SelectOption(label="All", description="All the cogs")] +
|
||||
[
|
||||
discord.SelectOption(label=name.capitalize(), description=cog.description[:50])
|
||||
for name, cog in bot.cogs.items()
|
||||
],
|
||||
)
|
||||
|
||||
async def callback(self, interaction: discord.Interaction) -> None:
|
||||
selected = self.values[0].lower()
|
||||
try:
|
||||
if selected == "all":
|
||||
for name in self.bot.cogs.copy().keys():
|
||||
for name in self.bot.cogs.keys():
|
||||
await self.bot.reload_extension(f"cogs.{name.lower()}")
|
||||
else:
|
||||
await self.bot.reload_extension(f"cogs.{selected}")
|
||||
|
||||
@@ -59,10 +59,8 @@ class EmbedBuilderView(discord.ui.View):
|
||||
except:
|
||||
pass
|
||||
|
||||
async def interaction_check(self, interaction):
|
||||
if interaction.user == self.author:
|
||||
return True
|
||||
return False
|
||||
async def interaction_check(self, interaction: discord.Interaction):
|
||||
return interaction.user == self.author
|
||||
|
||||
@discord.ui.button(label="Edit Content", style=discord.ButtonStyle.blurple)
|
||||
async def edit_content(self, interaction: discord.Interaction, button: discord.ui.Button):
|
||||
|
||||
@@ -28,34 +28,33 @@ import function as func
|
||||
|
||||
class HelpDropdown(discord.ui.Select):
|
||||
def __init__(self, categorys:list):
|
||||
options = [
|
||||
discord.SelectOption(emoji="🆕", label="News", description="View new updates of Vocard."),
|
||||
discord.SelectOption(emoji="🕹️", label="Tutorial", description="How to use Vocard."),
|
||||
]
|
||||
cog_emojis = ["1️⃣", "2️⃣", "3️⃣", "4️⃣", "5️⃣", "6️⃣", "7️⃣"]
|
||||
for category, emoji in zip(categorys, cog_emojis):
|
||||
options.append(discord.SelectOption(emoji=emoji,
|
||||
label=f"{category} Commands",
|
||||
description=f"This is {category.lower()} Category."))
|
||||
|
||||
self.view: HelpView
|
||||
|
||||
super().__init__(
|
||||
placeholder="Select Category!",
|
||||
min_values=1, max_values=1,
|
||||
options=options, custom_id="select"
|
||||
options=[
|
||||
discord.SelectOption(emoji="🆕", label="News", description="View new updates of Vocard."),
|
||||
discord.SelectOption(emoji="🕹️", label="Tutorial", description="How to use Vocard."),
|
||||
] + [
|
||||
discord.SelectOption(emoji=emoji, label=f"{category} Commands", description=f"This is {category.lower()} Category.")
|
||||
for category, emoji in zip(categorys, ["1️⃣", "2️⃣", "3️⃣", "4️⃣", "5️⃣", "6️⃣", "7️⃣"])
|
||||
],
|
||||
custom_id="select"
|
||||
)
|
||||
|
||||
async def callback(self, interaction: discord.Interaction):
|
||||
async def callback(self, interaction: discord.Interaction) -> None:
|
||||
embed = self.view.build_embed(self.values[0].split(" ")[0])
|
||||
await interaction.response.edit_message(embed=embed)
|
||||
|
||||
class HelpView(discord.ui.View):
|
||||
def __init__(self, bot: commands.Bot, author: discord.Member):
|
||||
def __init__(self, bot: commands.Bot, author: discord.Member) -> None:
|
||||
super().__init__(timeout=60)
|
||||
|
||||
self.author = author
|
||||
self.bot = bot
|
||||
self.response = None
|
||||
self.categorys = [ name.capitalize() for name, cog in bot.cogs.items() if len([c for c in cog.walk_commands()]) ]
|
||||
self.author: discord.Member = author
|
||||
self.bot: commands.Bot = bot
|
||||
self.response: discord.Message = None
|
||||
self.categorys: list[str] = [ name.capitalize() for name, cog in bot.cogs.items() if len([c for c in cog.walk_commands()]) ]
|
||||
|
||||
self.add_item(discord.ui.Button(label='Support', emoji=':support:915152950471581696', url=func.settings.invite_link))
|
||||
self.add_item(discord.ui.Button(label='Invite', emoji=':invite:915152589056790589', url='https://discord.com/oauth2/authorize?client_id={}&permissions=2184260928&scope=bot%20applications.commands'.format(func.tokens.client_id)))
|
||||
@@ -63,10 +62,10 @@ class HelpView(discord.ui.View):
|
||||
self.add_item(discord.ui.Button(label='Donate', emoji=':patreon:913397909024800878', url='https://www.patreon.com/Vocard'))
|
||||
self.add_item(HelpDropdown(self.categorys))
|
||||
|
||||
async def on_error(self, error, item, interaction):
|
||||
async def on_error(self, error, item, interaction) -> None:
|
||||
return
|
||||
|
||||
async def on_timeout(self):
|
||||
async def on_timeout(self) -> None:
|
||||
for child in self.children:
|
||||
if child.custom_id == "select":
|
||||
child.disabled = True
|
||||
@@ -75,22 +74,20 @@ class HelpView(discord.ui.View):
|
||||
except:
|
||||
pass
|
||||
|
||||
async def interaction_check(self, interaction):
|
||||
if interaction.user == self.author:
|
||||
return True
|
||||
return False
|
||||
async def interaction_check(self, interaction: discord.Interaction) -> None:
|
||||
return interaction.user == self.author
|
||||
|
||||
def build_embed(self, category: str):
|
||||
def build_embed(self, category: str) -> discord.Embed:
|
||||
category = category.lower()
|
||||
if category == "news":
|
||||
embed = discord.Embed(title="Vocard Help Menu", url="https://discord.com/channels/811542332678996008/811909963718459392/1069971173116481636", color=func.settings.embed_color)
|
||||
|
||||
embed.add_field(name=f"Available Categories: [{2 + len(self.categorys)}]",
|
||||
value="```py\n👉 News\n2. Tutorial\n{}```".format("".join(f"{i}. {c}\n" for i, c in enumerate(self.categorys, start=3))),
|
||||
inline=True)
|
||||
embed.add_field(
|
||||
name=f"Available Categories: [{2 + len(self.categorys)}]",
|
||||
value="```py\n👉 News\n2. Tutorial\n{}```".format("".join(f"{i}. {c}\n" for i, c in enumerate(self.categorys, start=3))),
|
||||
inline=True
|
||||
)
|
||||
|
||||
update = "Vocard is a simple music bot. It leads to a comfortable experience which is user-friendly, It supports YouTube, Soundcloud, Spotify, Twitch and more!"
|
||||
|
||||
embed.add_field(name="📰 Information:", value=update, inline=True)
|
||||
embed.add_field(name="Get Started", value="```Join a voice channel and /play {Song/URL} a song. (Names, Youtube Video Links or Playlist links or Spotify links are supported on Vocard)```", inline=False)
|
||||
|
||||
@@ -107,7 +104,9 @@ class HelpView(discord.ui.View):
|
||||
|
||||
commands = [command for command in cog.walk_commands()]
|
||||
embed.description = cog.description
|
||||
embed.add_field(name=f"{category} Commands: [{len(commands)}]",
|
||||
value="```{}```".format("".join(f"/{command.qualified_name}\n" for command in commands if not command.qualified_name == cog.qualified_name)))
|
||||
embed.add_field(
|
||||
name=f"{category} Commands: [{len(commands)}]",
|
||||
value="```{}```".format("".join(f"/{command.qualified_name}\n" for command in commands if not command.qualified_name == cog.qualified_name))
|
||||
)
|
||||
|
||||
return embed
|
||||
@@ -24,8 +24,11 @@ SOFTWARE.
|
||||
import discord
|
||||
import function as func
|
||||
|
||||
from typing import Any
|
||||
|
||||
class Select_message(discord.ui.Select):
|
||||
def __init__(self, inbox):
|
||||
self.view: InboxView
|
||||
options = [discord.SelectOption(label=f"{index}. {mail['title'][:50]}", description=mail['type'], emoji='✉️' if mail['type'] == 'invite' else '📢') for index, mail in enumerate(inbox, start=1) ]
|
||||
|
||||
super().__init__(
|
||||
@@ -38,25 +41,27 @@ class Select_message(discord.ui.Select):
|
||||
await self.view.button_change(interaction)
|
||||
|
||||
class InboxView(discord.ui.View):
|
||||
def __init__(self, author, inbox):
|
||||
def __init__(self, author: discord.Member, inbox: list[dict[str, Any]]):
|
||||
super().__init__(timeout=60)
|
||||
self.author: discord.Member = author
|
||||
self.inbox = inbox
|
||||
self.response = None
|
||||
self.inbox: list[dict[str, Any]] = inbox
|
||||
self.newplaylist = []
|
||||
|
||||
self.author: discord.Member = author
|
||||
self.response: discord.Message = None
|
||||
self.current = None
|
||||
|
||||
self.add_item(Select_message(inbox))
|
||||
|
||||
async def interaction_check(self, interaction: discord.Interaction):
|
||||
if interaction.user == self.author:
|
||||
return True
|
||||
return False
|
||||
return interaction.user == self.author
|
||||
|
||||
def build_embed(self) -> discord.Embed:
|
||||
embed=discord.Embed(
|
||||
title=f"📭 All {self.author.name}'s Inbox",
|
||||
description=f'Max Messages: {len(self.inbox)}/10' + '```%0s %2s %20s\n' % (" ", "ID:", "Title:") + '\n'.join('%0s %2s. %35s'% ('✉️' if mail['type'] == 'invite' else '📢', index, mail['title'][:35] + "...") for index, mail in enumerate(self.inbox, start=1)) + '```',
|
||||
color=func.settings.embed_color
|
||||
)
|
||||
|
||||
def build_embed(self):
|
||||
embed=discord.Embed(title=f"📭 All {self.author.name}'s Inbox",
|
||||
description=f'Max Messages: {len(self.inbox)}/10' + '```%0s %2s %20s\n' % (" ", "ID:", "Title:") + '\n'.join('%0s %2s. %35s'% ('✉️' if mail['type'] == 'invite' else '📢', index, mail['title'][:35] + "...") for index, mail in enumerate(self.inbox, start=1)) + '```',
|
||||
color=func.settings.embed_color)
|
||||
if self.current:
|
||||
embed.add_field(name="Message Info:", value=f"```{self.current['description']}\nSender ID: {self.current['sender']}\nPlaylist ID: {self.current['referId']}\nInvite Time: {self.current['time'].strftime('%d-%m %H:%M:%S')}```")
|
||||
return embed
|
||||
|
||||
@@ -25,29 +25,38 @@ import discord
|
||||
import function as func
|
||||
|
||||
from math import ceil
|
||||
from typing import TYPE_CHECKING
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from voicelink import Player, Track
|
||||
|
||||
class ListView(discord.ui.View):
|
||||
def __init__(self, player, author, isQueue = True):
|
||||
def __init__(
|
||||
self,
|
||||
player: "Player",
|
||||
author: discord.Member,
|
||||
isQueue = True
|
||||
) -> None:
|
||||
super().__init__(timeout=60)
|
||||
self.player = player
|
||||
self.player: Player = player
|
||||
|
||||
self.name: str = player.get_msg('queueTitle') if isQueue else player.get_msg('historyTitle')
|
||||
self.tracks: list = player.queue.tracks() if isQueue else player.queue.history()
|
||||
self.tracks: list[Track] = player.queue.tracks() if isQueue else player.queue.history()
|
||||
self.response: discord.Message = None
|
||||
|
||||
if not isQueue:
|
||||
self.tracks.reverse()
|
||||
self.author: discord.Member = author
|
||||
|
||||
self.page = ceil(len(self.tracks) / 7)
|
||||
self.current_page = 1
|
||||
self.page: int = ceil(len(self.tracks) / 7)
|
||||
self.current_page: int = 1
|
||||
|
||||
try:
|
||||
self.time = func.time(sum([track.length for track in self.tracks]))
|
||||
except:
|
||||
self.time: str = func.time(sum([track.length for track in self.tracks]))
|
||||
except Exception as _:
|
||||
self.time = "∞"
|
||||
|
||||
async def on_timeout(self):
|
||||
async def on_timeout(self) -> None:
|
||||
for child in self.children:
|
||||
child.disabled = True
|
||||
try:
|
||||
@@ -55,58 +64,57 @@ class ListView(discord.ui.View):
|
||||
except:
|
||||
pass
|
||||
|
||||
async def on_error(self, error, item, interaction):
|
||||
async def on_error(self, error, item, interaction) -> None:
|
||||
return
|
||||
|
||||
async def interaction_check(self, interaction):
|
||||
if interaction.user == self.author:
|
||||
return True
|
||||
return False
|
||||
async def interaction_check(self, interaction: discord.Interaction) -> bool:
|
||||
return interaction.user == self.author
|
||||
|
||||
def build_embed(self):
|
||||
offset = self.current_page * 7
|
||||
tracks = self.tracks[(offset-7):offset]
|
||||
def build_embed(self) -> discord.Embed:
|
||||
offset: int = self.current_page * 7
|
||||
tracks: list[Track] = self.tracks[(offset-7):offset]
|
||||
|
||||
embed = discord.Embed(title=self.player.get_msg('viewTitle'), color=func.settings.embed_color)
|
||||
embed.description=self.player.get_msg('viewDesc').format(self.player.current.uri, f"```{self.player.current.title}```") if self.player.current else self.player.get_msg('nowplayingDesc').format("None")
|
||||
queueText = ""
|
||||
for index, track in enumerate(tracks, start=offset - 6):
|
||||
queueText += f"{track.emoji} `{index}.` `[" + (self.player.get_msg("live") if track.is_stream else func.time(track.length)) + f'`] **{track.title[:30]}** ' + (track.requester.mention if track.requester else self.player.client.id) + "\n"
|
||||
|
||||
queueText = "\n".join([
|
||||
f"{track.emoji} `{i}.` `[" + (self.player.get_msg("live") if track.is_stream else func.time(track.length)) + f'`] **{track.title[:30]}** ' + (track.requester.mention)
|
||||
for i, track in enumerate(tracks, start=offset-6)
|
||||
])
|
||||
embed.add_field(name=self.name, value=queueText)
|
||||
embed.set_footer(text=self.player.get_msg('viewFooter').format(self.current_page, self.page, self.time))
|
||||
|
||||
return embed
|
||||
|
||||
@discord.ui.button(label='<<', style=discord.ButtonStyle.grey)
|
||||
async def fast_back_button(self, interaction: discord.Interaction, button: discord.ui.Button):
|
||||
async def fast_back_button(self, interaction: discord.Interaction, button: discord.ui.Button) -> None:
|
||||
if self.current_page != 1:
|
||||
self.current_page = 1
|
||||
return await interaction.response.edit_message(embed=self.build_embed())
|
||||
await interaction.response.defer()
|
||||
|
||||
@discord.ui.button(label='Back', style=discord.ButtonStyle.blurple)
|
||||
async def back_button(self, interaction: discord.Interaction, button: discord.ui.Button):
|
||||
async def back_button(self, interaction: discord.Interaction, button: discord.ui.Button) -> None:
|
||||
if self.current_page > 1:
|
||||
self.current_page -= 1
|
||||
return await interaction.response.edit_message(embed=self.build_embed())
|
||||
await interaction.response.defer()
|
||||
|
||||
@discord.ui.button(label='Next', style=discord.ButtonStyle.blurple)
|
||||
async def next_button(self, interaction: discord.Interaction, button: discord.ui.Button):
|
||||
async def next_button(self, interaction: discord.Interaction, button: discord.ui.Button) -> None:
|
||||
if self.current_page < self.page:
|
||||
self.current_page += 1
|
||||
return await interaction.response.edit_message(embed=self.build_embed())
|
||||
await interaction.response.defer()
|
||||
|
||||
@discord.ui.button(label='>>', style=discord.ButtonStyle.grey)
|
||||
async def fast_next_button(self, interaction: discord.Interaction, button: discord.ui.Button):
|
||||
async def fast_next_button(self, interaction: discord.Interaction, button: discord.ui.Button) -> None:
|
||||
if self.current_page != self.page:
|
||||
self.current_page = self.page
|
||||
return await interaction.response.edit_message(embed=self.build_embed())
|
||||
await interaction.response.defer()
|
||||
|
||||
@discord.ui.button(emoji='🗑️', style=discord.ButtonStyle.red)
|
||||
async def stop_button(self, interaction: discord.Interaction, button: discord.ui.Button):
|
||||
async def stop_button(self, interaction: discord.Interaction, button: discord.ui.Button) -> None:
|
||||
await self.response.delete()
|
||||
self.stop()
|
||||
@@ -25,41 +25,40 @@ import discord
|
||||
import function as func
|
||||
|
||||
class LyricsDropdown(discord.ui.Select):
|
||||
def __init__(self, langs: list):
|
||||
options = [discord.SelectOption(label=lang) for lang in langs]
|
||||
def __init__(self, langs: list[str]) -> None:
|
||||
self.view: LyricsView
|
||||
|
||||
super().__init__(
|
||||
placeholder="Select A Lyrics Translation",
|
||||
min_values=1, max_values=1,
|
||||
options=options, custom_id="selectLyricsLangs"
|
||||
options=[discord.SelectOption(label=lang) for lang in langs],
|
||||
custom_id="selectLyricsLangs"
|
||||
)
|
||||
|
||||
async def callback(self, interaction: discord.Interaction):
|
||||
async def callback(self, interaction: discord.Interaction) -> None:
|
||||
self.view.lang = self.values[0]
|
||||
self.view.current_page = 1
|
||||
self.view.pages = len(self.view.source.get(self.values[0]))
|
||||
await interaction.response.edit_message(embed=self.view.build_embed())
|
||||
|
||||
class LyricsView(discord.ui.View):
|
||||
def __init__(self, name: str, source: dict, author: discord.Member):
|
||||
def __init__(self, name: str, source: dict, author: discord.Member) -> None:
|
||||
super().__init__(timeout=60)
|
||||
|
||||
self.name = name
|
||||
self.source = source
|
||||
self.lang = list(source.keys())[0]
|
||||
self.author = author
|
||||
self.name: str = name
|
||||
self.source: dict[str, list[str]] = source
|
||||
self.lang: list[str] = list(source.keys())[0]
|
||||
self.author: discord.Member = author
|
||||
|
||||
self.response = None
|
||||
self.pages = len(self.source.get(self.lang))
|
||||
self.current_page = 1
|
||||
self.response: discord.Message = None
|
||||
self.pages: int = len(self.source.get(self.lang))
|
||||
self.current_page: int = 1
|
||||
self.add_item(LyricsDropdown(list(source.keys())))
|
||||
|
||||
async def interaction_check(self, interaction):
|
||||
if interaction.user == self.author:
|
||||
return True
|
||||
return False
|
||||
async def interaction_check(self, interaction: discord.Interaction) -> bool:
|
||||
return interaction.user == self.author
|
||||
|
||||
async def on_timeout(self):
|
||||
async def on_timeout(self) -> None:
|
||||
for child in self.children:
|
||||
child.disabled = True
|
||||
try:
|
||||
@@ -67,10 +66,10 @@ class LyricsView(discord.ui.View):
|
||||
except:
|
||||
pass
|
||||
|
||||
async def on_error(self, error, item, interaction):
|
||||
async def on_error(self, error, item, interaction) -> None:
|
||||
return
|
||||
|
||||
def build_embed(self):
|
||||
def build_embed(self) -> discord.Embed:
|
||||
chunk = self.source.get(self.lang)[self.current_page - 1]
|
||||
embed=discord.Embed(description=chunk, color=func.settings.embed_color)
|
||||
embed.set_author(name=f"Searching Query: {self.name}", icon_url=self.author.display_avatar.url)
|
||||
@@ -78,30 +77,34 @@ class LyricsView(discord.ui.View):
|
||||
return embed
|
||||
|
||||
@discord.ui.button(label='<<', style=discord.ButtonStyle.grey)
|
||||
async def fast_back_button(self, interaction: discord.Interaction, button: discord.ui.Button):
|
||||
async def fast_back_button(self, interaction: discord.Interaction, button: discord.ui.Button) -> None:
|
||||
if self.current_page != 1:
|
||||
self.current_page = 1
|
||||
await interaction.response.edit_message(embed=self.build_embed())
|
||||
|
||||
return await interaction.response.edit_message(embed=self.build_embed())
|
||||
await interaction.response.defer()
|
||||
|
||||
@discord.ui.button(label='Back', style=discord.ButtonStyle.blurple)
|
||||
async def back_button(self, interaction: discord.Interaction, button: discord.ui.Button):
|
||||
async def back_button(self, interaction: discord.Interaction, button: discord.ui.Button) -> None:
|
||||
if self.current_page > 1:
|
||||
self.current_page -= 1
|
||||
await interaction.response.edit_message(embed=self.build_embed())
|
||||
|
||||
return await interaction.response.edit_message(embed=self.build_embed())
|
||||
await interaction.response.defer()
|
||||
|
||||
@discord.ui.button(label='Next', style=discord.ButtonStyle.blurple)
|
||||
async def next_button(self, interaction: discord.Interaction, button: discord.ui.Button):
|
||||
async def next_button(self, interaction: discord.Interaction, button: discord.ui.Button) -> None:
|
||||
if self.current_page < self.pages:
|
||||
self.current_page += 1
|
||||
await interaction.response.edit_message(embed=self.build_embed())
|
||||
return await interaction.response.edit_message(embed=self.build_embed())
|
||||
await interaction.response.defer()
|
||||
|
||||
@discord.ui.button(label='>>', style=discord.ButtonStyle.grey)
|
||||
async def fast_next_button(self, interaction: discord.Interaction, button: discord.ui.Button):
|
||||
async def fast_next_button(self, interaction: discord.Interaction, button: discord.ui.Button) -> None:
|
||||
if self.current_page != self.pages:
|
||||
self.current_page = self.pages
|
||||
await interaction.response.edit_message(embed=self.build_embed())
|
||||
return await interaction.response.edit_message(embed=self.build_embed())
|
||||
await interaction.response.defer()
|
||||
|
||||
@discord.ui.button(emoji='🗑️', style=discord.ButtonStyle.red)
|
||||
async def stop_button(self, interaction: discord.Interaction, button: discord.ui.Button):
|
||||
async def stop_button(self, interaction: discord.Interaction, button: discord.ui.Button) -> None:
|
||||
await self.response.delete()
|
||||
self.stop()
|
||||
@@ -24,10 +24,12 @@ SOFTWARE.
|
||||
import discord
|
||||
import function as func
|
||||
|
||||
from voicelink import Track
|
||||
from math import ceil
|
||||
from tldextract import extract
|
||||
from typing import Any
|
||||
from typing import Any, TYPE_CHECKING
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from voicelink import Track
|
||||
|
||||
class Select_playlist(discord.ui.Select):
|
||||
def __init__(self, results):
|
||||
|
||||
Reference in New Issue
Block a user