using System.Text.Json.Nodes; using Remora.Rest.Core; namespace TeamOctolings.Octobot.Data; /// <summary> /// Stores information about a guild. This information is not accessible via the Discord API. /// </summary> /// <remarks>This information is stored on disk as a JSON file.</remarks> public sealed class GuildData { public readonly Dictionary<ulong, MemberData> MemberData; public readonly string MemberDataPath; public readonly Dictionary<ulong, ScheduledEventData> ScheduledEvents; public readonly string ScheduledEventsPath; public readonly JsonNode Settings; public readonly string SettingsPath; public readonly bool DataLoadFailed; public GuildData( JsonNode settings, string settingsPath, Dictionary<ulong, ScheduledEventData> scheduledEvents, string scheduledEventsPath, Dictionary<ulong, MemberData> memberData, string memberDataPath, bool dataLoadFailed) { Settings = settings; SettingsPath = settingsPath; ScheduledEvents = scheduledEvents; ScheduledEventsPath = scheduledEventsPath; MemberData = memberData; MemberDataPath = memberDataPath; DataLoadFailed = dataLoadFailed; } public MemberData GetOrCreateMemberData(Snowflake memberId) { if (MemberData.TryGetValue(memberId.Value, out var existing)) { return existing; } var newData = new MemberData(memberId.Value); MemberData.Add(memberId.Value, newData); return newData; } }