mirror of
https://github.com/Cog-Creators/Red-DiscordBot.git
synced 2025-11-20 18:06:08 -05:00
Normalize names of attributes with Config instances (#3765)
* Lets normalize how we name config attributes across the bot. Signed-off-by: Drapersniper <27962761+drapersniper@users.noreply.github.com> * .... Signed-off-by: Drapersniper <27962761+drapersniper@users.noreply.github.com> * nothing to see here Signed-off-by: Drapersniper <27962761+drapersniper@users.noreply.github.com>
This commit is contained in:
@@ -14,7 +14,7 @@ class MixinMeta(ABC):
|
||||
"""
|
||||
|
||||
def __init__(self, *_args):
|
||||
self.settings: Config
|
||||
self.config: Config
|
||||
self.bot: Red
|
||||
self.cache: dict
|
||||
|
||||
|
||||
@@ -23,7 +23,7 @@ class Events(MixinMeta):
|
||||
|
||||
guild_cache = self.cache.get(guild.id, None)
|
||||
if guild_cache is None:
|
||||
repeats = await self.settings.guild(guild).delete_repeats()
|
||||
repeats = await self.config.guild(guild).delete_repeats()
|
||||
if repeats == -1:
|
||||
return False
|
||||
guild_cache = self.cache[guild.id] = defaultdict(lambda: deque(maxlen=repeats))
|
||||
@@ -45,7 +45,7 @@ class Events(MixinMeta):
|
||||
guild = message.guild
|
||||
author = message.author
|
||||
|
||||
max_mentions = await self.settings.guild(guild).ban_mention_spam()
|
||||
max_mentions = await self.config.guild(guild).ban_mention_spam()
|
||||
if max_mentions:
|
||||
mentions = set(message.mentions)
|
||||
if len(mentions) >= max_mentions:
|
||||
@@ -97,7 +97,7 @@ class Events(MixinMeta):
|
||||
@commands.Cog.listener()
|
||||
async def on_user_update(self, before: discord.User, after: discord.User):
|
||||
if before.name != after.name:
|
||||
async with self.settings.user(before).past_names() as name_list:
|
||||
async with self.config.user(before).past_names() as name_list:
|
||||
while None in name_list: # clean out null entries from a bug
|
||||
name_list.remove(None)
|
||||
if after.name in name_list:
|
||||
@@ -110,7 +110,7 @@ class Events(MixinMeta):
|
||||
@commands.Cog.listener()
|
||||
async def on_member_update(self, before: discord.Member, after: discord.Member):
|
||||
if before.nick != after.nick and after.nick is not None:
|
||||
async with self.settings.member(before).past_nicks() as nick_list:
|
||||
async with self.config.member(before).past_nicks() as nick_list:
|
||||
while None in nick_list: # clean out null entries from a bug
|
||||
nick_list.remove(None)
|
||||
if after.nick in nick_list:
|
||||
|
||||
@@ -71,7 +71,7 @@ class KickBanMixin(MixinMeta):
|
||||
|
||||
if author == user:
|
||||
return _("I cannot let you do that. Self-harm is bad {}").format("\N{PENSIVE FACE}")
|
||||
elif not await is_allowed_by_hierarchy(self.bot, self.settings, guild, author, user):
|
||||
elif not await is_allowed_by_hierarchy(self.bot, self.config, guild, author, user):
|
||||
return _(
|
||||
"I cannot let you do that. You are "
|
||||
"not higher than the user in the role "
|
||||
@@ -82,7 +82,7 @@ class KickBanMixin(MixinMeta):
|
||||
elif not (0 <= days <= 7):
|
||||
return _("Invalid days. Must be between 0 and 7.")
|
||||
|
||||
toggle = await self.settings.guild(guild).dm_on_kickban()
|
||||
toggle = await self.config.guild(guild).dm_on_kickban()
|
||||
if toggle:
|
||||
with contextlib.suppress(discord.HTTPException):
|
||||
em = discord.Embed(
|
||||
@@ -142,13 +142,13 @@ class KickBanMixin(MixinMeta):
|
||||
except discord.HTTPException:
|
||||
continue
|
||||
|
||||
async with self.settings.guild(guild).current_tempbans() as guild_tempbans:
|
||||
async with self.config.guild(guild).current_tempbans() as guild_tempbans:
|
||||
for uid in guild_tempbans.copy():
|
||||
user = banned_users.get(uid, None)
|
||||
if not user:
|
||||
continue
|
||||
unban_time = datetime.utcfromtimestamp(
|
||||
await self.settings.member(member(uid, guild)).banned_until()
|
||||
await self.config.member(member(uid, guild)).banned_until()
|
||||
)
|
||||
if datetime.utcnow() > unban_time: # Time to unban the user
|
||||
queue_entry = (guild.id, uid)
|
||||
@@ -186,7 +186,7 @@ class KickBanMixin(MixinMeta):
|
||||
)
|
||||
)
|
||||
return
|
||||
elif not await is_allowed_by_hierarchy(self.bot, self.settings, guild, author, user):
|
||||
elif not await is_allowed_by_hierarchy(self.bot, self.config, guild, author, user):
|
||||
await ctx.send(
|
||||
_(
|
||||
"I cannot let you do that. You are "
|
||||
@@ -199,7 +199,7 @@ class KickBanMixin(MixinMeta):
|
||||
await ctx.send(_("I cannot do that due to discord hierarchy rules"))
|
||||
return
|
||||
audit_reason = get_audit_reason(author, reason)
|
||||
toggle = await self.settings.guild(guild).dm_on_kickban()
|
||||
toggle = await self.config.guild(guild).dm_on_kickban()
|
||||
if toggle:
|
||||
with contextlib.suppress(discord.HTTPException):
|
||||
em = discord.Embed(
|
||||
@@ -255,7 +255,7 @@ class KickBanMixin(MixinMeta):
|
||||
author = ctx.author
|
||||
guild = ctx.guild
|
||||
if days is None:
|
||||
days = await self.settings.guild(guild).default_days()
|
||||
days = await self.config.guild(guild).default_days()
|
||||
|
||||
result = await self.ban_user(
|
||||
user=user, ctx=ctx, days=days, reason=reason, create_modlog_case=True
|
||||
@@ -309,7 +309,7 @@ class KickBanMixin(MixinMeta):
|
||||
return
|
||||
|
||||
if days is None:
|
||||
days = await self.settings.guild(guild).default_days()
|
||||
days = await self.config.guild(guild).default_days()
|
||||
|
||||
if not (0 <= days <= 7):
|
||||
await ctx.send(_("Invalid days. Must be between 0 and 7."))
|
||||
@@ -409,10 +409,10 @@ class KickBanMixin(MixinMeta):
|
||||
invite = ""
|
||||
|
||||
queue_entry = (guild.id, user.id)
|
||||
await self.settings.member(user).banned_until.set(unban_time.timestamp())
|
||||
cur_tbans = await self.settings.guild(guild).current_tempbans()
|
||||
await self.config.member(user).banned_until.set(unban_time.timestamp())
|
||||
cur_tbans = await self.config.guild(guild).current_tempbans()
|
||||
cur_tbans.append(user.id)
|
||||
await self.settings.guild(guild).current_tempbans.set(cur_tbans)
|
||||
await self.config.guild(guild).current_tempbans.set(cur_tbans)
|
||||
|
||||
with contextlib.suppress(discord.HTTPException):
|
||||
# We don't want blocked DMs preventing us from banning
|
||||
@@ -464,7 +464,7 @@ class KickBanMixin(MixinMeta):
|
||||
)
|
||||
)
|
||||
return
|
||||
elif not await is_allowed_by_hierarchy(self.bot, self.settings, guild, author, user):
|
||||
elif not await is_allowed_by_hierarchy(self.bot, self.config, guild, author, user):
|
||||
await ctx.send(
|
||||
_(
|
||||
"I cannot let you do that. You are "
|
||||
@@ -540,7 +540,7 @@ class KickBanMixin(MixinMeta):
|
||||
|
||||
if await self._voice_perm_check(ctx, user_voice_state, move_members=True) is False:
|
||||
return
|
||||
elif not await is_allowed_by_hierarchy(self.bot, self.settings, guild, author, member):
|
||||
elif not await is_allowed_by_hierarchy(self.bot, self.config, guild, author, member):
|
||||
await ctx.send(
|
||||
_(
|
||||
"I cannot let you do that. You are "
|
||||
@@ -620,7 +620,7 @@ class KickBanMixin(MixinMeta):
|
||||
await ctx.send(e)
|
||||
await ctx.send(_("Unbanned that user from this server"))
|
||||
|
||||
if await self.settings.guild(guild).reinvite_on_unban():
|
||||
if await self.config.guild(guild).reinvite_on_unban():
|
||||
user = ctx.bot.get_user(user_id)
|
||||
if not user:
|
||||
await ctx.send(
|
||||
|
||||
@@ -69,12 +69,12 @@ class Mod(
|
||||
super().__init__()
|
||||
self.bot = bot
|
||||
|
||||
self.settings = Config.get_conf(self, 4961522000, force_registration=True)
|
||||
self.settings.register_global(**self.default_global_settings)
|
||||
self.settings.register_guild(**self.default_guild_settings)
|
||||
self.settings.register_channel(**self.default_channel_settings)
|
||||
self.settings.register_member(**self.default_member_settings)
|
||||
self.settings.register_user(**self.default_user_settings)
|
||||
self.config = Config.get_conf(self, 4961522000, force_registration=True)
|
||||
self.config.register_global(**self.default_global_settings)
|
||||
self.config.register_guild(**self.default_guild_settings)
|
||||
self.config.register_channel(**self.default_channel_settings)
|
||||
self.config.register_member(**self.default_member_settings)
|
||||
self.config.register_user(**self.default_user_settings)
|
||||
self.cache: dict = {}
|
||||
self.tban_expiry_task = self.bot.loop.create_task(self.check_tempban_expirations())
|
||||
self.last_case: dict = defaultdict(dict)
|
||||
@@ -93,45 +93,45 @@ class Mod(
|
||||
|
||||
async def _maybe_update_config(self):
|
||||
"""Maybe update `delete_delay` value set by Config prior to Mod 1.0.0."""
|
||||
if not await self.settings.version():
|
||||
guild_dict = await self.settings.all_guilds()
|
||||
if not await self.config.version():
|
||||
guild_dict = await self.config.all_guilds()
|
||||
for guild_id, info in guild_dict.items():
|
||||
delete_repeats = info.get("delete_repeats", False)
|
||||
if delete_repeats:
|
||||
val = 3
|
||||
else:
|
||||
val = -1
|
||||
await self.settings.guild(discord.Object(id=guild_id)).delete_repeats.set(val)
|
||||
await self.settings.version.set("1.0.0") # set version of last update
|
||||
if await self.settings.version() < "1.1.0":
|
||||
await self.config.guild(discord.Object(id=guild_id)).delete_repeats.set(val)
|
||||
await self.config.version.set("1.0.0") # set version of last update
|
||||
if await self.config.version() < "1.1.0":
|
||||
msg = _(
|
||||
"Ignored guilds and channels have been moved. "
|
||||
"Please use `[p]moveignoredchannels` if "
|
||||
"you were previously using these functions."
|
||||
)
|
||||
self.bot.loop.create_task(send_to_owners_with_prefix_replaced(self.bot, msg))
|
||||
await self.settings.version.set("1.1.0")
|
||||
if await self.settings.version() < "1.2.0":
|
||||
await self.config.version.set("1.1.0")
|
||||
if await self.config.version() < "1.2.0":
|
||||
msg = _(
|
||||
"Delete delay settings have been moved. "
|
||||
"Please use `[p]movedeletedelay` if "
|
||||
"you were previously using these functions."
|
||||
)
|
||||
self.bot.loop.create_task(send_to_owners_with_prefix_replaced(self.bot, msg))
|
||||
await self.settings.version.set("1.2.0")
|
||||
await self.config.version.set("1.2.0")
|
||||
|
||||
@commands.command()
|
||||
@commands.is_owner()
|
||||
async def moveignoredchannels(self, ctx: commands.Context) -> None:
|
||||
"""Move ignored channels and servers to core"""
|
||||
all_guilds = await self.settings.all_guilds()
|
||||
all_channels = await self.settings.all_channels()
|
||||
all_guilds = await self.config.all_guilds()
|
||||
all_channels = await self.config.all_channels()
|
||||
for guild_id, settings in all_guilds.items():
|
||||
await self.bot._config.guild_from_id(guild_id).ignored.set(settings["ignored"])
|
||||
await self.settings.guild_from_id(guild_id).ignored.clear()
|
||||
await self.config.guild_from_id(guild_id).ignored.clear()
|
||||
for channel_id, settings in all_channels.items():
|
||||
await self.bot._config.channel_from_id(channel_id).ignored.set(settings["ignored"])
|
||||
await self.settings.channel_from_id(channel_id).clear()
|
||||
await self.config.channel_from_id(channel_id).clear()
|
||||
await ctx.send(_("Ignored channels and guilds restored."))
|
||||
|
||||
@commands.command()
|
||||
@@ -140,10 +140,10 @@ class Mod(
|
||||
"""
|
||||
Move deletedelay settings to core
|
||||
"""
|
||||
all_guilds = await self.settings.all_guilds()
|
||||
all_guilds = await self.config.all_guilds()
|
||||
for guild_id, settings in all_guilds.items():
|
||||
await self.bot._config.guild_from_id(guild_id).delete_delay.set(
|
||||
settings["delete_delay"]
|
||||
)
|
||||
await self.settings.guild_from_id(guild_id).delete_delay.clear()
|
||||
await self.config.guild_from_id(guild_id).delete_delay.clear()
|
||||
await ctx.send(_("Delete delay settings restored."))
|
||||
|
||||
@@ -415,7 +415,7 @@ class MuteMixin(MixinMeta):
|
||||
if all(getattr(permissions, p) is False for p in new_overs.keys()):
|
||||
return False, _(mute_unmute_issues["already_muted"])
|
||||
|
||||
elif not await is_allowed_by_hierarchy(self.bot, self.settings, guild, author, user):
|
||||
elif not await is_allowed_by_hierarchy(self.bot, self.config, guild, author, user):
|
||||
return False, _(mute_unmute_issues["hierarchy_problem"])
|
||||
|
||||
old_overs = {k: getattr(overwrites, k) for k in new_overs}
|
||||
@@ -430,9 +430,7 @@ class MuteMixin(MixinMeta):
|
||||
elif e.code == 10009:
|
||||
return False, _(mute_unmute_issues["left_guild"])
|
||||
else:
|
||||
await self.settings.member(user).set_raw(
|
||||
"perms_cache", str(channel.id), value=old_overs
|
||||
)
|
||||
await self.config.member(user).set_raw("perms_cache", str(channel.id), value=old_overs)
|
||||
return True, None
|
||||
|
||||
async def unmute_user(
|
||||
@@ -444,7 +442,7 @@ class MuteMixin(MixinMeta):
|
||||
reason: str,
|
||||
) -> (bool, str):
|
||||
overwrites = channel.overwrites_for(user)
|
||||
perms_cache = await self.settings.member(user).perms_cache()
|
||||
perms_cache = await self.config.member(user).perms_cache()
|
||||
|
||||
if channel.id in perms_cache:
|
||||
old_values = perms_cache[channel.id]
|
||||
@@ -454,7 +452,7 @@ class MuteMixin(MixinMeta):
|
||||
if all(getattr(overwrites, k) == v for k, v in old_values.items()):
|
||||
return False, _(mute_unmute_issues["already_unmuted"])
|
||||
|
||||
elif not await is_allowed_by_hierarchy(self.bot, self.settings, guild, author, user):
|
||||
elif not await is_allowed_by_hierarchy(self.bot, self.config, guild, author, user):
|
||||
return False, _(mute_unmute_issues["hierarchy_problem"])
|
||||
|
||||
overwrites.update(**old_values)
|
||||
@@ -473,5 +471,5 @@ class MuteMixin(MixinMeta):
|
||||
elif e.code == 10009:
|
||||
return False, _(mute_unmute_issues["left_guild"])
|
||||
else:
|
||||
await self.settings.member(user).clear_raw("perms_cache", str(channel.id))
|
||||
await self.config.member(user).clear_raw("perms_cache", str(channel.id))
|
||||
return True, None
|
||||
|
||||
@@ -20,8 +20,8 @@ class ModInfo(MixinMeta):
|
||||
"""
|
||||
|
||||
async def get_names_and_nicks(self, user):
|
||||
names = await self.settings.user(user).past_names()
|
||||
nicks = await self.settings.member(user).past_nicks()
|
||||
names = await self.config.user(user).past_names()
|
||||
nicks = await self.config.member(user).past_nicks()
|
||||
if names:
|
||||
names = [escape_spoilers_and_mass_mentions(name) for name in names if name]
|
||||
if nicks:
|
||||
|
||||
@@ -21,7 +21,7 @@ class ModSettings(MixinMeta):
|
||||
if ctx.invoked_subcommand is None:
|
||||
guild = ctx.guild
|
||||
# Display current settings
|
||||
data = await self.settings.guild(guild).all()
|
||||
data = await self.config.guild(guild).all()
|
||||
delete_repeats = data["delete_repeats"]
|
||||
ban_mention_spam = data["ban_mention_spam"]
|
||||
respect_hierarchy = data["respect_hierarchy"]
|
||||
@@ -73,14 +73,14 @@ class ModSettings(MixinMeta):
|
||||
This is enabled by default.
|
||||
"""
|
||||
guild = ctx.guild
|
||||
toggled = await self.settings.guild(guild).respect_hierarchy()
|
||||
toggled = await self.config.guild(guild).respect_hierarchy()
|
||||
if not toggled:
|
||||
await self.settings.guild(guild).respect_hierarchy.set(True)
|
||||
await self.config.guild(guild).respect_hierarchy.set(True)
|
||||
await ctx.send(
|
||||
_("Role hierarchy will be checked when moderation commands are issued.")
|
||||
)
|
||||
else:
|
||||
await self.settings.guild(guild).respect_hierarchy.set(False)
|
||||
await self.config.guild(guild).respect_hierarchy.set(False)
|
||||
await ctx.send(
|
||||
_("Role hierarchy will be ignored when moderation commands are issued.")
|
||||
)
|
||||
@@ -99,7 +99,7 @@ class ModSettings(MixinMeta):
|
||||
if max_mentions:
|
||||
if max_mentions < 5:
|
||||
max_mentions = 5
|
||||
await self.settings.guild(guild).ban_mention_spam.set(max_mentions)
|
||||
await self.config.guild(guild).ban_mention_spam.set(max_mentions)
|
||||
await ctx.send(
|
||||
_(
|
||||
"Autoban for mention spam enabled. "
|
||||
@@ -108,11 +108,11 @@ class ModSettings(MixinMeta):
|
||||
).format(max_mentions=max_mentions)
|
||||
)
|
||||
else:
|
||||
cur_setting = await self.settings.guild(guild).ban_mention_spam()
|
||||
cur_setting = await self.config.guild(guild).ban_mention_spam()
|
||||
if not cur_setting:
|
||||
await ctx.send_help()
|
||||
return
|
||||
await self.settings.guild(guild).ban_mention_spam.set(False)
|
||||
await self.config.guild(guild).ban_mention_spam.set(False)
|
||||
await ctx.send(_("Autoban for mention spam disabled."))
|
||||
|
||||
@modset.command()
|
||||
@@ -127,11 +127,11 @@ class ModSettings(MixinMeta):
|
||||
guild = ctx.guild
|
||||
if repeats is not None:
|
||||
if repeats == -1:
|
||||
await self.settings.guild(guild).delete_repeats.set(repeats)
|
||||
await self.config.guild(guild).delete_repeats.set(repeats)
|
||||
self.cache.pop(guild.id, None) # remove cache with old repeat limits
|
||||
await ctx.send(_("Repeated messages will be ignored."))
|
||||
elif 2 <= repeats <= 20:
|
||||
await self.settings.guild(guild).delete_repeats.set(repeats)
|
||||
await self.config.guild(guild).delete_repeats.set(repeats)
|
||||
# purge and update cache to new repeat limits
|
||||
self.cache[guild.id] = defaultdict(lambda: deque(maxlen=repeats))
|
||||
await ctx.send(
|
||||
@@ -145,7 +145,7 @@ class ModSettings(MixinMeta):
|
||||
)
|
||||
)
|
||||
else:
|
||||
repeats = await self.settings.guild(guild).delete_repeats()
|
||||
repeats = await self.config.guild(guild).delete_repeats()
|
||||
if repeats != -1:
|
||||
await ctx.send(
|
||||
_(
|
||||
@@ -166,16 +166,16 @@ class ModSettings(MixinMeta):
|
||||
to the newly-unbanned user.
|
||||
"""
|
||||
guild = ctx.guild
|
||||
cur_setting = await self.settings.guild(guild).reinvite_on_unban()
|
||||
cur_setting = await self.config.guild(guild).reinvite_on_unban()
|
||||
if not cur_setting:
|
||||
await self.settings.guild(guild).reinvite_on_unban.set(True)
|
||||
await self.config.guild(guild).reinvite_on_unban.set(True)
|
||||
await ctx.send(
|
||||
_("Users unbanned with `{command}` will be reinvited.").format(
|
||||
command=f"{ctx.clean_prefix}unban"
|
||||
)
|
||||
)
|
||||
else:
|
||||
await self.settings.guild(guild).reinvite_on_unban.set(False)
|
||||
await self.config.guild(guild).reinvite_on_unban.set(False)
|
||||
await ctx.send(
|
||||
_("Users unbanned with `{command}` will not be reinvited.").format(
|
||||
command=f"{ctx.clean_prefix}unban"
|
||||
@@ -192,12 +192,12 @@ class ModSettings(MixinMeta):
|
||||
"""
|
||||
guild = ctx.guild
|
||||
if enabled is None:
|
||||
setting = await self.settings.guild(guild).dm_on_kickban()
|
||||
setting = await self.config.guild(guild).dm_on_kickban()
|
||||
await ctx.send(
|
||||
_("DM when kicked/banned is currently set to: {setting}").format(setting=setting)
|
||||
)
|
||||
return
|
||||
await self.settings.guild(guild).dm_on_kickban.set(enabled)
|
||||
await self.config.guild(guild).dm_on_kickban.set(enabled)
|
||||
if enabled:
|
||||
await ctx.send(_("Bot will now attempt to send a DM to user before kick and ban."))
|
||||
else:
|
||||
@@ -215,7 +215,7 @@ class ModSettings(MixinMeta):
|
||||
guild = ctx.guild
|
||||
if not (0 <= days <= 7):
|
||||
return await ctx.send(_("Invalid number of days. Must be between 0 and 7."))
|
||||
await self.settings.guild(guild).default_days.set(days)
|
||||
await self.config.guild(guild).default_days.set(days)
|
||||
await ctx.send(
|
||||
_("{days} days worth of messages will be deleted when a user is banned.").format(
|
||||
days=days
|
||||
|
||||
Reference in New Issue
Block a user