From 4c36ad5e846f6c643d0541784bcd89664ef663b7 Mon Sep 17 00:00:00 2001 From: HelpfulStranger999 Date: Mon, 26 Mar 2018 14:39:21 -0500 Subject: [PATCH] Resolves #971 --- src/Discord.Net.Core/CDN.cs | 2 ++ src/Discord.Net.Core/Entities/Users/IUser.cs | 6 ++++++ src/Discord.Net.Rest/Entities/Users/RestUser.cs | 11 ++++++++++- .../Entities/Users/SocketUser.cs | 10 +++++++++- 4 files changed, 27 insertions(+), 2 deletions(-) diff --git a/src/Discord.Net.Core/CDN.cs b/src/Discord.Net.Core/CDN.cs index f23f55238..6c7a4af89 100644 --- a/src/Discord.Net.Core/CDN.cs +++ b/src/Discord.Net.Core/CDN.cs @@ -13,6 +13,8 @@ namespace Discord string extension = FormatToExtension(format, avatarId); return $"{DiscordConfig.CDNUrl}avatars/{userId}/{avatarId}.{extension}?size={size}"; } + public static string GetUserDefaultAvatarUrl(ushort discrim) + => $"{DiscordConfig.CDNUrl}embed/avatars/{discrim}.png"; public static string GetGuildIconUrl(ulong guildId, string iconId) => iconId != null ? $"{DiscordConfig.CDNUrl}icons/{guildId}/{iconId}.jpg" : null; public static string GetGuildSplashUrl(ulong guildId, string splashId) diff --git a/src/Discord.Net.Core/Entities/Users/IUser.cs b/src/Discord.Net.Core/Entities/Users/IUser.cs index e3f270f6f..9d06ca12a 100644 --- a/src/Discord.Net.Core/Entities/Users/IUser.cs +++ b/src/Discord.Net.Core/Entities/Users/IUser.cs @@ -8,6 +8,10 @@ namespace Discord string AvatarId { get; } /// Gets the url to this user's avatar. string GetAvatarUrl(ImageFormat format = ImageFormat.Auto, ushort size = 128); + /// Get the url to this user's custom avatar. + string GetCustomAvatarUrl(ImageFormat format = ImageFormat.Auto, ushort size = 128); + /// Get the url to this user's default avatar. + string GetDefaultAvatarUrl(); /// Gets the per-username unique id for this user. string Discriminator { get; } /// Gets the per-username unique id for this user. @@ -16,6 +20,8 @@ namespace Discord bool IsBot { get; } /// Returns true if this user is a webhook user. bool IsWebhook { get; } + /// Returns true if this user has set a custom avatar. + bool HasCustomAvatar { get; } /// Gets the username for this user. string Username { get; } diff --git a/src/Discord.Net.Rest/Entities/Users/RestUser.cs b/src/Discord.Net.Rest/Entities/Users/RestUser.cs index c6cf6103a..f9eac20cc 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; @@ -9,6 +9,7 @@ namespace Discord.Rest public class RestUser : RestEntity, IUser, IUpdateable { public bool IsBot { get; private set; } + public bool HasCustomeAvatar { get; private set; } public string Username { get; private set; } public ushort DiscriminatorValue { get; private set; } public string AvatarId { get; private set; } @@ -19,6 +20,7 @@ namespace Discord.Rest public virtual IActivity Activity => null; public virtual UserStatus Status => UserStatus.Offline; public virtual bool IsWebhook => false; + public bool HasCustomAvatar => AvatarId != null; internal RestUser(BaseDiscordClient discord, ulong id) : base(discord, id) @@ -58,13 +60,20 @@ namespace Discord.Rest => UserHelper.CreateDMChannelAsync(this, Discord, options); public string GetAvatarUrl(ImageFormat format = ImageFormat.Auto, ushort size = 128) + => GetCustomAvatarUrl(format, size) ?? GetDefaultAvatarUrl(); + + public string GetCustomAvatarUrl(ImageFormat format = ImageFormat.Auto, ushort size = 128) => CDN.GetUserAvatarUrl(Id, AvatarId, size, format); + public string GetDefaultAvatarUrl() + => CDN.GetUserDefaultAvatarUrl(DiscriminatorValue); + public override string ToString() => $"{Username}#{Discriminator}"; private string DebuggerDisplay => $"{Username}#{Discriminator} ({Id}{(IsBot ? ", Bot" : "")})"; //IUser async Task IUser.GetOrCreateDMChannelAsync(RequestOptions options) => await GetOrCreateDMChannelAsync(options); + } } diff --git a/src/Discord.Net.WebSocket/Entities/Users/SocketUser.cs b/src/Discord.Net.WebSocket/Entities/Users/SocketUser.cs index 58d5c62a1..aa0b22f9c 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; @@ -20,6 +20,7 @@ namespace Discord.WebSocket public string Mention => MentionUtils.MentionUser(Id); public IActivity Activity => Presence.Activity; public UserStatus Status => Presence.Status; + public bool HasCustomAvatar => AvatarId != null; internal SocketUser(DiscordSocketClient discord, ulong id) : base(discord, id) @@ -59,10 +60,17 @@ namespace Discord.WebSocket => GlobalUser.DMChannel ?? await UserHelper.CreateDMChannelAsync(this, Discord, options) as IDMChannel; public string GetAvatarUrl(ImageFormat format = ImageFormat.Auto, ushort size = 128) + => GetCustomAvatarUrl(format, size) ?? GetDefaultAvatarUrl(); + + public string GetCustomAvatarUrl(ImageFormat format = ImageFormat.Auto, ushort size = 128) => CDN.GetUserAvatarUrl(Id, AvatarId, size, format); + public string GetDefaultAvatarUrl() + => CDN.GetUserDefaultAvatarUrl(DiscriminatorValue); + public override string ToString() => $"{Username}#{Discriminator}"; private string DebuggerDisplay => $"{Username}#{Discriminator} ({Id}{(IsBot ? ", Bot" : "")})"; internal SocketUser Clone() => MemberwiseClone() as SocketUser; + } }