From 9cb226b50267a1b54587e2530c274577a02163fd Mon Sep 17 00:00:00 2001 From: Xevion Date: Sun, 7 Feb 2021 14:11:06 -0600 Subject: [PATCH] permissions check, more db helper functions --- contest/checks.py | 15 +++++++++++++++ contest/db.py | 13 +++++++++++++ 2 files changed, 28 insertions(+) create mode 100644 contest/checks.py diff --git a/contest/checks.py b/contest/checks.py new file mode 100644 index 0000000..7895e59 --- /dev/null +++ b/contest/checks.py @@ -0,0 +1,15 @@ +from discord.ext import commands + + +def check_permissions(ctx, perms, *, check=all): + resolved = ctx.channel.permissions_for(ctx.author) + return check(getattr(resolved, name, None) == value for name, value in perms.items()) + + +def privileged(): + def predicate(ctx): + return (ctx.guild is not None and ctx.guild.owner_id == ctx.author.id) \ + or check_permissions(ctx, {'manage_guild': True}) \ + or check_permissions(ctx, {'administrator': True}) + + return commands.check(predicate) diff --git a/contest/db.py b/contest/db.py index 8910640..7138989 100644 --- a/contest/db.py +++ b/contest/db.py @@ -76,6 +76,19 @@ class ContestDatabase(object): finally: await cur.close() + async def get_submission(self, guild_id: int) -> int: + cur = await self.conn.cursor() + try: + await cur.execute('''SELECT submission FROM guild WHERE id = ?''', [guild_id]) + return (await cur.fetchone())[0] + finally: + await cur.close() + + async def set_submission(self, guild_id: int, new_submission: int) -> None: + """Updates the submission channel for a specific guild in the database""" + await self.conn.execute('''UPDATE guild SET submission = ? WHERE id = ?''', [new_submission, guild_id]) + await self.conn.commit() + async def teardown_guild(self, guild_id: int) -> None: """Removes a guild from the database while completing appropriate teardown actions.""" await self.conn.execute('''DELETE FROM guild WHERE id = ?''', [guild_id])