From 64af4260358664a7f1d9c848d6888f9514f7a4c4 Mon Sep 17 00:00:00 2001 From: Luna Mendes Date: Sat, 17 Nov 2018 17:06:27 -0300 Subject: [PATCH] guild: add emoji blueprint - storage: add get_emoji, get_guild_emojis --- litecord/blueprints/guild/__init__.py | 4 ++- litecord/blueprints/guild/emoji.py | 24 +++++++++++++++ litecord/storage.py | 44 +++++++++++++++++++++++++-- run.py | 4 ++- 4 files changed, 72 insertions(+), 4 deletions(-) create mode 100644 litecord/blueprints/guild/emoji.py diff --git a/litecord/blueprints/guild/__init__.py b/litecord/blueprints/guild/__init__.py index 33a1bdc..8bbf4d9 100644 --- a/litecord/blueprints/guild/__init__.py +++ b/litecord/blueprints/guild/__init__.py @@ -2,5 +2,7 @@ from .roles import bp as guild_roles from .members import bp as guild_members from .channels import bp as guild_channels from .mod import bp as guild_mod +from .emoji import bp as guild_emoji -__all__ = ['guild_roles', 'guild_members', 'guild_channels', 'guild_mod'] +__all__ = ['guild_roles', 'guild_members', 'guild_channels', 'guild_mod', + 'guild_emoji'] diff --git a/litecord/blueprints/guild/emoji.py b/litecord/blueprints/guild/emoji.py new file mode 100644 index 0000000..561378e --- /dev/null +++ b/litecord/blueprints/guild/emoji.py @@ -0,0 +1,24 @@ +from quart import Blueprint, jsonify, current_app as app + +from litecord.auth import token_check +from litecord.blueprints.checks import guild_check + +bp = Blueprint('guild.emoji', __name__) + + +@bp.route('//emojis', methods=['GET']) +async def _get_guild_emoji(guild_id): + user_id = await token_check() + await guild_check(user_id, guild_id) + return jsonify( + await app.storage.get_guild_emojis(guild_id) + ) + + +@bp.route('//emojis/', methods=['GET']) +async def _get_guild_emoji_one(guild_id, emoji_id): + user_id = await token_check() + await guild_check(user_id, guild_id) + return jsonify( + await app.storage.get_emoji(emoji_id) + ) diff --git a/litecord/storage.py b/litecord/storage.py index 3324d4b..c2fd818 100644 --- a/litecord/storage.py +++ b/litecord/storage.py @@ -145,8 +145,6 @@ class Storage: if user_id: drow['owner'] = drow['owner_id'] == str(user_id) - # TODO: emojis - drow['emojis'] = [] return drow async def get_user_guilds(self, user_id: int) -> List[int]: @@ -511,6 +509,8 @@ class Storage: mids, guild_id ), + 'emojis': await self.get_guild_emojis(guild_id), + # TODO: voice state management 'voice_states': [], }} @@ -823,3 +823,43 @@ class Storage: parties.remove(user_id) return parties[0] + + async def get_emoji(self, emoji_id: int) -> Dict: + """Get a single emoji.""" + row = await self.db.fetchrow(""" + SELECT id::text, name, animated, managed, + require_colons, uploader_id + FROM guild_emoji + WHERE id = $1 + """, emoji_id) + + if not row: + return + + drow = dict(row) + + # ???? + drow['roles'] = [] + + uploader_id = drow.pop('uploader_id') + drow['user'] = await self.get_user(uploader_id) + + return drow + + async def get_guild_emojis(self, guild_id: int): + """Get a list of all emoji objects in a guild.""" + rows = await self.db.fetch(""" + SELECT id + FROM guild_emojis + WHERE guild_id = $1 + """, guild_id) + + emoji_ids = [r['id'] for r in rows] + + res = [] + + for emoji_id in emoji_ids: + emoji = await self.get_emoji(emoji_id) + res.append(emoji) + + return res diff --git a/run.py b/run.py index 4348e88..a6ae943 100644 --- a/run.py +++ b/run.py @@ -21,7 +21,8 @@ from litecord.blueprints import ( # for code readability if people want to dig through # the codebase. from litecord.blueprints.guild import ( - guild_roles, guild_members, guild_channels, guild_mod + guild_roles, guild_members, guild_channels, guild_mod, + guild_emoji ) from litecord.blueprints.channel import ( @@ -89,6 +90,7 @@ def set_blueprints(app_): guild_members: '/guilds', guild_channels: '/guilds', guild_mod: '/guilds', + guild_emoji: '/guilds', channels: '/channels', channel_messages: '/channels',