| @@ -13,6 +13,8 @@ namespace Discord | |||||
| string extension = FormatToExtension(format, avatarId); | string extension = FormatToExtension(format, avatarId); | ||||
| return $"{DiscordConfig.CDNUrl}avatars/{userId}/{avatarId}.{extension}?size={size}"; | 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) | public static string GetGuildIconUrl(ulong guildId, string iconId) | ||||
| => iconId != null ? $"{DiscordConfig.CDNUrl}icons/{guildId}/{iconId}.jpg" : null; | => iconId != null ? $"{DiscordConfig.CDNUrl}icons/{guildId}/{iconId}.jpg" : null; | ||||
| public static string GetGuildSplashUrl(ulong guildId, string splashId) | public static string GetGuildSplashUrl(ulong guildId, string splashId) | ||||
| @@ -8,6 +8,10 @@ namespace Discord | |||||
| string AvatarId { get; } | string AvatarId { get; } | ||||
| /// <summary> Gets the url to this user's avatar. </summary> | /// <summary> Gets the url to this user's avatar. </summary> | ||||
| string GetAvatarUrl(ImageFormat format = ImageFormat.Auto, ushort size = 128); | string GetAvatarUrl(ImageFormat format = ImageFormat.Auto, ushort size = 128); | ||||
| /// <summary> Get the url to this user's custom avatar. </summary> | |||||
| string GetCustomAvatarUrl(ImageFormat format = ImageFormat.Auto, ushort size = 128); | |||||
| /// <summary> Get the url to this user's default avatar. </summary> | |||||
| string GetDefaultAvatarUrl(); | |||||
| /// <summary> Gets the per-username unique id for this user. </summary> | /// <summary> Gets the per-username unique id for this user. </summary> | ||||
| string Discriminator { get; } | string Discriminator { get; } | ||||
| /// <summary> Gets the per-username unique id for this user. </summary> | /// <summary> Gets the per-username unique id for this user. </summary> | ||||
| @@ -16,6 +20,8 @@ namespace Discord | |||||
| bool IsBot { get; } | bool IsBot { get; } | ||||
| /// <summary> Returns true if this user is a webhook user. </summary> | /// <summary> Returns true if this user is a webhook user. </summary> | ||||
| bool IsWebhook { get; } | bool IsWebhook { get; } | ||||
| /// <summary> Returns true if this user has set a custom avatar. </summary> | |||||
| bool HasCustomAvatar { get; } | |||||
| /// <summary> Gets the username for this user. </summary> | /// <summary> Gets the username for this user. </summary> | ||||
| string Username { get; } | string Username { get; } | ||||
| @@ -1,4 +1,4 @@ | |||||
| using System; | |||||
| using System; | |||||
| using System.Diagnostics; | using System.Diagnostics; | ||||
| using System.Threading.Tasks; | using System.Threading.Tasks; | ||||
| using Model = Discord.API.User; | using Model = Discord.API.User; | ||||
| @@ -9,6 +9,7 @@ namespace Discord.Rest | |||||
| public class RestUser : RestEntity<ulong>, IUser, IUpdateable | public class RestUser : RestEntity<ulong>, IUser, IUpdateable | ||||
| { | { | ||||
| public bool IsBot { get; private set; } | public bool IsBot { get; private set; } | ||||
| public bool HasCustomeAvatar { get; private set; } | |||||
| public string Username { get; private set; } | public string Username { get; private set; } | ||||
| public ushort DiscriminatorValue { get; private set; } | public ushort DiscriminatorValue { get; private set; } | ||||
| public string AvatarId { get; private set; } | public string AvatarId { get; private set; } | ||||
| @@ -19,6 +20,7 @@ namespace Discord.Rest | |||||
| public virtual IActivity Activity => null; | public virtual IActivity Activity => null; | ||||
| public virtual UserStatus Status => UserStatus.Offline; | public virtual UserStatus Status => UserStatus.Offline; | ||||
| public virtual bool IsWebhook => false; | public virtual bool IsWebhook => false; | ||||
| public bool HasCustomAvatar => AvatarId != null; | |||||
| internal RestUser(BaseDiscordClient discord, ulong id) | internal RestUser(BaseDiscordClient discord, ulong id) | ||||
| : base(discord, id) | : base(discord, id) | ||||
| @@ -58,13 +60,20 @@ namespace Discord.Rest | |||||
| => UserHelper.CreateDMChannelAsync(this, Discord, options); | => UserHelper.CreateDMChannelAsync(this, Discord, options); | ||||
| public string GetAvatarUrl(ImageFormat format = ImageFormat.Auto, ushort size = 128) | 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); | => CDN.GetUserAvatarUrl(Id, AvatarId, size, format); | ||||
| public string GetDefaultAvatarUrl() | |||||
| => CDN.GetUserDefaultAvatarUrl(DiscriminatorValue); | |||||
| public override string ToString() => $"{Username}#{Discriminator}"; | public override string ToString() => $"{Username}#{Discriminator}"; | ||||
| private string DebuggerDisplay => $"{Username}#{Discriminator} ({Id}{(IsBot ? ", Bot" : "")})"; | private string DebuggerDisplay => $"{Username}#{Discriminator} ({Id}{(IsBot ? ", Bot" : "")})"; | ||||
| //IUser | //IUser | ||||
| async Task<IDMChannel> IUser.GetOrCreateDMChannelAsync(RequestOptions options) | async Task<IDMChannel> IUser.GetOrCreateDMChannelAsync(RequestOptions options) | ||||
| => await GetOrCreateDMChannelAsync(options); | => await GetOrCreateDMChannelAsync(options); | ||||
| } | } | ||||
| } | } | ||||
| @@ -1,4 +1,4 @@ | |||||
| using Discord.Rest; | |||||
| using Discord.Rest; | |||||
| using System; | using System; | ||||
| using System.Threading.Tasks; | using System.Threading.Tasks; | ||||
| using Model = Discord.API.User; | using Model = Discord.API.User; | ||||
| @@ -20,6 +20,7 @@ namespace Discord.WebSocket | |||||
| public string Mention => MentionUtils.MentionUser(Id); | public string Mention => MentionUtils.MentionUser(Id); | ||||
| public IActivity Activity => Presence.Activity; | public IActivity Activity => Presence.Activity; | ||||
| public UserStatus Status => Presence.Status; | public UserStatus Status => Presence.Status; | ||||
| public bool HasCustomAvatar => AvatarId != null; | |||||
| internal SocketUser(DiscordSocketClient discord, ulong id) | internal SocketUser(DiscordSocketClient discord, ulong id) | ||||
| : base(discord, id) | : base(discord, id) | ||||
| @@ -59,10 +60,17 @@ namespace Discord.WebSocket | |||||
| => GlobalUser.DMChannel ?? await UserHelper.CreateDMChannelAsync(this, Discord, options) as IDMChannel; | => GlobalUser.DMChannel ?? await UserHelper.CreateDMChannelAsync(this, Discord, options) as IDMChannel; | ||||
| public string GetAvatarUrl(ImageFormat format = ImageFormat.Auto, ushort size = 128) | 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); | => CDN.GetUserAvatarUrl(Id, AvatarId, size, format); | ||||
| public string GetDefaultAvatarUrl() | |||||
| => CDN.GetUserDefaultAvatarUrl(DiscriminatorValue); | |||||
| public override string ToString() => $"{Username}#{Discriminator}"; | public override string ToString() => $"{Username}#{Discriminator}"; | ||||
| private string DebuggerDisplay => $"{Username}#{Discriminator} ({Id}{(IsBot ? ", Bot" : "")})"; | private string DebuggerDisplay => $"{Username}#{Discriminator} ({Id}{(IsBot ? ", Bot" : "")})"; | ||||
| internal SocketUser Clone() => MemberwiseClone() as SocketUser; | internal SocketUser Clone() => MemberwiseClone() as SocketUser; | ||||
| } | } | ||||
| } | } | ||||