From 1fc91d24c20e0488c8580a5886b715f9cd497d67 Mon Sep 17 00:00:00 2001 From: thec0sm0s Date: Tue, 2 Jun 2020 13:15:00 +0530 Subject: [PATCH] =?UTF-8?q?=E2=9C=85=20Handle=20cases=20efficiently=20when?= =?UTF-8?q?=20user=20avatar=20hash=20is=20None.=20Add=20method=20to=20retu?= =?UTF-8?q?rn=20Discord=20default=20avatar=20url=20equivalent.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- flask_discord/__init__.py | 2 +- flask_discord/configs.py | 2 ++ flask_discord/models/user.py | 12 +++++++++++- tests/test_app.py | 3 ++- 4 files changed, 16 insertions(+), 3 deletions(-) diff --git a/flask_discord/__init__.py b/flask_discord/__init__.py index 763af88..97c488a 100644 --- a/flask_discord/__init__.py +++ b/flask_discord/__init__.py @@ -14,4 +14,4 @@ __all__ = [ ] -__version__ = "0.1.51" +__version__ = "0.1.52" diff --git a/flask_discord/configs.py b/flask_discord/configs.py index ab3a4aa..f26c1bf 100644 --- a/flask_discord/configs.py +++ b/flask_discord/configs.py @@ -15,9 +15,11 @@ DISCORD_OAUTH_DEFAULT_SCOPES = [ DISCORD_IMAGE_BASE_URL = "https://cdn.discordapp.com/" +DISCORD_EMBED_BASE_BASE_URL = "https://cdn.discordapp.com/" DISCORD_IMAGE_FORMAT = "png" DISCORD_ANIMATED_IMAGE_FORMAT = "gif" DISCORD_USER_AVATAR_BASE_URL = DISCORD_IMAGE_BASE_URL + "avatars/{user_id}/{avatar_hash}.{format}" +DISCORD_DEFAULT_USER_AVATAR_BASE_URL = DISCORD_EMBED_BASE_BASE_URL + "embed/avatars/{modulo5}.png" DISCORD_GUILD_ICON_BASE_URL = DISCORD_IMAGE_BASE_URL + "icons/{guild_id}/{icon_hash}.png" DISCORD_USERS_CACHE_DEFAULT_MAX_LIMIT = 100 diff --git a/flask_discord/models/user.py b/flask_discord/models/user.py index 34def4f..2094689 100644 --- a/flask_discord/models/user.py +++ b/flask_discord/models/user.py @@ -102,15 +102,25 @@ class User(DiscordModelsBase): @property def avatar_url(self): """A property returning direct URL to user's avatar.""" + if not self.avatar_hash: + return image_format = configs.DISCORD_ANIMATED_IMAGE_FORMAT \ if self.is_avatar_animated else configs.DISCORD_IMAGE_FORMAT return configs.DISCORD_USER_AVATAR_BASE_URL.format( user_id=self.id, avatar_hash=self.avatar_hash, format=image_format) + @property + def default_avatar_url(self): + """A property which returns the default avatar URL as when user doesn't has any avatar set.""" + return configs.DISCORD_DEFAULT_USER_AVATAR_BASE_URL.format(modulo5=int(self.discriminator) % 5) + @property def is_avatar_animated(self): """A boolean representing if avatar of user is animated. Meaning user has GIF avatar.""" - return self.avatar_hash.startswith("a_") + try: + return self.avatar_hash.startswith("a_") + except AttributeError: + return False @classmethod def fetch_from_api(cls, guilds=False, connections=False): diff --git a/tests/test_app.py b/tests/test_app.py index 9987640..8bb20a8 100644 --- a/tests/test_app.py +++ b/tests/test_app.py @@ -50,7 +50,8 @@ def me(): {user.name} - + +

Is avatar animated: {str(user.is_avatar_animated)}

Connections