General clean code
This commit is contained in:
@@ -82,26 +82,30 @@ class ListView(discord.ui.View):
|
||||
async def fast_back_button(self, interaction: discord.Interaction, button: discord.ui.Button):
|
||||
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):
|
||||
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):
|
||||
if self.current_page < self.page:
|
||||
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):
|
||||
if self.current_page != self.page:
|
||||
self.current_page = self.page
|
||||
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):
|
||||
await self.response.delete()
|
||||
|
||||
@@ -24,35 +24,40 @@ SOFTWARE.
|
||||
import discord
|
||||
import function as func
|
||||
|
||||
from voicelink import Track
|
||||
from math import ceil
|
||||
from tldextract import extract
|
||||
from typing import Any
|
||||
|
||||
class Select_playlist(discord.ui.Select):
|
||||
def __init__(self, results):
|
||||
options = [discord.SelectOption(emoji='🌎', label='All Playlist')]
|
||||
for index, playlist in enumerate(results, start=1):
|
||||
if playlist['type'] != 'error':
|
||||
options.append(discord.SelectOption(emoji=playlist['emoji'], label=f'{index}. {playlist["name"]}', description=f"{playlist['time']} · {playlist['type']}"))
|
||||
self.view: PlaylistView
|
||||
|
||||
super().__init__(
|
||||
placeholder="Select a playlist to view ..",
|
||||
options=options
|
||||
options=[discord.SelectOption(emoji='🌎', label='All Playlist')] +
|
||||
[
|
||||
discord.SelectOption(emoji=playlist['emoji'], label=f'{index}. {playlist["name"]}', description=f"{playlist['time']} · {playlist['type']}")
|
||||
for index, playlist in enumerate(results, start=1) if playlist['type'] != 'error'
|
||||
]
|
||||
)
|
||||
|
||||
async def callback(self, interaction: discord.Interaction):
|
||||
async def callback(self, interaction: discord.Interaction) -> None:
|
||||
if self.values[0] == 'All Playlist':
|
||||
self.view.current = None
|
||||
return await interaction.response.edit_message(embed=self.view.viewEmbed)
|
||||
|
||||
self.view.current = self.view.results[int(self.values[0].split(". ")[0]) - 1]
|
||||
self.view.page = ceil(len(self.view.current['tracks']) / 7)
|
||||
self.view.current_page = 1
|
||||
await interaction.response.edit_message(embed=self.view.build_embed())
|
||||
|
||||
class agree(discord.ui.Button):
|
||||
def __init__(self):
|
||||
def __init__(self) -> None:
|
||||
self.view: CreateView
|
||||
super().__init__(label="Agree", style=discord.ButtonStyle.green)
|
||||
|
||||
async def callback(self, interaction: discord.Interaction):
|
||||
async def callback(self, interaction: discord.Interaction) -> None:
|
||||
self.label = "Created"
|
||||
self.disabled = True
|
||||
self.style=discord.ButtonStyle.primary
|
||||
@@ -62,57 +67,61 @@ class agree(discord.ui.Button):
|
||||
self.view.stop()
|
||||
|
||||
class PlaylistView(discord.ui.View):
|
||||
def __init__(self, viewEmbed, results, author):
|
||||
def __init__(
|
||||
self,
|
||||
viewEmbed: discord.Embed,
|
||||
results: list[dict[str, Any]],
|
||||
author: discord.Message
|
||||
) -> None:
|
||||
super().__init__(timeout=60)
|
||||
self.viewEmbed = viewEmbed
|
||||
self.results = results
|
||||
self.author = author
|
||||
self.guildID = author.guild.id
|
||||
self.response = None
|
||||
|
||||
self.current = None
|
||||
self.page = 0
|
||||
self.current_page = 1
|
||||
self.viewEmbed: discord.Embed = viewEmbed
|
||||
self.results: list[dict[str, Any]] = results
|
||||
self.author: discord.Member = author
|
||||
self.response: discord.Message = None
|
||||
|
||||
self.current: dict[str, Any] = None
|
||||
self.page: int = 0
|
||||
self.current_page: int = 1
|
||||
|
||||
self.add_item(Select_playlist(results))
|
||||
|
||||
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_error(self, error, item, interaction):
|
||||
async def on_error(self, error, item, interaction) -> None:
|
||||
return
|
||||
|
||||
def build_embed(self):
|
||||
offset = self.current_page * 7
|
||||
tracks = self.current['tracks'][(offset-7):offset]
|
||||
def build_embed(self) -> discord.Embed:
|
||||
offset: int = self.current_page * 7
|
||||
tracks: list[Track] = self.current['tracks'][(offset-7):offset]
|
||||
guild_id = self.author.id
|
||||
|
||||
embed = discord.Embed(title=func.get_lang(self.guildID, 'playlistView'), color=func.settings.embed_color)
|
||||
embed = discord.Embed(title=func.get_lang(guild_id, 'playlistView'), color=func.settings.embed_color)
|
||||
|
||||
embed.description= func.get_lang(self.guildID, 'playlistViewDesc').format(self.current['name'], self.current['id'], len(self.current['tracks']), owner if (owner := self.current.get('owner')) else f"{self.author.id} (You)", self.current['type'])
|
||||
embed.description= func.get_lang(guild_id, 'playlistViewDesc').format(self.current['name'], self.current['id'], len(self.current['tracks']), owner if (owner := self.current.get('owner')) else f"{self.author.id} (You)", self.current['type'])
|
||||
|
||||
perms = self.current['perms']
|
||||
permsStr = func.get_lang(self.guildID, 'settingsPermTitle')
|
||||
permsStr = func.get_lang(guild_id, 'settingsPermTitle')
|
||||
if self.current['type'] == 'share':
|
||||
embed.add_field(name=permsStr, value=func.get_lang(self.guildID, 'playlistViewPermsValue').format('✓' if 'write' in perms and self.author.id in perms['write'] else '✘', '✓' if 'remove' in perms and self.author.id in perms['remove'] else '✘'))
|
||||
embed.add_field(name=permsStr, value=func.get_lang(guild_id, 'playlistViewPermsValue').format('✓' if 'write' in perms and self.author.id in perms['write'] else '✘', '✓' if 'remove' in perms and self.author.id in perms['remove'] else '✘'))
|
||||
else:
|
||||
embed.add_field(name=permsStr, value=func.get_lang(self.guildID, 'playlistViewPermsValue2').format(', '.join(f'<@{user}>' for user in perms['read'])))
|
||||
embed.add_field(name=permsStr, value=func.get_lang(guild_id, 'playlistViewPermsValue2').format(', '.join(f'<@{user}>' for user in perms['read'])))
|
||||
|
||||
trackStr = func.get_lang(self.guildID, 'playlistViewTrack')
|
||||
trackStr = func.get_lang(guild_id, 'playlistViewTrack')
|
||||
if tracks:
|
||||
if self.current.get("type") == "playlist":
|
||||
embed.add_field(name=trackStr, value="\n".join(f"{func.emoji_source(track['sourceName'])} `{index}.` `[{func.time(track['length'])}]` **{track['title'][:30]}**" for index, track in enumerate(tracks, start=offset - 6)), inline=False)
|
||||
else:
|
||||
embed.add_field(name=trackStr, value='\n'.join(f"{func.emoji_source(extract(track.info['uri']).domain)} `{index}.` `[{func.time(track.length)}]` **{track.title[:30]}** " for index, track in enumerate(tracks, start=offset - 6)), inline=False)
|
||||
else:
|
||||
embed.add_field(name=trackStr, value=func.get_lang(self.guildID, 'playlistNoTrack').format(self.current['name']), inline=False)
|
||||
embed.add_field(name=trackStr, value=func.get_lang(guild_id, 'playlistNoTrack').format(self.current['name']), inline=False)
|
||||
|
||||
embed.set_footer(text=func.get_lang(self.guildID, 'playlistViewPage').format(self.current_page, self.page, self.current['time']))
|
||||
embed.set_footer(text=func.get_lang(guild_id, 'playlistViewPage').format(self.current_page, self.page, self.current['time']))
|
||||
|
||||
return embed
|
||||
|
||||
async def on_timeout(self):
|
||||
async def on_timeout(self) -> None:
|
||||
for child in self.children:
|
||||
child.disabled = True
|
||||
try:
|
||||
@@ -121,51 +130,56 @@ class PlaylistView(discord.ui.View):
|
||||
pass
|
||||
|
||||
@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 not self.current:
|
||||
return
|
||||
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 not self.current:
|
||||
return
|
||||
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 not self.current:
|
||||
return
|
||||
if self.current_page < self.page:
|
||||
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 not self.current:
|
||||
return
|
||||
if self.current_page != self.page:
|
||||
self.current_page = self.page
|
||||
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()
|
||||
|
||||
class CreateView(discord.ui.View):
|
||||
def __init__(self):
|
||||
def __init__(self) -> None:
|
||||
super().__init__(timeout=20)
|
||||
self.value = None
|
||||
self.response = None
|
||||
self.value: bool = None
|
||||
self.response: discord.Message = None
|
||||
|
||||
self.add_item(agree())
|
||||
self.add_item(discord.ui.Button(label='Support', emoji=':support:915152950471581696', url=func.settings.invite_link))
|
||||
|
||||
async def on_timeout(self):
|
||||
async def on_timeout(self) -> None:
|
||||
for child in self.children:
|
||||
child.disabled = True
|
||||
try:
|
||||
|
||||
@@ -23,23 +23,23 @@ SOFTWARE.
|
||||
|
||||
import discord
|
||||
|
||||
from function import LANGS
|
||||
from voicelink import Track
|
||||
|
||||
class SearchDropdown(discord.ui.Select):
|
||||
def __init__(self, tracks, get_msg):
|
||||
self.tracks = tracks
|
||||
self.get_msg = get_msg
|
||||
options = []
|
||||
for index, track in enumerate(self.tracks, start=1):
|
||||
options.append(discord.SelectOption(label=f"{index}. {track.title[:50]}", description=f"{track.author[:50]} · {track.formatted_length}"))
|
||||
|
||||
def __init__(self, tracks: list[Track], get_msg: callable) -> None:
|
||||
self.view: SearchView
|
||||
self.get_msg: callable = get_msg
|
||||
|
||||
super().__init__(
|
||||
placeholder=get_msg('searchWait'),
|
||||
min_values=1, max_values=len(tracks),
|
||||
options=options
|
||||
options=[
|
||||
discord.SelectOption(label=f"{i}. {track.title[:50]}", description=f"{track.author[:50]} · {track.formatted_length}")
|
||||
for i, track in enumerate(tracks, start=1)
|
||||
]
|
||||
)
|
||||
|
||||
async def callback(self, interaction: discord.Interaction):
|
||||
async def callback(self, interaction: discord.Interaction) -> None:
|
||||
self.disabled = True
|
||||
self.placeholder = self.get_msg('searchSuccess')
|
||||
await interaction.response.edit_message(view=self.view)
|
||||
@@ -47,10 +47,11 @@ class SearchDropdown(discord.ui.Select):
|
||||
self.view.stop()
|
||||
|
||||
class SearchView(discord.ui.View):
|
||||
def __init__(self, tracks, lang):
|
||||
def __init__(self, tracks: list[Track], lang: callable) -> None:
|
||||
super().__init__(timeout=60)
|
||||
self.response = None
|
||||
self.values = None
|
||||
|
||||
self.response: discord.Message = None
|
||||
self.values: list[str] = None
|
||||
self.add_item(SearchDropdown(tracks, lang))
|
||||
|
||||
async def on_error(self, error, item, interaction):
|
||||
|
||||
Reference in New Issue
Block a user