diff options
Diffstat (limited to '')
| -rw-r--r-- | bot/exts/moderation/voice_gate.py | 42 | 
1 files changed, 18 insertions, 24 deletions
| diff --git a/bot/exts/moderation/voice_gate.py b/bot/exts/moderation/voice_gate.py index 4a7c66278..c367510ad 100644 --- a/bot/exts/moderation/voice_gate.py +++ b/bot/exts/moderation/voice_gate.py @@ -9,20 +9,21 @@ from discord.ext.commands import Cog, Context, command  from bot.api import ResponseCodeError  from bot.bot import Bot -from bot.constants import Channels, Event, MODERATION_ROLES, Roles, VoiceGate as VoiceGateConf +from bot.constants import Channels, Event, MODERATION_ROLES, Roles, VoiceGate as GateConf  from bot.decorators import has_no_roles, in_whitelist  from bot.exts.moderation.modlog import ModLog  from bot.utils.checks import InWhitelistCheckFailure  log = logging.getLogger(__name__) -# Messages for case when user don't meet with requirements -NOT_ENOUGH_MESSAGES = f"haven't sent at least {VoiceGateConf.minimum_messages} messages" -NOT_ENOUGH_DAYS_AFTER_VERIFICATION = f"haven't been verified for at least {VoiceGateConf.minimum_days_verified} days" -VOICE_BANNED = "are voice banned" -  FAILED_MESSAGE = """{user} you don't meet with our current requirements to pass Voice Gate. You {reasons}.""" +MESSAGE_FIELD_MAP = { +    "verified_at": f"haven't been verified for at least {GateConf.minimum_days_verified} days", +    "voice_banned": "are voice banned", +    "total_messages": f"haven't sent at least {GateConf.minimum_messages} messages", +} +  class VoiceGate(Cog):      """Voice channels verification management.""" @@ -75,23 +76,16 @@ class VoiceGate(Cog):          if data["verified_at"] is not None:              data["verified_at"] = parser.isoparse(data["verified_at"])          else: -            data["verified_at"] = datetime.now() - timedelta(days=3) - -        failed = False -        failed_reasons = [] - -        if data["verified_at"] > datetime.utcnow() - timedelta(days=VoiceGateConf.minimum_days_verified): -            failed_reasons.append(NOT_ENOUGH_DAYS_AFTER_VERIFICATION) -            failed = True -            self.bot.stats.incr("voice_gate.failed.verified_at") -        if data["total_messages"] < VoiceGateConf.minimum_messages: -            failed_reasons.append(NOT_ENOUGH_MESSAGES) -            failed = True -            self.bot.stats.incr("voice_gate.failed.total_messages") -        if data["voice_banned"]: -            failed_reasons.append(VOICE_BANNED) -            failed = True -            self.bot.stats.incr("voice_gate.failed.voice_banned") +            data["verified_at"] = datetime.utcnow() - timedelta(days=3) + +        checks = { +            "verified_at": data["verified_at"] > datetime.utcnow() - timedelta(days=GateConf.minimum_days_verified), +            "total_messages": data["total_messages"] < GateConf.minimum_messages, +            "voice_banned": data["voice_banned"] +        } +        failed = any(checks.values()) +        failed_reasons = [MESSAGE_FIELD_MAP[key] for key, value in checks.items() if value is True] +        [self.bot.stats.incr(f"voice_gate.failed.{key}") for key, value in checks.items() if value is True]          if failed:              if len(failed_reasons) > 1: @@ -130,7 +124,7 @@ class VoiceGate(Cog):          # When it's bot sent message, delete it after some time          if message.author.bot:              with suppress(discord.NotFound): -                await message.delete(delay=VoiceGateConf.bot_message_delete_delay) +                await message.delete(delay=GateConf.bot_message_delete_delay)                  return          # Then check is member moderator+, because we don't want to delete their messages. | 
