channel: add dm_checks module

- channel.messages: check block state before message send
This commit is contained in:
Luna 2018-12-05 23:41:08 -03:00
parent 28811da1b4
commit 7e425229f9
2 changed files with 31 additions and 0 deletions

View File

@ -0,0 +1,26 @@
from quart import current_app as app
from litecord.errors import Forbidden
from litecord.enums import RelationshipType
class ForbiddenDM(Forbidden):
error_code = 50007
async def dm_pre_check(user_id: int, channel_id: int, peer_id: int):
"""Check if the user can DM the peer."""
# first step is checking if there is a block in any direction
blockrow = await app.db.fetchrow("""
SELECT rel_type
FROM relationships
WHERE rel_type = $3
AND user_id IN ($1, $2)
AND peer_id IN ($1, $2)
""", user_id, peer_id, RelationshipType.BLOCK.value)
if blockrow is not None:
raise ForbiddenDM()
# TODO: check mutual guilds and guild settings for
# each user

View File

@ -14,6 +14,7 @@ from litecord.schemas import validate, MESSAGE_CREATE
from litecord.utils import pg_set_json from litecord.utils import pg_set_json
from litecord.embed.sanitizer import fill_embed, proxify, fetch_metadata from litecord.embed.sanitizer import fill_embed, proxify, fetch_metadata
from litecord.blueprints.channel.dm_checks import dm_pre_check
log = Logger(__name__) log = Logger(__name__)
@ -307,6 +308,10 @@ async def _create_message(channel_id):
# TODO: check connection to the gateway # TODO: check connection to the gateway
if ctype == ChannelType.DM:
# guild_id is the dm's peer_id
await dm_pre_check(user_id, channel_id, guild_id)
can_everyone = await channel_perm_check( can_everyone = await channel_perm_check(
user_id, channel_id, 'mention_everyone', False user_id, channel_id, 'mention_everyone', False
) )