Fixed invites

This commit is contained in:
gabixdev 2019-07-19 20:42:22 +02:00
parent edf1ed9a3d
commit 51180d5e05
No known key found for this signature in database
GPG Key ID: 3E00485503A1D8BA
1 changed files with 20 additions and 15 deletions

View File

@ -48,6 +48,8 @@ class UnknownInvite(BadRequest):
class InvalidInvite(Forbidden): class InvalidInvite(Forbidden):
error_code = 50020 error_code = 50020
class AlreadyInvited(BaseException):
pass
def gen_inv_code() -> str: def gen_inv_code() -> str:
"""Generate an invite code. """Generate an invite code.
@ -70,7 +72,7 @@ async def invite_precheck(user_id: int, guild_id: int):
""", user_id, guild_id) """, user_id, guild_id)
if joined is not None: if joined is not None:
raise BadRequest('You are already in the guild') raise AlreadyInvited('You are already in the guild')
banned = await app.db.fetchval(""" banned = await app.db.fetchval("""
SELECT reason SELECT reason
@ -87,7 +89,7 @@ async def invite_precheck_gdm(user_id: int, channel_id: int):
is_member = await gdm_is_member(channel_id, user_id) is_member = await gdm_is_member(channel_id, user_id)
if is_member: if is_member:
raise BadRequest('You are already in the Group DM') raise AlreadyInvited('You are already in the Group DM')
async def _inv_check_age(inv: dict): async def _inv_check_age(inv: dict):
@ -171,20 +173,22 @@ async def use_invite(user_id, invite_code):
# NOTE: if group dm invite, guild_id is null. # NOTE: if group dm invite, guild_id is null.
guild_id = inv['guild_id'] guild_id = inv['guild_id']
if guild_id is None: try:
channel_id = inv['channel_id'] if guild_id is None:
await invite_precheck_gdm(user_id, inv['channel_id']) channel_id = inv['channel_id']
await gdm_add_recipient(channel_id, user_id) await invite_precheck_gdm(user_id, inv['channel_id'])
else: await gdm_add_recipient(channel_id, user_id)
await invite_precheck(user_id, guild_id) else:
await _guild_add_member(guild_id, user_id) await invite_precheck(user_id, guild_id)
await _guild_add_member(guild_id, user_id)
await app.db.execute("""
UPDATE invites
SET uses = uses + 1
WHERE code = $1
""", invite_code)
await app.db.execute("""
UPDATE invites
SET uses = uses + 1
WHERE code = $1
""", invite_code)
except AlreadyInvited:
pass
@bp.route('/channels/<int:channel_id>/invites', methods=['POST']) @bp.route('/channels/<int:channel_id>/invites', methods=['POST'])
async def create_invite(channel_id): async def create_invite(channel_id):
@ -323,6 +327,7 @@ async def get_channel_invites(channel_id: int):
@bp.route('/invite/<invite_code>', methods=['POST']) @bp.route('/invite/<invite_code>', methods=['POST'])
@bp.route('/invites/<invite_code>', methods=['POST'])
async def _use_invite(invite_code): async def _use_invite(invite_code):
"""Use an invite.""" """Use an invite."""
user_id = await token_check() user_id = await token_check()