mirror of
https://github.com/Cog-Creators/Red-DiscordBot.git
synced 2025-11-06 11:18:54 -05:00
[Mod] Add two new settings to disable name/nickname tracking (#4799)
* Add default settings for name tracking * Add configuration command for name tracking * Check the track names settings before tracking * *grumble* * Fix permissions levels * Update settings.py * Use clean_prefix in inline, and don't use f-strings in `_()` Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
This commit is contained in:
parent
62411bc2a5
commit
7b04c04551
@ -161,6 +161,9 @@ class Events(MixinMeta):
|
|||||||
@commands.Cog.listener()
|
@commands.Cog.listener()
|
||||||
async def on_user_update(self, before: discord.User, after: discord.User):
|
async def on_user_update(self, before: discord.User, after: discord.User):
|
||||||
if before.name != after.name:
|
if before.name != after.name:
|
||||||
|
track_all_names = await self.config.track_all_names()
|
||||||
|
if not track_all_names:
|
||||||
|
return
|
||||||
async with self.config.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
|
while None in name_list: # clean out null entries from a bug
|
||||||
name_list.remove(None)
|
name_list.remove(None)
|
||||||
@ -177,6 +180,10 @@ class Events(MixinMeta):
|
|||||||
guild = after.guild
|
guild = after.guild
|
||||||
if (not guild) or await self.bot.cog_disabled_in_guild(self, guild):
|
if (not guild) or await self.bot.cog_disabled_in_guild(self, guild):
|
||||||
return
|
return
|
||||||
|
track_all_names = await self.config.track_all_names()
|
||||||
|
track_nicknames = await self.config.guild(guild).track_nicknames()
|
||||||
|
if (not track_all_names) or (not track_nicknames):
|
||||||
|
return
|
||||||
async with self.config.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
|
while None in nick_list: # clean out null entries from a bug
|
||||||
nick_list.remove(None)
|
nick_list.remove(None)
|
||||||
|
|||||||
@ -44,7 +44,10 @@ class Mod(
|
|||||||
):
|
):
|
||||||
"""Moderation tools."""
|
"""Moderation tools."""
|
||||||
|
|
||||||
default_global_settings = {"version": ""}
|
default_global_settings = {
|
||||||
|
"version": "",
|
||||||
|
"track_all_names": True,
|
||||||
|
}
|
||||||
|
|
||||||
default_guild_settings = {
|
default_guild_settings = {
|
||||||
"mention_spam": {"ban": None, "kick": None, "warn": None, "strict": False},
|
"mention_spam": {"ban": None, "kick": None, "warn": None, "strict": False},
|
||||||
@ -57,6 +60,7 @@ class Mod(
|
|||||||
"dm_on_kickban": False,
|
"dm_on_kickban": False,
|
||||||
"default_days": 0,
|
"default_days": 0,
|
||||||
"default_tempban_duration": 60 * 60 * 24,
|
"default_tempban_duration": 60 * 60 * 24,
|
||||||
|
"track_nicknames": True,
|
||||||
}
|
}
|
||||||
|
|
||||||
default_channel_settings = {"ignored": False}
|
default_channel_settings = {"ignored": False}
|
||||||
|
|||||||
@ -18,7 +18,6 @@ class ModSettings(MixinMeta):
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
@commands.group()
|
@commands.group()
|
||||||
@commands.guild_only()
|
|
||||||
@checks.guildowner_or_permissions(administrator=True)
|
@checks.guildowner_or_permissions(administrator=True)
|
||||||
async def modset(self, ctx: commands.Context):
|
async def modset(self, ctx: commands.Context):
|
||||||
"""Manage server administration settings."""
|
"""Manage server administration settings."""
|
||||||
@ -26,8 +25,19 @@ class ModSettings(MixinMeta):
|
|||||||
@modset.command(name="showsettings")
|
@modset.command(name="showsettings")
|
||||||
async def modset_showsettings(self, ctx: commands.Context):
|
async def modset_showsettings(self, ctx: commands.Context):
|
||||||
"""Show the current server administration settings."""
|
"""Show the current server administration settings."""
|
||||||
|
globaldata = await self.config.all()
|
||||||
|
track_all_names = globaldata["track_all_names"]
|
||||||
|
msg = ""
|
||||||
|
msg += _("Track name changes: {yes_or_no}\n").format(
|
||||||
|
yes_or_no=_("Yes") if track_all_names else _("No")
|
||||||
|
)
|
||||||
guild = ctx.guild
|
guild = ctx.guild
|
||||||
|
if not guild:
|
||||||
|
await ctx.send(box(msg))
|
||||||
|
return
|
||||||
|
|
||||||
data = await self.config.guild(guild).all()
|
data = await self.config.guild(guild).all()
|
||||||
|
track_nicknames = data["track_nicknames"]
|
||||||
delete_repeats = data["delete_repeats"]
|
delete_repeats = data["delete_repeats"]
|
||||||
warn_mention_spam = data["mention_spam"]["warn"]
|
warn_mention_spam = data["mention_spam"]["warn"]
|
||||||
kick_mention_spam = data["mention_spam"]["kick"]
|
kick_mention_spam = data["mention_spam"]["kick"]
|
||||||
@ -39,7 +49,11 @@ class ModSettings(MixinMeta):
|
|||||||
dm_on_kickban = data["dm_on_kickban"]
|
dm_on_kickban = data["dm_on_kickban"]
|
||||||
default_days = data["default_days"]
|
default_days = data["default_days"]
|
||||||
default_tempban_duration = data["default_tempban_duration"]
|
default_tempban_duration = data["default_tempban_duration"]
|
||||||
msg = ""
|
if not track_all_names and track_nicknames:
|
||||||
|
yes_or_no = _("Overridden by another setting")
|
||||||
|
else:
|
||||||
|
yes_or_no = _("Yes") if track_nicknames else _("No")
|
||||||
|
msg += _("Track nickname changes: {yes_or_no}\n").format(yes_or_no=yes_or_no)
|
||||||
msg += _("Delete repeats: {num_repeats}\n").format(
|
msg += _("Delete repeats: {num_repeats}\n").format(
|
||||||
num_repeats=_("after {num} repeats").format(num=delete_repeats)
|
num_repeats=_("after {num} repeats").format(num=delete_repeats)
|
||||||
if delete_repeats != -1
|
if delete_repeats != -1
|
||||||
@ -401,6 +415,58 @@ class ModSettings(MixinMeta):
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@modset.command()
|
||||||
|
@commands.guild_only()
|
||||||
|
async def tracknicknames(self, ctx: commands.Context, enabled: bool = None):
|
||||||
|
"""
|
||||||
|
Toggle whether nickname changes should be tracked.
|
||||||
|
|
||||||
|
This setting will be overridden if trackallnames is disabled.
|
||||||
|
"""
|
||||||
|
guild = ctx.guild
|
||||||
|
if enabled is None:
|
||||||
|
state = await self.config.guild(guild).track_nicknames()
|
||||||
|
if state:
|
||||||
|
msg = _("Nickname changes are currently being tracked.")
|
||||||
|
else:
|
||||||
|
msg = _("Nickname changes are not currently being tracked.")
|
||||||
|
await ctx.send(msg)
|
||||||
|
return
|
||||||
|
|
||||||
|
if enabled:
|
||||||
|
msg = _("Nickname changes will now be tracked.")
|
||||||
|
else:
|
||||||
|
msg = _("Nickname changes will no longer be tracked.")
|
||||||
|
await self.config.guild(guild).track_nicknames.set(enabled)
|
||||||
|
await ctx.send(msg)
|
||||||
|
|
||||||
|
@modset.command()
|
||||||
|
@commands.is_owner()
|
||||||
|
async def trackallnames(self, ctx: commands.Context, enabled: bool = None):
|
||||||
|
"""
|
||||||
|
Toggle whether all name changes should be tracked.
|
||||||
|
|
||||||
|
Toggling this off also overrides the tracknicknames setting.
|
||||||
|
"""
|
||||||
|
if enabled is None:
|
||||||
|
state = await self.config.track_all_names()
|
||||||
|
if state:
|
||||||
|
msg = _("Name changes are currently being tracked.")
|
||||||
|
else:
|
||||||
|
msg = _("All name changes are currently not being tracked.")
|
||||||
|
await ctx.send(msg)
|
||||||
|
return
|
||||||
|
|
||||||
|
if enabled:
|
||||||
|
msg = _("Name changes will now be tracked.")
|
||||||
|
else:
|
||||||
|
msg = _(
|
||||||
|
"All name changes will no longer be tracked.\n"
|
||||||
|
"To delete existing name data, use {command}."
|
||||||
|
).format(command=f"`{ctx.clean_prefix}modset deletenames`")
|
||||||
|
await self.config.track_all_names.set(enabled)
|
||||||
|
await ctx.send(msg)
|
||||||
|
|
||||||
@modset.command()
|
@modset.command()
|
||||||
@commands.max_concurrency(1, commands.BucketType.default)
|
@commands.max_concurrency(1, commands.BucketType.default)
|
||||||
@commands.is_owner()
|
@commands.is_owner()
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user