using System.ComponentModel.DataAnnotations.Schema; using Catalogger.Backend.Extensions; using Remora.Rest.Core; namespace Catalogger.Backend.Database.Models; public class Guild { [DatabaseGenerated(DatabaseGeneratedOption.None)] public required ulong Id { get; init; } [Column(TypeName = "jsonb")] public ChannelConfig Channels { get; init; } = new(); public List BannedSystems { get; init; } = []; public List KeyRoles { get; init; } = []; public bool IsMessageIgnored(Snowflake channelId, Snowflake userId) { if ( Channels is { MessageDelete: 0, MessageUpdate: 0, MessageDeleteBulk: 0 } || Channels.IgnoredChannels.Contains(channelId.ToUlong()) || Channels.IgnoredUsers.Contains(userId.ToUlong()) ) return true; if ( Channels.IgnoredUsersPerChannel.TryGetValue( channelId.ToUlong(), out var thisChannelIgnoredUsers ) ) return thisChannelIgnoredUsers.Contains(userId.ToUlong()); return false; } public class ChannelConfig { public List IgnoredChannels { get; init; } = []; public List IgnoredUsers { get; init; } = []; public Dictionary> IgnoredUsersPerChannel { get; init; } = []; public Dictionary Redirects { get; init; } = []; public ulong GuildUpdate { get; set; } public ulong GuildEmojisUpdate { get; set; } public ulong GuildRoleCreate { get; set; } public ulong GuildRoleUpdate { get; set; } public ulong GuildRoleDelete { get; set; } public ulong ChannelCreate { get; set; } public ulong ChannelUpdate { get; set; } public ulong ChannelDelete { get; set; } public ulong GuildMemberAdd { get; set; } public ulong GuildMemberUpdate { get; set; } public ulong GuildKeyRoleUpdate { get; set; } public ulong GuildMemberNickUpdate { get; set; } public ulong GuildMemberAvatarUpdate { get; set; } public ulong GuildMemberTimeout { get; set; } public ulong GuildMemberRemove { get; set; } public ulong GuildMemberKick { get; set; } public ulong GuildBanAdd { get; set; } public ulong GuildBanRemove { get; set; } public ulong InviteCreate { get; set; } public ulong InviteDelete { get; set; } public ulong MessageUpdate { get; set; } public ulong MessageDelete { get; set; } public ulong MessageDeleteBulk { get; set; } } }