diff --git a/DiscordChatExporter.Core/Discord/Data/Common/ImageCdn.cs b/DiscordChatExporter.Core/Discord/Data/Common/ImageCdn.cs index 0078ded..5aa7338 100644 --- a/DiscordChatExporter.Core/Discord/Data/Common/ImageCdn.cs +++ b/DiscordChatExporter.Core/Discord/Data/Common/ImageCdn.cs @@ -47,8 +47,8 @@ public static class ImageCdn ? $"https://cdn.discordapp.com/avatars/{userId}/{avatarHash}.gif?size={size}" : $"https://cdn.discordapp.com/avatars/{userId}/{avatarHash}.png?size={size}"; - public static string GetFallbackUserAvatarUrl(int discriminator) => - $"https://cdn.discordapp.com/embed/avatars/{discriminator % 5}.png"; + public static string GetFallbackUserAvatarUrl(int index = 0) => + $"https://cdn.discordapp.com/embed/avatars/{index}.png"; public static string GetMemberAvatarUrl(Snowflake guildId, Snowflake userId, string avatarHash, int size = 512) => avatarHash.StartsWith("a_", StringComparison.Ordinal) diff --git a/DiscordChatExporter.Core/Discord/Data/Guild.cs b/DiscordChatExporter.Core/Discord/Data/Guild.cs index b80a7c8..c013e34 100644 --- a/DiscordChatExporter.Core/Discord/Data/Guild.cs +++ b/DiscordChatExporter.Core/Discord/Data/Guild.cs @@ -12,7 +12,7 @@ public record Guild(Snowflake Id, string Name, string IconUrl) : IHasId public static Guild DirectMessages { get; } = new( Snowflake.Zero, "Direct Messages", - ImageCdn.GetFallbackUserAvatarUrl(0) + ImageCdn.GetFallbackUserAvatarUrl() ); public static Guild Parse(JsonElement json) @@ -25,7 +25,7 @@ public record Guild(Snowflake Id, string Name, string IconUrl) : IHasId .GetPropertyOrNull("icon")? .GetNonWhiteSpaceStringOrNull()? .Pipe(h => ImageCdn.GetGuildIconUrl(id, h)) ?? - ImageCdn.GetFallbackUserAvatarUrl(0); + ImageCdn.GetFallbackUserAvatarUrl(); return new Guild(id, name, iconUrl); } diff --git a/DiscordChatExporter.Core/Discord/Data/User.cs b/DiscordChatExporter.Core/Discord/Data/User.cs index 2171802..a885f00 100644 --- a/DiscordChatExporter.Core/Discord/Data/User.cs +++ b/DiscordChatExporter.Core/Discord/Data/User.cs @@ -45,12 +45,14 @@ public partial record User var name = json.GetProperty("username").GetNonNullString(); var displayName = json.GetPropertyOrNull("global_name")?.GetNonWhiteSpaceStringOrNull() ?? name; + var avatarIndex = discriminator % 5 ?? (int)((id.Value >> 22) % 6); + var avatarUrl = json .GetPropertyOrNull("avatar")? .GetNonWhiteSpaceStringOrNull()? .Pipe(h => ImageCdn.GetUserAvatarUrl(id, h)) ?? - ImageCdn.GetFallbackUserAvatarUrl(discriminator ?? 0); + ImageCdn.GetFallbackUserAvatarUrl(avatarIndex); return new User(id, isBot, discriminator, name, displayName, avatarUrl); }