From ea82ef06f3cf4664a52970407e9e23179c894133 Mon Sep 17 00:00:00 2001 From: Aleks Margarian Date: Sun, 11 Mar 2018 14:02:53 -0700 Subject: [PATCH] Added the ability to get the default avatar --- src/Discord.Net.Core/DiscordConfig.cs | 7 ++--- src/Discord.Net.Core/Entities/Users/IUser.cs | 4 +++ .../Entities/Users/RestUser.cs | 19 ++++++++++++- .../Entities/Users/SocketUser.cs | 27 +++++++++++++++---- 4 files changed, 48 insertions(+), 9 deletions(-) diff --git a/src/Discord.Net.Core/DiscordConfig.cs b/src/Discord.Net.Core/DiscordConfig.cs index fd2fe92e8..8d5a9976f 100644 --- a/src/Discord.Net.Core/DiscordConfig.cs +++ b/src/Discord.Net.Core/DiscordConfig.cs @@ -4,16 +4,17 @@ namespace Discord { public class DiscordConfig { - public const int APIVersion = 6; + public const int APIVersion = 6; public static string Version { get; } = typeof(DiscordConfig).GetTypeInfo().Assembly.GetCustomAttribute()?.InformationalVersion ?? - typeof(DiscordConfig).GetTypeInfo().Assembly.GetName().Version.ToString(3) ?? + typeof(DiscordConfig).GetTypeInfo().Assembly.GetName().Version.ToString(3) ?? "Unknown"; public static string UserAgent { get; } = $"DiscordBot (https://github.com/RogueException/Discord.Net, v{Version})"; public static readonly string APIUrl = $"https://discordapp.com/api/v{APIVersion}/"; public const string CDNUrl = "https://cdn.discordapp.com/"; public const string InviteUrl = "https://discord.gg/"; + public const string MainUrl = "https://discordapp.com/"; public const int DefaultRequestTimeout = 15000; public const int MaxMessageSize = 2000; @@ -23,7 +24,7 @@ namespace Discord /// Gets or sets how a request should act in the case of an error, by default. public RetryMode DefaultRetryMode { get; set; } = RetryMode.AlwaysRetry; - + /// Gets or sets the minimum log level severity that will be sent to the Log event. public LogSeverity LogLevel { get; set; } = LogSeverity.Info; diff --git a/src/Discord.Net.Core/Entities/Users/IUser.cs b/src/Discord.Net.Core/Entities/Users/IUser.cs index e3f270f6f..de5e8648b 100644 --- a/src/Discord.Net.Core/Entities/Users/IUser.cs +++ b/src/Discord.Net.Core/Entities/Users/IUser.cs @@ -6,6 +6,10 @@ namespace Discord { /// Gets the id of this user's avatar. string AvatarId { get; } + /// 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 avatar. string GetAvatarUrl(ImageFormat format = ImageFormat.Auto, ushort size = 128); /// Gets the per-username unique id for this user. diff --git a/src/Discord.Net.Rest/Entities/Users/RestUser.cs b/src/Discord.Net.Rest/Entities/Users/RestUser.cs index c6cf6103a..d0fde9588 100644 --- a/src/Discord.Net.Rest/Entities/Users/RestUser.cs +++ b/src/Discord.Net.Rest/Entities/Users/RestUser.cs @@ -57,9 +57,26 @@ namespace Discord.Rest public Task GetOrCreateDMChannelAsync(RequestOptions options = null) => UserHelper.CreateDMChannelAsync(this, Discord, options); - public string GetAvatarUrl(ImageFormat format = ImageFormat.Auto, ushort size = 128) + public string GetCustomAvatarUrl(ImageFormat format = ImageFormat.Auto, ushort size = 128) => CDN.GetUserAvatarUrl(Id, AvatarId, size, format); + public string GetDefaultAvatarUrl() + { + switch (DiscriminatorValue % 5) + { + case 0: return DiscordConfig.MainUrl + "assets/6debd47ed13483642cf09e832ed0bc1b.png"; + case 1: return DiscordConfig.MainUrl + "assets/322c936a8c8be1b803cd94861bdfa868.png"; + case 2: return DiscordConfig.MainUrl + "assets/dd4dbc0016779df1378e7812eabaa04d.png"; + case 3: return DiscordConfig.MainUrl + "assets/0e291f67c9274a1abdddeb3fd919cbaa.png"; + case 4: return DiscordConfig.MainUrl + "assets/1cbd08c76f8af6dddce02c5138971129.png"; + } + } + + public string GetAvatarUrl(ImageFormat format = ImageFormat.Auto, ushort size = 128) + { + return GetCustomAvatarUrl(format, size) ?? GetDefaultAvatarUrl(); + } + public override string ToString() => $"{Username}#{Discriminator}"; private string DebuggerDisplay => $"{Username}#{Discriminator} ({Id}{(IsBot ? ", Bot" : "")})"; diff --git a/src/Discord.Net.WebSocket/Entities/Users/SocketUser.cs b/src/Discord.Net.WebSocket/Entities/Users/SocketUser.cs index 58d5c62a1..7f0f47e80 100644 --- a/src/Discord.Net.WebSocket/Entities/Users/SocketUser.cs +++ b/src/Discord.Net.WebSocket/Entities/Users/SocketUser.cs @@ -37,30 +37,47 @@ namespace Discord.WebSocket { var newVal = ushort.Parse(model.Discriminator.Value); if (newVal != DiscriminatorValue) - { + { DiscriminatorValue = ushort.Parse(model.Discriminator.Value); hasChanges = true; } } if (model.Bot.IsSpecified && model.Bot.Value != IsBot) - { + { IsBot = model.Bot.Value; hasChanges = true; } if (model.Username.IsSpecified && model.Username.Value != Username) - { + { Username = model.Username.Value; hasChanges = true; } return hasChanges; - } + } public async Task GetOrCreateDMChannelAsync(RequestOptions options = null) => GlobalUser.DMChannel ?? await UserHelper.CreateDMChannelAsync(this, Discord, options) as IDMChannel; - public string GetAvatarUrl(ImageFormat format = ImageFormat.Auto, ushort size = 128) + public string GetCustomAvatarUrl(ImageFormat format = ImageFormat.Auto, ushort size = 128) => CDN.GetUserAvatarUrl(Id, AvatarId, size, format); + public string GetDefaultAvatarUrl() + { + switch (DiscriminatorValue % 5) + { + case 0: return DiscordConfig.MainUrl + "assets/6debd47ed13483642cf09e832ed0bc1b.png"; + case 1: return DiscordConfig.MainUrl + "assets/322c936a8c8be1b803cd94861bdfa868.png"; + case 2: return DiscordConfig.MainUrl + "assets/dd4dbc0016779df1378e7812eabaa04d.png"; + case 3: return DiscordConfig.MainUrl + "assets/0e291f67c9274a1abdddeb3fd919cbaa.png"; + case 4: return DiscordConfig.MainUrl + "assets/1cbd08c76f8af6dddce02c5138971129.png"; + } + } + + public string GetAvatarUrl(ImageFormat format = ImageFormat.Auto, ushort size = 128) + { + return GetCustomAvatarUrl(format, size) ?? GetDefaultAvatarUrl(); + } + public override string ToString() => $"{Username}#{Discriminator}"; private string DebuggerDisplay => $"{Username}#{Discriminator} ({Id}{(IsBot ? ", Bot" : "")})"; internal SocketUser Clone() => MemberwiseClone() as SocketUser;