Cleaned up some code
This commit is contained in:
@@ -1 +1,2 @@
|
||||
from .lyrics import getLyrics
|
||||
from .lyrics import getLyrics
|
||||
from .settings import Settings
|
||||
18
addons/settings.py
Normal file
18
addons/settings.py
Normal file
@@ -0,0 +1,18 @@
|
||||
class Settings:
|
||||
def __init__(self, settings: dict) -> None:
|
||||
self.invite_link = "https://discord.gg/wRCgB7vBQv"
|
||||
self.nodes = settings.get("nodes", {})
|
||||
self.max_queue = settings.get("default_max_queue", 1000)
|
||||
self.bot_prefix = settings.get("prefix", "")
|
||||
self.embed_color = int(settings.get("embed_color", "0xb3b3b3"), 16)
|
||||
self.bot_access_user = settings.get("bot_access_user", [])
|
||||
self.emoji_source_raw = settings.get("emoji_source_raw", {})
|
||||
self.cooldowns_settings = settings.get("cooldowns", {})
|
||||
self.aliases_settings = settings.get("aliases", {})
|
||||
self.controller_settings = settings.get("controller", [["back", "resume", "skip", {"stop": "red"}, "add"], ["tracks"]])
|
||||
self.ipc_server = settings.get("ipc_server", {
|
||||
"host": "127.0.0.1",
|
||||
"port": 8000,
|
||||
"enable": False
|
||||
}
|
||||
)
|
||||
@@ -13,7 +13,7 @@ from function import (
|
||||
update_settings,
|
||||
get_settings,
|
||||
get_lang,
|
||||
embed_color,
|
||||
settings as sett,
|
||||
time as ctime,
|
||||
get_aliases,
|
||||
cooldown_check
|
||||
@@ -138,13 +138,13 @@ class Admin(commands.Cog, name="settings"):
|
||||
async def view(self, ctx: commands.Context):
|
||||
"Show all the bot settings in your server."
|
||||
player, settings = self.get_settings(ctx)
|
||||
embed = discord.Embed(color=embed_color)
|
||||
embed = discord.Embed(color=sett.embed_color)
|
||||
embed.set_author(name=get_lang(ctx.guild.id, 'settingsMenu').format(ctx.guild.name), icon_url=self.bot.user.display_avatar.url)
|
||||
if ctx.guild.icon:
|
||||
embed.set_thumbnail(url=ctx.guild.icon.url)
|
||||
|
||||
embed.add_field(name=get_lang(ctx.guild.id, 'settingsTitle'), value=get_lang(ctx.guild.id, 'settingsValue').format(
|
||||
settings.get('prefix', func.bot_prefix),
|
||||
settings.get('prefix', func.settings.bot_prefix),
|
||||
settings.get('lang', 'EN'),
|
||||
settings.get('controller', True),
|
||||
f"<@&{settings['dj']}>" if 'dj' in settings else '`None`',
|
||||
@@ -156,7 +156,7 @@ class Admin(commands.Cog, name="settings"):
|
||||
)
|
||||
embed.add_field(name=get_lang(ctx.guild.id, 'settingsTitle2'), value=get_lang(ctx.guild.id, 'settingsValue2').format(
|
||||
settings.get("queueType", "Queue"),
|
||||
func.max_queue,
|
||||
func.settings.max_queue,
|
||||
settings.get("duplicateTrack", True)
|
||||
)
|
||||
)
|
||||
@@ -219,7 +219,7 @@ class Admin(commands.Cog, name="settings"):
|
||||
|
||||
@app_commands.command(name="debug")
|
||||
async def debug(self, interaction: discord.Interaction):
|
||||
if interaction.user.id not in func.bot_access_user:
|
||||
if interaction.user.id not in func.settings.bot_access_user:
|
||||
return await interaction.response.send_message("You are not able to use this command!")
|
||||
|
||||
def clear_code(content):
|
||||
|
||||
@@ -11,7 +11,7 @@ from function import (
|
||||
youtube_api_key,
|
||||
requests_api,
|
||||
get_lang,
|
||||
embed_color,
|
||||
settings,
|
||||
cooldown_check,
|
||||
get_aliases,
|
||||
connect_channel
|
||||
@@ -36,7 +36,7 @@ async def nowplay(ctx: commands.Context, player: voicelink.Player):
|
||||
upnext = "\n".join(f"`{index}.` `[{track.formatLength}]` [{track.title[:30]}]({track.uri})" for index, track in enumerate(
|
||||
player.queue.tracks()[:2], start=2))
|
||||
embed = discord.Embed(description=player.get_msg(
|
||||
'nowplayingDesc').format(track.title), color=embed_color)
|
||||
'nowplayingDesc').format(track.title), color=settings.embed_color)
|
||||
embed.set_author(name=track.requester if track.requester else ctx.bot,
|
||||
icon_url=track.requester.display_avatar.url if track.requester else ctx.me.display_avatar.url)
|
||||
|
||||
@@ -187,7 +187,7 @@ class Basic(commands.Cog):
|
||||
query_track = "\n".join(
|
||||
f"`{index}.` `[{track.formatLength}]` **{track.title[:35]}**" for index, track in enumerate(tracks[0:10], start=1))
|
||||
embed = discord.Embed(title=player.get_msg('searchTitle').format(query), description=player.get_msg(
|
||||
'searchDesc').format(emoji_source(platform), platform, len(tracks[0:10]), query_track), color=embed_color)
|
||||
'searchDesc').format(emoji_source(platform), platform, len(tracks[0:10]), query_track), color=settings.embed_color)
|
||||
view = SearchView(tracks=tracks[0:10], lang=player.lang)
|
||||
message = await ctx.send(embed=embed, view=view, ephemeral=True)
|
||||
view.response = message
|
||||
@@ -759,7 +759,7 @@ class Basic(commands.Cog):
|
||||
async def ping(self, ctx: commands.Context):
|
||||
"Test if the bot is alive, and see the delay between your commands and my response."
|
||||
player: voicelink.Player = ctx.guild.voice_client
|
||||
embed = discord.Embed(color=embed_color)
|
||||
embed = discord.Embed(color=settings.embed_color)
|
||||
embed.add_field(name=get_lang(ctx.guild.id, 'pingTitle1'), value=get_lang(ctx.guild.id, 'pingfield1').format(
|
||||
"0", "0", self.bot.latency, '😭' if self.bot.latency > 5 else ('😨' if self.bot.latency > 1 else '👌'), "St Louis, MO, United States"))
|
||||
if player:
|
||||
|
||||
@@ -19,7 +19,7 @@ class Nodes(commands.Cog):
|
||||
async def start_nodes(self) -> None:
|
||||
"""Connect and intiate nodes."""
|
||||
await self.bot.wait_until_ready()
|
||||
for n in func.nodes.values():
|
||||
for n in func.settings.nodes.values():
|
||||
try:
|
||||
await self.voicelink.create_node(bot=self.bot,
|
||||
spotify_client_id=getenv('SPOTIFY_CLIENT_ID'),
|
||||
@@ -13,7 +13,7 @@ from function import (
|
||||
update_inbox,
|
||||
get_lang,
|
||||
playlist_name,
|
||||
embed_color,
|
||||
settings,
|
||||
get_aliases,
|
||||
cooldown_check,
|
||||
connect_channel
|
||||
@@ -179,7 +179,7 @@ class Playlists(commands.Cog, name="playlist"):
|
||||
embed = discord.Embed(title=get_lang(ctx.guild.id, 'playlistViewTitle').format(ctx.author.name),
|
||||
description='```%0s %4s %10s %10s %10s\n' % tuple(get_lang(ctx.guild.id, 'playlistViewHeaders')) + '\n'.join(
|
||||
'%0s %3s. %10s %10s %10s' % (info['emoji'], info['id'], f"[{info['time']}]", info['name'], len(info['tracks'])) for info in results) + '```',
|
||||
color=embed_color)
|
||||
color=settings.embed_color)
|
||||
embed.add_field(name=get_lang(ctx.guild.id, 'playlistMaxP'),
|
||||
value=f"➥ {len(user)}/{max_p}", inline=True)
|
||||
embed.add_field(name=get_lang(ctx.guild.id,
|
||||
|
||||
81
function.py
81
function.py
@@ -11,6 +11,7 @@ from time import strptime
|
||||
from io import BytesIO
|
||||
from pymongo import MongoClient
|
||||
from typing import Optional
|
||||
from addons import Settings
|
||||
|
||||
root_dir = os.path.dirname(os.path.abspath(__file__))
|
||||
|
||||
@@ -36,30 +37,18 @@ Playlist = mongodb[MONGODB_NAME]['Playlist']
|
||||
youtube_api_key = os.getenv('YOUTUBE_API_KEY')
|
||||
|
||||
#--------------- Cache Var ---------------
|
||||
invite_link = "https://discord.gg/wRCgB7vBQv" #Template of invite link
|
||||
embed_color = None
|
||||
|
||||
try:
|
||||
report_channel_id = int(os.getenv("BUG_REPORT_CHANNEL_ID"))
|
||||
except:
|
||||
report_channel_id = 0
|
||||
|
||||
emoji_source_raw = {} #Stores all source emoji for track
|
||||
settings: Settings
|
||||
error_log = {} #Stores error that not a Voicelink Exception
|
||||
bot_access_user = [] #Stores bot access user id
|
||||
langs = {} #Stores all the languages in ./langs
|
||||
guild_settings = {} #Cache guild language
|
||||
local_langs = {} #Stores all the localization languages in ./local_langs
|
||||
playlist_name = {} #Cache the user's playlist name
|
||||
bot_prefix = "?" #The default bot prefix
|
||||
max_queue = 1000 #The default maximum number of tracks in the queue
|
||||
cooldowns_settings = {} #Stores command cooldown settings
|
||||
aliases_settings = {} #Stores command aliases settings
|
||||
controller_settings = {} #Stores the layout of music controller
|
||||
enable_ipc = False #Enable ipc server or not
|
||||
|
||||
#----------------- Nodes -----------------
|
||||
nodes = {}
|
||||
|
||||
#-------------- Vocard Functions --------------
|
||||
def get_settings(guild_id:int):
|
||||
@@ -86,38 +75,12 @@ def update_settings(guild_id:int, data: dict, mode="Set"):
|
||||
collection.update_one({"_id":guild_id}, {"$unset":data})
|
||||
return
|
||||
|
||||
def langs_setup():
|
||||
for language in os.listdir(os.path.join(root_dir, "langs")):
|
||||
if language.endswith('.json'):
|
||||
with open(os.path.join(root_dir, "langs", language), encoding="utf8") as json_file:
|
||||
lang = json.load(json_file)
|
||||
|
||||
langs[language[:-5]] = lang
|
||||
|
||||
for language in os.listdir(os.path.join(root_dir, "local_langs")):
|
||||
if language.endswith('.json'):
|
||||
with open(os.path.join(root_dir, "local_langs", language), encoding="utf8") as json_file:
|
||||
lang = json.load(json_file)
|
||||
|
||||
local_langs[language[:-5]] = lang
|
||||
return
|
||||
|
||||
def settings_setup():
|
||||
with open(os.path.join(root_dir, "settings.json"), encoding="utf8") as json_file:
|
||||
rawSettings = json.load(json_file)
|
||||
|
||||
global nodes, max_queue, bot_prefix, embed_color, bot_access_user, emoji_source_raw, cooldowns_settings, aliases_settings, controller_settings, enable_ipc
|
||||
nodes = rawSettings.get("nodes", {})
|
||||
if (new_max_queue := rawSettings.get("default_max_queue", max_queue)):
|
||||
max_queue = new_max_queue
|
||||
bot_prefix = rawSettings.get("prefix", "")
|
||||
enable_ipc = rawSettings.get("enable_ipc", False)
|
||||
embed_color = int(rawSettings.get("embed_color", "0xb3b3b3"), 16)
|
||||
bot_access_user = rawSettings.get("bot_access_user", [])
|
||||
emoji_source_raw = rawSettings.get("emoji_source_raw", {})
|
||||
cooldowns_settings = rawSettings.get("cooldowns", {})
|
||||
aliases_settings = rawSettings.get("aliases", {})
|
||||
controller_settings = rawSettings.get("controller", [["back", "resume", "skip", {"stop": "red"}, "add"], ["tracks"]])
|
||||
def open_json(path: str):
|
||||
try:
|
||||
with open(path, encoding="utf8") as json_file:
|
||||
return json.load(json_file)
|
||||
except:
|
||||
return {}
|
||||
|
||||
def get_lang(guild_id:int, key:str):
|
||||
lang = get_settings(guild_id).get("lang", "EN")
|
||||
@@ -131,12 +94,30 @@ async def requests_api(url: str):
|
||||
|
||||
return await resp.json(encoding="utf-8")
|
||||
|
||||
def init():
|
||||
global settings
|
||||
|
||||
json = open_json(os.path.join(root_dir, "settings.json"))
|
||||
if json:
|
||||
settings = Settings(json)
|
||||
|
||||
def langs_setup():
|
||||
for language in os.listdir(os.path.join(root_dir, "langs")):
|
||||
if language.endswith('.json'):
|
||||
langs[language[:-5]] = open_json(os.path.join(root_dir, "langs", language))
|
||||
|
||||
for language in os.listdir(os.path.join(root_dir, "local_langs")):
|
||||
if language.endswith('.json'):
|
||||
local_langs[language[:-5]] = open_json(os.path.join(root_dir, "local_langs", language))
|
||||
|
||||
return
|
||||
|
||||
async def create_account(ctx: commands.Context):
|
||||
if not ctx.author:
|
||||
return
|
||||
from views import CreateView
|
||||
view = CreateView()
|
||||
embed=discord.Embed(title="Do you want to create an account on Vocard?", color=embed_color)
|
||||
embed=discord.Embed(title="Do you want to create an account on Vocard?", color=settings.embed_color)
|
||||
embed.description = f"> Plan: `Default` | `5` Playlist | `500` tracks in each playlist."
|
||||
embed.add_field(name="Terms of Service:", value=" ➥ We assure you that all your data on Vocard will not be disclosed to any third party\n"
|
||||
" ➥ We will not perform any data analysis on your data\n"
|
||||
@@ -262,7 +243,7 @@ def formatTime(number:str) -> Optional[int]:
|
||||
return (int(num.tm_hour) * 3600 + int(num.tm_min) * 60 + int(num.tm_sec)) * 1000
|
||||
|
||||
def emoji_source(emoji:str):
|
||||
return emoji_source_raw.get(emoji.lower(), "🔗")
|
||||
return settings.emoji_source_raw.get(emoji.lower(), "🔗")
|
||||
|
||||
def gen_report() -> Optional[discord.File]:
|
||||
if error_log:
|
||||
@@ -278,12 +259,12 @@ def gen_report() -> Optional[discord.File]:
|
||||
return None
|
||||
|
||||
def cooldown_check(ctx: commands.Context) -> Optional[commands.Cooldown]:
|
||||
if ctx.author.id in bot_access_user:
|
||||
if ctx.author.id in settings.bot_access_user:
|
||||
return None
|
||||
cooldown = cooldowns_settings.get(f"{ctx.command.parent.qualified_name} {ctx.command.name}" if ctx.command.parent else ctx.command.name)
|
||||
cooldown = settings.cooldowns_settings.get(f"{ctx.command.parent.qualified_name} {ctx.command.name}" if ctx.command.parent else ctx.command.name)
|
||||
if not cooldown:
|
||||
return None
|
||||
return commands.Cooldown(cooldown[0], cooldown[1])
|
||||
|
||||
def get_aliases(name: str) -> list:
|
||||
return aliases_settings.get(name, [])
|
||||
return settings.aliases_settings.get(name, [])
|
||||
|
||||
17
main.py
17
main.py
@@ -12,7 +12,7 @@ from datetime import datetime
|
||||
from voicelink import VoicelinkException
|
||||
|
||||
load_dotenv()
|
||||
func.settings_setup()
|
||||
func.init()
|
||||
|
||||
class Translator(discord.app_commands.Translator):
|
||||
async def load(self):
|
||||
@@ -30,7 +30,12 @@ class Vocard(commands.Bot):
|
||||
def __init__(self, *args, **kwargs):
|
||||
super().__init__(*args, **kwargs)
|
||||
|
||||
self.ipc = IPCServer(self, sercet_key="Vocard")
|
||||
self.ipc = IPCServer(
|
||||
self,
|
||||
func.settings.ipc_server["host"],
|
||||
func.settings.ipc_server["port"],
|
||||
sercet_key="Vocard"
|
||||
)
|
||||
|
||||
async def on_message(self, message: discord.Message, /) -> None:
|
||||
if message.author.bot or not message.guild:
|
||||
@@ -51,7 +56,7 @@ class Vocard(commands.Bot):
|
||||
except Exception as e:
|
||||
print(traceback.format_exc())
|
||||
|
||||
if func.enable_ipc:
|
||||
if func.settings.ipc_server["enable"]:
|
||||
await self.ipc.start()
|
||||
|
||||
await bot.tree.set_translator(Translator())
|
||||
@@ -101,11 +106,11 @@ class CommandCheck(discord.app_commands.CommandTree):
|
||||
|
||||
async def get_prefix(bot, message: discord.Message):
|
||||
settings = func.get_settings(message.guild.id)
|
||||
return settings.get("prefix", func.bot_prefix)
|
||||
return settings.get("prefix", func.settings.bot_prefix)
|
||||
|
||||
intents = discord.Intents.default()
|
||||
intents.members = True
|
||||
intents.message_content = True if func.bot_prefix else False
|
||||
intents.message_content = True if func.settings.bot_prefix else False
|
||||
member_cache = discord.MemberCacheFlags(
|
||||
voice=True,
|
||||
joined=False
|
||||
@@ -128,7 +133,7 @@ async def app_command_error(interaction: discord.Interaction, error):
|
||||
elif isinstance(error, (discord.app_commands.CommandOnCooldown, discord.app_commands.errors.MissingPermissions)):
|
||||
pass
|
||||
elif not issubclass(error.__class__, VoicelinkException):
|
||||
error = func.get_lang(interaction.guild_id, "unknownException") + func.invite_link
|
||||
error = func.get_lang(interaction.guild_id, "unknownException") + func.settings.invite_link
|
||||
if (guildId := interaction.guild_id) not in func.error_log:
|
||||
func.error_log[guildId] = {}
|
||||
func.error_log[guildId][round(datetime.timestamp(datetime.now()))] = str(traceback.format_exc())
|
||||
|
||||
@@ -10,9 +10,13 @@
|
||||
},
|
||||
"prefix": "?",
|
||||
"bot_access_user": [],
|
||||
"enable_ipc": false,
|
||||
"color_code":"0xb3b3b3",
|
||||
"default_max_queue": 1000,
|
||||
"ipc_server": {
|
||||
"host": "127.0.0.1",
|
||||
"port": 8000,
|
||||
"enable": false
|
||||
},
|
||||
"emoji_source_raw": {
|
||||
"youtube": "<:youtube:826661982760992778>",
|
||||
"youtube music": "<:youtube:826661982760992778>",
|
||||
|
||||
@@ -301,7 +301,7 @@ class InteractiveController(discord.ui.View):
|
||||
super().__init__(timeout=None)
|
||||
|
||||
self.player = player
|
||||
for row, btnRow in enumerate(func.controller_settings):
|
||||
for row, btnRow in enumerate(func.settings.controller_settings):
|
||||
for btn in btnRow:
|
||||
color = ""
|
||||
if isinstance(btn, Dict):
|
||||
@@ -320,7 +320,7 @@ class InteractiveController(discord.ui.View):
|
||||
await interaction.response.send_message(self.player.get_msg("nodeReconnect"), ephemeral=True)
|
||||
return False
|
||||
|
||||
if interaction.user.id in func.bot_access_user:
|
||||
if interaction.user.id in func.settings.bot_access_user:
|
||||
return True
|
||||
|
||||
if self.player.channel and self.player.is_user_join(interaction.user):
|
||||
|
||||
@@ -58,7 +58,7 @@ class HelpView(discord.ui.View):
|
||||
self.response = None
|
||||
self.categorys = [ 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.invite_link))
|
||||
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(getenv('CLIENT_ID'))))
|
||||
self.add_item(discord.ui.Button(label='Github', url='https://github.com/ChocoMeow/Vocard'))
|
||||
self.add_item(discord.ui.Button(label='Donate', emoji=':patreon:913397909024800878', url='https://www.patreon.com/Vocard'))
|
||||
@@ -84,7 +84,7 @@ class HelpView(discord.ui.View):
|
||||
def build_embed(self, category: str):
|
||||
category = category.lower()
|
||||
if category == "news":
|
||||
embed = discord.Embed(title="Vocard Help Menu", url="https://discord.com/channels/811542332678996008/811909963718459392/1069971173116481636", color=func.embed_color)
|
||||
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))),
|
||||
@@ -101,7 +101,7 @@ class HelpView(discord.ui.View):
|
||||
|
||||
return embed
|
||||
|
||||
embed = discord.Embed(title=f"Category: {category.capitalize()}", color=func.embed_color)
|
||||
embed = discord.Embed(title=f"Category: {category.capitalize()}", color=func.settings.embed_color)
|
||||
embed.add_field(name=f"Categories: [{2 + len(self.categorys)}]", value="```py\n" + "\n".join(("👉 " if c == category.capitalize() else f"{i}. ") + c for i, c in enumerate(['News', 'Tutorial'] + self.categorys, start=1)) + "```", inline=True)
|
||||
|
||||
if category == 'tutorial':
|
||||
|
||||
@@ -51,7 +51,7 @@ class InboxView(discord.ui.View):
|
||||
def build_embed(self):
|
||||
embed=discord.Embed(title=f"📭 All {self.author}'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.embed_color)
|
||||
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
|
||||
|
||||
@@ -64,7 +64,7 @@ class ListView(discord.ui.View):
|
||||
offset = self.current_page * 7
|
||||
tracks = self.tracks[(offset-7):offset]
|
||||
|
||||
embed = discord.Embed(title=self.player.get_msg('viewTitle'), color=func.embed_color)
|
||||
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):
|
||||
|
||||
@@ -72,7 +72,7 @@ class LyricsView(discord.ui.View):
|
||||
|
||||
def build_embed(self):
|
||||
chunk = self.source.get(self.lang)[self.current_page - 1]
|
||||
embed=discord.Embed(description=chunk, color=func.embed_color)
|
||||
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)
|
||||
embed.set_footer(text=f"Page: {self.current_page}/{self.pages}")
|
||||
return embed
|
||||
|
||||
@@ -88,7 +88,7 @@ class PlaylistView(discord.ui.View):
|
||||
offset = self.current_page * 7
|
||||
tracks = self.current['tracks'][(offset-7):offset]
|
||||
|
||||
embed = discord.Embed(title=func.get_lang(self.guildID, 'playlistView'), color=func.embed_color)
|
||||
embed = discord.Embed(title=func.get_lang(self.guildID, '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']), self.current.get('owner', "None"), self.current['type'])
|
||||
|
||||
@@ -163,7 +163,7 @@ class CreateView(discord.ui.View):
|
||||
self.value = None
|
||||
self.response = None
|
||||
self.add_item(agree())
|
||||
self.add_item(discord.ui.Button(label='Support', emoji=':support:915152950471581696', url=func.invite_link))
|
||||
self.add_item(discord.ui.Button(label='Support', emoji=':support:915152950471581696', url=func.settings.invite_link))
|
||||
|
||||
async def on_timeout(self):
|
||||
for child in self.children:
|
||||
|
||||
@@ -88,7 +88,7 @@ class Player(VoiceProtocol):
|
||||
self.joinTime = round(time.time())
|
||||
self._volume = self.settings.get('volume', 100)
|
||||
self.lang = self.settings.get('lang', 'EN') if self.settings.get('lang', 'EN') in func.langs else "EN"
|
||||
self.queue = eval(self.settings.get("queueType", "Queue"))(self.settings.get("maxQueue", func.max_queue), self.settings.get("duplicateTrack", True), self.get_msg)
|
||||
self.queue = eval(self.settings.get("queueType", "Queue"))(self.settings.get("maxQueue", func.settings.max_queue), self.settings.get("duplicateTrack", True), self.get_msg)
|
||||
|
||||
self._node = NodePool.get_node()
|
||||
self._current: Track = None
|
||||
@@ -216,7 +216,7 @@ class Player(VoiceProtocol):
|
||||
return True
|
||||
|
||||
def is_privileged(self, user: Member, check_user_join: bool = True):
|
||||
if user.id in func.bot_access_user:
|
||||
if user.id in func.settings.bot_access_user:
|
||||
return True
|
||||
|
||||
manage_perm = user.guild_permissions.manage_guild
|
||||
@@ -360,18 +360,18 @@ class Player(VoiceProtocol):
|
||||
track = self.current
|
||||
|
||||
if not track:
|
||||
embed=Embed(title=self.get_msg("noTrackPlaying"), description=f"[Vote](https://top.gg/bot/605618911471468554/vote/) | [Support]({func.invite_link}) | [Invite](https://discord.com/oauth2/authorize?client_id=605618911471468554&permissions=2184260928&scope=bot%20applications.commands) | [Questionnaire](https://forms.gle/UqeeEv4GEdCq9hi3A)", color=func.embed_color)
|
||||
embed=Embed(title=self.get_msg("noTrackPlaying"), description=f"[Vote](https://top.gg/bot/605618911471468554/vote/) | [Support]({func.settings.invite_link}) | [Invite](https://discord.com/oauth2/authorize?client_id=605618911471468554&permissions=2184260928&scope=bot%20applications.commands) | [Questionnaire](https://forms.gle/UqeeEv4GEdCq9hi3A)", color=func.settings.embed_color)
|
||||
embed.set_image(url='https://i.imgur.com/dIFBwU7.png')
|
||||
|
||||
else:
|
||||
try:
|
||||
embed = Embed(color=func.embed_color)
|
||||
embed = Embed(color=func.settings.embed_color)
|
||||
embed.set_author(name=self.get_msg("playerAuthor").format(self.channel.name), icon_url=self.client.user.avatar.url)
|
||||
embed.description = self.get_msg("playerDesc").format(track.title, track.uri, (track.requester.mention if track.requester else "<@605618911471468554>"), (f"<@&{self.settings['dj']}>" if self.settings.get('dj') else f"{self.dj.mention}"))
|
||||
embed.set_image(url=track.thumbnail if track.thumbnail else "https://cdn.discordapp.com/attachments/674788144931012638/823086668445384704/eq-dribbble.gif")
|
||||
embed.set_footer(text=self.get_msg("playerFooter").format(self.queue.count, (self.get_msg("live") if track.is_stream else func.time(track.length)), self.volume, self.get_msg("playerFooter2").format(self.queue.repeat.capitalize()) if self.queue._repeat else ""))
|
||||
except:
|
||||
embed = Embed(description=self.get_msg("missingTrackInfo"), color=func.embed_color)
|
||||
embed = Embed(description=self.get_msg("missingTrackInfo"), color=func.settings.embed_color)
|
||||
return embed
|
||||
|
||||
async def is_position_fresh(self):
|
||||
|
||||
Reference in New Issue
Block a user