mirror of
https://github.com/UiO-Gaming/ShiteMusicBot.git
synced 2026-11-05 13:56:51 +01:00
Settings now has a single set/get instead of one set/get per setting.
This commit is contained in:
1 parent
1b6d553564
commit
7b2941ae2b
6 files changed
+82
-70
No files matched your search
@@ -26,7 +26,7 @@ default_prefix = config["default_prefix"]
|
||||
def _get_prefix(bot, message):
|
||||
if not message.guild:
|
||||
return default_prefix
|
||||
prefixes = bot.settings.get_prefix(message.guild.id)
|
||||
prefixes = bot.settings.get(message.guild.id, 'prefixes', 'default_prefix')
|
||||
return commands.when_mentioned_or(*prefixes)(bot, message)
|
||||
|
||||
|
||||
@@ -36,7 +36,7 @@ class Bot(commands.Bot):
|
||||
description=config["description"])
|
||||
|
||||
self.settings = Settings(**config)
|
||||
self.localizer = Localizer(self.settings.get_language_path(), "en_en")
|
||||
self.localizer = Localizer(self.settings.default_lang_path, "en_en")
|
||||
self.debug = debug
|
||||
|
||||
for extension in initial_extension:
|
||||
|
||||
+10
-10
@@ -20,8 +20,8 @@ class BotSettings:
|
||||
@commands.guild_only()
|
||||
@_set.command(name='serverlocale')
|
||||
async def _set_guild_locale(self, ctx, locale):
|
||||
self.settings.set_locale(ctx.guild.id, locale)
|
||||
locale = self.settings.get_locale(ctx.guild.id)
|
||||
self.settings.set(ctx.guild.id, 'locale', locale)
|
||||
locale = self.settings.get(ctx.guild.id, 'locale', 'default_lang')
|
||||
await ctx.send(f'Locale set to {locale}')
|
||||
|
||||
@commands.guild_only()
|
||||
@@ -29,21 +29,21 @@ class BotSettings:
|
||||
async def _set_guild_prefix(self, ctx, *prefixes):
|
||||
prefixes = list(prefixes)
|
||||
if prefixes != []:
|
||||
self.settings.set_prefix(ctx.guild.id, prefixes)
|
||||
prefixes = self.settings.get_prefix(ctx.guild.id)
|
||||
await ctx.send(self.format_prefixes(prefixes))
|
||||
self.settings.set(ctx.guild.id, 'prefixes', prefixes)
|
||||
prefixes = self.settings.get(ctx.guild.id, 'prefixes')
|
||||
await ctx.send(f'Server prefixes: {self.format_prefixes(prefixes)}')
|
||||
|
||||
@commands.guild_only()
|
||||
@_set.command(name='resetprefix')
|
||||
async def _reset_prefix(self, ctx):
|
||||
self.settings.set_prefix(ctx.guild.id, None)
|
||||
prefixes = self.settings.get_prefix(ctx.guild.id)
|
||||
self.settings.set(ctx.guild.id, 'prefixes', None)
|
||||
prefixes = self.settings.get(ctx.guild.id, 'prefixes', 'default_prefix')
|
||||
await ctx.send(self.format_prefixes(prefixes))
|
||||
|
||||
def format_prefixes(self, prefixes):
|
||||
if prefixes is None:
|
||||
prefixes = [self.bot.settings.default_prefix]
|
||||
formatted = 'Server prefixes: '
|
||||
formatted = ''
|
||||
for prefix in prefixes:
|
||||
formatted += f'`{prefix}`, '
|
||||
return formatted[:-2]
|
||||
@@ -60,8 +60,8 @@ class BotSettings:
|
||||
embed.description = f'Current settings for {ctx.guild.name}'
|
||||
embed.set_thumbnail(url=ctx.guild.icon_url)
|
||||
|
||||
prefixes = self.bot.settings.get_prefix(ctx.guild.id)
|
||||
locale = f'`{self.bot.settings.get_locale(ctx.guild.id)}`'
|
||||
prefixes = self.bot.settings.get(ctx.guild.id, 'prefixes', 'default_prefix')
|
||||
locale = f"{self.bot.settings.get(ctx.guild.id, 'locale', 'default_locale')}"
|
||||
embed.add_field(name='Locale', value=locale)
|
||||
embed.add_field(name='Prefix', value=self.format_prefixes(prefixes))
|
||||
await ctx.send(embed=embed)
|
||||
|
||||
+2
-2
@@ -54,7 +54,7 @@ class Misc:
|
||||
|
||||
embed.add_field(name='{info.music.players}', value=f'{len(lavalink.players)}')
|
||||
embed.add_field(name='{info.music.listeners}', value=f'{listeners}')
|
||||
embed = self.bot.localizer.format_embed(embed, self.bot.settings.get_locale(ctx.guild.id))
|
||||
embed = self.bot.localizer.format_embed(embed, self.bot.settings.get(ctx.guild.id, 'locale', 'default_locale'))
|
||||
await ctx.send(embed=embed)
|
||||
|
||||
|
||||
@@ -105,7 +105,7 @@ class Misc:
|
||||
value=uptimetext)
|
||||
|
||||
embed = self.bot.localizer.format_embed(embed,
|
||||
self.bot.settings.get_locale(ctx.guild.id),
|
||||
self.bot.settings.get(ctx.guild.id, 'locale', 'default_locale'),
|
||||
_python_v=platform.python_version(),
|
||||
_discord_v=discord.__version__,
|
||||
_lavalink_v=LavalinkVersion,
|
||||
|
||||
+1
-1
@@ -33,7 +33,7 @@ class Music:
|
||||
bot.add_listener(bot.lavalink.voice_update_handler, 'on_socket_response')
|
||||
|
||||
def getLocalizer(self, guild_id):
|
||||
lang = self.bot.settings.get_locale(guild_id)
|
||||
lang = self.bot.settings.get(guild_id, 'locale', 'default_locale')
|
||||
return LocalizerWrapper(self.bot.localizer, lang, "music.response")
|
||||
|
||||
|
||||
|
||||
@@ -50,7 +50,7 @@ def is_admin():
|
||||
|
||||
def is_mod():
|
||||
async def pred(ctx):
|
||||
modrole = ctx.bot.settings.get_mod_role(ctx.guild.id)
|
||||
modrole = ctx.bot.settings.get(ctx.guild.id, 'roles.moderator', 'default_mod')
|
||||
return has_role(ctx, modrole)
|
||||
return commands.check(pred)
|
||||
|
||||
|
||||
+66
-54
@@ -3,79 +3,91 @@ import json
|
||||
import codecs
|
||||
import locale
|
||||
|
||||
|
||||
class Settings:
|
||||
def __init__(self, **default_settings):
|
||||
self.DATA_PATH = 'data/settings/'
|
||||
self.SETTINGS_PATH = self.DATA_PATH + 'settings.json'
|
||||
self._DATA_PATH = 'data/bot/'
|
||||
self._SETTINGS_PATH = self._DATA_PATH + 'settings.json'
|
||||
|
||||
self.default_prefix = default_settings["default_prefix"]
|
||||
self.default_admin = default_settings["default_admin"]
|
||||
self.default_mod = default_settings["default_mod"]
|
||||
self.default_locale = default_settings["default_locale"]
|
||||
self.default_lang_path = default_settings["default_lang_path"] or "./localization"
|
||||
self.default_lang_path = default_settings["default_lang_path"] or \
|
||||
"./localization"
|
||||
|
||||
if not self.default_locale:
|
||||
locale, codepage = locale.getlocale()
|
||||
default_locale, default_codepage = locale.getdefaultlocale()
|
||||
self.default_locale = locale or default_locale
|
||||
|
||||
if not os.path.exists(self.DATA_PATH):
|
||||
os.makedirs(self.DATA_PATH)
|
||||
if not os.path.exists(self._DATA_PATH):
|
||||
os.makedirs(self._DATA_PATH)
|
||||
|
||||
if not os.path.isfile(self.SETTINGS_PATH):
|
||||
with codecs.open(self.SETTINGS_PATH, "w+", encoding='utf8') as f:
|
||||
json.dump({"locale": {}, "prefixes": {},
|
||||
"roles": {}}, f, indent=4)
|
||||
if not os.path.isfile(self._SETTINGS_PATH):
|
||||
with codecs.open(self._SETTINGS_PATH, "w+", encoding='utf8') as f:
|
||||
json.dump({}, f, indent=4)
|
||||
|
||||
with codecs.open(self.SETTINGS_PATH, "r", encoding='utf8') as f:
|
||||
with codecs.open(self._SETTINGS_PATH, "r", encoding='utf8') as f:
|
||||
self.settings = json.load(f)
|
||||
|
||||
def get_prefix(self, guild_id):
|
||||
guild_id = str(guild_id)
|
||||
if guild_id in self.settings["prefixes"].keys():
|
||||
return self.settings["prefixes"][guild_id]
|
||||
return self.default_prefix
|
||||
|
||||
def set_prefix(self, guild_id, prefixes):
|
||||
if prefixes is None:
|
||||
self.settings["prefixes"].pop(str(guild_id), None)
|
||||
def _set(self, d, keys, val):
|
||||
key = keys[0]
|
||||
if len(keys) == 1:
|
||||
if val is None:
|
||||
try:
|
||||
d.pop(key)
|
||||
except:
|
||||
pass
|
||||
else:
|
||||
d[key] = val
|
||||
return
|
||||
if key in d.keys():
|
||||
if not isinstance(d[key], dict):
|
||||
d[key] = {}
|
||||
self._set(d[key], keys[1:], val)
|
||||
else:
|
||||
self.settings["prefixes"][str(guild_id)] = prefixes
|
||||
with codecs.open(self.SETTINGS_PATH, "w", encoding='utf8') as f:
|
||||
json.dump(self.settings, f, indent=4)
|
||||
d[key] = {}
|
||||
self._set(d[key], keys[1:], val)
|
||||
|
||||
def get_mod_role(self, guild_id):
|
||||
guild_id = str(guild_id)
|
||||
if guild_id in self.settings["roles"].keys():
|
||||
if 'mod' in self.settings["roles"][guild_id].keys():
|
||||
return self.settings["roles"][guild_id]['mod']
|
||||
return self.default_mod
|
||||
def _get(self, d, keys):
|
||||
key = keys[0]
|
||||
try:
|
||||
if len(keys) > 1 and isinstance(d[key], dict):
|
||||
return self._get(d[key], keys[1:])
|
||||
else:
|
||||
return d[key]
|
||||
except KeyError:
|
||||
return None
|
||||
|
||||
def get_admin_role(self, guild_id):
|
||||
def set(self, guild_id, setting, value):
|
||||
""" Set value in settings, will overwrite any existing values. """
|
||||
guild_id = str(guild_id)
|
||||
if guild_id in self.settings["roles"].keys():
|
||||
if 'admin' in self.settings["roles"][guild_id].keys():
|
||||
return self.settings["roles"][guild_id]['admin']
|
||||
return self.default_admin
|
||||
|
||||
def set_mod_admin_role(self, guild_id, admin, mod):
|
||||
if guild_id not in self.settings.keys():
|
||||
self.settings[guild_id] = {}
|
||||
|
||||
self._set(self.settings[guild_id], setting.split('.'), value)
|
||||
|
||||
with codecs.open(self._SETTINGS_PATH, 'w', encoding='utf8') as f:
|
||||
json.dump(self.settings, f, indent=2)
|
||||
|
||||
def get(self, guild_id, setting, default=''):
|
||||
""" Gets a value from the settings if a default return value is specified
|
||||
it will return the default if no setting is found. If that default is a
|
||||
class attribute the value of the attribute will get returned."""
|
||||
guild_id = str(guild_id)
|
||||
if admin is None or mod is None:
|
||||
self.settings["role"].pop(guild_id, None)
|
||||
|
||||
if default and hasattr(self, default):
|
||||
default = getattr(self, default)
|
||||
elif not default:
|
||||
default = None
|
||||
|
||||
if guild_id not in self.settings.keys():
|
||||
return default
|
||||
|
||||
value = self._get(self.settings[guild_id], setting.split('.'))
|
||||
if value:
|
||||
return value
|
||||
else:
|
||||
self.settings["role"][guild_id]["mod"] = mod
|
||||
self.settings["role"][guild_id]["admin"] = admin
|
||||
|
||||
with codecs.open(self.SETTINGS_PATH, "w", encoding='utf8') as f:
|
||||
json.dump(self.settings, f, indent=4)
|
||||
|
||||
def set_locale(self, guild_id, locale):
|
||||
guild_id = str(guild_id)
|
||||
self.settings["locale"][guild_id] = locale
|
||||
with codecs.open(self.SETTINGS_PATH, "w", encoding='utf8') as f:
|
||||
json.dump(self.settings, f, indent=4)
|
||||
|
||||
def get_locale(self, guild_id):
|
||||
guild_id = str(guild_id)
|
||||
return self.settings.get("locale", {}).get(guild_id, self.default_locale).lower()
|
||||
|
||||
def get_language_path(self):
|
||||
return self.settings.get("language_path", self.default_lang_path)
|
||||
return default
|
||||
Reference in new issue
Block a user