From a0e7a594cd7ba27a6d1734178bbf5c36a60aa8e6 Mon Sep 17 00:00:00 2001 From: aStonedPenguin Date: Sat, 24 Mar 2018 13:17:07 -0800 Subject: [PATCH] Diferentiate default and custom avatars --- src/Discord.Net.Core/CDN.cs | 4 +++- src/Discord.Net.Core/Entities/Users/IUser.cs | 6 +++++- src/Discord.Net.Rest/Entities/Users/RestUser.cs | 8 ++++++-- src/Discord.Net.Rest/Entities/Webhooks/RestWebhook.cs | 4 ++-- src/Discord.Net.WebSocket/Entities/Users/SocketUser.cs | 8 ++++++-- .../Entities/Webhooks/RestInternalWebhook.cs | 4 ++-- 6 files changed, 24 insertions(+), 10 deletions(-) diff --git a/src/Discord.Net.Core/CDN.cs b/src/Discord.Net.Core/CDN.cs index f23f55238..85eff1c83 100644 --- a/src/Discord.Net.Core/CDN.cs +++ b/src/Discord.Net.Core/CDN.cs @@ -6,7 +6,9 @@ namespace Discord { public static string GetApplicationIconUrl(ulong appId, string iconId) => iconId != null ? $"{DiscordConfig.CDNUrl}app-icons/{appId}/{iconId}.jpg" : null; - public static string GetUserAvatarUrl(ulong userId, string avatarId, ushort size, ImageFormat format) + public static string GetUserDefaultAvatarUrl(ushort discriminator) + => $"{DiscordConfig.CDNUrl}embed/avatars/{discriminator % 5}.png"; + public static string GetUserCustomAvatarUrl(ulong userId, string avatarId, ushort size, ImageFormat format) { if (avatarId == null) return null; diff --git a/src/Discord.Net.Core/Entities/Users/IUser.cs b/src/Discord.Net.Core/Entities/Users/IUser.cs index e3f270f6f..662310238 100644 --- a/src/Discord.Net.Core/Entities/Users/IUser.cs +++ b/src/Discord.Net.Core/Entities/Users/IUser.cs @@ -6,7 +6,11 @@ namespace Discord { /// Gets the id of this user's avatar. string AvatarId { get; } - /// Gets the url to this user's avatar. + /// Gets the url to this user's default avatar. + string GetDefaultAvatarUrl(); + /// Gets the url to this user's custom avatar, if set. + string GetCustomAvatarUrl(ImageFormat format = ImageFormat.Auto, ushort size = 128); + /// Gets the url to this user's custom or default avatar depending on which is available. NOTE: Ignores format and size if there is no custom avatar. string GetAvatarUrl(ImageFormat format = ImageFormat.Auto, ushort size = 128); /// Gets the per-username unique id for this user. string Discriminator { get; } diff --git a/src/Discord.Net.Rest/Entities/Users/RestUser.cs b/src/Discord.Net.Rest/Entities/Users/RestUser.cs index c6cf6103a..709b400ae 100644 --- a/src/Discord.Net.Rest/Entities/Users/RestUser.cs +++ b/src/Discord.Net.Rest/Entities/Users/RestUser.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Diagnostics; using System.Threading.Tasks; using Model = Discord.API.User; @@ -57,8 +57,12 @@ namespace Discord.Rest public Task GetOrCreateDMChannelAsync(RequestOptions options = null) => UserHelper.CreateDMChannelAsync(this, Discord, options); + public string GetDefaultAvatarUrl() + => CDN.GetUserDefaultAvatarUrl(DiscriminatorValue); + public string GetCustomAvatarUrl(ImageFormat format = ImageFormat.Auto, ushort size = 128) + => CDN.GetUserCustomAvatarUrl(Id, AvatarId, size, format); public string GetAvatarUrl(ImageFormat format = ImageFormat.Auto, ushort size = 128) - => CDN.GetUserAvatarUrl(Id, AvatarId, size, format); + => GetCustomAvatarUrl(format, size) ?? GetDefaultAvatarUrl(); public override string ToString() => $"{Username}#{Discriminator}"; private string DebuggerDisplay => $"{Username}#{Discriminator} ({Id}{(IsBot ? ", Bot" : "")})"; diff --git a/src/Discord.Net.Rest/Entities/Webhooks/RestWebhook.cs b/src/Discord.Net.Rest/Entities/Webhooks/RestWebhook.cs index 47cc50a9c..89c40bad6 100644 --- a/src/Discord.Net.Rest/Entities/Webhooks/RestWebhook.cs +++ b/src/Discord.Net.Rest/Entities/Webhooks/RestWebhook.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Diagnostics; using System.Threading.Tasks; using Model = Discord.API.Webhook; @@ -66,7 +66,7 @@ namespace Discord.Rest } public string GetAvatarUrl(ImageFormat format = ImageFormat.Auto, ushort size = 128) - => CDN.GetUserAvatarUrl(Id, AvatarId, size, format); + => CDN.GetUserCustomAvatarUrl(Id, AvatarId, size, format); public async Task ModifyAsync(Action func, RequestOptions options = null) { diff --git a/src/Discord.Net.WebSocket/Entities/Users/SocketUser.cs b/src/Discord.Net.WebSocket/Entities/Users/SocketUser.cs index 58d5c62a1..6df0822de 100644 --- a/src/Discord.Net.WebSocket/Entities/Users/SocketUser.cs +++ b/src/Discord.Net.WebSocket/Entities/Users/SocketUser.cs @@ -1,4 +1,4 @@ -using Discord.Rest; +using Discord.Rest; using System; using System.Threading.Tasks; using Model = Discord.API.User; @@ -58,8 +58,12 @@ namespace Discord.WebSocket public async Task GetOrCreateDMChannelAsync(RequestOptions options = null) => GlobalUser.DMChannel ?? await UserHelper.CreateDMChannelAsync(this, Discord, options) as IDMChannel; + public string GetDefaultAvatarUrl() + => CDN.GetUserDefaultAvatarUrl(DiscriminatorValue); + public string GetCustomAvatarUrl(ImageFormat format = ImageFormat.Auto, ushort size = 128) + => CDN.GetUserCustomAvatarUrl(Id, AvatarId, size, format); public string GetAvatarUrl(ImageFormat format = ImageFormat.Auto, ushort size = 128) - => CDN.GetUserAvatarUrl(Id, AvatarId, size, format); + => GetCustomAvatarUrl(format, size) ?? GetDefaultAvatarUrl(); public override string ToString() => $"{Username}#{Discriminator}"; private string DebuggerDisplay => $"{Username}#{Discriminator} ({Id}{(IsBot ? ", Bot" : "")})"; diff --git a/src/Discord.Net.Webhook/Entities/Webhooks/RestInternalWebhook.cs b/src/Discord.Net.Webhook/Entities/Webhooks/RestInternalWebhook.cs index cd35d731c..09a474fd1 100644 --- a/src/Discord.Net.Webhook/Entities/Webhooks/RestInternalWebhook.cs +++ b/src/Discord.Net.Webhook/Entities/Webhooks/RestInternalWebhook.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Diagnostics; using System.Threading.Tasks; using Model = Discord.API.Webhook; @@ -45,7 +45,7 @@ namespace Discord.Webhook } public string GetAvatarUrl(ImageFormat format = ImageFormat.Auto, ushort size = 128) - => CDN.GetUserAvatarUrl(Id, AvatarId, size, format); + => CDN.GetUserCustomAvatarUrl(Id, AvatarId, size, format); public async Task ModifyAsync(Action func, RequestOptions options = null) {