diff --git a/files/routes/admin.py b/files/routes/admin.py index 3842fd83d..2566dfc24 100755 --- a/files/routes/admin.py +++ b/files/routes/admin.py @@ -352,10 +352,14 @@ def badge_grant_post(v): g.db.query(Badge).options(lazyload('*')).filter_by(badge_id=badge_id, user_id=user.id,).delete() g.db.commit() return redirect("/admin/badge_grant") + + if badge_id == 16: + badge = user.has_badge(17) + if badge: badge.delete() + + elif badge_id == 17 and user.has_badge(16): abort(403) - new_badge = Badge(badge_id=badge_id, - user_id=user.id, - ) + new_badge = Badge(badge_id=badge_id, user_id=user.id) desc = request.values.get("description") if desc: new_badge.description = desc diff --git a/files/routes/login.py b/files/routes/login.py index 8bdbcda79..acfcac764 100755 --- a/files/routes/login.py +++ b/files/routes/login.py @@ -306,6 +306,7 @@ def sign_up_post(v): if ref_id: ref_user = g.db.query(User).options( lazyload('*')).filter_by(id=ref_id).first() + if ref_user: badge_types = g.db.query(BadgeDef).options(lazyload('*')).filter(BadgeDef.qualification_expr.isnot(None)).all() for badge in badge_types: @@ -313,6 +314,9 @@ def sign_up_post(v): if not ref_user.has_badge(badge.id): new_badge = Badge(user_id=ref_user.id, badge_id=badge.id) g.db.add(new_badge) + else: + bad_badge = ref_user.has_badge(badge.id) + if bad_badge: g.db.delete(bad_badge) g.db.add(ref_user) diff --git a/files/routes/settings.py b/files/routes/settings.py index fb97cb32c..699ee450a 100755 --- a/files/routes/settings.py +++ b/files/routes/settings.py @@ -301,6 +301,10 @@ def gumroad(v): tier = tiers[response["variants_and_quantity"]] if v.patron == tier: return {"error": f"{patron} rewards already claimed"}, 400 + if v.patron: + badge = v.has_badge(20+tier) + if badge: badge.delete() + v.patron = tier if v.discord_id: add_role(v, f"{tier}")