diff --git a/src/Mewdeko/Database/Extensions/GuildConfigExtensions.cs b/src/Mewdeko/Database/Extensions/GuildConfigExtensions.cs index c27f6792c..297c2c480 100644 --- a/src/Mewdeko/Database/Extensions/GuildConfigExtensions.cs +++ b/src/Mewdeko/Database/Extensions/GuildConfigExtensions.cs @@ -176,37 +176,13 @@ public static async Task XpSettingsFor(this MewdekoContext ctx, ulon /// The database context. /// The ID of the guild. /// The GuildConfig for the guild. - public static async Task LogSettingsFor(this MewdekoContext ctx, ulong guildId) + public static async Task LogSettingsFor(this MewdekoContext ctx, ulong guildId) { - var config = await ctx.GuildConfigs - .Include(gc => gc.LogSetting) - .ThenInclude(gc => gc.IgnoredChannels) - .ToLinqToDB() - .FirstOrDefaultAsyncLinqToDB(x => x.GuildId == guildId); - - if (config == null) - { - await ctx.AddAsync(config = new GuildConfig - { - GuildId = guildId, - Permissions = Permissionv2.GetDefaultPermlist, - WarningsInitialized = true, - WarnPunishments = DefaultWarnPunishments - }); - await ctx.SaveChangesAsync(); - } - - if (config.LogSetting == null) - { - config.LogSetting = new LogSetting(); - await ctx.SaveChangesAsync(); - } - - if (config.WarningsInitialized) return config; - config.WarningsInitialized = true; - config.WarnPunishments = DefaultWarnPunishments; - - return config; + var log = await ctx.LoggingV2.FirstOrDefaultAsync(x => x.GuildId == guildId) ?? new LoggingV2() + { + GuildId = guildId + }; + return log; } /// diff --git a/src/Mewdeko/Database/MewdekoContext.cs b/src/Mewdeko/Database/MewdekoContext.cs index 23dce23c2..4ce475da2 100644 --- a/src/Mewdeko/Database/MewdekoContext.cs +++ b/src/Mewdeko/Database/MewdekoContext.cs @@ -1,4 +1,5 @@ using Mewdeko.Common.Attributes.DB; +using Mewdeko.Modules.OwnerOnly.Services; using Mewdeko.Services.Impl; using Microsoft.EntityFrameworkCore; @@ -120,6 +121,11 @@ public MewdekoContext(DbContextOptions options) : base(options) /// public DbSet AutoBanRoles { get; set; } + /// + /// Logging settings for guilds + /// + public DbSet LoggingV2 { get; set; } + /// /// Gets or sets the publish word blacklists. /// @@ -410,6 +416,11 @@ public MewdekoContext(DbContextOptions options) : base(options) /// public DbSet WarningPunishments2 { get; set; } + /// + /// gets or sets the local running instances, for dashboard management. + /// + public DbSet BotInstances { get; set; } + /// /// Configures the model that was discovered by convention from the entity types /// exposed in properties on your derived context. diff --git a/src/Mewdeko/Database/Migrations/PostgreSql/20241011165238_SeparateSettings.Designer.cs b/src/Mewdeko/Database/Migrations/PostgreSql/20241011165238_SeparateSettings.Designer.cs new file mode 100644 index 000000000..24a68b599 --- /dev/null +++ b/src/Mewdeko/Database/Migrations/PostgreSql/20241011165238_SeparateSettings.Designer.cs @@ -0,0 +1,4600 @@ +// +using System; +using Mewdeko.Database; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; + +#nullable disable + +namespace Mewdeko.Database.Migrations.PostgreSql +{ + [DbContext(typeof(MewdekoPostgresContext))] + [Migration("20241011165238_SeparateSettings")] + partial class SeparateSettings + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "8.0.8") + .HasAnnotation("Relational:MaxIdentifierLength", 63); + + NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); + + modelBuilder.Entity("Mewdeko.Database.Models.Afk", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("DateAdded") + .HasColumnType("timestamp without time zone"); + + b.Property("GuildId") + .HasColumnType("numeric(20,0)"); + + b.Property("Message") + .HasColumnType("text"); + + b.Property("UserId") + .HasColumnType("numeric(20,0)"); + + b.Property("WasTimed") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false); + + b.Property("When") + .HasColumnType("timestamp without time zone"); + + b.HasKey("Id"); + + b.ToTable("AFK"); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.AntiAltSetting", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Action") + .HasColumnType("integer"); + + b.Property("ActionDurationMinutes") + .HasColumnType("integer"); + + b.Property("GuildConfigId") + .HasColumnType("integer"); + + b.Property("MinAge") + .HasColumnType("text"); + + b.Property("RoleId") + .HasColumnType("numeric(20,0)"); + + b.HasKey("Id"); + + b.HasIndex("GuildConfigId") + .IsUnique(); + + b.ToTable("AntiAltSetting"); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.AntiMassMentionSetting", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Action") + .HasColumnType("integer"); + + b.Property("DateAdded") + .HasColumnType("timestamp without time zone"); + + b.Property("GuildConfigId") + .HasColumnType("integer"); + + b.Property("IgnoreBots") + .HasColumnType("boolean"); + + b.Property("MaxMentionsInTimeWindow") + .HasColumnType("integer"); + + b.Property("MentionThreshold") + .HasColumnType("integer"); + + b.Property("MuteTime") + .HasColumnType("integer"); + + b.Property("RoleId") + .HasColumnType("numeric(20,0)"); + + b.Property("TimeWindowSeconds") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.HasIndex("GuildConfigId") + .IsUnique(); + + b.ToTable("AntiMassMentionSetting"); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.AntiRaidSetting", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Action") + .HasColumnType("integer"); + + b.Property("DateAdded") + .HasColumnType("timestamp without time zone"); + + b.Property("GuildConfigId") + .HasColumnType("integer"); + + b.Property("PunishDuration") + .HasColumnType("integer"); + + b.Property("Seconds") + .HasColumnType("integer"); + + b.Property("UserThreshold") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.HasIndex("GuildConfigId") + .IsUnique(); + + b.ToTable("AntiRaidSetting"); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.AntiSpamIgnore", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("AntiMassMentionSettingId") + .HasColumnType("integer"); + + b.Property("AntiSpamSettingId") + .HasColumnType("integer"); + + b.Property("ChannelId") + .HasColumnType("numeric(20,0)"); + + b.Property("DateAdded") + .HasColumnType("timestamp without time zone"); + + b.HasKey("Id"); + + b.HasIndex("AntiMassMentionSettingId"); + + b.HasIndex("AntiSpamSettingId"); + + b.ToTable("AntiSpamIgnore"); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.AntiSpamSetting", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Action") + .HasColumnType("integer"); + + b.Property("DateAdded") + .HasColumnType("timestamp without time zone"); + + b.Property("GuildConfigId") + .HasColumnType("integer"); + + b.Property("MessageThreshold") + .HasColumnType("integer"); + + b.Property("MuteTime") + .HasColumnType("integer"); + + b.Property("RoleId") + .HasColumnType("numeric(20,0)"); + + b.HasKey("Id"); + + b.HasIndex("GuildConfigId") + .IsUnique(); + + b.ToTable("AntiSpamSetting"); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.AutoBanEntry", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("DateAdded") + .HasColumnType("timestamp without time zone"); + + b.Property("GuildId") + .HasColumnType("numeric(20,0)"); + + b.Property("Word") + .HasColumnType("text"); + + b.HasKey("Id"); + + b.ToTable("AutoBanWords"); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.AutoBanRoles", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("DateAdded") + .HasColumnType("timestamp without time zone"); + + b.Property("GuildId") + .HasColumnType("numeric(20,0)"); + + b.Property("RoleId") + .HasColumnType("numeric(20,0)"); + + b.HasKey("Id"); + + b.ToTable("AutoBanRoles"); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.AutoCommand", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("ChannelId") + .HasColumnType("numeric(20,0)"); + + b.Property("ChannelName") + .HasColumnType("text"); + + b.Property("CommandText") + .HasColumnType("text"); + + b.Property("DateAdded") + .HasColumnType("timestamp without time zone"); + + b.Property("GuildId") + .HasColumnType("numeric(20,0)"); + + b.Property("GuildName") + .HasColumnType("text"); + + b.Property("Interval") + .HasColumnType("integer"); + + b.Property("VoiceChannelId") + .HasColumnType("numeric(20,0)"); + + b.Property("VoiceChannelName") + .HasColumnType("text"); + + b.HasKey("Id"); + + b.ToTable("AutoCommands"); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.AutoPublish", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("BlacklistedUsers") + .HasColumnType("numeric(20,0)"); + + b.Property("ChannelId") + .HasColumnType("numeric(20,0)"); + + b.Property("DateAdded") + .HasColumnType("timestamp without time zone"); + + b.Property("GuildId") + .HasColumnType("numeric(20,0)"); + + b.HasKey("Id"); + + b.ToTable("AutoPublish"); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.BanTemplate", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("DateAdded") + .HasColumnType("timestamp without time zone"); + + b.Property("GuildId") + .HasColumnType("numeric(20,0)"); + + b.Property("Text") + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex("GuildId") + .IsUnique(); + + b.ToTable("BanTemplates"); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.BlacklistEntry", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("DateAdded") + .HasColumnType("timestamp without time zone"); + + b.Property("ItemId") + .HasColumnType("numeric(20,0)"); + + b.Property("Reason") + .HasColumnType("text"); + + b.Property("Type") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.ToTable("Blacklist"); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.BlacklistedPermission", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("DateAdded") + .HasColumnType("timestamp without time zone"); + + b.Property("GuildId") + .HasColumnType("numeric(20,0)"); + + b.Property("Permission") + .HasColumnType("numeric(20,0)"); + + b.Property("PunishmentAction") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.ToTable("BlacklistedPermissions"); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.BlacklistedRole", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("DateAdded") + .HasColumnType("timestamp without time zone"); + + b.Property("GuildId") + .HasColumnType("numeric(20,0)"); + + b.Property("PunishmentAction") + .HasColumnType("integer"); + + b.Property("RoleId") + .HasColumnType("numeric(20,0)"); + + b.HasKey("Id"); + + b.ToTable("BlacklistedRoles"); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.BotReviews", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("AvatarUrl") + .IsRequired() + .HasColumnType("text"); + + b.Property("DateAdded") + .HasColumnType("timestamp without time zone"); + + b.Property("Review") + .IsRequired() + .HasColumnType("text"); + + b.Property("Stars") + .HasColumnType("integer"); + + b.Property("UserId") + .HasColumnType("numeric(20,0)"); + + b.Property("Username") + .IsRequired() + .HasColumnType("text"); + + b.HasKey("Id"); + + b.ToTable("BotReviews"); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.ChatTriggers", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("AllowTarget") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false); + + b.Property("ApplicationCommandDescription") + .HasColumnType("text"); + + b.Property("ApplicationCommandId") + .HasColumnType("numeric(20,0)"); + + b.Property("ApplicationCommandName") + .HasColumnType("text"); + + b.Property("ApplicationCommandType") + .HasColumnType("integer"); + + b.Property("AutoDeleteTrigger") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false); + + b.Property("ContainsAnywhere") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false); + + b.Property("CrosspostingChannelId") + .HasColumnType("numeric(20,0)"); + + b.Property("CrosspostingWebhookUrl") + .HasColumnType("text"); + + b.Property("CustomPrefix") + .HasColumnType("text"); + + b.Property("DateAdded") + .HasColumnType("timestamp without time zone"); + + b.Property("DmResponse") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false); + + b.Property("EphemeralResponse") + .HasColumnType("boolean"); + + b.Property("GrantedRoles") + .HasColumnType("text"); + + b.Property("GuildId") + .HasColumnType("numeric(20,0)"); + + b.Property("IsRegex") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false); + + b.Property("NoRespond") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false); + + b.Property("OwnerOnly") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false); + + b.Property("PrefixType") + .HasColumnType("integer"); + + b.Property("ReactToTrigger") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false); + + b.Property("Reactions") + .HasColumnType("text"); + + b.Property("RemovedRoles") + .HasColumnType("text"); + + b.Property("Response") + .HasColumnType("text"); + + b.Property("RoleGrantType") + .HasColumnType("integer"); + + b.Property("Trigger") + .HasColumnType("text"); + + b.Property("UseCount") + .HasColumnType("numeric(20,0)"); + + b.Property("ValidTriggerTypes") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.ToTable("ChatTriggers"); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.CommandAlias", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("DateAdded") + .HasColumnType("timestamp without time zone"); + + b.Property("GuildConfigId") + .HasColumnType("integer"); + + b.Property("Mapping") + .HasColumnType("text"); + + b.Property("Trigger") + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex("GuildConfigId"); + + b.ToTable("CommandAlias"); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.CommandCooldown", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("CommandName") + .HasColumnType("text"); + + b.Property("DateAdded") + .HasColumnType("timestamp without time zone"); + + b.Property("GuildConfigId") + .HasColumnType("integer"); + + b.Property("Seconds") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.HasIndex("GuildConfigId"); + + b.ToTable("CommandCooldown"); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.CommandStats", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("ChannelId") + .HasColumnType("numeric(20,0)"); + + b.Property("DateAdded") + .HasColumnType("timestamp without time zone"); + + b.Property("GuildId") + .HasColumnType("numeric(20,0)"); + + b.Property("IsSlash") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false); + + b.Property("Module") + .ValueGeneratedOnAdd() + .HasColumnType("text") + .HasDefaultValue(""); + + b.Property("NameOrId") + .HasColumnType("text"); + + b.Property("Trigger") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false); + + b.Property("UserId") + .HasColumnType("numeric(20,0)"); + + b.HasKey("Id"); + + b.ToTable("CommandStats"); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.Confessions", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("ChannelId") + .HasColumnType("numeric(20,0)"); + + b.Property("ConfessNumber") + .HasColumnType("numeric(20,0)"); + + b.Property("Confession") + .HasColumnType("text"); + + b.Property("DateAdded") + .HasColumnType("timestamp without time zone"); + + b.Property("GuildId") + .HasColumnType("numeric(20,0)"); + + b.Property("MessageId") + .HasColumnType("numeric(20,0)"); + + b.Property("UserId") + .HasColumnType("numeric(20,0)"); + + b.HasKey("Id"); + + b.ToTable("Confessions"); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.DelMsgOnCmdChannel", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("ChannelId") + .HasColumnType("numeric(20,0)"); + + b.Property("DateAdded") + .HasColumnType("timestamp without time zone"); + + b.Property("GuildConfigId") + .HasColumnType("integer"); + + b.Property("State") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(true); + + b.HasKey("Id"); + + b.HasIndex("GuildConfigId"); + + b.ToTable("DelMsgOnCmdChannel"); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.DiscordPermOverride", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Command") + .HasColumnType("text"); + + b.Property("DateAdded") + .HasColumnType("timestamp without time zone"); + + b.Property("GuildId") + .HasColumnType("numeric(20,0)"); + + b.Property("Perm") + .HasColumnType("numeric(20,0)"); + + b.HasKey("Id"); + + b.HasIndex("GuildId", "Command") + .IsUnique(); + + b.ToTable("DiscordPermOverrides"); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.DiscordUser", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("AvatarId") + .HasColumnType("text"); + + b.Property("Bio") + .HasColumnType("text"); + + b.Property("Birthday") + .HasColumnType("timestamp without time zone"); + + b.Property("BirthdayDisplayMode") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValue(0); + + b.Property("DateAdded") + .HasColumnType("timestamp without time zone"); + + b.Property("Discriminator") + .HasColumnType("text"); + + b.Property("IsClubAdmin") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false); + + b.Property("IsDragon") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false); + + b.Property("LastLevelUp") + .ValueGeneratedOnAdd() + .HasColumnType("timestamp without time zone") + .HasDefaultValue(new DateTime(2017, 9, 21, 20, 53, 13, 305, DateTimeKind.Local)); + + b.Property("NotifyOnLevelUp") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValue(0); + + b.Property("ProfileColor") + .HasColumnType("bigint"); + + b.Property("ProfileImageUrl") + .HasColumnType("text"); + + b.Property("ProfilePrivacy") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValue(0); + + b.Property("Pronouns") + .HasColumnType("text"); + + b.Property("PronounsClearedReason") + .HasColumnType("text"); + + b.Property("PronounsDisabled") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false); + + b.Property("StatsOptOut") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false); + + b.Property("SwitchFriendCode") + .HasColumnType("text"); + + b.Property("TotalXp") + .HasColumnType("integer"); + + b.Property("UserId") + .HasColumnType("numeric(20,0)"); + + b.Property("Username") + .HasColumnType("text"); + + b.Property("ZodiacSign") + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasAlternateKey("UserId"); + + b.HasIndex("TotalXp"); + + b.HasIndex("UserId"); + + b.ToTable("DiscordUser"); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.ExcludedItem", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("DateAdded") + .HasColumnType("timestamp without time zone"); + + b.Property("ItemId") + .HasColumnType("numeric(20,0)"); + + b.Property("ItemType") + .HasColumnType("integer"); + + b.Property("XpSettingsId") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.HasIndex("XpSettingsId"); + + b.ToTable("ExcludedItem"); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.FeedSub", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("ChannelId") + .HasColumnType("numeric(20,0)"); + + b.Property("DateAdded") + .HasColumnType("timestamp without time zone"); + + b.Property("GuildConfigId") + .HasColumnType("integer"); + + b.Property("Message") + .HasColumnType("text"); + + b.Property("Url") + .IsRequired() + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasAlternateKey("GuildConfigId", "Url"); + + b.ToTable("FeedSub"); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.FilterInvitesChannelIds", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("ChannelId") + .HasColumnType("numeric(20,0)"); + + b.Property("DateAdded") + .HasColumnType("timestamp without time zone"); + + b.Property("GuildConfigId") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.HasIndex("GuildConfigId"); + + b.ToTable("FilterInvitesChannelIds"); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.FilterLinksChannelId", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("ChannelId") + .HasColumnType("numeric(20,0)"); + + b.Property("DateAdded") + .HasColumnType("timestamp without time zone"); + + b.Property("GuildConfigId") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.HasIndex("GuildConfigId"); + + b.ToTable("FilterLinksChannelId"); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.FilterWordsChannelIds", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("ChannelId") + .HasColumnType("numeric(20,0)"); + + b.Property("DateAdded") + .HasColumnType("timestamp without time zone"); + + b.Property("GuildConfigId") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.HasIndex("GuildConfigId"); + + b.ToTable("FilterWordsChannelIds"); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.FilteredWord", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("DateAdded") + .HasColumnType("timestamp without time zone"); + + b.Property("GuildConfigId") + .HasColumnType("integer"); + + b.Property("Word") + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex("GuildConfigId"); + + b.ToTable("FilteredWord"); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.FollowedStream", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("ChannelId") + .HasColumnType("numeric(20,0)"); + + b.Property("DateAdded") + .HasColumnType("timestamp without time zone"); + + b.Property("GuildConfigId") + .HasColumnType("integer"); + + b.Property("GuildId") + .HasColumnType("numeric(20,0)"); + + b.Property("Message") + .HasColumnType("text"); + + b.Property("Type") + .HasColumnType("integer"); + + b.Property("Username") + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex("GuildConfigId"); + + b.ToTable("FollowedStream"); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.GiveawayUsers", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("DateAdded") + .HasColumnType("timestamp without time zone"); + + b.Property("GiveawayId") + .HasColumnType("integer"); + + b.Property("UserId") + .HasColumnType("numeric(20,0)"); + + b.HasKey("Id"); + + b.ToTable("GiveawayUsers"); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.Giveaways", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("BlacklistRoles") + .HasColumnType("text"); + + b.Property("BlacklistUsers") + .HasColumnType("text"); + + b.Property("ChannelId") + .HasColumnType("numeric(20,0)"); + + b.Property("DateAdded") + .HasColumnType("timestamp without time zone"); + + b.Property("Emote") + .HasColumnType("text"); + + b.Property("Ended") + .HasColumnType("integer"); + + b.Property("Item") + .HasColumnType("text"); + + b.Property("MessageCountReq") + .HasColumnType("numeric(20,0)"); + + b.Property("MessageId") + .HasColumnType("numeric(20,0)"); + + b.Property("RestrictTo") + .HasColumnType("text"); + + b.Property("ServerId") + .HasColumnType("numeric(20,0)"); + + b.Property("UseButton") + .HasColumnType("boolean"); + + b.Property("UseCaptcha") + .HasColumnType("boolean"); + + b.Property("UserId") + .HasColumnType("numeric(20,0)"); + + b.Property("When") + .HasColumnType("timestamp without time zone"); + + b.Property("Winners") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.ToTable("Giveaways"); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.GlobalUserBalance", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Balance") + .HasColumnType("bigint"); + + b.Property("DateAdded") + .HasColumnType("timestamp without time zone"); + + b.Property("UserId") + .HasColumnType("numeric(20,0)"); + + b.HasKey("Id"); + + b.ToTable("GlobalUserBalance"); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.GroupName", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("DateAdded") + .HasColumnType("timestamp without time zone"); + + b.Property("GuildConfigId") + .HasColumnType("integer"); + + b.Property("Name") + .HasColumnType("text"); + + b.Property("Number") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.HasIndex("GuildConfigId", "Number") + .IsUnique(); + + b.ToTable("GroupName"); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.GuildConfig", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("AcceptChannel") + .HasColumnType("numeric(20,0)"); + + b.Property("AcceptMessage") + .HasColumnType("text"); + + b.Property("AfkDel") + .HasColumnType("text"); + + b.Property("AfkDisabledChannels") + .HasColumnType("text"); + + b.Property("AfkLength") + .HasColumnType("integer"); + + b.Property("AfkMessage") + .HasColumnType("text"); + + b.Property("AfkTimeout") + .HasColumnType("integer"); + + b.Property("AfkType") + .HasColumnType("integer"); + + b.Property("ArchiveOnAccept") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false); + + b.Property("ArchiveOnConsider") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false); + + b.Property("ArchiveOnDeny") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false); + + b.Property("ArchiveOnImplement") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false); + + b.Property("AutoAssignRoleId") + .HasColumnType("text"); + + b.Property("AutoBotRoleIds") + .HasColumnType("text"); + + b.Property("AutoDeleteByeMessages") + .HasColumnType("boolean"); + + b.Property("AutoDeleteByeMessagesTimer") + .HasColumnType("integer"); + + b.Property("AutoDeleteGreetMessages") + .HasColumnType("boolean"); + + b.Property("AutoDeleteGreetMessagesTimer") + .HasColumnType("integer"); + + b.Property("AutoDeleteSelfAssignedRoleMessages") + .HasColumnType("boolean"); + + b.Property("BoostMessage") + .HasColumnType("text"); + + b.Property("BoostMessageChannelId") + .HasColumnType("numeric(20,0)"); + + b.Property("BoostMessageDeleteAfter") + .HasColumnType("integer"); + + b.Property("ButtonRepostThreshold") + .HasColumnType("integer"); + + b.Property("ByeMessageChannelId") + .HasColumnType("numeric(20,0)"); + + b.Property("ChannelByeMessageText") + .HasColumnType("text"); + + b.Property("ChannelGreetMessageText") + .HasColumnType("text"); + + b.Property("CleverbotChannel") + .HasColumnType("numeric(20,0)"); + + b.Property("CommandLogChannel") + .HasColumnType("numeric(20,0)"); + + b.Property("ConfessionBlacklist") + .HasColumnType("text"); + + b.Property("ConfessionChannel") + .HasColumnType("numeric(20,0)"); + + b.Property("ConfessionLogChannel") + .HasColumnType("numeric(20,0)"); + + b.Property("ConsiderChannel") + .HasColumnType("numeric(20,0)"); + + b.Property("ConsiderMessage") + .HasColumnType("text"); + + b.Property("CurrencyEmoji") + .HasColumnType("text"); + + b.Property("CurrencyName") + .HasColumnType("text"); + + b.Property("DateAdded") + .HasColumnType("timestamp without time zone"); + + b.Property("DeleteMessageOnCommand") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false); + + b.Property("DenyChannel") + .HasColumnType("numeric(20,0)"); + + b.Property("DenyMessage") + .HasColumnType("text"); + + b.Property("DmGreetMessageText") + .HasColumnType("text"); + + b.Property("DmOnGiveawayWin") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(true); + + b.Property("Emote1Style") + .HasColumnType("integer"); + + b.Property("Emote2Style") + .HasColumnType("integer"); + + b.Property("Emote3Style") + .HasColumnType("integer"); + + b.Property("Emote4Style") + .HasColumnType("integer"); + + b.Property("Emote5Style") + .HasColumnType("integer"); + + b.Property("EmoteMode") + .HasColumnType("integer"); + + b.Property("ExclusiveSelfAssignedRoles") + .HasColumnType("boolean"); + + b.Property("FilterInvites") + .HasColumnType("boolean"); + + b.Property("FilterLinks") + .HasColumnType("boolean"); + + b.Property("FilterWords") + .HasColumnType("boolean"); + + b.Property("GBAction") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false); + + b.Property("GBEnabled") + .HasColumnType("integer"); + + b.Property("GEndMessage") + .HasColumnType("text"); + + b.Property("GRolesBlacklist") + .HasColumnType("text"); + + b.Property("GStartMessage") + .HasColumnType("text"); + + b.Property("GUsersBlacklist") + .HasColumnType("text"); + + b.Property("GWinMessage") + .HasColumnType("text"); + + b.Property("GameMasterRole") + .HasColumnType("numeric(20,0)"); + + b.Property("GameVoiceChannel") + .HasColumnType("numeric(20,0)"); + + b.Property("GiveawayBanner") + .HasColumnType("text"); + + b.Property("GiveawayEmbedColor") + .HasColumnType("text"); + + b.Property("GiveawayEmote") + .HasColumnType("text"); + + b.Property("GiveawayEndMessage") + .HasColumnType("text"); + + b.Property("GiveawayPingRole") + .HasColumnType("numeric(20,0)"); + + b.Property("GiveawayWinEmbedColor") + .HasColumnType("text"); + + b.Property("GreetHook") + .HasColumnType("text"); + + b.Property("GreetMessageChannelId") + .HasColumnType("numeric(20,0)"); + + b.Property("GuildId") + .HasColumnType("numeric(20,0)"); + + b.Property("ImplementChannel") + .HasColumnType("numeric(20,0)"); + + b.Property("ImplementMessage") + .HasColumnType("text"); + + b.Property("JoinGraphColor") + .HasColumnType("bigint"); + + b.Property("Joins") + .HasColumnType("numeric(20,0)"); + + b.Property("LeaveGraphColor") + .HasColumnType("bigint"); + + b.Property("LeaveHook") + .HasColumnType("text"); + + b.Property("Leaves") + .HasColumnType("numeric(20,0)"); + + b.Property("Locale") + .HasColumnType("text"); + + b.Property("LogSettingId") + .HasColumnType("integer"); + + b.Property("MaxSuggestLength") + .HasColumnType("integer"); + + b.Property("MemberRole") + .HasColumnType("numeric(20,0)"); + + b.Property("MinMessageLength") + .HasColumnType("integer"); + + b.Property("MinSuggestLength") + .HasColumnType("integer"); + + b.Property("MiniWarnlogChannelId") + .HasColumnType("numeric(20,0)"); + + b.Property("MultiGreetType") + .HasColumnType("integer"); + + b.Property("MuteRoleName") + .HasColumnType("text"); + + b.Property("NotifyStreamOffline") + .HasColumnType("boolean"); + + b.Property("PermissionRole") + .HasColumnType("text"); + + b.Property("Prefix") + .HasColumnType("text"); + + b.Property("PreviewLinks") + .HasColumnType("integer"); + + b.Property("ReactChannel") + .HasColumnType("numeric(20,0)"); + + b.Property("RepostThreshold") + .HasColumnType("integer"); + + b.Property("RewardAmount") + .HasColumnType("integer"); + + b.Property("RewardTimeoutSeconds") + .HasColumnType("integer"); + + b.Property("SendBoostMessage") + .HasColumnType("boolean"); + + b.Property("SendChannelByeMessage") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false); + + b.Property("SendChannelGreetMessage") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false); + + b.Property("SendDmGreetMessage") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false); + + b.Property("StaffRole") + .HasColumnType("numeric(20,0)"); + + b.Property("Star2") + .HasColumnType("text"); + + b.Property("StarboardAllowBots") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false); + + b.Property("StarboardChannel") + .HasColumnType("numeric(20,0)"); + + b.Property("StarboardCheckChannels") + .HasColumnType("text"); + + b.Property("StarboardRemoveOnBelowThreshold") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(true); + + b.Property("StarboardRemoveOnDelete") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false); + + b.Property("StarboardRemoveOnReactionsClear") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false); + + b.Property("Stars") + .HasColumnType("integer"); + + b.Property("StatsOptOut") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false); + + b.Property("SuggestButtonChannel") + .HasColumnType("numeric(20,0)"); + + b.Property("SuggestButtonColor") + .HasColumnType("integer"); + + b.Property("SuggestButtonEmote") + .HasColumnType("text"); + + b.Property("SuggestButtonMessage") + .HasColumnType("text"); + + b.Property("SuggestButtonMessageId") + .HasColumnType("numeric(20,0)"); + + b.Property("SuggestButtonName") + .HasColumnType("text"); + + b.Property("SuggestButtonRepostThreshold") + .HasColumnType("integer"); + + b.Property("SuggestCommandsType") + .HasColumnType("integer"); + + b.Property("SuggestEmotes") + .HasColumnType("text"); + + b.Property("SuggestMessage") + .HasColumnType("text"); + + b.Property("SuggestionThreadType") + .HasColumnType("integer"); + + b.Property("TOpenMessage") + .HasColumnType("text"); + + b.Property("TicketCategory") + .HasColumnType("numeric(20,0)"); + + b.Property("TicketChannel") + .HasColumnType("numeric(20,0)"); + + b.Property("TimeZoneId") + .HasColumnType("text"); + + b.Property("UseMessageCount") + .HasColumnType("boolean"); + + b.Property("UseStarboardBlacklist") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(true); + + b.Property("VerboseErrors") + .HasColumnType("boolean"); + + b.Property("VerbosePermissions") + .HasColumnType("boolean"); + + b.Property("VoteEmbed") + .HasColumnType("text"); + + b.Property("VotesChannel") + .HasColumnType("numeric(20,0)"); + + b.Property("VotesPassword") + .HasColumnType("text"); + + b.Property("WarnExpireAction") + .HasColumnType("integer"); + + b.Property("WarnExpireHours") + .HasColumnType("integer"); + + b.Property("WarnMessage") + .HasColumnType("text"); + + b.Property("WarningsInitialized") + .HasColumnType("boolean"); + + b.Property("WarnlogChannelId") + .HasColumnType("numeric(20,0)"); + + b.Property("XpImgUrl") + .HasColumnType("text"); + + b.Property("XpTxtRate") + .HasColumnType("integer"); + + b.Property("XpTxtTimeout") + .HasColumnType("integer"); + + b.Property("XpVoiceRate") + .HasColumnType("integer"); + + b.Property("XpVoiceTimeout") + .HasColumnType("integer"); + + b.Property("fwarn") + .HasColumnType("integer"); + + b.Property("invwarn") + .HasColumnType("integer"); + + b.Property("removeroles") + .HasColumnType("integer"); + + b.Property("snipeset") + .HasColumnType("boolean"); + + b.Property("sugchan") + .HasColumnType("numeric(20,0)"); + + b.Property("sugnum") + .HasColumnType("numeric(20,0)"); + + b.HasKey("Id"); + + b.HasIndex("GuildId") + .IsUnique(); + + b.HasIndex("LogSettingId"); + + b.HasIndex("WarnExpireHours"); + + b.ToTable("GuildConfigs"); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.GuildUserBalance", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Balance") + .HasColumnType("bigint"); + + b.Property("DateAdded") + .HasColumnType("timestamp without time zone"); + + b.Property("GuildId") + .HasColumnType("numeric(20,0)"); + + b.Property("UserId") + .HasColumnType("numeric(20,0)"); + + b.HasKey("Id"); + + b.ToTable("GuildUserBalance"); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.HighlightSettings", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("DateAdded") + .HasColumnType("timestamp without time zone"); + + b.Property("GuildId") + .HasColumnType("numeric(20,0)"); + + b.Property("HighlightsOn") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false); + + b.Property("IgnoredChannels") + .HasColumnType("text"); + + b.Property("IgnoredUsers") + .HasColumnType("text"); + + b.Property("UserId") + .HasColumnType("numeric(20,0)"); + + b.HasKey("Id"); + + b.ToTable("HighlightSettings"); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.Highlights", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("DateAdded") + .HasColumnType("timestamp without time zone"); + + b.Property("GuildId") + .HasColumnType("numeric(20,0)"); + + b.Property("UserId") + .HasColumnType("numeric(20,0)"); + + b.Property("Word") + .HasColumnType("text"); + + b.HasKey("Id"); + + b.ToTable("Highlights"); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.IgnoredLogChannel", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("ChannelId") + .HasColumnType("numeric(20,0)"); + + b.Property("DateAdded") + .HasColumnType("timestamp without time zone"); + + b.Property("LogSettingId") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.HasIndex("LogSettingId"); + + b.ToTable("IgnoredLogChannels"); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.JoinLeaveLogs", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("DateAdded") + .HasColumnType("timestamp without time zone"); + + b.Property("GuildId") + .HasColumnType("numeric(20,0)"); + + b.Property("IsJoin") + .HasColumnType("boolean"); + + b.Property("UserId") + .HasColumnType("numeric(20,0)"); + + b.HasKey("Id"); + + b.ToTable("JoinLeaveLogs"); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.LocalBotInstances", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("BotUrl") + .IsRequired() + .HasColumnType("text"); + + b.Property("DateAdded") + .HasColumnType("timestamp without time zone"); + + b.HasKey("Id"); + + b.ToTable("BotInstances"); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.LockdownChannelPermissions", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("AllowPermissions") + .HasColumnType("numeric(20,0)"); + + b.Property("ChannelId") + .HasColumnType("numeric(20,0)"); + + b.Property("DenyPermissions") + .HasColumnType("numeric(20,0)"); + + b.Property("GuildId") + .HasColumnType("numeric(20,0)"); + + b.Property("TargetId") + .HasColumnType("numeric(20,0)"); + + b.Property("TargetType") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.ToTable("LockdownChannelPermissions"); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.LogSetting", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("AvatarUpdatedId") + .HasColumnType("numeric(20,0)"); + + b.Property("ChannelCreated") + .HasColumnType("bigint"); + + b.Property("ChannelCreatedId") + .HasColumnType("numeric(20,0)"); + + b.Property("ChannelDestroyed") + .HasColumnType("bigint"); + + b.Property("ChannelDestroyedId") + .HasColumnType("numeric(20,0)"); + + b.Property("ChannelId") + .HasColumnType("numeric(20,0)"); + + b.Property("ChannelUpdated") + .HasColumnType("bigint"); + + b.Property("ChannelUpdatedId") + .HasColumnType("numeric(20,0)"); + + b.Property("DateAdded") + .HasColumnType("timestamp without time zone"); + + b.Property("EventCreatedId") + .HasColumnType("numeric(20,0)"); + + b.Property("IsLogging") + .HasColumnType("bigint"); + + b.Property("LogOtherId") + .HasColumnType("numeric(20,0)"); + + b.Property("LogUserPresence") + .HasColumnType("bigint"); + + b.Property("LogUserPresenceId") + .HasColumnType("numeric(20,0)"); + + b.Property("LogVoicePresence") + .HasColumnType("bigint"); + + b.Property("LogVoicePresenceId") + .HasColumnType("numeric(20,0)"); + + b.Property("LogVoicePresenceTTSId") + .HasColumnType("numeric(20,0)"); + + b.Property("MessageDeleted") + .HasColumnType("bigint"); + + b.Property("MessageDeletedId") + .HasColumnType("numeric(20,0)"); + + b.Property("MessageUpdated") + .HasColumnType("bigint"); + + b.Property("MessageUpdatedId") + .HasColumnType("numeric(20,0)"); + + b.Property("NicknameUpdatedId") + .HasColumnType("numeric(20,0)"); + + b.Property("RoleCreatedId") + .HasColumnType("numeric(20,0)"); + + b.Property("RoleDeletedId") + .HasColumnType("numeric(20,0)"); + + b.Property("RoleUpdatedId") + .HasColumnType("numeric(20,0)"); + + b.Property("ServerUpdatedId") + .HasColumnType("numeric(20,0)"); + + b.Property("ThreadCreatedId") + .HasColumnType("numeric(20,0)"); + + b.Property("ThreadDeletedId") + .HasColumnType("numeric(20,0)"); + + b.Property("ThreadUpdatedId") + .HasColumnType("numeric(20,0)"); + + b.Property("UserBanned") + .HasColumnType("bigint"); + + b.Property("UserBannedId") + .HasColumnType("numeric(20,0)"); + + b.Property("UserJoined") + .HasColumnType("bigint"); + + b.Property("UserJoinedId") + .HasColumnType("numeric(20,0)"); + + b.Property("UserLeft") + .HasColumnType("bigint"); + + b.Property("UserLeftId") + .HasColumnType("numeric(20,0)"); + + b.Property("UserMutedId") + .HasColumnType("numeric(20,0)"); + + b.Property("UserPresenceChannelId") + .HasColumnType("numeric(20,0)"); + + b.Property("UserRoleAddedId") + .HasColumnType("numeric(20,0)"); + + b.Property("UserRoleRemovedId") + .HasColumnType("numeric(20,0)"); + + b.Property("UserUnbanned") + .HasColumnType("bigint"); + + b.Property("UserUnbannedId") + .HasColumnType("numeric(20,0)"); + + b.Property("UserUpdated") + .HasColumnType("bigint"); + + b.Property("UserUpdatedId") + .HasColumnType("numeric(20,0)"); + + b.Property("UsernameUpdatedId") + .HasColumnType("numeric(20,0)"); + + b.Property("VoicePresenceChannelId") + .HasColumnType("numeric(20,0)"); + + b.HasKey("Id"); + + b.ToTable("LogSettings"); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.LoggingV2", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("AvatarUpdatedId") + .HasColumnType("numeric(20,0)"); + + b.Property("ChannelCreatedId") + .HasColumnType("numeric(20,0)"); + + b.Property("ChannelDestroyedId") + .HasColumnType("numeric(20,0)"); + + b.Property("ChannelUpdatedId") + .HasColumnType("numeric(20,0)"); + + b.Property("DateAdded") + .HasColumnType("timestamp without time zone"); + + b.Property("EventCreatedId") + .HasColumnType("numeric(20,0)"); + + b.Property("GuildId") + .HasColumnType("numeric(20,0)"); + + b.Property("LogOtherId") + .HasColumnType("numeric(20,0)"); + + b.Property("LogUserPresenceId") + .HasColumnType("numeric(20,0)"); + + b.Property("LogVoicePresenceId") + .HasColumnType("numeric(20,0)"); + + b.Property("LogVoicePresenceTTSId") + .HasColumnType("numeric(20,0)"); + + b.Property("MessageDeletedId") + .HasColumnType("numeric(20,0)"); + + b.Property("MessageUpdatedId") + .HasColumnType("numeric(20,0)"); + + b.Property("NicknameUpdatedId") + .HasColumnType("numeric(20,0)"); + + b.Property("RoleCreatedId") + .HasColumnType("numeric(20,0)"); + + b.Property("RoleDeletedId") + .HasColumnType("numeric(20,0)"); + + b.Property("RoleUpdatedId") + .HasColumnType("numeric(20,0)"); + + b.Property("ServerUpdatedId") + .HasColumnType("numeric(20,0)"); + + b.Property("ThreadCreatedId") + .HasColumnType("numeric(20,0)"); + + b.Property("ThreadDeletedId") + .HasColumnType("numeric(20,0)"); + + b.Property("ThreadUpdatedId") + .HasColumnType("numeric(20,0)"); + + b.Property("UserBannedId") + .HasColumnType("numeric(20,0)"); + + b.Property("UserJoinedId") + .HasColumnType("numeric(20,0)"); + + b.Property("UserLeftId") + .HasColumnType("numeric(20,0)"); + + b.Property("UserMutedId") + .HasColumnType("numeric(20,0)"); + + b.Property("UserRoleAddedId") + .HasColumnType("numeric(20,0)"); + + b.Property("UserRoleRemovedId") + .HasColumnType("numeric(20,0)"); + + b.Property("UserUnbannedId") + .HasColumnType("numeric(20,0)"); + + b.Property("UserUpdatedId") + .HasColumnType("numeric(20,0)"); + + b.Property("UsernameUpdatedId") + .HasColumnType("numeric(20,0)"); + + b.HasKey("Id"); + + b.ToTable("LoggingV2"); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.MessageCount", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("ChannelId") + .HasColumnType("numeric(20,0)"); + + b.Property("Count") + .HasColumnType("numeric(20,0)"); + + b.Property("DateAdded") + .HasColumnType("timestamp without time zone"); + + b.Property("GuildId") + .HasColumnType("numeric(20,0)"); + + b.Property("RecentTimestamps") + .IsRequired() + .HasColumnType("text"); + + b.Property("UserId") + .HasColumnType("numeric(20,0)"); + + b.HasKey("Id"); + + b.ToTable("MessageCounts"); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.MultiGreet", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("ChannelId") + .HasColumnType("numeric(20,0)"); + + b.Property("DateAdded") + .HasColumnType("timestamp without time zone"); + + b.Property("DeleteTime") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValue(1); + + b.Property("Disabled") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false); + + b.Property("GreetBots") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false); + + b.Property("GuildId") + .HasColumnType("numeric(20,0)"); + + b.Property("Message") + .HasColumnType("text"); + + b.Property("WebhookUrl") + .HasColumnType("text"); + + b.HasKey("Id"); + + b.ToTable("MultiGreets"); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.MusicPlayerSettings", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("AutoDisconnect") + .HasColumnType("integer"); + + b.Property("AutoPlay") + .HasColumnType("integer"); + + b.Property("GuildId") + .HasColumnType("numeric(20,0)"); + + b.Property("MusicChannelId") + .HasColumnType("numeric(20,0)"); + + b.Property("PlayerRepeat") + .HasColumnType("integer"); + + b.Property("Volume") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValue(100); + + b.HasKey("Id"); + + b.HasIndex("GuildId") + .IsUnique(); + + b.ToTable("MusicPlayerSettings"); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.MusicPlaylist", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Author") + .HasColumnType("text"); + + b.Property("AuthorId") + .HasColumnType("numeric(20,0)"); + + b.Property("DateAdded") + .HasColumnType("timestamp without time zone"); + + b.Property("IsDefault") + .HasColumnType("boolean"); + + b.Property("Name") + .HasColumnType("text"); + + b.HasKey("Id"); + + b.ToTable("MusicPlaylists"); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.MutedUserId", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("DateAdded") + .HasColumnType("timestamp without time zone"); + + b.Property("GuildConfigId") + .HasColumnType("integer"); + + b.Property("UserId") + .HasColumnType("numeric(20,0)"); + + b.Property("roles") + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex("GuildConfigId"); + + b.ToTable("MutedUserId"); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.NsfwBlacklitedTag", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("DateAdded") + .HasColumnType("timestamp without time zone"); + + b.Property("GuildConfigId") + .HasColumnType("integer"); + + b.Property("Tag") + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex("GuildConfigId"); + + b.ToTable("NsfwBlacklitedTag"); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.OwnerOnly", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("CurrencyEmote") + .HasColumnType("text"); + + b.Property("DateAdded") + .HasColumnType("timestamp without time zone"); + + b.Property("GptTokensUsed") + .HasColumnType("integer"); + + b.Property("Owners") + .HasColumnType("text"); + + b.Property("RewardAmount") + .HasColumnType("integer"); + + b.Property("RewardTimeoutSeconds") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.ToTable("OwnerOnly"); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.Permission", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("DateAdded") + .HasColumnType("timestamp without time zone"); + + b.Property("NextId") + .HasColumnType("integer"); + + b.Property("PrimaryTarget") + .HasColumnType("integer"); + + b.Property("PrimaryTargetId") + .HasColumnType("numeric(20,0)"); + + b.Property("SecondaryTarget") + .HasColumnType("integer"); + + b.Property("SecondaryTargetName") + .HasColumnType("text"); + + b.Property("State") + .HasColumnType("boolean"); + + b.HasKey("Id"); + + b.HasIndex("NextId") + .IsUnique(); + + b.ToTable("Permission"); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.Permissionv2", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("DateAdded") + .HasColumnType("timestamp without time zone"); + + b.Property("GuildConfigId") + .HasColumnType("integer"); + + b.Property("Index") + .HasColumnType("integer"); + + b.Property("IsCustomCommand") + .HasColumnType("boolean"); + + b.Property("PrimaryTarget") + .HasColumnType("integer"); + + b.Property("PrimaryTargetId") + .HasColumnType("numeric(20,0)"); + + b.Property("SecondaryTarget") + .HasColumnType("integer"); + + b.Property("SecondaryTargetName") + .HasColumnType("text"); + + b.Property("State") + .HasColumnType("boolean"); + + b.HasKey("Id"); + + b.HasIndex("GuildConfigId"); + + b.ToTable("Permissionv2"); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.PlaylistSong", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("DateAdded") + .HasColumnType("timestamp without time zone"); + + b.Property("MusicPlaylistId") + .HasColumnType("integer"); + + b.Property("Provider") + .HasColumnType("text"); + + b.Property("ProviderType") + .HasColumnType("integer"); + + b.Property("Query") + .HasColumnType("text"); + + b.Property("Title") + .HasColumnType("text"); + + b.Property("Uri") + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex("MusicPlaylistId"); + + b.ToTable("PlaylistSong"); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.PollAnswers", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("DateAdded") + .HasColumnType("timestamp without time zone"); + + b.Property("Index") + .HasColumnType("integer"); + + b.Property("PollsId") + .HasColumnType("integer"); + + b.Property("Text") + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex("PollsId"); + + b.ToTable("PollAnswer"); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.PollVote", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("DateAdded") + .HasColumnType("timestamp without time zone"); + + b.Property("PollId") + .HasColumnType("integer"); + + b.Property("PollsId") + .HasColumnType("integer"); + + b.Property("UserId") + .HasColumnType("numeric(20,0)"); + + b.Property("VoteIndex") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.HasIndex("PollsId"); + + b.ToTable("PollVote"); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.Polls", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("ChannelId") + .HasColumnType("numeric(20,0)"); + + b.Property("DateAdded") + .HasColumnType("timestamp without time zone"); + + b.Property("GuildId") + .HasColumnType("numeric(20,0)"); + + b.Property("PollType") + .HasColumnType("integer"); + + b.Property("Question") + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex("GuildId") + .IsUnique(); + + b.ToTable("Poll"); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.PublishUserBlacklist", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("ChannelId") + .HasColumnType("numeric(20,0)"); + + b.Property("DateAdded") + .HasColumnType("timestamp without time zone"); + + b.Property("User") + .HasColumnType("numeric(20,0)"); + + b.HasKey("Id"); + + b.ToTable("PublishUserBlacklist"); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.PublishWordBlacklist", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("ChannelId") + .HasColumnType("numeric(20,0)"); + + b.Property("DateAdded") + .HasColumnType("timestamp without time zone"); + + b.Property("Word") + .HasColumnType("text"); + + b.HasKey("Id"); + + b.ToTable("PublishWordBlacklist"); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.Quote", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("AuthorId") + .HasColumnType("numeric(20,0)"); + + b.Property("AuthorName") + .IsRequired() + .HasColumnType("text"); + + b.Property("DateAdded") + .HasColumnType("timestamp without time zone"); + + b.Property("GuildId") + .HasColumnType("numeric(20,0)"); + + b.Property("Keyword") + .IsRequired() + .HasColumnType("text"); + + b.Property("Text") + .IsRequired() + .HasColumnType("text"); + + b.Property("UseCount") + .HasColumnType("numeric(20,0)"); + + b.HasKey("Id"); + + b.HasIndex("GuildId"); + + b.HasIndex("Keyword"); + + b.ToTable("Quotes"); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.ReactionRole", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("DateAdded") + .HasColumnType("timestamp without time zone"); + + b.Property("EmoteName") + .HasColumnType("text"); + + b.Property("ReactionRoleMessageId") + .HasColumnType("integer"); + + b.Property("RoleId") + .HasColumnType("numeric(20,0)"); + + b.HasKey("Id"); + + b.HasIndex("ReactionRoleMessageId"); + + b.ToTable("ReactionRole"); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.ReactionRoleMessage", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("ChannelId") + .HasColumnType("numeric(20,0)"); + + b.Property("DateAdded") + .HasColumnType("timestamp without time zone"); + + b.Property("Exclusive") + .HasColumnType("boolean"); + + b.Property("GuildConfigId") + .HasColumnType("integer"); + + b.Property("Index") + .HasColumnType("integer"); + + b.Property("MessageId") + .HasColumnType("numeric(20,0)"); + + b.HasKey("Id"); + + b.HasIndex("GuildConfigId"); + + b.ToTable("ReactionRoleMessage"); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.Reminder", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("ChannelId") + .HasColumnType("numeric(20,0)"); + + b.Property("DateAdded") + .HasColumnType("timestamp without time zone"); + + b.Property("IsPrivate") + .HasColumnType("boolean"); + + b.Property("Message") + .HasColumnType("text"); + + b.Property("ServerId") + .HasColumnType("numeric(20,0)"); + + b.Property("UserId") + .HasColumnType("numeric(20,0)"); + + b.Property("When") + .HasColumnType("timestamp without time zone"); + + b.HasKey("Id"); + + b.HasIndex("When"); + + b.ToTable("Reminders"); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.Repeater", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("ChannelId") + .HasColumnType("numeric(20,0)"); + + b.Property("DateAdded") + .HasColumnType("timestamp without time zone"); + + b.Property("GuildConfigId") + .HasColumnType("integer"); + + b.Property("GuildId") + .HasColumnType("numeric(20,0)"); + + b.Property("Interval") + .HasColumnType("text"); + + b.Property("LastMessageId") + .HasColumnType("numeric(20,0)"); + + b.Property("Message") + .HasColumnType("text"); + + b.Property("NoRedundant") + .HasColumnType("boolean"); + + b.Property("StartTimeOfDay") + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex("GuildConfigId"); + + b.ToTable("GuildRepeater"); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.RoleConnectionAuthStorage", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("DateAdded") + .HasColumnType("timestamp without time zone"); + + b.Property("ExpiresAt") + .HasColumnType("timestamp without time zone"); + + b.Property("RefreshToken") + .HasColumnType("text"); + + b.Property("Scopes") + .HasColumnType("text"); + + b.Property("Token") + .HasColumnType("text"); + + b.Property("UserId") + .HasColumnType("numeric(20,0)"); + + b.HasKey("Id"); + + b.ToTable("AuthCodes"); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.RoleGreet", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("ChannelId") + .HasColumnType("numeric(20,0)"); + + b.Property("DateAdded") + .HasColumnType("timestamp without time zone"); + + b.Property("DeleteTime") + .HasColumnType("integer"); + + b.Property("Disabled") + .HasColumnType("boolean"); + + b.Property("GreetBots") + .HasColumnType("boolean"); + + b.Property("GuildId") + .HasColumnType("numeric(20,0)"); + + b.Property("Message") + .HasColumnType("text"); + + b.Property("RoleId") + .HasColumnType("numeric(20,0)"); + + b.Property("WebhookUrl") + .HasColumnType("text"); + + b.HasKey("Id"); + + b.ToTable("RoleGreets"); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.RoleMonitoringSettings", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("DateAdded") + .HasColumnType("timestamp without time zone"); + + b.Property("DefaultPunishmentAction") + .HasColumnType("integer"); + + b.Property("GuildId") + .HasColumnType("numeric(20,0)"); + + b.HasKey("Id"); + + b.ToTable("RoleMonitoringSettings"); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.RoleStateSettings", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("ClearOnBan") + .HasColumnType("boolean"); + + b.Property("DateAdded") + .HasColumnType("timestamp without time zone"); + + b.Property("DeniedRoles") + .HasColumnType("text"); + + b.Property("DeniedUsers") + .HasColumnType("text"); + + b.Property("Enabled") + .HasColumnType("boolean"); + + b.Property("GuildId") + .HasColumnType("numeric(20,0)"); + + b.Property("IgnoreBots") + .HasColumnType("boolean"); + + b.HasKey("Id"); + + b.ToTable("RoleStateSettings"); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.RotatingPlayingStatus", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("DateAdded") + .HasColumnType("timestamp without time zone"); + + b.Property("Status") + .HasColumnType("text"); + + b.Property("Type") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.ToTable("RotatingStatus"); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.SelfAssignedRole", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("DateAdded") + .HasColumnType("timestamp without time zone"); + + b.Property("Group") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValue(0); + + b.Property("GuildId") + .HasColumnType("numeric(20,0)"); + + b.Property("LevelRequirement") + .HasColumnType("integer"); + + b.Property("RoleId") + .HasColumnType("numeric(20,0)"); + + b.HasKey("Id"); + + b.HasIndex("GuildId", "RoleId") + .IsUnique(); + + b.ToTable("SelfAssignableRoles"); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.ServerRecoveryStore", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("DateAdded") + .HasColumnType("timestamp without time zone"); + + b.Property("GuildId") + .HasColumnType("numeric(20,0)"); + + b.Property("RecoveryKey") + .HasColumnType("text"); + + b.Property("TwoFactorKey") + .HasColumnType("text"); + + b.HasKey("Id"); + + b.ToTable("ServerRecoveryStore"); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.StarboardPosts", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("DateAdded") + .HasColumnType("timestamp without time zone"); + + b.Property("MessageId") + .HasColumnType("numeric(20,0)"); + + b.Property("PostId") + .HasColumnType("numeric(20,0)"); + + b.HasKey("Id"); + + b.ToTable("Starboard"); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.StatusRolesTable", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("DateAdded") + .HasColumnType("timestamp without time zone"); + + b.Property("GuildId") + .HasColumnType("numeric(20,0)"); + + b.Property("ReaddRemoved") + .HasColumnType("boolean"); + + b.Property("RemoveAdded") + .HasColumnType("boolean"); + + b.Property("Status") + .HasColumnType("text"); + + b.Property("StatusChannelId") + .HasColumnType("numeric(20,0)"); + + b.Property("StatusEmbed") + .HasColumnType("text"); + + b.Property("ToAdd") + .HasColumnType("text"); + + b.Property("ToRemove") + .HasColumnType("text"); + + b.HasKey("Id"); + + b.ToTable("StatusRoles"); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.StreamRoleBlacklistedUser", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("DateAdded") + .HasColumnType("timestamp without time zone"); + + b.Property("StreamRoleSettingsId") + .HasColumnType("integer"); + + b.Property("UserId") + .HasColumnType("numeric(20,0)"); + + b.Property("Username") + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex("StreamRoleSettingsId"); + + b.ToTable("StreamRoleBlacklistedUser"); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.StreamRoleSettings", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("AddRoleId") + .HasColumnType("numeric(20,0)"); + + b.Property("DateAdded") + .HasColumnType("timestamp without time zone"); + + b.Property("Enabled") + .HasColumnType("boolean"); + + b.Property("FromRoleId") + .HasColumnType("numeric(20,0)"); + + b.Property("GuildConfigId") + .HasColumnType("integer"); + + b.Property("Keyword") + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex("GuildConfigId") + .IsUnique(); + + b.ToTable("StreamRoleSettings"); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.StreamRoleWhitelistedUser", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("DateAdded") + .HasColumnType("timestamp without time zone"); + + b.Property("StreamRoleSettingsId") + .HasColumnType("integer"); + + b.Property("UserId") + .HasColumnType("numeric(20,0)"); + + b.Property("Username") + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex("StreamRoleSettingsId"); + + b.ToTable("StreamRoleWhitelistedUser"); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.SuggestThreads", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("DateAdded") + .HasColumnType("timestamp without time zone"); + + b.Property("MessageId") + .HasColumnType("numeric(20,0)"); + + b.Property("ThreadChannelId") + .HasColumnType("numeric(20,0)"); + + b.HasKey("Id"); + + b.ToTable("SuggestThreads"); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.SuggestVotes", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("DateAdded") + .HasColumnType("timestamp without time zone"); + + b.Property("EmotePicked") + .HasColumnType("integer"); + + b.Property("MessageId") + .HasColumnType("numeric(20,0)"); + + b.Property("UserId") + .HasColumnType("numeric(20,0)"); + + b.HasKey("Id"); + + b.ToTable("SuggestVotes"); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.SuggestionsModel", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("CurrentState") + .HasColumnType("integer"); + + b.Property("DateAdded") + .HasColumnType("timestamp without time zone"); + + b.Property("EmoteCount1") + .HasColumnType("integer"); + + b.Property("EmoteCount2") + .HasColumnType("integer"); + + b.Property("EmoteCount3") + .HasColumnType("integer"); + + b.Property("EmoteCount4") + .HasColumnType("integer"); + + b.Property("EmoteCount5") + .HasColumnType("integer"); + + b.Property("GuildId") + .HasColumnType("numeric(20,0)"); + + b.Property("MessageId") + .HasColumnType("numeric(20,0)"); + + b.Property("StateChangeCount") + .HasColumnType("numeric(20,0)"); + + b.Property("StateChangeMessageId") + .HasColumnType("numeric(20,0)"); + + b.Property("StateChangeUser") + .HasColumnType("numeric(20,0)"); + + b.Property("Suggestion") + .HasColumnType("text"); + + b.Property("SuggestionId") + .HasColumnType("numeric(20,0)"); + + b.Property("UserId") + .HasColumnType("numeric(20,0)"); + + b.HasKey("Id"); + + b.ToTable("Suggestions"); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.Template", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("AwardedColor") + .HasColumnType("text"); + + b.Property("AwardedFontSize") + .HasColumnType("integer"); + + b.Property("AwardedX") + .HasColumnType("integer"); + + b.Property("AwardedY") + .HasColumnType("integer"); + + b.Property("DateAdded") + .HasColumnType("timestamp without time zone"); + + b.Property("GuildId") + .HasColumnType("numeric(20,0)"); + + b.Property("OutputSizeX") + .HasColumnType("integer"); + + b.Property("OutputSizeY") + .HasColumnType("integer"); + + b.Property("ShowAwarded") + .HasColumnType("boolean"); + + b.Property("ShowTimeOnLevel") + .HasColumnType("boolean"); + + b.Property("TemplateBarId") + .HasColumnType("integer"); + + b.Property("TemplateClubId") + .HasColumnType("integer"); + + b.Property("TemplateGuildId") + .HasColumnType("integer"); + + b.Property("TemplateUserId") + .HasColumnType("integer"); + + b.Property("TimeOnLevelColor") + .HasColumnType("text"); + + b.Property("TimeOnLevelFontSize") + .HasColumnType("integer"); + + b.Property("TimeOnLevelFormat") + .HasColumnType("text"); + + b.Property("TimeOnLevelX") + .HasColumnType("integer"); + + b.Property("TimeOnLevelY") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.HasIndex("TemplateBarId"); + + b.HasIndex("TemplateClubId"); + + b.HasIndex("TemplateGuildId"); + + b.HasIndex("TemplateUserId"); + + b.ToTable("Template"); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.TemplateBar", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("BarColor") + .HasColumnType("text"); + + b.Property("BarDirection") + .HasColumnType("integer"); + + b.Property("BarLength") + .HasColumnType("integer"); + + b.Property("BarPointAx") + .HasColumnType("integer"); + + b.Property("BarPointAy") + .HasColumnType("integer"); + + b.Property("BarPointBx") + .HasColumnType("integer"); + + b.Property("BarPointBy") + .HasColumnType("integer"); + + b.Property("BarTransparency") + .HasColumnType("smallint"); + + b.Property("DateAdded") + .HasColumnType("timestamp without time zone"); + + b.Property("ShowBar") + .HasColumnType("boolean"); + + b.HasKey("Id"); + + b.ToTable("TemplateBar"); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.TemplateClub", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("ClubIconSizeX") + .HasColumnType("integer"); + + b.Property("ClubIconSizeY") + .HasColumnType("integer"); + + b.Property("ClubIconX") + .HasColumnType("integer"); + + b.Property("ClubIconY") + .HasColumnType("integer"); + + b.Property("ClubNameColor") + .HasColumnType("text"); + + b.Property("ClubNameFontSize") + .HasColumnType("integer"); + + b.Property("ClubNameX") + .HasColumnType("integer"); + + b.Property("ClubNameY") + .HasColumnType("integer"); + + b.Property("DateAdded") + .HasColumnType("timestamp without time zone"); + + b.Property("ShowClubIcon") + .HasColumnType("boolean"); + + b.Property("ShowClubName") + .HasColumnType("boolean"); + + b.HasKey("Id"); + + b.ToTable("TemplateClub"); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.TemplateGuild", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("DateAdded") + .HasColumnType("timestamp without time zone"); + + b.Property("GuildLevelColor") + .HasColumnType("text"); + + b.Property("GuildLevelFontSize") + .HasColumnType("integer"); + + b.Property("GuildLevelX") + .HasColumnType("integer"); + + b.Property("GuildLevelY") + .HasColumnType("integer"); + + b.Property("GuildRankColor") + .HasColumnType("text"); + + b.Property("GuildRankFontSize") + .HasColumnType("integer"); + + b.Property("GuildRankX") + .HasColumnType("integer"); + + b.Property("GuildRankY") + .HasColumnType("integer"); + + b.Property("ShowGuildLevel") + .HasColumnType("boolean"); + + b.Property("ShowGuildRank") + .HasColumnType("boolean"); + + b.HasKey("Id"); + + b.ToTable("TemplateGuild"); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.TemplateUser", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("DateAdded") + .HasColumnType("timestamp without time zone"); + + b.Property("FontSize") + .HasColumnType("integer"); + + b.Property("IconSizeX") + .HasColumnType("integer"); + + b.Property("IconSizeY") + .HasColumnType("integer"); + + b.Property("IconX") + .HasColumnType("integer"); + + b.Property("IconY") + .HasColumnType("integer"); + + b.Property("ShowIcon") + .HasColumnType("boolean"); + + b.Property("ShowText") + .HasColumnType("boolean"); + + b.Property("TextColor") + .HasColumnType("text"); + + b.Property("TextX") + .HasColumnType("integer"); + + b.Property("TextY") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.ToTable("TemplateUser"); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.TransactionHistory", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Amount") + .HasColumnType("bigint"); + + b.Property("DateAdded") + .HasColumnType("timestamp without time zone"); + + b.Property("Description") + .HasColumnType("text"); + + b.Property("GuildId") + .HasColumnType("numeric(20,0)"); + + b.Property("UserId") + .HasColumnType("numeric(20,0)"); + + b.HasKey("Id"); + + b.ToTable("TransactionHistory"); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.UnbanTimer", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("DateAdded") + .HasColumnType("timestamp without time zone"); + + b.Property("GuildConfigId") + .HasColumnType("integer"); + + b.Property("UnbanAt") + .HasColumnType("timestamp without time zone"); + + b.Property("UserId") + .HasColumnType("numeric(20,0)"); + + b.HasKey("Id"); + + b.HasIndex("GuildConfigId"); + + b.ToTable("UnbanTimer"); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.UnmuteTimer", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("DateAdded") + .HasColumnType("timestamp without time zone"); + + b.Property("GuildConfigId") + .HasColumnType("integer"); + + b.Property("UnmuteAt") + .HasColumnType("timestamp without time zone"); + + b.Property("UserId") + .HasColumnType("numeric(20,0)"); + + b.HasKey("Id"); + + b.HasIndex("GuildConfigId"); + + b.ToTable("UnmuteTimer"); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.UnroleTimer", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("DateAdded") + .HasColumnType("timestamp without time zone"); + + b.Property("GuildConfigId") + .HasColumnType("integer"); + + b.Property("RoleId") + .HasColumnType("numeric(20,0)"); + + b.Property("UnbanAt") + .HasColumnType("timestamp without time zone"); + + b.Property("UserId") + .HasColumnType("numeric(20,0)"); + + b.HasKey("Id"); + + b.HasIndex("GuildConfigId"); + + b.ToTable("UnroleTimer"); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.UserRoleStates", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("DateAdded") + .HasColumnType("timestamp without time zone"); + + b.Property("GuildId") + .HasColumnType("numeric(20,0)"); + + b.Property("SavedRoles") + .HasColumnType("text"); + + b.Property("UserId") + .HasColumnType("numeric(20,0)"); + + b.Property("UserName") + .HasColumnType("text"); + + b.HasKey("Id"); + + b.ToTable("UserRoleStates"); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.UserXpStats", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("AwardedXp") + .HasColumnType("integer"); + + b.Property("DateAdded") + .HasColumnType("timestamp without time zone"); + + b.Property("GuildId") + .HasColumnType("numeric(20,0)"); + + b.Property("LastLevelUp") + .ValueGeneratedOnAdd() + .HasColumnType("timestamp without time zone") + .HasDefaultValue(new DateTime(2017, 9, 21, 20, 53, 13, 307, DateTimeKind.Local)); + + b.Property("NotifyOnLevelUp") + .HasColumnType("integer"); + + b.Property("UserId") + .HasColumnType("numeric(20,0)"); + + b.Property("Xp") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.HasIndex("AwardedXp"); + + b.HasIndex("GuildId"); + + b.HasIndex("UserId"); + + b.HasIndex("Xp"); + + b.HasIndex("UserId", "GuildId") + .IsUnique(); + + b.ToTable("UserXpStats"); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.VcRoleInfo", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("DateAdded") + .HasColumnType("timestamp without time zone"); + + b.Property("GuildConfigId") + .HasColumnType("integer"); + + b.Property("RoleId") + .HasColumnType("numeric(20,0)"); + + b.Property("VoiceChannelId") + .HasColumnType("numeric(20,0)"); + + b.HasKey("Id"); + + b.HasIndex("GuildConfigId"); + + b.ToTable("VcRoleInfo"); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.VoteRoles", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("DateAdded") + .HasColumnType("timestamp without time zone"); + + b.Property("GuildId") + .HasColumnType("numeric(20,0)"); + + b.Property("RoleId") + .HasColumnType("numeric(20,0)"); + + b.Property("Timer") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.ToTable("VoteRoles"); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.Votes", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("BotId") + .HasColumnType("numeric(20,0)"); + + b.Property("DateAdded") + .HasColumnType("timestamp without time zone"); + + b.Property("GuildId") + .HasColumnType("numeric(20,0)"); + + b.Property("UserId") + .HasColumnType("numeric(20,0)"); + + b.HasKey("Id"); + + b.ToTable("Votes"); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.Warning", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("DateAdded") + .HasColumnType("timestamp without time zone"); + + b.Property("Forgiven") + .HasColumnType("boolean"); + + b.Property("ForgivenBy") + .HasColumnType("text"); + + b.Property("GuildId") + .HasColumnType("numeric(20,0)"); + + b.Property("Moderator") + .HasColumnType("text"); + + b.Property("Reason") + .HasColumnType("text"); + + b.Property("UserId") + .HasColumnType("numeric(20,0)"); + + b.HasKey("Id"); + + b.HasIndex("DateAdded"); + + b.HasIndex("GuildId"); + + b.HasIndex("UserId"); + + b.ToTable("Warnings"); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.Warning2", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("DateAdded") + .HasColumnType("timestamp without time zone"); + + b.Property("Forgiven") + .HasColumnType("boolean"); + + b.Property("ForgivenBy") + .HasColumnType("text"); + + b.Property("GuildId") + .HasColumnType("numeric(20,0)"); + + b.Property("Moderator") + .HasColumnType("text"); + + b.Property("Reason") + .HasColumnType("text"); + + b.Property("UserId") + .HasColumnType("numeric(20,0)"); + + b.HasKey("Id"); + + b.ToTable("Warnings2"); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.WarningPunishment", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Count") + .HasColumnType("integer"); + + b.Property("DateAdded") + .HasColumnType("timestamp without time zone"); + + b.Property("GuildConfigId") + .HasColumnType("integer"); + + b.Property("Punishment") + .HasColumnType("integer"); + + b.Property("RoleId") + .HasColumnType("numeric(20,0)"); + + b.Property("Time") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.HasIndex("GuildConfigId"); + + b.ToTable("WarningPunishment"); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.WarningPunishment2", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Count") + .HasColumnType("integer"); + + b.Property("DateAdded") + .HasColumnType("timestamp without time zone"); + + b.Property("GuildConfigId") + .HasColumnType("integer"); + + b.Property("Punishment") + .HasColumnType("integer"); + + b.Property("RoleId") + .HasColumnType("numeric(20,0)"); + + b.Property("Time") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.HasIndex("GuildConfigId"); + + b.ToTable("WarningPunishment2"); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.WhitelistedRole", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("DateAdded") + .HasColumnType("timestamp without time zone"); + + b.Property("GuildId") + .HasColumnType("numeric(20,0)"); + + b.Property("RoleId") + .HasColumnType("numeric(20,0)"); + + b.HasKey("Id"); + + b.ToTable("WhitelistedRoles"); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.WhitelistedUser", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("DateAdded") + .HasColumnType("timestamp without time zone"); + + b.Property("GuildId") + .HasColumnType("numeric(20,0)"); + + b.Property("UserId") + .HasColumnType("numeric(20,0)"); + + b.HasKey("Id"); + + b.ToTable("WhitelistedUsers"); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.XpCurrencyReward", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Amount") + .HasColumnType("integer"); + + b.Property("DateAdded") + .HasColumnType("timestamp without time zone"); + + b.Property("Level") + .HasColumnType("integer"); + + b.Property("XpSettingsId") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.HasIndex("XpSettingsId"); + + b.ToTable("XpCurrencyReward"); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.XpRoleReward", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("DateAdded") + .HasColumnType("timestamp without time zone"); + + b.Property("Level") + .HasColumnType("integer"); + + b.Property("RoleId") + .HasColumnType("numeric(20,0)"); + + b.Property("XpSettingsId") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.HasIndex("XpSettingsId", "Level") + .IsUnique(); + + b.ToTable("XpRoleReward"); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.XpSettings", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("DateAdded") + .HasColumnType("timestamp without time zone"); + + b.Property("GuildConfigId") + .HasColumnType("integer"); + + b.Property("NotifyMessage") + .HasColumnType("text"); + + b.Property("ServerExcluded") + .HasColumnType("boolean"); + + b.Property("XpRoleRewardExclusive") + .HasColumnType("boolean"); + + b.HasKey("Id"); + + b.HasIndex("GuildConfigId") + .IsUnique(); + + b.ToTable("XpSettings"); + }); + + modelBuilder.Entity("TicketButton", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("DateAdded") + .HasColumnType("timestamp without time zone"); + + b.Property("Emoji") + .IsRequired() + .HasColumnType("text"); + + b.Property("Label") + .IsRequired() + .HasColumnType("text"); + + b.Property("OpenMessage") + .IsRequired() + .HasColumnType("text"); + + b.Property("TicketPanelId") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.HasIndex("TicketPanelId"); + + b.ToTable("TicketButtons"); + }); + + modelBuilder.Entity("TicketPanel", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("ChannelId") + .HasColumnType("numeric(20,0)"); + + b.Property("DateAdded") + .HasColumnType("timestamp without time zone"); + + b.Property("GuildId") + .HasColumnType("numeric(20,0)"); + + b.Property("MessageJson") + .HasColumnType("text"); + + b.HasKey("Id"); + + b.ToTable("TicketPanels"); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.AntiAltSetting", b => + { + b.HasOne("Mewdeko.Database.Models.GuildConfig", null) + .WithOne("AntiAltSetting") + .HasForeignKey("Mewdeko.Database.Models.AntiAltSetting", "GuildConfigId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.AntiMassMentionSetting", b => + { + b.HasOne("Mewdeko.Database.Models.GuildConfig", null) + .WithOne("AntiMassMentionSetting") + .HasForeignKey("Mewdeko.Database.Models.AntiMassMentionSetting", "GuildConfigId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.AntiRaidSetting", b => + { + b.HasOne("Mewdeko.Database.Models.GuildConfig", null) + .WithOne("AntiRaidSetting") + .HasForeignKey("Mewdeko.Database.Models.AntiRaidSetting", "GuildConfigId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.AntiSpamIgnore", b => + { + b.HasOne("Mewdeko.Database.Models.AntiMassMentionSetting", null) + .WithMany("IgnoredChannels") + .HasForeignKey("AntiMassMentionSettingId"); + + b.HasOne("Mewdeko.Database.Models.AntiSpamSetting", null) + .WithMany("IgnoredChannels") + .HasForeignKey("AntiSpamSettingId"); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.AntiSpamSetting", b => + { + b.HasOne("Mewdeko.Database.Models.GuildConfig", null) + .WithOne("AntiSpamSetting") + .HasForeignKey("Mewdeko.Database.Models.AntiSpamSetting", "GuildConfigId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.CommandAlias", b => + { + b.HasOne("Mewdeko.Database.Models.GuildConfig", null) + .WithMany("CommandAliases") + .HasForeignKey("GuildConfigId"); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.CommandCooldown", b => + { + b.HasOne("Mewdeko.Database.Models.GuildConfig", null) + .WithMany("CommandCooldowns") + .HasForeignKey("GuildConfigId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.DelMsgOnCmdChannel", b => + { + b.HasOne("Mewdeko.Database.Models.GuildConfig", null) + .WithMany("DelMsgOnCmdChannels") + .HasForeignKey("GuildConfigId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.ExcludedItem", b => + { + b.HasOne("Mewdeko.Database.Models.XpSettings", null) + .WithMany("ExclusionList") + .HasForeignKey("XpSettingsId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.FeedSub", b => + { + b.HasOne("Mewdeko.Database.Models.GuildConfig", null) + .WithMany("FeedSubs") + .HasForeignKey("GuildConfigId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.FilterInvitesChannelIds", b => + { + b.HasOne("Mewdeko.Database.Models.GuildConfig", null) + .WithMany("FilterInvitesChannelIds") + .HasForeignKey("GuildConfigId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.FilterLinksChannelId", b => + { + b.HasOne("Mewdeko.Database.Models.GuildConfig", null) + .WithMany("FilterLinksChannelIds") + .HasForeignKey("GuildConfigId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.FilterWordsChannelIds", b => + { + b.HasOne("Mewdeko.Database.Models.GuildConfig", null) + .WithMany("FilterWordsChannelIds") + .HasForeignKey("GuildConfigId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.FilteredWord", b => + { + b.HasOne("Mewdeko.Database.Models.GuildConfig", null) + .WithMany("FilteredWords") + .HasForeignKey("GuildConfigId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.FollowedStream", b => + { + b.HasOne("Mewdeko.Database.Models.GuildConfig", null) + .WithMany("FollowedStreams") + .HasForeignKey("GuildConfigId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.GroupName", b => + { + b.HasOne("Mewdeko.Database.Models.GuildConfig", null) + .WithMany("SelfAssignableRoleGroupNames") + .HasForeignKey("GuildConfigId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.GuildConfig", b => + { + b.HasOne("Mewdeko.Database.Models.LogSetting", "LogSetting") + .WithMany() + .HasForeignKey("LogSettingId"); + + b.Navigation("LogSetting"); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.IgnoredLogChannel", b => + { + b.HasOne("Mewdeko.Database.Models.LogSetting", null) + .WithMany("IgnoredChannels") + .HasForeignKey("LogSettingId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.MutedUserId", b => + { + b.HasOne("Mewdeko.Database.Models.GuildConfig", null) + .WithMany("MutedUsers") + .HasForeignKey("GuildConfigId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.NsfwBlacklitedTag", b => + { + b.HasOne("Mewdeko.Database.Models.GuildConfig", null) + .WithMany("NsfwBlacklistedTags") + .HasForeignKey("GuildConfigId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.Permission", b => + { + b.HasOne("Mewdeko.Database.Models.Permission", "Next") + .WithOne("Previous") + .HasForeignKey("Mewdeko.Database.Models.Permission", "NextId"); + + b.Navigation("Next"); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.Permissionv2", b => + { + b.HasOne("Mewdeko.Database.Models.GuildConfig", null) + .WithMany("Permissions") + .HasForeignKey("GuildConfigId"); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.PlaylistSong", b => + { + b.HasOne("Mewdeko.Database.Models.MusicPlaylist", null) + .WithMany("Songs") + .HasForeignKey("MusicPlaylistId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.PollAnswers", b => + { + b.HasOne("Mewdeko.Database.Models.Polls", null) + .WithMany("Answers") + .HasForeignKey("PollsId"); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.PollVote", b => + { + b.HasOne("Mewdeko.Database.Models.Polls", null) + .WithMany("Votes") + .HasForeignKey("PollsId"); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.ReactionRole", b => + { + b.HasOne("Mewdeko.Database.Models.ReactionRoleMessage", null) + .WithMany("ReactionRoles") + .HasForeignKey("ReactionRoleMessageId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.ReactionRoleMessage", b => + { + b.HasOne("Mewdeko.Database.Models.GuildConfig", null) + .WithMany("ReactionRoleMessages") + .HasForeignKey("GuildConfigId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.Repeater", b => + { + b.HasOne("Mewdeko.Database.Models.GuildConfig", null) + .WithMany("GuildRepeaters") + .HasForeignKey("GuildConfigId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.StreamRoleBlacklistedUser", b => + { + b.HasOne("Mewdeko.Database.Models.StreamRoleSettings", null) + .WithMany("Blacklist") + .HasForeignKey("StreamRoleSettingsId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.StreamRoleSettings", b => + { + b.HasOne("Mewdeko.Database.Models.GuildConfig", null) + .WithOne("StreamRole") + .HasForeignKey("Mewdeko.Database.Models.StreamRoleSettings", "GuildConfigId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.StreamRoleWhitelistedUser", b => + { + b.HasOne("Mewdeko.Database.Models.StreamRoleSettings", null) + .WithMany("Whitelist") + .HasForeignKey("StreamRoleSettingsId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.Template", b => + { + b.HasOne("Mewdeko.Database.Models.TemplateBar", "TemplateBar") + .WithMany() + .HasForeignKey("TemplateBarId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Mewdeko.Database.Models.TemplateClub", "TemplateClub") + .WithMany() + .HasForeignKey("TemplateClubId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Mewdeko.Database.Models.TemplateGuild", "TemplateGuild") + .WithMany() + .HasForeignKey("TemplateGuildId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Mewdeko.Database.Models.TemplateUser", "TemplateUser") + .WithMany() + .HasForeignKey("TemplateUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("TemplateBar"); + + b.Navigation("TemplateClub"); + + b.Navigation("TemplateGuild"); + + b.Navigation("TemplateUser"); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.UnbanTimer", b => + { + b.HasOne("Mewdeko.Database.Models.GuildConfig", null) + .WithMany("UnbanTimer") + .HasForeignKey("GuildConfigId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.UnmuteTimer", b => + { + b.HasOne("Mewdeko.Database.Models.GuildConfig", null) + .WithMany("UnmuteTimers") + .HasForeignKey("GuildConfigId"); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.UnroleTimer", b => + { + b.HasOne("Mewdeko.Database.Models.GuildConfig", null) + .WithMany("UnroleTimer") + .HasForeignKey("GuildConfigId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.VcRoleInfo", b => + { + b.HasOne("Mewdeko.Database.Models.GuildConfig", null) + .WithMany("VcRoleInfos") + .HasForeignKey("GuildConfigId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.WarningPunishment", b => + { + b.HasOne("Mewdeko.Database.Models.GuildConfig", null) + .WithMany("WarnPunishments") + .HasForeignKey("GuildConfigId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.WarningPunishment2", b => + { + b.HasOne("Mewdeko.Database.Models.GuildConfig", null) + .WithMany("WarnPunishments2") + .HasForeignKey("GuildConfigId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.XpCurrencyReward", b => + { + b.HasOne("Mewdeko.Database.Models.XpSettings", "XpSettings") + .WithMany("CurrencyRewards") + .HasForeignKey("XpSettingsId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("XpSettings"); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.XpRoleReward", b => + { + b.HasOne("Mewdeko.Database.Models.XpSettings", "XpSettings") + .WithMany("RoleRewards") + .HasForeignKey("XpSettingsId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("XpSettings"); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.XpSettings", b => + { + b.HasOne("Mewdeko.Database.Models.GuildConfig", null) + .WithOne("XpSettings") + .HasForeignKey("Mewdeko.Database.Models.XpSettings", "GuildConfigId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("TicketButton", b => + { + b.HasOne("TicketPanel", null) + .WithMany("Buttons") + .HasForeignKey("TicketPanelId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.AntiMassMentionSetting", b => + { + b.Navigation("IgnoredChannels"); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.AntiSpamSetting", b => + { + b.Navigation("IgnoredChannels"); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.GuildConfig", b => + { + b.Navigation("AntiAltSetting") + .IsRequired(); + + b.Navigation("AntiMassMentionSetting") + .IsRequired(); + + b.Navigation("AntiRaidSetting") + .IsRequired(); + + b.Navigation("AntiSpamSetting") + .IsRequired(); + + b.Navigation("CommandAliases"); + + b.Navigation("CommandCooldowns"); + + b.Navigation("DelMsgOnCmdChannels"); + + b.Navigation("FeedSubs"); + + b.Navigation("FilterInvitesChannelIds"); + + b.Navigation("FilterLinksChannelIds"); + + b.Navigation("FilterWordsChannelIds"); + + b.Navigation("FilteredWords"); + + b.Navigation("FollowedStreams"); + + b.Navigation("GuildRepeaters"); + + b.Navigation("MutedUsers"); + + b.Navigation("NsfwBlacklistedTags"); + + b.Navigation("Permissions"); + + b.Navigation("ReactionRoleMessages"); + + b.Navigation("SelfAssignableRoleGroupNames"); + + b.Navigation("StreamRole"); + + b.Navigation("UnbanTimer"); + + b.Navigation("UnmuteTimers"); + + b.Navigation("UnroleTimer"); + + b.Navigation("VcRoleInfos"); + + b.Navigation("WarnPunishments"); + + b.Navigation("WarnPunishments2"); + + b.Navigation("XpSettings"); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.LogSetting", b => + { + b.Navigation("IgnoredChannels"); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.MusicPlaylist", b => + { + b.Navigation("Songs"); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.Permission", b => + { + b.Navigation("Previous") + .IsRequired(); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.Polls", b => + { + b.Navigation("Answers"); + + b.Navigation("Votes"); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.ReactionRoleMessage", b => + { + b.Navigation("ReactionRoles"); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.StreamRoleSettings", b => + { + b.Navigation("Blacklist"); + + b.Navigation("Whitelist"); + }); + + modelBuilder.Entity("Mewdeko.Database.Models.XpSettings", b => + { + b.Navigation("CurrencyRewards"); + + b.Navigation("ExclusionList"); + + b.Navigation("RoleRewards"); + }); + + modelBuilder.Entity("TicketPanel", b => + { + b.Navigation("Buttons"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/Mewdeko/Database/Migrations/PostgreSql/20241011165238_SeparateSettings.cs b/src/Mewdeko/Database/Migrations/PostgreSql/20241011165238_SeparateSettings.cs new file mode 100644 index 000000000..9e499eb7a --- /dev/null +++ b/src/Mewdeko/Database/Migrations/PostgreSql/20241011165238_SeparateSettings.cs @@ -0,0 +1,82 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; +using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; + +#nullable disable + +namespace Mewdeko.Database.Migrations.PostgreSql +{ + /// + public partial class SeparateSettings : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.CreateTable( + name: "BotInstances", + columns: table => new + { + Id = table.Column(type: "integer", nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + BotUrl = table.Column(type: "text", nullable: false), + DateAdded = table.Column(type: "timestamp without time zone", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_BotInstances", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "LoggingV2", + columns: table => new + { + Id = table.Column(type: "integer", nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + GuildId = table.Column(type: "numeric(20,0)", nullable: false), + LogOtherId = table.Column(type: "numeric(20,0)", nullable: true), + MessageUpdatedId = table.Column(type: "numeric(20,0)", nullable: true), + MessageDeletedId = table.Column(type: "numeric(20,0)", nullable: true), + ThreadCreatedId = table.Column(type: "numeric(20,0)", nullable: true), + ThreadDeletedId = table.Column(type: "numeric(20,0)", nullable: true), + ThreadUpdatedId = table.Column(type: "numeric(20,0)", nullable: true), + UsernameUpdatedId = table.Column(type: "numeric(20,0)", nullable: true), + NicknameUpdatedId = table.Column(type: "numeric(20,0)", nullable: true), + AvatarUpdatedId = table.Column(type: "numeric(20,0)", nullable: true), + UserLeftId = table.Column(type: "numeric(20,0)", nullable: true), + UserBannedId = table.Column(type: "numeric(20,0)", nullable: true), + UserUnbannedId = table.Column(type: "numeric(20,0)", nullable: true), + UserUpdatedId = table.Column(type: "numeric(20,0)", nullable: true), + UserJoinedId = table.Column(type: "numeric(20,0)", nullable: true), + UserRoleAddedId = table.Column(type: "numeric(20,0)", nullable: true), + UserRoleRemovedId = table.Column(type: "numeric(20,0)", nullable: true), + UserMutedId = table.Column(type: "numeric(20,0)", nullable: true), + LogUserPresenceId = table.Column(type: "numeric(20,0)", nullable: true), + LogVoicePresenceId = table.Column(type: "numeric(20,0)", nullable: true), + LogVoicePresenceTTSId = table.Column(type: "numeric(20,0)", nullable: true), + ServerUpdatedId = table.Column(type: "numeric(20,0)", nullable: true), + RoleUpdatedId = table.Column(type: "numeric(20,0)", nullable: true), + RoleDeletedId = table.Column(type: "numeric(20,0)", nullable: true), + EventCreatedId = table.Column(type: "numeric(20,0)", nullable: true), + RoleCreatedId = table.Column(type: "numeric(20,0)", nullable: true), + ChannelCreatedId = table.Column(type: "numeric(20,0)", nullable: true), + ChannelDestroyedId = table.Column(type: "numeric(20,0)", nullable: true), + ChannelUpdatedId = table.Column(type: "numeric(20,0)", nullable: true), + DateAdded = table.Column(type: "timestamp without time zone", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_LoggingV2", x => x.Id); + }); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "BotInstances"); + + migrationBuilder.DropTable( + name: "LoggingV2"); + } + } +} diff --git a/src/Mewdeko/Database/Migrations/PostgreSql/MewdekoPostgresContextModelSnapshot.cs b/src/Mewdeko/Database/Migrations/PostgreSql/MewdekoPostgresContextModelSnapshot.cs index 502705c84..6159aedb6 100644 --- a/src/Mewdeko/Database/Migrations/PostgreSql/MewdekoPostgresContextModelSnapshot.cs +++ b/src/Mewdeko/Database/Migrations/PostgreSql/MewdekoPostgresContextModelSnapshot.cs @@ -1810,6 +1810,26 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.ToTable("JoinLeaveLogs"); }); + modelBuilder.Entity("Mewdeko.Database.Models.LocalBotInstances", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("BotUrl") + .IsRequired() + .HasColumnType("text"); + + b.Property("DateAdded") + .HasColumnType("timestamp without time zone"); + + b.HasKey("Id"); + + b.ToTable("BotInstances"); + }); + modelBuilder.Entity("Mewdeko.Database.Models.LockdownChannelPermissions", b => { b.Property("Id") @@ -1989,6 +2009,109 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.ToTable("LogSettings"); }); + modelBuilder.Entity("Mewdeko.Database.Models.LoggingV2", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("AvatarUpdatedId") + .HasColumnType("numeric(20,0)"); + + b.Property("ChannelCreatedId") + .HasColumnType("numeric(20,0)"); + + b.Property("ChannelDestroyedId") + .HasColumnType("numeric(20,0)"); + + b.Property("ChannelUpdatedId") + .HasColumnType("numeric(20,0)"); + + b.Property("DateAdded") + .HasColumnType("timestamp without time zone"); + + b.Property("EventCreatedId") + .HasColumnType("numeric(20,0)"); + + b.Property("GuildId") + .HasColumnType("numeric(20,0)"); + + b.Property("LogOtherId") + .HasColumnType("numeric(20,0)"); + + b.Property("LogUserPresenceId") + .HasColumnType("numeric(20,0)"); + + b.Property("LogVoicePresenceId") + .HasColumnType("numeric(20,0)"); + + b.Property("LogVoicePresenceTTSId") + .HasColumnType("numeric(20,0)"); + + b.Property("MessageDeletedId") + .HasColumnType("numeric(20,0)"); + + b.Property("MessageUpdatedId") + .HasColumnType("numeric(20,0)"); + + b.Property("NicknameUpdatedId") + .HasColumnType("numeric(20,0)"); + + b.Property("RoleCreatedId") + .HasColumnType("numeric(20,0)"); + + b.Property("RoleDeletedId") + .HasColumnType("numeric(20,0)"); + + b.Property("RoleUpdatedId") + .HasColumnType("numeric(20,0)"); + + b.Property("ServerUpdatedId") + .HasColumnType("numeric(20,0)"); + + b.Property("ThreadCreatedId") + .HasColumnType("numeric(20,0)"); + + b.Property("ThreadDeletedId") + .HasColumnType("numeric(20,0)"); + + b.Property("ThreadUpdatedId") + .HasColumnType("numeric(20,0)"); + + b.Property("UserBannedId") + .HasColumnType("numeric(20,0)"); + + b.Property("UserJoinedId") + .HasColumnType("numeric(20,0)"); + + b.Property("UserLeftId") + .HasColumnType("numeric(20,0)"); + + b.Property("UserMutedId") + .HasColumnType("numeric(20,0)"); + + b.Property("UserRoleAddedId") + .HasColumnType("numeric(20,0)"); + + b.Property("UserRoleRemovedId") + .HasColumnType("numeric(20,0)"); + + b.Property("UserUnbannedId") + .HasColumnType("numeric(20,0)"); + + b.Property("UserUpdatedId") + .HasColumnType("numeric(20,0)"); + + b.Property("UsernameUpdatedId") + .HasColumnType("numeric(20,0)"); + + b.HasKey("Id"); + + b.ToTable("LoggingV2"); + }); + modelBuilder.Entity("Mewdeko.Database.Models.MessageCount", b => { b.Property("Id") diff --git a/src/Mewdeko/Database/Models/LoggingV2.cs b/src/Mewdeko/Database/Models/LoggingV2.cs new file mode 100644 index 000000000..c9f927fc6 --- /dev/null +++ b/src/Mewdeko/Database/Models/LoggingV2.cs @@ -0,0 +1,152 @@ +namespace Mewdeko.Database.Models; + +/// +/// Represents the logging settings for a guild. +/// +public class LoggingV2 : DbEntity +{ + /// + /// Gets or sets the ID these logging settings are for. + /// + public ulong GuildId { get; set; } + /// + /// Gets or sets the ID for logging other events. + /// + public ulong? LogOtherId { get; set; } = 0; + + /// + /// Gets or sets the ID for logging updated messages. + /// + public ulong? MessageUpdatedId { get; set; } = 0; + + /// + /// Gets or sets the ID for logging deleted messages. + /// + public ulong? MessageDeletedId { get; set; } = 0; + + /// + /// Gets or sets the ID for logging created threads. + /// + public ulong? ThreadCreatedId { get; set; } = 0; + + /// + /// Gets or sets the ID for logging deleted threads. + /// + public ulong? ThreadDeletedId { get; set; } = 0; + + /// + /// Gets or sets the ID for logging updated threads. + /// + public ulong? ThreadUpdatedId { get; set; } = 0; + + /// + /// Gets or sets the ID for logging updated usernames. + /// + public ulong? UsernameUpdatedId { get; set; } = 0; + + /// + /// Gets or sets the ID for logging updated nicknames. + /// + public ulong? NicknameUpdatedId { get; set; } = 0; + + /// + /// Gets or sets the ID for logging updated avatars. + /// + public ulong? AvatarUpdatedId { get; set; } = 0; + + /// + /// Gets or sets the ID for logging user leave events. + /// + public ulong? UserLeftId { get; set; } = 0; + + /// + /// Gets or sets the ID for logging user ban events. + /// + public ulong? UserBannedId { get; set; } = 0; + + /// + /// Gets or sets the ID for logging user unban events. + /// + public ulong? UserUnbannedId { get; set; } = 0; + + /// + /// Gets or sets the ID for logging updated user information. + /// + public ulong? UserUpdatedId { get; set; } = 0; + + /// + /// Gets or sets the ID for logging user join events. + /// + public ulong? UserJoinedId { get; set; } = 0; + + /// + /// Gets or sets the ID for logging role additions to users. + /// + public ulong? UserRoleAddedId { get; set; } = 0; + + /// + /// Gets or sets the ID for logging role removals from users. + /// + public ulong? UserRoleRemovedId { get; set; } = 0; + + /// + /// Gets or sets the ID for logging user mute events. + /// + public ulong? UserMutedId { get; set; } = 0; + + /// + /// Gets or sets the ID for logging user presence. + /// + public ulong? LogUserPresenceId { get; set; } = 0; + + /// + /// Gets or sets the ID for logging voice presence. + /// + public ulong? LogVoicePresenceId { get; set; } = 0; + + /// + /// Gets or sets the ID for logging text-to-speech voice presence. + /// + public ulong? LogVoicePresenceTTSId { get; set; } = 0; + + /// + /// Gets or sets the ID for logging server updates. + /// + public ulong? ServerUpdatedId { get; set; } = 0; + + /// + /// Gets or sets the ID for logging role updates. + /// + public ulong? RoleUpdatedId { get; set; } = 0; + + /// + /// Gets or sets the ID for logging role deletions. + /// + public ulong? RoleDeletedId { get; set; } = 0; + + /// + /// Gets or sets the ID for logging event creations. + /// + public ulong? EventCreatedId { get; set; } = 0; + + /// + /// Gets or sets the ID for logging role creations. + /// + public ulong? RoleCreatedId { get; set; } = 0; + + /// + /// Gets or sets the ID for logging channel creations. + /// + public ulong? ChannelCreatedId { get; set; } = 0; + + /// + /// Gets or sets the ID for logging channel destructions. + /// + public ulong? ChannelDestroyedId { get; set; } = 0; + + /// + /// Gets or sets the ID for logging channel updates. + /// + public ulong? ChannelUpdatedId { get; set; } = 0; + +} \ No newline at end of file diff --git a/src/Mewdeko/Modules/Administration/LogCommands.cs b/src/Mewdeko/Modules/Administration/LogCommands.cs index 010234f84..2a27cc3cd 100644 --- a/src/Mewdeko/Modules/Administration/LogCommands.cs +++ b/src/Mewdeko/Modules/Administration/LogCommands.cs @@ -100,7 +100,7 @@ public async Task LogEvents() } - private static ulong? GetLogProperty(LogSetting l, LogType type) + private static ulong? GetLogProperty(LoggingV2 l, LogType type) { return type switch { @@ -136,24 +136,6 @@ public async Task LogEvents() }; } - /// - /// Sets the logging channel for a specific event type. - /// - /// The type of event to set the logging channel for. - /// - /// This command is restricted to users with Administrator permissions. - /// - /// .log UserJoined - [Cmd] - [Aliases] - [RequireContext(ContextType.Guild)] - [UserPerm(GuildPermission.Administrator)] - [Priority(1)] - public async Task Log(LogType type) - { - await Service.SetLogChannel(ctx.Guild.Id, ctx.Channel.Id, type).ConfigureAwait(false); - await ReplyConfirmLocalizedAsync("log", Format.Bold(type.ToString())).ConfigureAwait(false); - } /// /// Sets the logging channel for a specific event type. diff --git a/src/Mewdeko/Modules/Administration/Services/LogCommandService.cs b/src/Mewdeko/Modules/Administration/Services/LogCommandService.cs index 321150f88..5cc844bcf 100644 --- a/src/Mewdeko/Modules/Administration/Services/LogCommandService.cs +++ b/src/Mewdeko/Modules/Administration/Services/LogCommandService.cs @@ -256,7 +256,7 @@ public LogCommandService(DbContextProvider dbProvider, IDataCache cache, Discord /// /// Dictionary of log settings for each guild. /// - public ConcurrentDictionary GuildLogSettings { get; set; } + public ConcurrentDictionary GuildLogSettings { get; set; } /// public async Task OnReadyAsync() @@ -271,8 +271,8 @@ public async Task OnReadyAsync() .ToListAsyncEF(); // Store the log settings in a concurrent dictionary for fast access - GuildLogSettings = configs - .ToDictionary(g => g.GuildId, g => g.LogSetting) + GuildLogSettings = dbContext.LoggingV2 + .ToDictionary(g => g.GuildId, g => g) .ToConcurrent(); } @@ -1594,29 +1594,37 @@ private async Task OnVoicePresence(SocketUser args, SocketVoiceState args2, Sock $"`User:` {args.Mention} | {args.Id}\n" + $"`Channel:` {args2.VoiceChannel.Name}"); - if (!args2.IsDeafened && args3.IsDeafened) - eb.WithTitle($"User {(!args3.IsSelfDeafened ? "Server Voice Deafened" : "Self Voice Deafened")}") - .WithDescription( - $"`User:` {args.Mention} | {args.Id}\n" + - $"`Channel:` {args2.VoiceChannel.Name}"); - - if (args2.IsDeafened && !args3.IsDeafened) - eb.WithTitle("User UnDeafened") - .WithDescription( - $"`User:` {args.Mention} | {args.Id}\n" + - $"`Channel:` {args2.VoiceChannel.Name}"); - - if (!args2.IsMuted && args3.IsMuted) - eb.WithTitle($"User {(!args3.IsSelfMuted ? "Server Voice Muted" : "Self Voice Muted")}") - .WithDescription( - $"`User:` {args.Mention} | {args.Id}\n" + - $"`Channel:` {args2.VoiceChannel.Name}"); + switch (args2.IsDeafened) + { + case false when args3.IsDeafened: + eb.WithTitle($"User {(!args3.IsSelfDeafened ? "Server Voice Deafened" : "Self Voice Deafened")}") + .WithDescription( + $"`User:` {args.Mention} | {args.Id}\n" + + $"`Channel:` {args2.VoiceChannel.Name}"); + break; + case true when !args3.IsDeafened: + eb.WithTitle("User UnDeafened") + .WithDescription( + $"`User:` {args.Mention} | {args.Id}\n" + + $"`Channel:` {args2.VoiceChannel.Name}"); + break; + } - if (args2.IsMuted && !args3.IsMuted) - eb.WithTitle("User Voice UnMuted") - .WithDescription( - $"`User:` {args.Mention} | {args.Id}\n" + - $"`Channel:` {args2.VoiceChannel.Name}"); + switch (args2.IsMuted) + { + case false when args3.IsMuted: + eb.WithTitle($"User {(!args3.IsSelfMuted ? "Server Voice Muted" : "Self Voice Muted")}") + .WithDescription( + $"`User:` {args.Mention} | {args.Id}\n" + + $"`Channel:` {args2.VoiceChannel.Name}"); + break; + case true when !args3.IsMuted: + eb.WithTitle("User Voice UnMuted") + .WithDescription( + $"`User:` {args.Mention} | {args.Id}\n" + + $"`Channel:` {args2.VoiceChannel.Name}"); + break; + } await logChannel.SendMessageAsync(embed: eb.Build()); @@ -1673,7 +1681,7 @@ private async Task OnUserUnmuted(IGuildUser args, IUser args2, MuteType args3, s public async Task SetLogChannel(ulong guildId, ulong channelId, LogType type) { await using var dbContext = await dbProvider.GetContextAsync(); - var logSetting = (await dbContext.LogSettingsFor(guildId)).LogSetting; + var logSetting = (await dbContext.LogSettingsFor(guildId)); switch (type) { case LogType.Other: @@ -1751,11 +1759,14 @@ public async Task SetLogChannel(ulong guildId, ulong channelId, LogType type) case LogType.UserMuted: logSetting.UserMutedId = channelId; break; + case LogType.RoleDeleted: + logSetting.RoleDeletedId = channelId; + break; } try { - dbContext.LogSettings.Update(logSetting); + dbContext.LoggingV2.Update(logSetting); await dbContext.SaveChangesAsync(); GuildLogSettings.AddOrUpdate(guildId, _ => logSetting, (_, _) => logSetting); } @@ -1774,7 +1785,7 @@ public async Task SetLogChannel(ulong guildId, ulong channelId, LogType type) public async Task LogSetByType(ulong guildId, ulong channelId, LogCategoryTypes categoryTypes) { await using var dbContext = await dbProvider.GetContextAsync(); - var logSetting = (await dbContext.LogSettingsFor(guildId)).LogSetting; + var logSetting = (await dbContext.LogSettingsFor(guildId)); switch (categoryTypes) { case LogCategoryTypes.All: @@ -1875,6 +1886,7 @@ public async Task LogSetByType(ulong guildId, ulong channelId, LogCategoryTypes break; } + dbContext.LoggingV2.Update(logSetting); await dbContext.SaveChangesAsync(); GuildLogSettings.AddOrUpdate(guildId, _ => logSetting, (_, _) => logSetting); }