diff --git a/changelog.d/mod/2930.enhance.rst b/changelog.d/mod/2930.enhance.rst new file mode 100644 index 000000000..c85c0238d --- /dev/null +++ b/changelog.d/mod/2930.enhance.rst @@ -0,0 +1 @@ +Added a defaultdays command to set the amount of days for the ban commands to use for days of messages deleted when days isn't used in the command itself. diff --git a/redbot/cogs/mod/kickban.py b/redbot/cogs/mod/kickban.py index 2b7c57d3f..2a2816227 100644 --- a/redbot/cogs/mod/kickban.py +++ b/redbot/cogs/mod/kickban.py @@ -218,15 +218,17 @@ class KickBanMixin(MixinMeta): self, ctx: commands.Context, user: discord.Member, - days: Optional[int] = 0, + days: Optional[int] = None, *, reason: str = None, ): """Ban a user from this server and optionally delete days of messages. If days is not a number, it's treated as the first word of the reason. - Minimum 0 days, maximum 7. Defaults to 0.""" - + Minimum 0 days, maximum 7. If not specified, defaultdays setting will be used instead.""" + guild = ctx.guild + if days is None: + days = await self.settings.guild(guild).default_days() result = await self.ban_user( user=user, ctx=ctx, days=days, reason=reason, create_modlog_case=True ) diff --git a/redbot/cogs/mod/mod.py b/redbot/cogs/mod/mod.py index 95ad52baa..37527d2b6 100644 --- a/redbot/cogs/mod/mod.py +++ b/redbot/cogs/mod/mod.py @@ -53,6 +53,7 @@ class Mod( "delete_delay": -1, "reinvite_on_unban": False, "current_tempbans": [], + "default_days": 0, } default_channel_settings = {"ignored": False} diff --git a/redbot/cogs/mod/settings.py b/redbot/cogs/mod/settings.py index e7923c57e..5de256056 100644 --- a/redbot/cogs/mod/settings.py +++ b/redbot/cogs/mod/settings.py @@ -21,11 +21,13 @@ class ModSettings(MixinMeta): if ctx.invoked_subcommand is None: guild = ctx.guild # Display current settings - delete_repeats = await self.settings.guild(guild).delete_repeats() - ban_mention_spam = await self.settings.guild(guild).ban_mention_spam() - respect_hierarchy = await self.settings.guild(guild).respect_hierarchy() - delete_delay = await self.settings.guild(guild).delete_delay() - reinvite_on_unban = await self.settings.guild(guild).reinvite_on_unban() + data = await self.settings.guild(guild).all() + delete_repeats = data["delete_repeats"] + ban_mention_spam = data["ban_mention_spam"] + respect_hierarchy = data["respect_hierarchy"] + delete_delay = data["delete_delay"] + reinvite_on_unban = data["reinvite_on_unban"] + default_days = data["default_days"] msg = "" msg += _("Delete repeats: {num_repeats}\n").format( num_repeats=_("after {num} repeats").format(num=delete_repeats) @@ -48,6 +50,12 @@ class ModSettings(MixinMeta): msg += _("Reinvite on unban: {yes_or_no}\n").format( yes_or_no=_("Yes") if reinvite_on_unban else _("No") ) + if default_days: + msg += _( + "Default message history delete on ban: Previous {num_days} days\n" + ).format(num_days=default_days) + else: + msg += _("Default message history delete on ban: Don't delete any\n") await ctx.send(box(msg)) @modset.command() @@ -199,3 +207,20 @@ class ModSettings(MixinMeta): command=f"{ctx.prefix}unban" ) ) + + @modset.command() + @commands.guild_only() + async def defaultdays(self, ctx: commands.Context, days: int = 0): + """Set the default number of days worth of messages to be deleted when a user is banned. + + The number of days must be between 0 and 7. + """ + 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 ctx.send( + _("{days} days worth of messages will be deleted when a user is banned.").format( + days=days + ) + )