diff --git a/services/modules/discord/manager.py b/services/modules/discord/manager.py index e87f7e29..9fc4d9af 100644 --- a/services/modules/discord/manager.py +++ b/services/modules/discord/manager.py @@ -212,6 +212,7 @@ class DiscordOAuthManager: return None @staticmethod + @api_backoff def update_nickname(user_id, nickname): try: nickname = DiscordOAuthManager._sanitize_name(nickname) diff --git a/services/modules/discord/tasks.py b/services/modules/discord/tasks.py index 03dff349..01bfa0ca 100644 --- a/services/modules/discord/tasks.py +++ b/services/modules/discord/tasks.py @@ -97,7 +97,7 @@ class DiscordTasks: @staticmethod @app.task(bind=True, name='discord.update_nickname') - def update_nickname(self, pk): + def update_nickname(task_self, pk): user = User.objects.get(pk=pk) logger.debug("Updating discord nickname for user %s" % user) if DiscordTasks.has_account(user): @@ -105,10 +105,14 @@ class DiscordTasks: logger.debug("Updating user %s discord nickname to %s" % (user, character.character_name)) try: DiscordOAuthManager.update_nickname(user.discord.uid, character.character_name) + except DiscordApiBackoff as bo: + logger.info("Discord nickname update API back off for %s, " + "retrying in %s seconds" % (user, bo.retry_after_seconds)) + raise task_self.retry(countdown=bo.retry_after_seconds) except Exception as e: - if self: + if task_self: logger.exception("Discord nickname sync failed for %s, retrying in 10 mins" % user) - raise self.retry(countdown=60 * 10) + raise task_self.retry(countdown=60 * 10) else: # Rethrow raise e