diff --git a/HuTao.Bot/Modules/Logging/LoggingModule.cs b/HuTao.Bot/Modules/Logging/LoggingModule.cs
index 470e9e1..cb8145f 100644
--- a/HuTao.Bot/Modules/Logging/LoggingModule.cs
+++ b/HuTao.Bot/Modules/Logging/LoggingModule.cs
@@ -125,6 +125,22 @@ [Remainder] [Summary("Leave empty to disable the appeal message.")]
await ReplyAsync(embed: embed.Build());
}
+ [Command("attachments")]
+ [Alias("attachment")]
+ [Summary("Re-upload attachments when messages are deleted.")]
+ public async Task ConfigureAttachmentsAsync(
+ [Summary("Set to 'true' or 'false'. Leave blank to toggle.")]
+ bool? reUpload = null)
+ {
+ var guild = await _db.Guilds.TrackGuildAsync(Context.Guild);
+ guild.LoggingRules ??= new LoggingRules();
+
+ guild.LoggingRules.UploadAttachments = reUpload ?? !guild.LoggingRules.UploadAttachments;
+ await _db.SaveChangesAsync();
+
+ await ReplyAsync($"Current value: {guild.LoggingRules.UploadAttachments}");
+ }
+
[Command("channel")]
[Summary("Set the channel to output the reprimand.")]
public async Task ConfigureChannelAsync(
diff --git a/HuTao.Data/Migrations/20220802004219_AddLoggingUploadAttachments.Designer.cs b/HuTao.Data/Migrations/20220802004219_AddLoggingUploadAttachments.Designer.cs
new file mode 100644
index 0000000..a88da6a
--- /dev/null
+++ b/HuTao.Data/Migrations/20220802004219_AddLoggingUploadAttachments.Designer.cs
@@ -0,0 +1,3021 @@
+//
+using System;
+using HuTao.Data;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.Infrastructure;
+using Microsoft.EntityFrameworkCore.Migrations;
+using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
+using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
+
+#nullable disable
+
+namespace HuTao.Data.Migrations
+{
+ [DbContext(typeof(HuTaoContext))]
+ [Migration("20220802004219_AddLoggingUploadAttachments")]
+ partial class AddLoggingUploadAttachments
+ {
+ protected override void BuildTargetModel(ModelBuilder modelBuilder)
+ {
+#pragma warning disable 612, 618
+ modelBuilder
+ .HasAnnotation("ProductVersion", "6.0.5")
+ .HasAnnotation("Relational:MaxIdentifierLength", 63);
+
+ NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder);
+
+ modelBuilder.Entity("HardMuteRoleEntity", b =>
+ {
+ b.Property("MutesId")
+ .HasColumnType("uuid");
+
+ b.Property("RolesRoleId")
+ .HasColumnType("numeric(20,0)");
+
+ b.HasKey("MutesId", "RolesRoleId");
+
+ b.HasIndex("RolesRoleId");
+
+ b.ToTable("HardMuteRoleEntity");
+ });
+
+ modelBuilder.Entity("HuTao.Data.Models.Authorization.AuthorizationGroup", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uuid");
+
+ b.Property("Access")
+ .HasColumnType("integer");
+
+ b.Property("ActionId")
+ .HasColumnType("uuid");
+
+ b.Property("GuildEntityId")
+ .HasColumnType("numeric(20,0)");
+
+ b.Property("JudgeType")
+ .HasColumnType("integer");
+
+ b.Property("LinkedCommandId")
+ .HasColumnType("uuid");
+
+ b.Property("ModerationCategoryId")
+ .HasColumnType("uuid");
+
+ b.Property("Scope")
+ .HasColumnType("integer");
+
+ b.HasKey("Id");
+
+ b.HasIndex("ActionId");
+
+ b.HasIndex("GuildEntityId");
+
+ b.HasIndex("LinkedCommandId");
+
+ b.HasIndex("ModerationCategoryId");
+
+ b.ToTable("AuthorizationGroup");
+ });
+
+ modelBuilder.Entity("HuTao.Data.Models.Criteria.Criterion", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uuid");
+
+ b.Property("AuthorizationGroupId")
+ .HasColumnType("uuid");
+
+ b.Property("CensorId")
+ .HasColumnType("uuid");
+
+ b.Property("Discriminator")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.Property("LoggingRulesId")
+ .HasColumnType("uuid");
+
+ b.Property("ModerationCategoryId")
+ .HasColumnType("uuid");
+
+ b.Property("ModerationRulesId")
+ .HasColumnType("uuid");
+
+ b.HasKey("Id");
+
+ b.HasIndex("AuthorizationGroupId");
+
+ b.HasIndex("CensorId");
+
+ b.HasIndex("LoggingRulesId");
+
+ b.HasIndex("ModerationCategoryId");
+
+ b.HasIndex("ModerationRulesId");
+
+ b.ToTable("Criterion");
+
+ b.HasDiscriminator("Discriminator").HasValue("Criterion");
+ });
+
+ modelBuilder.Entity("HuTao.Data.Models.Discord.EnumChannel", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uuid");
+
+ b.Property("ChannelId")
+ .HasColumnType("numeric(20,0)");
+
+ b.Property("Discriminator")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.Property("IntType")
+ .HasColumnType("integer");
+
+ b.HasKey("Id");
+
+ b.ToTable("EnumChannels");
+
+ b.HasDiscriminator("Discriminator").HasValue("EnumChannel");
+ });
+
+ modelBuilder.Entity("HuTao.Data.Models.Discord.GuildEntity", b =>
+ {
+ b.Property("Id")
+ .HasColumnType("numeric(20,0)");
+
+ b.Property("GenshinRulesId")
+ .HasColumnType("uuid");
+
+ b.Property("ModerationRulesId")
+ .HasColumnType("uuid");
+
+ b.HasKey("Id");
+
+ b.HasIndex("GenshinRulesId");
+
+ b.HasIndex("ModerationRulesId");
+
+ b.ToTable("Guilds");
+ });
+
+ modelBuilder.Entity("HuTao.Data.Models.Discord.GuildUserEntity", b =>
+ {
+ b.Property("Id")
+ .HasColumnType("numeric(20,0)");
+
+ b.Property("GuildId")
+ .HasColumnType("numeric(20,0)");
+
+ b.Property("JoinedAt")
+ .HasColumnType("timestamp with time zone");
+
+ b.HasKey("Id", "GuildId");
+
+ b.HasIndex("GuildId");
+
+ b.ToTable("Users");
+ });
+
+ modelBuilder.Entity("HuTao.Data.Models.Discord.Message.Attachment", b =>
+ {
+ b.Property("AttachmentId")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uuid");
+
+ b.Property("ContentType")
+ .HasColumnType("text");
+
+ b.Property("Description")
+ .HasColumnType("text");
+
+ b.Property("Ephemeral")
+ .HasColumnType("boolean");
+
+ b.Property("Filename")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.Property("Height")
+ .HasColumnType("integer");
+
+ b.Property("Id")
+ .HasColumnType("numeric(20,0)");
+
+ b.Property("MessageLogId")
+ .HasColumnType("uuid");
+
+ b.Property("MessageTemplateId")
+ .HasColumnType("uuid");
+
+ b.Property("ProxyUrl")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.Property("Size")
+ .HasColumnType("integer");
+
+ b.Property("Url")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.Property("Width")
+ .HasColumnType("integer");
+
+ b.HasKey("AttachmentId");
+
+ b.HasIndex("MessageLogId");
+
+ b.HasIndex("MessageTemplateId");
+
+ b.ToTable("Attachment");
+ });
+
+ modelBuilder.Entity("HuTao.Data.Models.Discord.Message.Components.ActionRow", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uuid");
+
+ b.Property("MessageLogId")
+ .HasColumnType("uuid");
+
+ b.Property("MessageTemplateId")
+ .HasColumnType("uuid");
+
+ b.HasKey("Id");
+
+ b.HasIndex("MessageLogId");
+
+ b.HasIndex("MessageTemplateId");
+
+ b.ToTable("ActionRow");
+ });
+
+ modelBuilder.Entity("HuTao.Data.Models.Discord.Message.Components.Component", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uuid");
+
+ b.Property("ActionRowId")
+ .HasColumnType("uuid");
+
+ b.Property("CustomId")
+ .HasMaxLength(100)
+ .HasColumnType("character varying(100)");
+
+ b.Property("Discriminator")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.Property("IsDisabled")
+ .HasColumnType("boolean");
+
+ b.HasKey("Id");
+
+ b.HasIndex("ActionRowId");
+
+ b.ToTable("Component");
+
+ b.HasDiscriminator("Discriminator").HasValue("Component");
+ });
+
+ modelBuilder.Entity("HuTao.Data.Models.Discord.Message.Components.MenuOption", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uuid");
+
+ b.Property("Description")
+ .HasMaxLength(100)
+ .HasColumnType("character varying(100)");
+
+ b.Property("Emote")
+ .HasColumnType("text");
+
+ b.Property("IsDefault")
+ .HasColumnType("boolean");
+
+ b.Property("Label")
+ .IsRequired()
+ .HasMaxLength(100)
+ .HasColumnType("character varying(100)");
+
+ b.Property("SelectMenuId")
+ .HasColumnType("uuid");
+
+ b.Property("Value")
+ .IsRequired()
+ .HasMaxLength(100)
+ .HasColumnType("character varying(100)");
+
+ b.HasKey("Id");
+
+ b.HasIndex("SelectMenuId");
+
+ b.ToTable("MenuOption");
+ });
+
+ modelBuilder.Entity("HuTao.Data.Models.Discord.Message.Embeds.Author", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uuid");
+
+ b.Property("IconUrl")
+ .HasColumnType("text");
+
+ b.Property("Name")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.Property("ProxyIconUrl")
+ .HasColumnType("text");
+
+ b.Property("Url")
+ .HasColumnType("text");
+
+ b.HasKey("Id");
+
+ b.ToTable("Author");
+ });
+
+ modelBuilder.Entity("HuTao.Data.Models.Discord.Message.Embeds.Embed", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uuid");
+
+ b.Property("AuthorId")
+ .HasColumnType("uuid");
+
+ b.Property("Color")
+ .HasColumnType("bigint");
+
+ b.Property("Description")
+ .HasColumnType("text");
+
+ b.Property("FooterId")
+ .HasColumnType("uuid");
+
+ b.Property("ImageId")
+ .HasColumnType("uuid");
+
+ b.Property("MessageLogId")
+ .HasColumnType("uuid");
+
+ b.Property("MessageTemplateId")
+ .HasColumnType("uuid");
+
+ b.Property("ThumbnailId")
+ .HasColumnType("uuid");
+
+ b.Property("Timestamp")
+ .HasColumnType("timestamp with time zone");
+
+ b.Property("Title")
+ .HasColumnType("text");
+
+ b.Property("Type")
+ .HasColumnType("integer");
+
+ b.Property("Url")
+ .HasColumnType("text");
+
+ b.Property("VideoId")
+ .HasColumnType("uuid");
+
+ b.HasKey("Id");
+
+ b.HasIndex("AuthorId");
+
+ b.HasIndex("FooterId");
+
+ b.HasIndex("ImageId");
+
+ b.HasIndex("MessageLogId");
+
+ b.HasIndex("MessageTemplateId");
+
+ b.HasIndex("ThumbnailId");
+
+ b.HasIndex("VideoId");
+
+ b.ToTable("Embed");
+ });
+
+ modelBuilder.Entity("HuTao.Data.Models.Discord.Message.Embeds.Field", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uuid");
+
+ b.Property("EmbedId")
+ .HasColumnType("uuid");
+
+ b.Property("Inline")
+ .HasColumnType("boolean");
+
+ b.Property("Name")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.Property("Value")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.HasKey("Id");
+
+ b.HasIndex("EmbedId");
+
+ b.ToTable("Field");
+ });
+
+ modelBuilder.Entity("HuTao.Data.Models.Discord.Message.Embeds.Footer", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uuid");
+
+ b.Property("IconUrl")
+ .HasColumnType("text");
+
+ b.Property("ProxyUrl")
+ .HasColumnType("text");
+
+ b.Property("Text")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.HasKey("Id");
+
+ b.ToTable("Footer");
+ });
+
+ modelBuilder.Entity("HuTao.Data.Models.Discord.Message.Embeds.Image", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uuid");
+
+ b.Property("Height")
+ .HasColumnType("integer");
+
+ b.Property("ProxyUrl")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.Property("Url")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.Property("Width")
+ .HasColumnType("integer");
+
+ b.HasKey("Id");
+
+ b.ToTable("Image");
+ });
+
+ modelBuilder.Entity("HuTao.Data.Models.Discord.Message.Embeds.Thumbnail", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uuid");
+
+ b.Property("Height")
+ .HasColumnType("integer");
+
+ b.Property("ProxyUrl")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.Property("Url")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.Property("Width")
+ .HasColumnType("integer");
+
+ b.HasKey("Id");
+
+ b.ToTable("Thumbnail");
+ });
+
+ modelBuilder.Entity("HuTao.Data.Models.Discord.Message.Embeds.Video", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uuid");
+
+ b.Property("Height")
+ .HasColumnType("integer");
+
+ b.Property("Url")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.Property("Width")
+ .HasColumnType("integer");
+
+ b.HasKey("Id");
+
+ b.ToTable("Video");
+ });
+
+ modelBuilder.Entity("HuTao.Data.Models.Discord.Message.Linking.LinkedButton", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uuid");
+
+ b.Property("ButtonId")
+ .HasColumnType("uuid");
+
+ b.Property("DmUser")
+ .HasColumnType("boolean");
+
+ b.Property("Ephemeral")
+ .HasColumnType("boolean");
+
+ b.Property("GuildId")
+ .HasColumnType("numeric(20,0)");
+
+ b.Property("MessageId")
+ .HasColumnType("uuid");
+
+ b.HasKey("Id");
+
+ b.HasIndex("ButtonId")
+ .IsUnique();
+
+ b.HasIndex("GuildId");
+
+ b.HasIndex("MessageId");
+
+ b.ToTable("LinkedButton");
+ });
+
+ modelBuilder.Entity("HuTao.Data.Models.Discord.Message.Linking.LinkedCommand", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uuid");
+
+ b.Property("Cooldown")
+ .HasColumnType("interval");
+
+ b.Property("Description")
+ .HasColumnType("text");
+
+ b.Property("Ephemeral")
+ .HasColumnType("boolean");
+
+ b.Property("GuildEntityId")
+ .HasColumnType("numeric(20,0)");
+
+ b.Property("MessageId")
+ .HasColumnType("uuid");
+
+ b.Property("Name")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.Property("Silent")
+ .HasColumnType("boolean");
+
+ b.Property("UserOptions")
+ .HasColumnType("integer");
+
+ b.HasKey("Id");
+
+ b.HasIndex("GuildEntityId");
+
+ b.HasIndex("MessageId");
+
+ b.ToTable("LinkedCommand");
+ });
+
+ modelBuilder.Entity("HuTao.Data.Models.Discord.Message.Linking.MessageTemplate", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uuid");
+
+ b.Property("AllowMentions")
+ .HasColumnType("boolean");
+
+ b.Property("ChannelId")
+ .HasColumnType("numeric(20,0)");
+
+ b.Property("Content")
+ .HasColumnType("text");
+
+ b.Property("IsLive")
+ .HasColumnType("boolean");
+
+ b.Property("MessageId")
+ .HasColumnType("numeric(20,0)");
+
+ b.Property("ReplaceTimestamps")
+ .HasColumnType("boolean");
+
+ b.Property("SuppressEmbeds")
+ .HasColumnType("boolean");
+
+ b.HasKey("Id");
+
+ b.ToTable("MessageTemplate");
+ });
+
+ modelBuilder.Entity("HuTao.Data.Models.Discord.Message.Linking.RoleTemplate", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uuid");
+
+ b.Property("Behavior")
+ .HasColumnType("integer");
+
+ b.Property("GuildId")
+ .HasColumnType("numeric(20,0)");
+
+ b.Property("LinkedButtonId")
+ .HasColumnType("uuid");
+
+ b.Property("LinkedCommandId")
+ .HasColumnType("uuid");
+
+ b.Property("RoleActionId")
+ .HasColumnType("uuid");
+
+ b.Property("RoleId")
+ .HasColumnType("numeric(20,0)");
+
+ b.Property("RoleReprimandId")
+ .HasColumnType("uuid");
+
+ b.HasKey("Id");
+
+ b.HasIndex("LinkedButtonId");
+
+ b.HasIndex("LinkedCommandId");
+
+ b.HasIndex("RoleActionId");
+
+ b.HasIndex("RoleReprimandId");
+
+ b.ToTable("RoleTemplate");
+ });
+
+ modelBuilder.Entity("HuTao.Data.Models.Discord.Message.Linking.StickyMessage", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uuid");
+
+ b.Property("ChannelId")
+ .HasColumnType("numeric(20,0)");
+
+ b.Property("CountDelay")
+ .HasColumnType("bigint");
+
+ b.Property("GuildEntityId")
+ .HasColumnType("numeric(20,0)");
+
+ b.Property("IsActive")
+ .HasColumnType("boolean");
+
+ b.Property("TemplateId")
+ .HasColumnType("uuid");
+
+ b.Property("TimeDelay")
+ .HasColumnType("interval");
+
+ b.HasKey("Id");
+
+ b.HasIndex("GuildEntityId");
+
+ b.HasIndex("TemplateId");
+
+ b.ToTable("StickyMessage");
+ });
+
+ modelBuilder.Entity("HuTao.Data.Models.Discord.Reaction.ReactionEntity", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uuid");
+
+ b.Property("Discriminator")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.Property("Name")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.HasKey("Id");
+
+ b.ToTable("ReactionEntity");
+
+ b.HasDiscriminator("Discriminator").HasValue("ReactionEntity");
+ });
+
+ modelBuilder.Entity("HuTao.Data.Models.Discord.RoleEntity", b =>
+ {
+ b.Property("RoleId")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("numeric(20,0)");
+
+ b.Property("GuildId")
+ .HasColumnType("numeric(20,0)");
+
+ b.HasKey("RoleId");
+
+ b.ToTable("Roles");
+ });
+
+ modelBuilder.Entity("HuTao.Data.Models.Discord.TemporaryRole", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uuid");
+
+ b.Property("ActionId")
+ .HasColumnType("uuid");
+
+ b.Property("EndedAt")
+ .HasColumnType("timestamp with time zone");
+
+ b.Property("ExpireAt")
+ .HasColumnType("timestamp with time zone");
+
+ b.Property("GuildEntityId")
+ .HasColumnType("numeric(20,0)");
+
+ b.Property("GuildId")
+ .HasColumnType("numeric(20,0)");
+
+ b.Property("Length")
+ .HasColumnType("interval");
+
+ b.Property("RoleId")
+ .HasColumnType("numeric(20,0)");
+
+ b.Property("StartedAt")
+ .HasColumnType("timestamp with time zone");
+
+ b.HasKey("Id");
+
+ b.HasIndex("ActionId");
+
+ b.HasIndex("GuildEntityId");
+
+ b.ToTable("TemporaryRole");
+ });
+
+ modelBuilder.Entity("HuTao.Data.Models.Discord.TemporaryRoleMember", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uuid");
+
+ b.Property("ActionId")
+ .HasColumnType("uuid");
+
+ b.Property("EndedAt")
+ .HasColumnType("timestamp with time zone");
+
+ b.Property("ExpireAt")
+ .HasColumnType("timestamp with time zone");
+
+ b.Property("GuildEntityId")
+ .HasColumnType("numeric(20,0)");
+
+ b.Property("GuildId")
+ .HasColumnType("numeric(20,0)");
+
+ b.Property("Length")
+ .HasColumnType("interval");
+
+ b.Property("RoleId")
+ .HasColumnType("numeric(20,0)");
+
+ b.Property("StartedAt")
+ .HasColumnType("timestamp with time zone");
+
+ b.Property("UserId")
+ .HasColumnType("numeric(20,0)");
+
+ b.HasKey("Id");
+
+ b.HasIndex("ActionId");
+
+ b.HasIndex("GuildEntityId");
+
+ b.HasIndex("UserId", "GuildId");
+
+ b.ToTable("TemporaryRoleMember");
+ });
+
+ modelBuilder.Entity("HuTao.Data.Models.Logging.DeleteLog", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uuid");
+
+ b.Property("ActionId")
+ .HasColumnType("uuid");
+
+ b.Property("Discriminator")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.Property("GuildEntityId")
+ .HasColumnType("numeric(20,0)");
+
+ b.Property("LogDate")
+ .HasColumnType("timestamp with time zone");
+
+ b.HasKey("Id");
+
+ b.HasIndex("ActionId");
+
+ b.HasIndex("GuildEntityId");
+
+ b.ToTable("DeleteLog");
+
+ b.HasDiscriminator("Discriminator").HasValue("DeleteLog");
+ });
+
+ modelBuilder.Entity("HuTao.Data.Models.Logging.LoggingRules", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uuid");
+
+ b.Property("GuildId")
+ .HasColumnType("numeric(20,0)");
+
+ b.Property("UploadAttachments")
+ .HasColumnType("boolean");
+
+ b.HasKey("Id");
+
+ b.HasIndex("GuildId")
+ .IsUnique();
+
+ b.ToTable("LoggingRules");
+ });
+
+ modelBuilder.Entity("HuTao.Data.Models.Logging.MessageLog", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uuid");
+
+ b.Property("ChannelId")
+ .HasColumnType("numeric(20,0)");
+
+ b.Property("Content")
+ .HasColumnType("text");
+
+ b.Property("CreatedAt")
+ .HasColumnType("timestamp with time zone");
+
+ b.Property("EditedTimestamp")
+ .HasColumnType("timestamp with time zone");
+
+ b.Property("GuildId")
+ .HasColumnType("numeric(20,0)");
+
+ b.Property("LogDate")
+ .HasColumnType("timestamp with time zone");
+
+ b.Property("MentionedEveryone")
+ .HasColumnType("boolean");
+
+ b.Property("MentionedRolesCount")
+ .HasColumnType("integer");
+
+ b.Property("MentionedUsersCount")
+ .HasColumnType("integer");
+
+ b.Property("MessageId")
+ .HasColumnType("numeric(20,0)");
+
+ b.Property("ReferencedMessageId")
+ .HasColumnType("numeric(20,0)");
+
+ b.Property("Timestamp")
+ .HasColumnType("timestamp with time zone");
+
+ b.Property("UpdatedLogId")
+ .HasColumnType("uuid");
+
+ b.Property("UserId")
+ .HasColumnType("numeric(20,0)");
+
+ b.HasKey("Id");
+
+ b.HasIndex("GuildId");
+
+ b.HasIndex("UpdatedLogId");
+
+ b.HasIndex("UserId", "GuildId");
+
+ b.ToTable("MessageLog");
+ });
+
+ modelBuilder.Entity("HuTao.Data.Models.Logging.ReactionLog", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uuid");
+
+ b.Property("ChannelId")
+ .HasColumnType("numeric(20,0)");
+
+ b.Property("EmoteId")
+ .HasColumnType("uuid");
+
+ b.Property("GuildId")
+ .HasColumnType("numeric(20,0)");
+
+ b.Property("LogDate")
+ .HasColumnType("timestamp with time zone");
+
+ b.Property("MessageId")
+ .HasColumnType("numeric(20,0)");
+
+ b.Property("UserId")
+ .HasColumnType("numeric(20,0)");
+
+ b.HasKey("Id");
+
+ b.HasIndex("EmoteId");
+
+ b.HasIndex("GuildId");
+
+ b.HasIndex("UserId", "GuildId");
+
+ b.ToTable("ReactionLog");
+ });
+
+ modelBuilder.Entity("HuTao.Data.Models.Moderation.Auto.Configurations.Link", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uuid");
+
+ b.Property("OriginalString")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.HasKey("Id");
+
+ b.ToTable("Link");
+ });
+
+ modelBuilder.Entity("HuTao.Data.Models.Moderation.Auto.Exclusions.ModerationExclusion", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uuid");
+
+ b.Property("ConfigurationId")
+ .HasColumnType("uuid");
+
+ b.Property("Discriminator")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.Property("ModerationRulesId")
+ .HasColumnType("uuid");
+
+ b.HasKey("Id");
+
+ b.HasIndex("ConfigurationId");
+
+ b.HasIndex("ModerationRulesId");
+
+ b.ToTable("ModerationExclusion");
+
+ b.HasDiscriminator("Discriminator").HasValue("ModerationExclusion");
+ });
+
+ modelBuilder.Entity("HuTao.Data.Models.Moderation.Infractions.Actions.ModerationTemplate", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uuid");
+
+ b.Property("ActionId")
+ .HasColumnType("uuid");
+
+ b.Property("CategoryId")
+ .HasColumnType("uuid");
+
+ b.Property("GuildEntityId")
+ .HasColumnType("numeric(20,0)");
+
+ b.Property("Name")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.Property("Reason")
+ .HasColumnType("text");
+
+ b.Property("Scope")
+ .HasColumnType("integer");
+
+ b.HasKey("Id");
+
+ b.HasIndex("ActionId");
+
+ b.HasIndex("CategoryId");
+
+ b.HasIndex("GuildEntityId");
+
+ b.ToTable("ModerationTemplate");
+ });
+
+ modelBuilder.Entity("HuTao.Data.Models.Moderation.Infractions.Actions.ReprimandAction", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uuid");
+
+ b.Property("Discriminator")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.HasKey("Id");
+
+ b.ToTable("ReprimandAction");
+
+ b.HasDiscriminator("Discriminator").HasValue("ReprimandAction");
+ });
+
+ modelBuilder.Entity("HuTao.Data.Models.Moderation.Infractions.ModerationAction", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uuid");
+
+ b.Property("Date")
+ .HasColumnType("timestamp with time zone");
+
+ b.Property("GuildId")
+ .HasColumnType("numeric(20,0)");
+
+ b.Property("Reason")
+ .HasColumnType("text");
+
+ b.Property("UserId")
+ .HasColumnType("numeric(20,0)");
+
+ b.HasKey("Id");
+
+ b.HasIndex("GuildId");
+
+ b.HasIndex("UserId", "GuildId");
+
+ b.ToTable("ModerationAction");
+ });
+
+ modelBuilder.Entity("HuTao.Data.Models.Moderation.Infractions.Reprimands.Reprimand", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uuid");
+
+ b.Property("ActionId")
+ .HasColumnType("uuid");
+
+ b.Property("CategoryId")
+ .HasColumnType("uuid");
+
+ b.Property("Discriminator")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.Property("GuildId")
+ .HasColumnType("numeric(20,0)");
+
+ b.Property("ModifiedActionId")
+ .HasColumnType("uuid");
+
+ b.Property("Status")
+ .HasColumnType("integer");
+
+ b.Property("TriggerId")
+ .HasColumnType("uuid");
+
+ b.Property("UserId")
+ .HasColumnType("numeric(20,0)");
+
+ b.HasKey("Id");
+
+ b.HasIndex("ActionId");
+
+ b.HasIndex("CategoryId");
+
+ b.HasIndex("GuildId");
+
+ b.HasIndex("ModifiedActionId");
+
+ b.HasIndex("TriggerId");
+
+ b.HasIndex("UserId", "GuildId");
+
+ b.ToTable("Reprimand");
+
+ b.HasDiscriminator("Discriminator").HasValue("Reprimand");
+ });
+
+ modelBuilder.Entity("HuTao.Data.Models.Moderation.Infractions.Triggers.Trigger", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uuid");
+
+ b.Property("ActionId")
+ .HasColumnType("uuid");
+
+ b.Property("Amount")
+ .HasColumnType("bigint");
+
+ b.Property("CategoryId")
+ .HasColumnType("uuid");
+
+ b.Property("Discriminator")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.Property("IsActive")
+ .HasColumnType("boolean");
+
+ b.Property("Mode")
+ .HasColumnType("integer");
+
+ b.Property("ModerationRulesId")
+ .HasColumnType("uuid");
+
+ b.HasKey("Id");
+
+ b.HasIndex("ActionId");
+
+ b.HasIndex("CategoryId");
+
+ b.HasIndex("ModerationRulesId");
+
+ b.ToTable("Trigger");
+
+ b.HasDiscriminator("Discriminator").HasValue("Trigger");
+ });
+
+ modelBuilder.Entity("HuTao.Data.Models.Moderation.Logging.ModerationLogConfig", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uuid");
+
+ b.Property("AppealMessage")
+ .HasColumnType("text");
+
+ b.Property("Discriminator")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.Property("LogReprimandStatus")
+ .HasColumnType("integer");
+
+ b.Property("LogReprimands")
+ .HasColumnType("integer");
+
+ b.Property("Options")
+ .HasColumnType("integer");
+
+ b.Property("ShowAppealOnReprimands")
+ .HasColumnType("integer");
+
+ b.HasKey("Id");
+
+ b.ToTable("ModerationLogConfig");
+
+ b.HasDiscriminator("Discriminator").HasValue("ModerationLogConfig");
+ });
+
+ modelBuilder.Entity("HuTao.Data.Models.Moderation.Logging.ModerationLoggingRules", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uuid");
+
+ b.Property("CommandLogId")
+ .HasColumnType("uuid");
+
+ b.Property("HistoryReprimands")
+ .HasColumnType("integer");
+
+ b.Property("IgnoreDuplicates")
+ .HasColumnType("boolean");
+
+ b.Property("ModeratorLogId")
+ .HasColumnType("uuid");
+
+ b.Property("PublicLogId")
+ .HasColumnType("uuid");
+
+ b.Property("SilentReprimands")
+ .HasColumnType("integer");
+
+ b.Property("SummaryReprimands")
+ .HasColumnType("integer");
+
+ b.Property("UserLogId")
+ .HasColumnType("uuid");
+
+ b.HasKey("Id");
+
+ b.HasIndex("CommandLogId");
+
+ b.HasIndex("ModeratorLogId");
+
+ b.HasIndex("PublicLogId");
+
+ b.HasIndex("UserLogId");
+
+ b.ToTable("ModerationLoggingRules");
+ });
+
+ modelBuilder.Entity("HuTao.Data.Models.Moderation.ModerationCategory", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uuid");
+
+ b.Property("AutoReprimandCooldown")
+ .HasColumnType("interval");
+
+ b.Property