aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--bot/cogs/defcon.py83
-rw-r--r--bot/constants.py1
-rw-r--r--config-default.yml1
3 files changed, 69 insertions, 16 deletions
diff --git a/bot/cogs/defcon.py b/bot/cogs/defcon.py
index 8d20e6461..7c5ebe16a 100644
--- a/bot/cogs/defcon.py
+++ b/bot/cogs/defcon.py
@@ -4,7 +4,7 @@ from datetime import datetime, timedelta
from discord import Member
from discord.ext.commands import Bot, Context, command
-from bot.constants import Roles, URLs
+from bot.constants import Roles, URLs, Keys, Channels
from bot.decorators import with_role
log = logging.getLogger(__name__)
@@ -29,35 +29,86 @@ class Defcon:
def __init__(self, bot: Bot):
self.bot = bot
self.days = timedelta(days=0)
+ self.headers = {"X-API-KEY": Keys.site_api}
async def on_ready(self):
- pass # TODO: Get duration
+ try:
+ response = await self.bot.http_session.get(
+ URLs.site_settings_api,
+ headers=self.headers,
+ params={"keys": "defcon_enabled,defcon_days"}
+ )
- async def on_member_join(self, member: Member):
- if self.days.days > 0:
- now = datetime.utcnow()
+ data = await response.json()
- if now - member.created_at < self.days:
- log.info(f"Rejecting user {member}: Account is too old and DEFCON is enabled")
+ except Exception: # Yikes!
+ log.exception("Unable to get DEFCON settings!")
+ await self.bot.get_channel(Channels.devlog).send(
+ f"<@&{Roles.admin}> **WARNING**: Unable to get DEFCON settings!"
+ )
- try:
- await member.send(REJECTION_MESSAGE.format(user=member.mention))
- except Exception:
- log.exception(f"Unable to send rejection message to user: {member}")
-
- await member.kick(reason="DEFCON active, user is too new")
+ else:
+ if data["defcon_enabled"]:
+ self.days = timedelta(days=data["defcon_days"])
+ log.warning(f"DEFCON enabled: {self.days.days} days")
+
+ else:
+ self.days = timedelta(days=0)
+ log.warning(f"DEFCON disabled")
+
+ # async def on_member_join(self, member: Member):
+ # if self.days.days > 0:
+ # now = datetime.utcnow()
+ #
+ # if now - member.created_at < self.days:
+ # log.info(f"Rejecting user {member}: Account is too old and DEFCON is enabled")
+ #
+ # try:
+ # await member.send(REJECTION_MESSAGE.format(user=member.mention))
+ # except Exception:
+ # log.exception(f"Unable to send rejection message to user: {member}")
+ #
+ # await member.kick(reason="DEFCON active, user is too new")
@with_role(Roles.admin, Roles.owner)
@command(name="defcon.days", aliases=["defcon.days()", "defcon_days", "defcon_days()"])
async def days_command(self, ctx: Context, days: int = None):
if not days:
- # TODO: Sync with server
self.days = timedelta(days=0)
- await ctx.send("DEFCON disabled.")
+
+ try:
+ response = await self.bot.http_session.put(
+ URLs.site_settings_api,
+ headers=self.headers,
+ json={"defcon_enabled": False}
+ )
+
+ await response.json()
+ except Exception:
+ log.exception("Unable to update DEFCON settings.")
+ await ctx.send("DEFCON disabled locally, but there was a problem updating the site.")
+ else:
+ await ctx.send("DEFCON disabled.")
else:
# TODO: Sync with server
self.days = timedelta(days=days)
- await ctx.send(f"DEFCON enabled; accounts must be {days} days old to join to the server")
+
+ try:
+ response = await self.bot.http_session.put(
+ URLs.site_settings_api,
+ headers=self.headers,
+ json={"defcon_enabled": True, "defcon_days": days}
+ )
+
+ await response.json()
+ except Exception:
+ log.exception("Unable to update DEFCON settings.")
+ await ctx.send(
+ f"DEFCON enabled locally; accounts must be {days} days old to join to the server "
+ f"- but there was a problem updating the site."
+ )
+ else:
+ await ctx.send(f"DEFCON enabled; accounts must be {days} days old to join to the server")
def setup(bot: Bot):
diff --git a/bot/constants.py b/bot/constants.py
index ce8fbb1cb..6433d068a 100644
--- a/bot/constants.py
+++ b/bot/constants.py
@@ -257,6 +257,7 @@ class URLs(metaclass=YAMLGetter):
site_idioms_api: str
site_names_api: str
site_quiz_api: str
+ site_settings_api: str
site_special_api: str
site_tags_api: str
site_user_api: str
diff --git a/config-default.yml b/config-default.yml
index b58666ca1..4402eb9f1 100644
--- a/config-default.yml
+++ b/config-default.yml
@@ -80,6 +80,7 @@ urls:
site_names_api: 'https://api.pythondiscord.com/bot/snake_names'
site_off_topic_names_api: 'https://api.pythondiscord.com/bot/off-topic-names'
site_quiz_api: 'https://api.pythondiscord.com/bot/snake_quiz'
+ site_settings_api: 'https://api.pythondiscord.com/bot/settings'
site_special_api: 'https://api.pythondiscord.com/bot/special_snakes'
site_tags_api: 'https://api.pythondiscord.com/bot/tags'
site_user_api: 'https://api.pythondiscord.com/bot/users'