[Mod] Add default tempban duration setting (#4473)

* Add support for default duration in kickban.py

* add setting command and info to settings view

* add config key

* black

* Thx jack

Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>

* adress review

* Address review

* typo

Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
This commit is contained in:
Dav 2020-10-15 22:15:14 +00:00 committed by GitHub
parent dc817aeeac
commit f5de382946
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 29 additions and 3 deletions

View File

@ -473,7 +473,7 @@ class KickBanMixin(MixinMeta):
self, self,
ctx: commands.Context, ctx: commands.Context,
user: discord.Member, user: discord.Member,
duration: UserInputOptional[commands.TimedeltaConverter] = timedelta(days=1), duration: Optional[commands.TimedeltaConverter] = None,
days: Optional[int] = None, days: Optional[int] = None,
*, *,
reason: str = None, reason: str = None,
@ -481,7 +481,6 @@ class KickBanMixin(MixinMeta):
"""Temporarily ban a user from this server.""" """Temporarily ban a user from this server."""
guild = ctx.guild guild = ctx.guild
author = ctx.author author = ctx.author
unban_time = datetime.now(timezone.utc) + duration
if author == user: if author == user:
await ctx.send( await ctx.send(
@ -501,6 +500,10 @@ class KickBanMixin(MixinMeta):
await ctx.send(_("I cannot do that due to Discord hierarchy rules.")) await ctx.send(_("I cannot do that due to Discord hierarchy rules."))
return return
if duration is None:
duration = timedelta(seconds=await self.config.guild(guild).default_tempban_duration())
unban_time = datetime.now(timezone.utc) + duration
if days is None: if days is None:
days = await self.config.guild(guild).default_days() days = await self.config.guild(guild).default_days()

View File

@ -58,6 +58,7 @@ class Mod(
"current_tempbans": [], "current_tempbans": [],
"dm_on_kickban": False, "dm_on_kickban": False,
"default_days": 0, "default_days": 0,
"default_tempban_duration": 60 * 60 * 24,
} }
default_channel_settings = {"ignored": False} default_channel_settings = {"ignored": False}

View File

@ -1,7 +1,9 @@
from collections import defaultdict, deque from collections import defaultdict, deque
from typing import Optional
from datetime import timedelta
from redbot.core import commands, i18n, checks from redbot.core import commands, i18n, checks
from redbot.core.utils.chat_formatting import box from redbot.core.utils.chat_formatting import box, humanize_timedelta
from .abc import MixinMeta from .abc import MixinMeta
@ -34,6 +36,7 @@ class ModSettings(MixinMeta):
reinvite_on_unban = data["reinvite_on_unban"] reinvite_on_unban = data["reinvite_on_unban"]
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"]
msg = "" msg = ""
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)
@ -80,6 +83,9 @@ class ModSettings(MixinMeta):
) )
else: else:
msg += _("Default message history delete on ban: Don't delete any\n") msg += _("Default message history delete on ban: Don't delete any\n")
msg += _("Default tempban duration: {duration}").format(
humanize_timedelta(seconds=default_tempban_duration)
)
await ctx.send(box(msg)) await ctx.send(box(msg))
@modset.command() @modset.command()
@ -365,3 +371,19 @@ class ModSettings(MixinMeta):
days=days days=days
) )
) )
@modset.command()
@commands.guild_only()
async def defaultduration(
self,
ctx: commands.Context,
duration: Optional[commands.TimedeltaConverter] = timedelta(days=0),
):
"""Set the default time to be used when a user is tempbanned."""
guild = ctx.guild
await self.config.guild(guild).default_tempban_duration.set(duration.total_seconds())
await ctx.send(
_("The default duration for tempbanning a user is now {duration}.").format(
duration=humanize_timedelta(timedelta=duration)
)
)