@@ -1,4 +1,4 @@ | |||
using System; | |||
using System; | |||
namespace Discord | |||
{ | |||
@@ -13,6 +13,15 @@ namespace Discord | |||
string extension = FormatToExtension(format, avatarId); | |||
return $"{DiscordConfig.CDNUrl}avatars/{userId}/{avatarId}.{extension}?size={size}"; | |||
} | |||
public static string GetDefaultUserAvatarUrl(string discriminator) | |||
{ | |||
if (string.IsNullOrEmpty(discriminator)) | |||
throw new ArgumentNullException(nameof(discriminator)); | |||
int discriminator_mod = Convert.ToInt32(discriminator) % 5; | |||
return $"{DiscordConfig.CDNUrl}embed/avatars/{discriminator_mod}"; | |||
} | |||
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) | |||
@@ -34,11 +43,16 @@ namespace Discord | |||
format = imageId.StartsWith("a_") ? ImageFormat.Gif : ImageFormat.Png; | |||
switch (format) | |||
{ | |||
case ImageFormat.Gif: return "gif"; | |||
case ImageFormat.Jpeg: return "jpeg"; | |||
case ImageFormat.Png: return "png"; | |||
case ImageFormat.WebP: return "webp"; | |||
default: throw new ArgumentException(nameof(format)); | |||
case ImageFormat.Gif: | |||
return "gif"; | |||
case ImageFormat.Jpeg: | |||
return "jpeg"; | |||
case ImageFormat.Png: | |||
return "png"; | |||
case ImageFormat.WebP: | |||
return "webp"; | |||
default: | |||
throw new ArgumentException(nameof(format)); | |||
} | |||
} | |||
} | |||
@@ -8,6 +8,8 @@ namespace Discord | |||
string AvatarId { get; } | |||
/// <summary> Gets the url to this user's avatar. </summary> | |||
string GetAvatarUrl(ImageFormat format = ImageFormat.Auto, ushort size = 128); | |||
/// <summary> Gets the url to this user's default avatar. </summary> | |||
string GetDefaultAvatarUrl(); | |||
/// <summary> Gets the per-username unique id for this user. </summary> | |||
string Discriminator { get; } | |||
/// <summary> Gets the per-username unique id for this user. </summary> | |||
@@ -1,4 +1,4 @@ | |||
using System; | |||
using System; | |||
using System.Diagnostics; | |||
using System.Threading.Tasks; | |||
using Model = Discord.API.User; | |||
@@ -60,6 +60,9 @@ namespace Discord.Rest | |||
public string GetAvatarUrl(ImageFormat format = ImageFormat.Auto, ushort size = 128) | |||
=> CDN.GetUserAvatarUrl(Id, AvatarId, size, format); | |||
public string GetDefaultAvatarUrl() | |||
=> CDN.GetDefaultUserAvatarUrl(Discriminator); | |||
public override string ToString() => $"{Username}#{Discriminator}"; | |||
private string DebuggerDisplay => $"{Username}#{Discriminator} ({Id}{(IsBot ? ", Bot" : "")})"; | |||
@@ -1,4 +1,4 @@ | |||
using Discord.Rest; | |||
using Discord.Rest; | |||
using System; | |||
using System.Threading.Tasks; | |||
using Model = Discord.API.User; | |||
@@ -37,23 +37,23 @@ 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<IDMChannel> GetOrCreateDMChannelAsync(RequestOptions options = null) | |||
=> GlobalUser.DMChannel ?? await UserHelper.CreateDMChannelAsync(this, Discord, options) as IDMChannel; | |||
@@ -61,6 +61,9 @@ namespace Discord.WebSocket | |||
public string GetAvatarUrl(ImageFormat format = ImageFormat.Auto, ushort size = 128) | |||
=> CDN.GetUserAvatarUrl(Id, AvatarId, size, format); | |||
public string GetDefaultAvatarUrl() | |||
=> CDN.GetDefaultUserAvatarUrl(Discriminator); | |||
public override string ToString() => $"{Username}#{Discriminator}"; | |||
private string DebuggerDisplay => $"{Username}#{Discriminator} ({Id}{(IsBot ? ", Bot" : "")})"; | |||
internal SocketUser Clone() => MemberwiseClone() as SocketUser; | |||