From 99b136b824d831f57a4000bb6813608083f1e4b5 Mon Sep 17 00:00:00 2001 From: Adarnof Date: Thu, 22 Feb 2018 15:37:29 -0500 Subject: [PATCH] Delete Discord users if they've left the server. Closes #968 --- allianceauth/services/modules/discord/tasks.py | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/allianceauth/services/modules/discord/tasks.py b/allianceauth/services/modules/discord/tasks.py index 8dc1316e..2c10aeef 100644 --- a/allianceauth/services/modules/discord/tasks.py +++ b/allianceauth/services/modules/discord/tasks.py @@ -5,7 +5,7 @@ from django.contrib.auth.models import User from django.core.exceptions import ObjectDoesNotExist from allianceauth.notifications import notify from celery import shared_task - +from requests.exceptions import HTTPError from allianceauth.services.hooks import NameFormatter from .manager import DiscordOAuthManager, DiscordApiBackoff from .models import DiscordUser @@ -72,6 +72,15 @@ class DiscordTasks: logger.info("Discord group sync API back off for %s, " "retrying in %s seconds" % (user, bo.retry_after_seconds)) raise task_self.retry(countdown=bo.retry_after_seconds) + except HTTPError as e: + if e.response.status_code == 404: + try: + if e.response.json()['code'] == 10007: + # user has left the server + DiscordTasks.delete_user(user) + return + finally: + raise e except Exception as e: if task_self: logger.exception("Discord group sync failed for %s, retrying in 10 mins" % user)