diff --git a/src/Discord.Net.Core/CDN.cs b/src/Discord.Net.Core/CDN.cs
index b7a5346ea..6a4e03212 100644
--- a/src/Discord.Net.Core/CDN.cs
+++ b/src/Discord.Net.Core/CDN.cs
@@ -4,8 +4,15 @@
{
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, AvatarFormat format)
- => avatarId != null ? $"{DiscordConfig.CDNUrl}avatars/{userId}/{avatarId}.{format.ToString().ToLower()}?size={size}" : null;
+ public static string GetUserAvatarUrl(ulong userId, string avatarId, ushort size, AvatarFormat format) {
+ if (avatarId == null)
+ return null;
+ var base = $"{DiscordConfig.CDNUrl}avatars/{userId}/{avatarId}";
+ if (format == AvatarFormat.Auto)
+ return base + (avatarId.StartsWith("a_") ? "gif" : "png") + $"?size={size}";
+ else
+ return base + format.ToString().ToLower() + $"?size={size}";
+ }
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/AvatarFormat.cs b/src/Discord.Net.Core/Entities/Users/AvatarFormat.cs
index 29c17cede..ef9e4b375 100644
--- a/src/Discord.Net.Core/Entities/Users/AvatarFormat.cs
+++ b/src/Discord.Net.Core/Entities/Users/AvatarFormat.cs
@@ -2,6 +2,7 @@
{
public enum AvatarFormat
{
+ Auto,
WebP,
Png,
Jpeg,
diff --git a/src/Discord.Net.Core/Entities/Users/IUser.cs b/src/Discord.Net.Core/Entities/Users/IUser.cs
index b7e807d8e..4d36295f3 100644
--- a/src/Discord.Net.Core/Entities/Users/IUser.cs
+++ b/src/Discord.Net.Core/Entities/Users/IUser.cs
@@ -7,7 +7,7 @@ namespace Discord
/// Gets the id of this user's avatar.
string AvatarId { get; }
/// Gets the url to this user's avatar.
- string GetAvatarUrl(AvatarFormat format = AvatarFormat.Png, ushort size = 128);
+ string GetAvatarUrl(AvatarFormat format = AvatarFormat.Auto, ushort size = 128);
/// Gets the per-username unique id for this user.
string Discriminator { get; }
/// 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 b439fb886..c57d96c5e 100644
--- a/src/Discord.Net.Rest/Entities/Users/RestUser.cs
+++ b/src/Discord.Net.Rest/Entities/Users/RestUser.cs
@@ -13,7 +13,7 @@ namespace Discord.Rest
public ushort DiscriminatorValue { get; private set; }
public string AvatarId { get; private set; }
- public string GetAvatarUrl(AvatarFormat format = AvatarFormat.Png, ushort size = 128) => CDN.GetUserAvatarUrl(Id, AvatarId, size, format);
+ public string GetAvatarUrl(AvatarFormat format = AvatarFormat.Auto, ushort size = 128) => CDN.GetUserAvatarUrl(Id, AvatarId, size, format);
public DateTimeOffset CreatedAt => DateTimeUtils.FromSnowflake(Id);
public string Discriminator => DiscriminatorValue.ToString("D4");
public string Mention => MentionUtils.MentionUser(Id);
@@ -41,7 +41,7 @@ namespace Discord.Rest
if (model.Username.IsSpecified)
Username = model.Username.Value;
}
-
+
public virtual async Task UpdateAsync(RequestOptions options = null)
{
var model = await Discord.ApiClient.GetUserAsync(Id, options).ConfigureAwait(false);
diff --git a/src/Discord.Net.Rpc/Entities/Users/RpcUser.cs b/src/Discord.Net.Rpc/Entities/Users/RpcUser.cs
index e78aee008..6a75f07a3 100644
--- a/src/Discord.Net.Rpc/Entities/Users/RpcUser.cs
+++ b/src/Discord.Net.Rpc/Entities/Users/RpcUser.cs
@@ -14,7 +14,7 @@ namespace Discord.Rpc
public ushort DiscriminatorValue { get; private set; }
public string AvatarId { get; private set; }
- public string GetAvatarUrl(AvatarFormat format = AvatarFormat.Png, ushort size = 128) => CDN.GetUserAvatarUrl(Id, AvatarId, size, format);
+ public string GetAvatarUrl(AvatarFormat format = AvatarFormat.Auto, ushort size = 128) => CDN.GetUserAvatarUrl(Id, AvatarId, size, format);
public DateTimeOffset CreatedAt => DateTimeUtils.FromSnowflake(Id);
public string Discriminator => DiscriminatorValue.ToString("D4");
public string Mention => MentionUtils.MentionUser(Id);
diff --git a/src/Discord.Net.WebSocket/Entities/Users/SocketUser.cs b/src/Discord.Net.WebSocket/Entities/Users/SocketUser.cs
index 574e79b6e..5a0c22d36 100644
--- a/src/Discord.Net.WebSocket/Entities/Users/SocketUser.cs
+++ b/src/Discord.Net.WebSocket/Entities/Users/SocketUser.cs
@@ -15,7 +15,7 @@ namespace Discord.WebSocket
internal abstract SocketGlobalUser GlobalUser { get; }
internal abstract SocketPresence Presence { get; set; }
- public string GetAvatarUrl(AvatarFormat format = AvatarFormat.Png, ushort size = 128) => CDN.GetUserAvatarUrl(Id, AvatarId, size, format);
+ public string GetAvatarUrl(AvatarFormat format = AvatarFormat.Auto, ushort size = 128) => CDN.GetUserAvatarUrl(Id, AvatarId, size, format);
public DateTimeOffset CreatedAt => DateTimeUtils.FromSnowflake(Id);
public string Discriminator => DiscriminatorValue.ToString("D4");
public string Mention => MentionUtils.MentionUser(Id);