diff --git a/src/Discord.Net.Core/CDN.cs b/src/Discord.Net.Core/CDN.cs
index c5f05c0c3..d3ade3722 100644
--- a/src/Discord.Net.Core/CDN.cs
+++ b/src/Discord.Net.Core/CDN.cs
@@ -1,16 +1,17 @@
-namespace Discord
+using System;
+
+namespace Discord
{
public static class CDN
{
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)
+ public static string GetUserAvatarUrl(ulong userId, string avatarId, ushort size, ImageFormat format)
{
if (avatarId == null)
return null;
- if (format == AvatarFormat.Auto)
- format = avatarId.StartsWith("a_") ? AvatarFormat.Gif : AvatarFormat.Png;
- return $"{DiscordConfig.CDNUrl}avatars/{userId}/{avatarId}.{format.ToString().ToLower()}?size={size}";
+ string extension = FormatToExtension(format, avatarId);
+ return $"{DiscordConfig.CDNUrl}avatars/{userId}/{avatarId}.{extension}?size={size}";
}
public static string GetGuildIconUrl(ulong guildId, string iconId)
=> iconId != null ? $"{DiscordConfig.CDNUrl}icons/{guildId}/{iconId}.jpg" : null;
@@ -20,5 +21,19 @@
=> iconId != null ? $"{DiscordConfig.CDNUrl}channel-icons/{channelId}/{iconId}.jpg" : null;
public static string GetEmojiUrl(ulong emojiId)
=> $"{DiscordConfig.CDNUrl}emojis/{emojiId}.png";
+
+ private static string FormatToExtension(ImageFormat format, string imageId)
+ {
+ if (format == ImageFormat.Auto)
+ 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));
+ }
+ }
}
}
diff --git a/src/Discord.Net.Core/Entities/Users/AvatarFormat.cs b/src/Discord.Net.Core/Entities/ImageFormat.cs
similarity index 78%
rename from src/Discord.Net.Core/Entities/Users/AvatarFormat.cs
rename to src/Discord.Net.Core/Entities/ImageFormat.cs
index ef9e4b375..302da79c8 100644
--- a/src/Discord.Net.Core/Entities/Users/AvatarFormat.cs
+++ b/src/Discord.Net.Core/Entities/ImageFormat.cs
@@ -1,6 +1,6 @@
namespace Discord
{
- public enum AvatarFormat
+ public enum ImageFormat
{
Auto,
WebP,
diff --git a/src/Discord.Net.Core/Entities/Users/IUser.cs b/src/Discord.Net.Core/Entities/Users/IUser.cs
index 4d36295f3..62060da22 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.Auto, ushort size = 128);
+ string GetAvatarUrl(ImageFormat format = ImageFormat.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 4d7ab5d15..0acfe3ddf 100644
--- a/src/Discord.Net.Rest/Entities/Users/RestUser.cs
+++ b/src/Discord.Net.Rest/Entities/Users/RestUser.cs
@@ -13,7 +13,8 @@ namespace Discord.Rest
public ushort DiscriminatorValue { get; private set; }
public string AvatarId { get; private set; }
- public string GetAvatarUrl(AvatarFormat format = AvatarFormat.Auto, ushort size = 128) => CDN.GetUserAvatarUrl(Id, AvatarId, size, format);
+ public string GetAvatarUrl(ImageFormat format = ImageFormat.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.Rpc/Entities/Users/RpcUser.cs b/src/Discord.Net.Rpc/Entities/Users/RpcUser.cs
index 24c715491..daf299e2a 100644
--- a/src/Discord.Net.Rpc/Entities/Users/RpcUser.cs
+++ b/src/Discord.Net.Rpc/Entities/Users/RpcUser.cs
@@ -14,7 +14,8 @@ namespace Discord.Rpc
public ushort DiscriminatorValue { get; private set; }
public string AvatarId { get; private set; }
- public string GetAvatarUrl(AvatarFormat format = AvatarFormat.Auto, ushort size = 128) => CDN.GetUserAvatarUrl(Id, AvatarId, size, format);
+ public string GetAvatarUrl(ImageFormat format = ImageFormat.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 5a0c22d36..5c73e3b6a 100644
--- a/src/Discord.Net.WebSocket/Entities/Users/SocketUser.cs
+++ b/src/Discord.Net.WebSocket/Entities/Users/SocketUser.cs
@@ -15,7 +15,8 @@ namespace Discord.WebSocket
internal abstract SocketGlobalUser GlobalUser { get; }
internal abstract SocketPresence Presence { get; set; }
- public string GetAvatarUrl(AvatarFormat format = AvatarFormat.Auto, ushort size = 128) => CDN.GetUserAvatarUrl(Id, AvatarId, size, format);
+ public string GetAvatarUrl(ImageFormat format = ImageFormat.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);