Settings now has a single set/get instead of one set/get per setting.

This commit is contained in:
Ev-1 committed 2019-02-02 14:17:51 +01:00
1 parent 1b6d553564
commit 7b2941ae2b
6 files changed
+82 -70

No files matched your search

+2 -2
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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")
+1 -1
View File
@@ -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
View File
@@ -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