diff --git a/litecord/blueprints/channel/dm_checks.py b/litecord/blueprints/channel/dm_checks.py index f8ca616..3161f1a 100644 --- a/litecord/blueprints/channel/dm_checks.py +++ b/litecord/blueprints/channel/dm_checks.py @@ -22,5 +22,24 @@ async def dm_pre_check(user_id: int, channel_id: int, peer_id: int): if blockrow is not None: raise ForbiddenDM() - # TODO: check mutual guilds and guild settings for - # each user + # now comes the fun part, which is guild settings. + mutual_guilds = await app.user_storage.get_mutual_guilds(user_id, peer_id) + + # user_settings.restricted_guilds gives us the dms a user doesn't + # want dms from, so we use that setting from both user and peer + + user_settings = await app.user_storage.get_user_settings(user_id) + peer_settings = await app.user_storage.get_user_settings(peer_id) + + restricted_user = [int(v) for v in user_settings['restricted_guilds']] + restricted_peer = [int(v) for v in peer_settings['restricted_guilds']] + + restricted_user = set(restricted_user) + restricted_peer = set(restricted_peer) + + mutual_guilds -= restricted_user + mutual_guilds -= restricted_peer + + # if after this filtering we don't have any more guilds, error + if not mutual_guilds: + raise ForbiddenDM()