aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar mbaruh <[email protected]>2021-02-17 20:44:39 +0200
committerGravatar mbaruh <[email protected]>2021-02-17 20:44:39 +0200
commitbe08ea954bce3e7e3f407cf72e78fe7e1aa9096e (patch)
tree0c1169a8fd54d8b2e71a40b0dc23fa172e8863ce
parentError loading settings will also ping devops role (diff)
Threshold has false-y value when set to 0
-rw-r--r--bot/exts/moderation/defcon.py35
1 files changed, 20 insertions, 15 deletions
diff --git a/bot/exts/moderation/defcon.py b/bot/exts/moderation/defcon.py
index 66b551425..49f5a4ddd 100644
--- a/bot/exts/moderation/defcon.py
+++ b/bot/exts/moderation/defcon.py
@@ -1,5 +1,3 @@
-from __future__ import annotations
-
import asyncio
import logging
from collections import namedtuple
@@ -56,7 +54,7 @@ class Defcon(Cog):
# RedisCache[str, str]
# The cache's keys are "threshold" and "expiry".
- # The caches' values are strings formatted as valid input to the DurationDelta converter.
+ # The caches' values are strings formatted as valid input to the DurationDelta converter, or empty when off.
defcon_settings = RedisCache()
def __init__(self, bot: Bot):
@@ -85,7 +83,7 @@ class Defcon(Cog):
try:
settings = await self.defcon_settings.to_dict()
- self.threshold = parse_duration_string(settings["threshold"])
+ self.threshold = parse_duration_string(settings["threshold"]) if settings["threshold"] else None
self.expiry = datetime.fromisoformat(settings["expiry"]) if settings["expiry"] else None
except Exception:
log.exception("Unable to get DEFCON settings!")
@@ -98,14 +96,14 @@ class Defcon(Cog):
self.scheduler.schedule_at(self.expiry, 0, self._remove_threshold())
self._update_notifier()
- log.info(f"DEFCON synchronized: {humanize_delta(self.threshold)}")
+ log.info(f"DEFCON synchronized: {humanize_delta(self.threshold) if self.threshold else '-'}")
self._update_channel_topic()
@Cog.listener()
async def on_member_join(self, member: Member) -> None:
"""Check newly joining users to see if they meet the account age threshold."""
- if self.threshold != relativedelta(days=0):
+ if self.threshold:
now = datetime.utcnow()
if now - member.created_at < relativedelta_to_timedelta(self.threshold):
@@ -148,7 +146,7 @@ class Defcon(Cog):
embed = Embed(
colour=Colour.blurple(), title="DEFCON Status",
description=f"""
- **Threshold:** {humanize_delta(self.threshold)}
+ **Threshold:** {humanize_delta(self.threshold) if self.threshold else "-"}
**Expires in:** {humanize_delta(relativedelta(self.expiry, datetime.utcnow())) if self.expiry else "-"}
**Verification level:** {ctx.guild.verification_level.name}
"""
@@ -190,7 +188,7 @@ class Defcon(Cog):
def _update_channel_topic(self) -> None:
"""Update the #defcon channel topic with the current DEFCON status."""
- new_topic = f"{BASE_CHANNEL_TOPIC}\n(Threshold: {humanize_delta(self.threshold)})"
+ new_topic = f"{BASE_CHANNEL_TOPIC}\n(Threshold: {humanize_delta(self.threshold) if self.threshold else '-'})"
self.mod_log.ignore(Event.guild_channel_update, Channels.defcon)
asyncio.create_task(self.channel.edit(topic=new_topic))
@@ -210,7 +208,7 @@ class Defcon(Cog):
await self.defcon_settings.update(
{
- 'threshold': Defcon._stringify_relativedelta(self.threshold),
+ 'threshold': Defcon._stringify_relativedelta(self.threshold) if self.threshold else "",
'expiry': expiry.isoformat() if expiry else 0
}
)
@@ -220,11 +218,18 @@ class Defcon(Cog):
expiry_message = ""
if expiry:
- expiry_message = f"for the next {humanize_delta(relativedelta(expiry, datetime.utcnow()))}"
+ expiry_message = f" for the next {humanize_delta(relativedelta(expiry, datetime.utcnow()), max_units=2)}"
+
+ if self.threshold:
+ channel_message = (
+ f"updated; accounts must be {humanize_delta(self.threshold)} "
+ f"old to join the server{expiry_message}"
+ )
+ else:
+ channel_message = "removed"
await self.channel.send(
- f"{action.value.emoji} DEFCON threshold updated; accounts must be "
- f"{humanize_delta(self.threshold)} old to join the server {expiry_message}."
+ f"{action.value.emoji} DEFCON threshold {channel_message}."
)
await self._send_defcon_log(action, author)
self._update_channel_topic()
@@ -251,7 +256,7 @@ class Defcon(Cog):
info = action.value
log_msg: str = (
f"**Staffer:** {actor.mention} {actor} (`{actor.id}`)\n"
- f"{info.template.format(threshold=humanize_delta(self.threshold))}"
+ f"{info.template.format(threshold=(humanize_delta(self.threshold) if self.threshold else '-'))}"
)
status_msg = f"DEFCON {action.name.lower()}"
@@ -259,11 +264,11 @@ class Defcon(Cog):
def _update_notifier(self) -> None:
"""Start or stop the notifier according to the DEFCON status."""
- if self.threshold != relativedelta(days=0) and self.expiry is None and not self.defcon_notifier.is_running():
+ if self.threshold and self.expiry is None and not self.defcon_notifier.is_running():
log.info("DEFCON notifier started.")
self.defcon_notifier.start()
- elif (self.threshold == relativedelta(days=0) or self.expiry is not None) and self.defcon_notifier.is_running():
+ elif (not self.threshold or self.expiry is not None) and self.defcon_notifier.is_running():
log.info("DEFCON notifier stopped.")
self.defcon_notifier.cancel()