You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
32 lines
1.1 KiB
32 lines
1.1 KiB
using System.Text.Json;
|
|
using DiscordChatExporter.Core.Discord.Data.Common;
|
|
using DiscordChatExporter.Core.Utils.Extensions;
|
|
using JsonExtensions.Reading;
|
|
|
|
namespace DiscordChatExporter.Core.Discord.Data;
|
|
|
|
// https://discord.com/developers/docs/resources/guild#guild-object
|
|
public record Guild(Snowflake Id, string Name, string IconUrl) : IHasId
|
|
{
|
|
// Direct messages are encapsulated within a special pseudo-guild for consistency
|
|
public static Guild DirectMessages { get; } = new(
|
|
Snowflake.Zero,
|
|
"Direct Messages",
|
|
ImageCdn.GetFallbackUserAvatarUrl(0)
|
|
);
|
|
|
|
public static Guild Parse(JsonElement json)
|
|
{
|
|
var id = json.GetProperty("id").GetNonWhiteSpaceString().Pipe(Snowflake.Parse);
|
|
var name = json.GetProperty("name").GetNonNullString();
|
|
|
|
var iconUrl =
|
|
json
|
|
.GetPropertyOrNull("icon")?
|
|
.GetNonWhiteSpaceStringOrNull()?
|
|
.Pipe(h => ImageCdn.GetGuildIconUrl(id, h)) ??
|
|
ImageCdn.GetFallbackUserAvatarUrl(0);
|
|
|
|
return new Guild(id, name, iconUrl);
|
|
}
|
|
} |