guild: add emoji blueprint

- storage: add get_emoji, get_guild_emojis
This commit is contained in:
Luna Mendes 2018-11-17 17:06:27 -03:00
parent a7f8852324
commit 64af426035
4 changed files with 72 additions and 4 deletions

View File

@ -2,5 +2,7 @@ from .roles import bp as guild_roles
from .members import bp as guild_members from .members import bp as guild_members
from .channels import bp as guild_channels from .channels import bp as guild_channels
from .mod import bp as guild_mod 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']

View File

@ -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('/<int:guild_id>/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('/<int:guild_id>/emojis/<int:emoji_id>', 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)
)

View File

@ -145,8 +145,6 @@ class Storage:
if user_id: if user_id:
drow['owner'] = drow['owner_id'] == str(user_id) drow['owner'] = drow['owner_id'] == str(user_id)
# TODO: emojis
drow['emojis'] = []
return drow return drow
async def get_user_guilds(self, user_id: int) -> List[int]: async def get_user_guilds(self, user_id: int) -> List[int]:
@ -511,6 +509,8 @@ class Storage:
mids, guild_id mids, guild_id
), ),
'emojis': await self.get_guild_emojis(guild_id),
# TODO: voice state management # TODO: voice state management
'voice_states': [], 'voice_states': [],
}} }}
@ -823,3 +823,43 @@ class Storage:
parties.remove(user_id) parties.remove(user_id)
return parties[0] 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

4
run.py
View File

@ -21,7 +21,8 @@ from litecord.blueprints import (
# for code readability if people want to dig through # for code readability if people want to dig through
# the codebase. # the codebase.
from litecord.blueprints.guild import ( 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 ( from litecord.blueprints.channel import (
@ -89,6 +90,7 @@ def set_blueprints(app_):
guild_members: '/guilds', guild_members: '/guilds',
guild_channels: '/guilds', guild_channels: '/guilds',
guild_mod: '/guilds', guild_mod: '/guilds',
guild_emoji: '/guilds',
channels: '/channels', channels: '/channels',
channel_messages: '/channels', channel_messages: '/channels',