diff options
| author | 2020-10-18 10:14:23 +0300 | |
|---|---|---|
| committer | 2020-10-18 10:15:22 +0300 | |
| commit | 152d105715fcd9843362b09c582773191bf2af9c (patch) | |
| tree | 71933f62ee3827c3dfb3c806fe381f7f79f0de19 | |
| parent | Fix voice ban command name in test (diff) | |
Rework how voice gate do checks
| -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. |