diff --git a/src/Discord.Net.Core/CDN.cs b/src/Discord.Net.Core/CDN.cs index 52b9a2878..17be41482 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 c5cce7a25..c385c5cd1 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 url to this user's default avatar. string GetDefaultAvatarUrl(); diff --git a/src/Discord.Net.Rest/Entities/Users/RestUser.cs b/src/Discord.Net.Rest/Entities/Users/RestUser.cs index c484986b1..1cbf197d7 100644 --- a/src/Discord.Net.Rest/Entities/Users/RestUser.cs +++ b/src/Discord.Net.Rest/Entities/Users/RestUser.cs @@ -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 string GetDefaultAvatarUrl() => CDN.GetDefaultUserAvatarUrl(DiscriminatorValue); 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 00899d47e..56e7d4d6e 100644 --- a/src/Discord.Net.WebSocket/Entities/Users/SocketUser.cs +++ b/src/Discord.Net.WebSocket/Entities/Users/SocketUser.cs @@ -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 string GetDefaultAvatarUrl() => CDN.GetDefaultUserAvatarUrl(DiscriminatorValue); 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) {