diff options
author | 2018-07-05 19:11:43 +0100 | |
---|---|---|
committer | 2018-07-05 19:11:43 +0100 | |
commit | d98ae6cc2194aa99058c03af88f752936533eb6c (patch) | |
tree | 1b8ea847f2a4c36d98ace0d4b338513c3aad285c | |
parent | Add defcon cog; disable ClickUp (diff) |
Working defcon cog
-rw-r--r-- | bot/cogs/defcon.py | 83 | ||||
-rw-r--r-- | bot/constants.py | 1 | ||||
-rw-r--r-- | config-default.yml | 1 |
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' |