diff --git a/src/EllieBot/Db/EllieContext.cs b/src/EllieBot/Db/EllieContext.cs
index 92a0699..a009eaa 100644
--- a/src/EllieBot/Db/EllieContext.cs
+++ b/src/EllieBot/Db/EllieContext.cs
@@ -74,6 +74,35 @@ public abstract class EllieContext : DbContext
 
     protected override void OnModelCreating(ModelBuilder modelBuilder)
     {
+        #region Notify
+
+        modelBuilder.Entity<Notify>(e =>
+        {
+            e.HasAlternateKey(x => new
+            {
+                x.GuildId,
+                x.Event
+            });
+        });
+
+        #endregion
+
+        #region TempRoles
+
+        modelBuilder.Entity<TempRole>(e =>
+        {
+            e.HasAlternateKey(x => new
+            {
+                x.GuildId,
+                x.UserId,
+                x.RoleId
+            });
+
+            e.HasIndex(x => x.ExpiresAt);
+        });
+
+        #endregion
+
         #region GuildColors
 
         modelBuilder.Entity<GuildColors>()
@@ -449,7 +478,6 @@ public abstract class EllieContext : DbContext
         xps.HasIndex(x => x.UserId);
         xps.HasIndex(x => x.GuildId);
         xps.HasIndex(x => x.Xp);
-        xps.HasIndex(x => x.AwardedXp);
 
         #endregion
 
diff --git a/src/EllieBot/Db/Extensions/UserXpExtensions.cs b/src/EllieBot/Db/Extensions/UserXpExtensions.cs
index d137868..05f7c41 100644
--- a/src/EllieBot/Db/Extensions/UserXpExtensions.cs
+++ b/src/EllieBot/Db/Extensions/UserXpExtensions.cs
@@ -20,7 +20,6 @@ public static class UserXpExtensions
             {
                 Xp = 0,
                 UserId = userId,
-                NotifyOnLevelUp = XpNotificationLocation.None,
                 GuildId = guildId
             });
         }
diff --git a/src/EllieBot/Db/Models/GuildConfig.cs b/src/EllieBot/Db/Models/GuildConfig.cs
index 787cddd..76d98a0 100644
--- a/src/EllieBot/Db/Models/GuildConfig.cs
+++ b/src/EllieBot/Db/Models/GuildConfig.cs
@@ -36,29 +36,37 @@ public class GuildConfig : DbEntity
     public HashSet<FilterChannelId> FilterInvitesChannelIds { get; set; } = new();
     public HashSet<FilterLinksChannelId> FilterLinksChannelIds { get; set; } = new();
 
-    //public bool FilterLinks { get; set; }
-    //public HashSet<FilterLinksChannelId> FilterLinksChannels { get; set; } = new HashSet<FilterLinksChannelId>();
-
     public bool FilterWords { get; set; }
     public HashSet<FilteredWord> FilteredWords { get; set; } = new();
     public HashSet<FilterWordsChannelId> FilterWordsChannelIds { get; set; } = new();
 
+    // mute
     public HashSet<MutedUserId> MutedUsers { get; set; } = new();
 
     public string MuteRoleName { get; set; }
+
+    // chatterbot
     public bool CleverbotEnabled { get; set; }
 
+    // protection
     public AntiRaidSetting AntiRaidSetting { get; set; }
     public AntiSpamSetting AntiSpamSetting { get; set; }
     public AntiAltSetting AntiAltSetting { get; set; }
 
+    // time
     public string Locale { get; set; }
     public string TimeZoneId { get; set; }
 
+
+    // timers 
     public HashSet<UnmuteTimer> UnmuteTimers { get; set; } = new();
     public HashSet<UnbanTimer> UnbanTimer { get; set; } = new();
     public HashSet<UnroleTimer> UnroleTimer { get; set; } = new();
+
+    // vcrole
     public HashSet<VcRoleInfo> VcRoleInfos { get; set; }
+
+    // aliases
     public HashSet<CommandAlias> CommandAliases { get; set; } = new();
     public bool WarningsInitialized { get; set; }
     public HashSet<SlowmodeIgnoredUser> SlowmodeIgnoredUsers { get; set; }
diff --git a/src/EllieBot/Db/Models/Notify.cs b/src/EllieBot/Db/Models/Notify.cs
new file mode 100644
index 0000000..77c2de0
--- /dev/null
+++ b/src/EllieBot/Db/Models/Notify.cs
@@ -0,0 +1,20 @@
+using System.ComponentModel.DataAnnotations;
+
+namespace EllieBot.Db.Models;
+
+public class Notify
+{
+    [Key]
+    public int Id { get; set; }
+    public ulong GuildId { get; set; }
+    public ulong ChannelId { get; set; }
+    public NotifyEvent Event { get; set; }
+
+    [MaxLength(10_000)]
+    public string Message { get; set; } = string.Empty;
+}
+
+public enum NotifyEvent
+{
+    UserLevelUp
+}
\ No newline at end of file
diff --git a/src/EllieBot/Db/Models/roles/TempRole.cs b/src/EllieBot/Db/Models/roles/TempRole.cs
new file mode 100644
index 0000000..5af1d80
--- /dev/null
+++ b/src/EllieBot/Db/Models/roles/TempRole.cs
@@ -0,0 +1,12 @@
+namespace EllieBot.Db.Models;
+
+public class TempRole
+{
+    public int Id { get; set; }
+    public ulong GuildId { get; set; }
+    public bool Remove { get; set; }
+    public ulong RoleId { get; set; }
+    public ulong UserId { get; set; }
+
+    public DateTime ExpiresAt { get; set; }
+}
\ No newline at end of file
diff --git a/src/EllieBot/Db/Models/xp/UserXpStats.cs b/src/EllieBot/Db/Models/xp/UserXpStats.cs
index f34ab26..df39e14 100644
--- a/src/EllieBot/Db/Models/xp/UserXpStats.cs
+++ b/src/EllieBot/Db/Models/xp/UserXpStats.cs
@@ -6,6 +6,4 @@ public class UserXpStats : DbEntity
     public ulong UserId { get; set; }
     public ulong GuildId { get; set; }
     public long Xp { get; set; }
-    public long AwardedXp { get; set; }
-    public XpNotificationLocation NotifyOnLevelUp { get; set; }
 }
\ No newline at end of file
diff --git a/src/EllieBot/Migrations/PostgreSql/20241208035947_awarded-xp-and-notify-removed.Designer.cs b/src/EllieBot/Migrations/PostgreSql/20241208035947_awarded-xp-and-notify-removed.Designer.cs
new file mode 100644
index 0000000..1a47e18
--- /dev/null
+++ b/src/EllieBot/Migrations/PostgreSql/20241208035947_awarded-xp-and-notify-removed.Designer.cs
@@ -0,0 +1,4114 @@
+// <auto-generated />
+using System;
+using EllieBot.Db;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.Infrastructure;
+using Microsoft.EntityFrameworkCore.Migrations;
+using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
+using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
+
+#nullable disable
+
+namespace EllieBot.Migrations.PostgreSql
+{
+    [DbContext(typeof(PostgreSqlContext))]
+    [Migration("20241208035947_awarded-xp-and-notify-removed")]
+    partial class awardedxpandnotifyremoved
+    {
+        /// <inheritdoc />
+        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("EllieBot.Db.Models.AntiAltSetting", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("integer")
+                        .HasColumnName("id");
+
+                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
+
+                    b.Property<int>("Action")
+                        .HasColumnType("integer")
+                        .HasColumnName("action");
+
+                    b.Property<int>("ActionDurationMinutes")
+                        .HasColumnType("integer")
+                        .HasColumnName("actiondurationminutes");
+
+                    b.Property<int>("GuildConfigId")
+                        .HasColumnType("integer")
+                        .HasColumnName("guildconfigid");
+
+                    b.Property<TimeSpan>("MinAge")
+                        .HasColumnType("interval")
+                        .HasColumnName("minage");
+
+                    b.Property<decimal?>("RoleId")
+                        .HasColumnType("numeric(20,0)")
+                        .HasColumnName("roleid");
+
+                    b.HasKey("Id")
+                        .HasName("pk_antialtsetting");
+
+                    b.HasIndex("GuildConfigId")
+                        .IsUnique()
+                        .HasDatabaseName("ix_antialtsetting_guildconfigid");
+
+                    b.ToTable("antialtsetting", (string)null);
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.AntiRaidSetting", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("integer")
+                        .HasColumnName("id");
+
+                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
+
+                    b.Property<int>("Action")
+                        .HasColumnType("integer")
+                        .HasColumnName("action");
+
+                    b.Property<DateTime?>("DateAdded")
+                        .HasColumnType("timestamp without time zone")
+                        .HasColumnName("dateadded");
+
+                    b.Property<int>("GuildConfigId")
+                        .HasColumnType("integer")
+                        .HasColumnName("guildconfigid");
+
+                    b.Property<int>("PunishDuration")
+                        .HasColumnType("integer")
+                        .HasColumnName("punishduration");
+
+                    b.Property<int>("Seconds")
+                        .HasColumnType("integer")
+                        .HasColumnName("seconds");
+
+                    b.Property<int>("UserThreshold")
+                        .HasColumnType("integer")
+                        .HasColumnName("userthreshold");
+
+                    b.HasKey("Id")
+                        .HasName("pk_antiraidsetting");
+
+                    b.HasIndex("GuildConfigId")
+                        .IsUnique()
+                        .HasDatabaseName("ix_antiraidsetting_guildconfigid");
+
+                    b.ToTable("antiraidsetting", (string)null);
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.AntiSpamIgnore", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("integer")
+                        .HasColumnName("id");
+
+                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
+
+                    b.Property<int?>("AntiSpamSettingId")
+                        .HasColumnType("integer")
+                        .HasColumnName("antispamsettingid");
+
+                    b.Property<decimal>("ChannelId")
+                        .HasColumnType("numeric(20,0)")
+                        .HasColumnName("channelid");
+
+                    b.Property<DateTime?>("DateAdded")
+                        .HasColumnType("timestamp without time zone")
+                        .HasColumnName("dateadded");
+
+                    b.HasKey("Id")
+                        .HasName("pk_antispamignore");
+
+                    b.HasIndex("AntiSpamSettingId")
+                        .HasDatabaseName("ix_antispamignore_antispamsettingid");
+
+                    b.ToTable("antispamignore", (string)null);
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.AntiSpamSetting", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("integer")
+                        .HasColumnName("id");
+
+                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
+
+                    b.Property<int>("Action")
+                        .HasColumnType("integer")
+                        .HasColumnName("action");
+
+                    b.Property<DateTime?>("DateAdded")
+                        .HasColumnType("timestamp without time zone")
+                        .HasColumnName("dateadded");
+
+                    b.Property<int>("GuildConfigId")
+                        .HasColumnType("integer")
+                        .HasColumnName("guildconfigid");
+
+                    b.Property<int>("MessageThreshold")
+                        .HasColumnType("integer")
+                        .HasColumnName("messagethreshold");
+
+                    b.Property<int>("MuteTime")
+                        .HasColumnType("integer")
+                        .HasColumnName("mutetime");
+
+                    b.Property<decimal?>("RoleId")
+                        .HasColumnType("numeric(20,0)")
+                        .HasColumnName("roleid");
+
+                    b.HasKey("Id")
+                        .HasName("pk_antispamsetting");
+
+                    b.HasIndex("GuildConfigId")
+                        .IsUnique()
+                        .HasDatabaseName("ix_antispamsetting_guildconfigid");
+
+                    b.ToTable("antispamsetting", (string)null);
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.ArchivedTodoListModel", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("integer")
+                        .HasColumnName("id");
+
+                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
+
+                    b.Property<string>("Name")
+                        .HasColumnType("text")
+                        .HasColumnName("name");
+
+                    b.Property<decimal>("UserId")
+                        .HasColumnType("numeric(20,0)")
+                        .HasColumnName("userid");
+
+                    b.HasKey("Id")
+                        .HasName("pk_todosarchive");
+
+                    b.ToTable("todosarchive", (string)null);
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.AutoCommand", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("integer")
+                        .HasColumnName("id");
+
+                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
+
+                    b.Property<decimal>("ChannelId")
+                        .HasColumnType("numeric(20,0)")
+                        .HasColumnName("channelid");
+
+                    b.Property<string>("ChannelName")
+                        .HasColumnType("text")
+                        .HasColumnName("channelname");
+
+                    b.Property<string>("CommandText")
+                        .HasColumnType("text")
+                        .HasColumnName("commandtext");
+
+                    b.Property<DateTime?>("DateAdded")
+                        .HasColumnType("timestamp without time zone")
+                        .HasColumnName("dateadded");
+
+                    b.Property<decimal?>("GuildId")
+                        .HasColumnType("numeric(20,0)")
+                        .HasColumnName("guildid");
+
+                    b.Property<string>("GuildName")
+                        .HasColumnType("text")
+                        .HasColumnName("guildname");
+
+                    b.Property<int>("Interval")
+                        .HasColumnType("integer")
+                        .HasColumnName("interval");
+
+                    b.Property<decimal?>("VoiceChannelId")
+                        .HasColumnType("numeric(20,0)")
+                        .HasColumnName("voicechannelid");
+
+                    b.Property<string>("VoiceChannelName")
+                        .HasColumnType("text")
+                        .HasColumnName("voicechannelname");
+
+                    b.HasKey("Id")
+                        .HasName("pk_autocommands");
+
+                    b.ToTable("autocommands", (string)null);
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.AutoPublishChannel", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("integer")
+                        .HasColumnName("id");
+
+                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
+
+                    b.Property<decimal>("ChannelId")
+                        .HasColumnType("numeric(20,0)")
+                        .HasColumnName("channelid");
+
+                    b.Property<DateTime?>("DateAdded")
+                        .HasColumnType("timestamp without time zone")
+                        .HasColumnName("dateadded");
+
+                    b.Property<decimal>("GuildId")
+                        .HasColumnType("numeric(20,0)")
+                        .HasColumnName("guildid");
+
+                    b.HasKey("Id")
+                        .HasName("pk_autopublishchannel");
+
+                    b.HasIndex("GuildId")
+                        .IsUnique()
+                        .HasDatabaseName("ix_autopublishchannel_guildid");
+
+                    b.ToTable("autopublishchannel", (string)null);
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.AutoTranslateChannel", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("integer")
+                        .HasColumnName("id");
+
+                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
+
+                    b.Property<bool>("AutoDelete")
+                        .HasColumnType("boolean")
+                        .HasColumnName("autodelete");
+
+                    b.Property<decimal>("ChannelId")
+                        .HasColumnType("numeric(20,0)")
+                        .HasColumnName("channelid");
+
+                    b.Property<DateTime?>("DateAdded")
+                        .HasColumnType("timestamp without time zone")
+                        .HasColumnName("dateadded");
+
+                    b.Property<decimal>("GuildId")
+                        .HasColumnType("numeric(20,0)")
+                        .HasColumnName("guildid");
+
+                    b.HasKey("Id")
+                        .HasName("pk_autotranslatechannels");
+
+                    b.HasIndex("ChannelId")
+                        .IsUnique()
+                        .HasDatabaseName("ix_autotranslatechannels_channelid");
+
+                    b.HasIndex("GuildId")
+                        .HasDatabaseName("ix_autotranslatechannels_guildid");
+
+                    b.ToTable("autotranslatechannels", (string)null);
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.AutoTranslateUser", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("integer")
+                        .HasColumnName("id");
+
+                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
+
+                    b.Property<int>("ChannelId")
+                        .HasColumnType("integer")
+                        .HasColumnName("channelid");
+
+                    b.Property<DateTime?>("DateAdded")
+                        .HasColumnType("timestamp without time zone")
+                        .HasColumnName("dateadded");
+
+                    b.Property<string>("Source")
+                        .HasColumnType("text")
+                        .HasColumnName("source");
+
+                    b.Property<string>("Target")
+                        .HasColumnType("text")
+                        .HasColumnName("target");
+
+                    b.Property<decimal>("UserId")
+                        .HasColumnType("numeric(20,0)")
+                        .HasColumnName("userid");
+
+                    b.HasKey("Id")
+                        .HasName("pk_autotranslateusers");
+
+                    b.HasAlternateKey("ChannelId", "UserId")
+                        .HasName("ak_autotranslateusers_channelid_userid");
+
+                    b.ToTable("autotranslateusers", (string)null);
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.BanTemplate", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("integer")
+                        .HasColumnName("id");
+
+                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
+
+                    b.Property<DateTime?>("DateAdded")
+                        .HasColumnType("timestamp without time zone")
+                        .HasColumnName("dateadded");
+
+                    b.Property<decimal>("GuildId")
+                        .HasColumnType("numeric(20,0)")
+                        .HasColumnName("guildid");
+
+                    b.Property<int?>("PruneDays")
+                        .HasColumnType("integer")
+                        .HasColumnName("prunedays");
+
+                    b.Property<string>("Text")
+                        .HasColumnType("text")
+                        .HasColumnName("text");
+
+                    b.HasKey("Id")
+                        .HasName("pk_bantemplates");
+
+                    b.HasIndex("GuildId")
+                        .IsUnique()
+                        .HasDatabaseName("ix_bantemplates_guildid");
+
+                    b.ToTable("bantemplates", (string)null);
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.BankUser", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("integer")
+                        .HasColumnName("id");
+
+                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
+
+                    b.Property<long>("Balance")
+                        .HasColumnType("bigint")
+                        .HasColumnName("balance");
+
+                    b.Property<DateTime?>("DateAdded")
+                        .HasColumnType("timestamp without time zone")
+                        .HasColumnName("dateadded");
+
+                    b.Property<decimal>("UserId")
+                        .HasColumnType("numeric(20,0)")
+                        .HasColumnName("userid");
+
+                    b.HasKey("Id")
+                        .HasName("pk_bankusers");
+
+                    b.HasIndex("UserId")
+                        .IsUnique()
+                        .HasDatabaseName("ix_bankusers_userid");
+
+                    b.ToTable("bankusers", (string)null);
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.BlacklistEntry", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("integer")
+                        .HasColumnName("id");
+
+                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
+
+                    b.Property<DateTime?>("DateAdded")
+                        .HasColumnType("timestamp without time zone")
+                        .HasColumnName("dateadded");
+
+                    b.Property<decimal>("ItemId")
+                        .HasColumnType("numeric(20,0)")
+                        .HasColumnName("itemid");
+
+                    b.Property<int>("Type")
+                        .HasColumnType("integer")
+                        .HasColumnName("type");
+
+                    b.HasKey("Id")
+                        .HasName("pk_blacklist");
+
+                    b.ToTable("blacklist", (string)null);
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.ButtonRole", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("integer")
+                        .HasColumnName("id");
+
+                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
+
+                    b.Property<string>("ButtonId")
+                        .IsRequired()
+                        .HasMaxLength(200)
+                        .HasColumnType("character varying(200)")
+                        .HasColumnName("buttonid");
+
+                    b.Property<decimal>("ChannelId")
+                        .HasColumnType("numeric(20,0)")
+                        .HasColumnName("channelid");
+
+                    b.Property<string>("Emote")
+                        .IsRequired()
+                        .HasMaxLength(100)
+                        .HasColumnType("character varying(100)")
+                        .HasColumnName("emote");
+
+                    b.Property<bool>("Exclusive")
+                        .HasColumnType("boolean")
+                        .HasColumnName("exclusive");
+
+                    b.Property<decimal>("GuildId")
+                        .HasColumnType("numeric(20,0)")
+                        .HasColumnName("guildid");
+
+                    b.Property<string>("Label")
+                        .IsRequired()
+                        .HasMaxLength(50)
+                        .HasColumnType("character varying(50)")
+                        .HasColumnName("label");
+
+                    b.Property<decimal>("MessageId")
+                        .HasColumnType("numeric(20,0)")
+                        .HasColumnName("messageid");
+
+                    b.Property<int>("Position")
+                        .HasColumnType("integer")
+                        .HasColumnName("position");
+
+                    b.Property<decimal>("RoleId")
+                        .HasColumnType("numeric(20,0)")
+                        .HasColumnName("roleid");
+
+                    b.HasKey("Id")
+                        .HasName("pk_buttonrole");
+
+                    b.HasAlternateKey("RoleId", "MessageId")
+                        .HasName("ak_buttonrole_roleid_messageid");
+
+                    b.HasIndex("GuildId")
+                        .HasDatabaseName("ix_buttonrole_guildid");
+
+                    b.ToTable("buttonrole", (string)null);
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.ClubApplicants", b =>
+                {
+                    b.Property<int>("ClubId")
+                        .HasColumnType("integer")
+                        .HasColumnName("clubid");
+
+                    b.Property<int>("UserId")
+                        .HasColumnType("integer")
+                        .HasColumnName("userid");
+
+                    b.HasKey("ClubId", "UserId")
+                        .HasName("pk_clubapplicants");
+
+                    b.HasIndex("UserId")
+                        .HasDatabaseName("ix_clubapplicants_userid");
+
+                    b.ToTable("clubapplicants", (string)null);
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.ClubBans", b =>
+                {
+                    b.Property<int>("ClubId")
+                        .HasColumnType("integer")
+                        .HasColumnName("clubid");
+
+                    b.Property<int>("UserId")
+                        .HasColumnType("integer")
+                        .HasColumnName("userid");
+
+                    b.HasKey("ClubId", "UserId")
+                        .HasName("pk_clubbans");
+
+                    b.HasIndex("UserId")
+                        .HasDatabaseName("ix_clubbans_userid");
+
+                    b.ToTable("clubbans", (string)null);
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.ClubInfo", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("integer")
+                        .HasColumnName("id");
+
+                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
+
+                    b.Property<DateTime?>("DateAdded")
+                        .HasColumnType("timestamp without time zone")
+                        .HasColumnName("dateadded");
+
+                    b.Property<string>("Description")
+                        .HasColumnType("text")
+                        .HasColumnName("description");
+
+                    b.Property<string>("ImageUrl")
+                        .HasColumnType("text")
+                        .HasColumnName("imageurl");
+
+                    b.Property<string>("Name")
+                        .HasMaxLength(20)
+                        .HasColumnType("character varying(20)")
+                        .HasColumnName("name");
+
+                    b.Property<int?>("OwnerId")
+                        .HasColumnType("integer")
+                        .HasColumnName("ownerid");
+
+                    b.Property<int>("Xp")
+                        .HasColumnType("integer")
+                        .HasColumnName("xp");
+
+                    b.HasKey("Id")
+                        .HasName("pk_clubs");
+
+                    b.HasIndex("Name")
+                        .IsUnique()
+                        .HasDatabaseName("ix_clubs_name");
+
+                    b.HasIndex("OwnerId")
+                        .IsUnique()
+                        .HasDatabaseName("ix_clubs_ownerid");
+
+                    b.ToTable("clubs", (string)null);
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.CommandAlias", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("integer")
+                        .HasColumnName("id");
+
+                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
+
+                    b.Property<DateTime?>("DateAdded")
+                        .HasColumnType("timestamp without time zone")
+                        .HasColumnName("dateadded");
+
+                    b.Property<int?>("GuildConfigId")
+                        .HasColumnType("integer")
+                        .HasColumnName("guildconfigid");
+
+                    b.Property<string>("Mapping")
+                        .HasColumnType("text")
+                        .HasColumnName("mapping");
+
+                    b.Property<string>("Trigger")
+                        .HasColumnType("text")
+                        .HasColumnName("trigger");
+
+                    b.HasKey("Id")
+                        .HasName("pk_commandalias");
+
+                    b.HasIndex("GuildConfigId")
+                        .HasDatabaseName("ix_commandalias_guildconfigid");
+
+                    b.ToTable("commandalias", (string)null);
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.CommandCooldown", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("integer")
+                        .HasColumnName("id");
+
+                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
+
+                    b.Property<string>("CommandName")
+                        .HasColumnType("text")
+                        .HasColumnName("commandname");
+
+                    b.Property<DateTime?>("DateAdded")
+                        .HasColumnType("timestamp without time zone")
+                        .HasColumnName("dateadded");
+
+                    b.Property<int?>("GuildConfigId")
+                        .HasColumnType("integer")
+                        .HasColumnName("guildconfigid");
+
+                    b.Property<int>("Seconds")
+                        .HasColumnType("integer")
+                        .HasColumnName("seconds");
+
+                    b.HasKey("Id")
+                        .HasName("pk_commandcooldown");
+
+                    b.HasIndex("GuildConfigId")
+                        .HasDatabaseName("ix_commandcooldown_guildconfigid");
+
+                    b.ToTable("commandcooldown", (string)null);
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.CurrencyTransaction", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("integer")
+                        .HasColumnName("id");
+
+                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
+
+                    b.Property<long>("Amount")
+                        .HasColumnType("bigint")
+                        .HasColumnName("amount");
+
+                    b.Property<DateTime?>("DateAdded")
+                        .HasColumnType("timestamp without time zone")
+                        .HasColumnName("dateadded");
+
+                    b.Property<string>("Extra")
+                        .IsRequired()
+                        .HasColumnType("text")
+                        .HasColumnName("extra");
+
+                    b.Property<string>("Note")
+                        .HasColumnType("text")
+                        .HasColumnName("note");
+
+                    b.Property<decimal?>("OtherId")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("numeric(20,0)")
+                        .HasColumnName("otherid")
+                        .HasDefaultValueSql("NULL");
+
+                    b.Property<string>("Type")
+                        .IsRequired()
+                        .HasColumnType("text")
+                        .HasColumnName("type");
+
+                    b.Property<decimal>("UserId")
+                        .HasColumnType("numeric(20,0)")
+                        .HasColumnName("userid");
+
+                    b.HasKey("Id")
+                        .HasName("pk_currencytransactions");
+
+                    b.HasIndex("UserId")
+                        .HasDatabaseName("ix_currencytransactions_userid");
+
+                    b.ToTable("currencytransactions", (string)null);
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.DelMsgOnCmdChannel", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("integer")
+                        .HasColumnName("id");
+
+                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
+
+                    b.Property<decimal>("ChannelId")
+                        .HasColumnType("numeric(20,0)")
+                        .HasColumnName("channelid");
+
+                    b.Property<DateTime?>("DateAdded")
+                        .HasColumnType("timestamp without time zone")
+                        .HasColumnName("dateadded");
+
+                    b.Property<int>("GuildConfigId")
+                        .HasColumnType("integer")
+                        .HasColumnName("guildconfigid");
+
+                    b.Property<bool>("State")
+                        .HasColumnType("boolean")
+                        .HasColumnName("state");
+
+                    b.HasKey("Id")
+                        .HasName("pk_delmsgoncmdchannel");
+
+                    b.HasIndex("GuildConfigId")
+                        .HasDatabaseName("ix_delmsgoncmdchannel_guildconfigid");
+
+                    b.ToTable("delmsgoncmdchannel", (string)null);
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.DiscordPermOverride", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("integer")
+                        .HasColumnName("id");
+
+                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
+
+                    b.Property<string>("Command")
+                        .HasColumnType("text")
+                        .HasColumnName("command");
+
+                    b.Property<DateTime?>("DateAdded")
+                        .HasColumnType("timestamp without time zone")
+                        .HasColumnName("dateadded");
+
+                    b.Property<decimal?>("GuildId")
+                        .HasColumnType("numeric(20,0)")
+                        .HasColumnName("guildid");
+
+                    b.Property<decimal>("Perm")
+                        .HasColumnType("numeric(20,0)")
+                        .HasColumnName("perm");
+
+                    b.HasKey("Id")
+                        .HasName("pk_discordpermoverrides");
+
+                    b.HasIndex("GuildId", "Command")
+                        .IsUnique()
+                        .HasDatabaseName("ix_discordpermoverrides_guildid_command");
+
+                    b.ToTable("discordpermoverrides", (string)null);
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.DiscordUser", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("integer")
+                        .HasColumnName("id");
+
+                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
+
+                    b.Property<string>("AvatarId")
+                        .HasColumnType("text")
+                        .HasColumnName("avatarid");
+
+                    b.Property<int?>("ClubId")
+                        .HasColumnType("integer")
+                        .HasColumnName("clubid");
+
+                    b.Property<long>("CurrencyAmount")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("bigint")
+                        .HasDefaultValue(0L)
+                        .HasColumnName("currencyamount");
+
+                    b.Property<DateTime?>("DateAdded")
+                        .HasColumnType("timestamp without time zone")
+                        .HasColumnName("dateadded");
+
+                    b.Property<bool>("IsClubAdmin")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("boolean")
+                        .HasDefaultValue(false)
+                        .HasColumnName("isclubadmin");
+
+                    b.Property<int>("NotifyOnLevelUp")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("integer")
+                        .HasDefaultValue(0)
+                        .HasColumnName("notifyonlevelup");
+
+                    b.Property<long>("TotalXp")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("bigint")
+                        .HasDefaultValue(0L)
+                        .HasColumnName("totalxp");
+
+                    b.Property<decimal>("UserId")
+                        .HasColumnType("numeric(20,0)")
+                        .HasColumnName("userid");
+
+                    b.Property<string>("Username")
+                        .HasColumnType("text")
+                        .HasColumnName("username");
+
+                    b.HasKey("Id")
+                        .HasName("pk_discorduser");
+
+                    b.HasAlternateKey("UserId")
+                        .HasName("ak_discorduser_userid");
+
+                    b.HasIndex("ClubId")
+                        .HasDatabaseName("ix_discorduser_clubid");
+
+                    b.HasIndex("CurrencyAmount")
+                        .HasDatabaseName("ix_discorduser_currencyamount");
+
+                    b.HasIndex("TotalXp")
+                        .HasDatabaseName("ix_discorduser_totalxp");
+
+                    b.HasIndex("UserId")
+                        .HasDatabaseName("ix_discorduser_userid");
+
+                    b.HasIndex("Username")
+                        .HasDatabaseName("ix_discorduser_username");
+
+                    b.ToTable("discorduser", (string)null);
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.EllieExpression", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("integer")
+                        .HasColumnName("id");
+
+                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
+
+                    b.Property<bool>("AllowTarget")
+                        .HasColumnType("boolean")
+                        .HasColumnName("allowtarget");
+
+                    b.Property<bool>("AutoDeleteTrigger")
+                        .HasColumnType("boolean")
+                        .HasColumnName("autodeletetrigger");
+
+                    b.Property<bool>("ContainsAnywhere")
+                        .HasColumnType("boolean")
+                        .HasColumnName("containsanywhere");
+
+                    b.Property<DateTime?>("DateAdded")
+                        .HasColumnType("timestamp without time zone")
+                        .HasColumnName("dateadded");
+
+                    b.Property<bool>("DmResponse")
+                        .HasColumnType("boolean")
+                        .HasColumnName("dmresponse");
+
+                    b.Property<decimal?>("GuildId")
+                        .HasColumnType("numeric(20,0)")
+                        .HasColumnName("guildid");
+
+                    b.Property<string>("Reactions")
+                        .HasColumnType("text")
+                        .HasColumnName("reactions");
+
+                    b.Property<string>("Response")
+                        .HasColumnType("text")
+                        .HasColumnName("response");
+
+                    b.Property<string>("Trigger")
+                        .HasColumnType("text")
+                        .HasColumnName("trigger");
+
+                    b.HasKey("Id")
+                        .HasName("pk_expressions");
+
+                    b.ToTable("expressions", (string)null);
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.ExcludedItem", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("integer")
+                        .HasColumnName("id");
+
+                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
+
+                    b.Property<DateTime?>("DateAdded")
+                        .HasColumnType("timestamp without time zone")
+                        .HasColumnName("dateadded");
+
+                    b.Property<decimal>("ItemId")
+                        .HasColumnType("numeric(20,0)")
+                        .HasColumnName("itemid");
+
+                    b.Property<int>("ItemType")
+                        .HasColumnType("integer")
+                        .HasColumnName("itemtype");
+
+                    b.Property<int?>("XpSettingsId")
+                        .HasColumnType("integer")
+                        .HasColumnName("xpsettingsid");
+
+                    b.HasKey("Id")
+                        .HasName("pk_excludeditem");
+
+                    b.HasIndex("XpSettingsId")
+                        .HasDatabaseName("ix_excludeditem_xpsettingsid");
+
+                    b.ToTable("excludeditem", (string)null);
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.FeedSub", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("integer")
+                        .HasColumnName("id");
+
+                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
+
+                    b.Property<decimal>("ChannelId")
+                        .HasColumnType("numeric(20,0)")
+                        .HasColumnName("channelid");
+
+                    b.Property<DateTime?>("DateAdded")
+                        .HasColumnType("timestamp without time zone")
+                        .HasColumnName("dateadded");
+
+                    b.Property<int>("GuildConfigId")
+                        .HasColumnType("integer")
+                        .HasColumnName("guildconfigid");
+
+                    b.Property<string>("Message")
+                        .HasColumnType("text")
+                        .HasColumnName("message");
+
+                    b.Property<string>("Url")
+                        .IsRequired()
+                        .HasColumnType("text")
+                        .HasColumnName("url");
+
+                    b.HasKey("Id")
+                        .HasName("pk_feedsub");
+
+                    b.HasAlternateKey("GuildConfigId", "Url")
+                        .HasName("ak_feedsub_guildconfigid_url");
+
+                    b.ToTable("feedsub", (string)null);
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.FilterChannelId", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("integer")
+                        .HasColumnName("id");
+
+                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
+
+                    b.Property<decimal>("ChannelId")
+                        .HasColumnType("numeric(20,0)")
+                        .HasColumnName("channelid");
+
+                    b.Property<DateTime?>("DateAdded")
+                        .HasColumnType("timestamp without time zone")
+                        .HasColumnName("dateadded");
+
+                    b.Property<int?>("GuildConfigId")
+                        .HasColumnType("integer")
+                        .HasColumnName("guildconfigid");
+
+                    b.HasKey("Id")
+                        .HasName("pk_filterchannelid");
+
+                    b.HasIndex("GuildConfigId")
+                        .HasDatabaseName("ix_filterchannelid_guildconfigid");
+
+                    b.ToTable("filterchannelid", (string)null);
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.FilterLinksChannelId", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("integer")
+                        .HasColumnName("id");
+
+                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
+
+                    b.Property<decimal>("ChannelId")
+                        .HasColumnType("numeric(20,0)")
+                        .HasColumnName("channelid");
+
+                    b.Property<DateTime?>("DateAdded")
+                        .HasColumnType("timestamp without time zone")
+                        .HasColumnName("dateadded");
+
+                    b.Property<int?>("GuildConfigId")
+                        .HasColumnType("integer")
+                        .HasColumnName("guildconfigid");
+
+                    b.HasKey("Id")
+                        .HasName("pk_filterlinkschannelid");
+
+                    b.HasIndex("GuildConfigId")
+                        .HasDatabaseName("ix_filterlinkschannelid_guildconfigid");
+
+                    b.ToTable("filterlinkschannelid", (string)null);
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.FilterWordsChannelId", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("integer")
+                        .HasColumnName("id");
+
+                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
+
+                    b.Property<decimal>("ChannelId")
+                        .HasColumnType("numeric(20,0)")
+                        .HasColumnName("channelid");
+
+                    b.Property<DateTime?>("DateAdded")
+                        .HasColumnType("timestamp without time zone")
+                        .HasColumnName("dateadded");
+
+                    b.Property<int?>("GuildConfigId")
+                        .HasColumnType("integer")
+                        .HasColumnName("guildconfigid");
+
+                    b.HasKey("Id")
+                        .HasName("pk_filterwordschannelid");
+
+                    b.HasIndex("GuildConfigId")
+                        .HasDatabaseName("ix_filterwordschannelid_guildconfigid");
+
+                    b.ToTable("filterwordschannelid", (string)null);
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.FilteredWord", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("integer")
+                        .HasColumnName("id");
+
+                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
+
+                    b.Property<DateTime?>("DateAdded")
+                        .HasColumnType("timestamp without time zone")
+                        .HasColumnName("dateadded");
+
+                    b.Property<int?>("GuildConfigId")
+                        .HasColumnType("integer")
+                        .HasColumnName("guildconfigid");
+
+                    b.Property<string>("Word")
+                        .HasColumnType("text")
+                        .HasColumnName("word");
+
+                    b.HasKey("Id")
+                        .HasName("pk_filteredword");
+
+                    b.HasIndex("GuildConfigId")
+                        .HasDatabaseName("ix_filteredword_guildconfigid");
+
+                    b.ToTable("filteredword", (string)null);
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.FlagTranslateChannel", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("integer")
+                        .HasColumnName("id");
+
+                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
+
+                    b.Property<decimal>("ChannelId")
+                        .HasColumnType("numeric(20,0)")
+                        .HasColumnName("channelid");
+
+                    b.Property<DateTime?>("DateAdded")
+                        .HasColumnType("timestamp without time zone")
+                        .HasColumnName("dateadded");
+
+                    b.Property<decimal>("GuildId")
+                        .HasColumnType("numeric(20,0)")
+                        .HasColumnName("guildid");
+
+                    b.HasKey("Id")
+                        .HasName("pk_flagtranslatechannel");
+
+                    b.HasIndex("GuildId", "ChannelId")
+                        .IsUnique()
+                        .HasDatabaseName("ix_flagtranslatechannel_guildid_channelid");
+
+                    b.ToTable("flagtranslatechannel", (string)null);
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.FollowedStream", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("integer")
+                        .HasColumnName("id");
+
+                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
+
+                    b.Property<decimal>("ChannelId")
+                        .HasColumnType("numeric(20,0)")
+                        .HasColumnName("channelid");
+
+                    b.Property<DateTime?>("DateAdded")
+                        .HasColumnType("timestamp without time zone")
+                        .HasColumnName("dateadded");
+
+                    b.Property<int?>("GuildConfigId")
+                        .HasColumnType("integer")
+                        .HasColumnName("guildconfigid");
+
+                    b.Property<decimal>("GuildId")
+                        .HasColumnType("numeric(20,0)")
+                        .HasColumnName("guildid");
+
+                    b.Property<string>("Message")
+                        .HasColumnType("text")
+                        .HasColumnName("message");
+
+                    b.Property<int>("Type")
+                        .HasColumnType("integer")
+                        .HasColumnName("type");
+
+                    b.Property<string>("Username")
+                        .HasColumnType("text")
+                        .HasColumnName("username");
+
+                    b.HasKey("Id")
+                        .HasName("pk_followedstream");
+
+                    b.HasIndex("GuildConfigId")
+                        .HasDatabaseName("ix_followedstream_guildconfigid");
+
+                    b.ToTable("followedstream", (string)null);
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.GCChannelId", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("integer")
+                        .HasColumnName("id");
+
+                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
+
+                    b.Property<decimal>("ChannelId")
+                        .HasColumnType("numeric(20,0)")
+                        .HasColumnName("channelid");
+
+                    b.Property<DateTime?>("DateAdded")
+                        .HasColumnType("timestamp without time zone")
+                        .HasColumnName("dateadded");
+
+                    b.Property<int?>("GuildConfigId")
+                        .HasColumnType("integer")
+                        .HasColumnName("guildconfigid");
+
+                    b.HasKey("Id")
+                        .HasName("pk_gcchannelid");
+
+                    b.HasIndex("GuildConfigId")
+                        .HasDatabaseName("ix_gcchannelid_guildconfigid");
+
+                    b.ToTable("gcchannelid", (string)null);
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.GamblingStats", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("integer")
+                        .HasColumnName("id");
+
+                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
+
+                    b.Property<decimal>("Bet")
+                        .HasColumnType("numeric")
+                        .HasColumnName("bet");
+
+                    b.Property<DateTime?>("DateAdded")
+                        .HasColumnType("timestamp without time zone")
+                        .HasColumnName("dateadded");
+
+                    b.Property<string>("Feature")
+                        .HasColumnType("text")
+                        .HasColumnName("feature");
+
+                    b.Property<decimal>("PaidOut")
+                        .HasColumnType("numeric")
+                        .HasColumnName("paidout");
+
+                    b.HasKey("Id")
+                        .HasName("pk_gamblingstats");
+
+                    b.HasIndex("Feature")
+                        .IsUnique()
+                        .HasDatabaseName("ix_gamblingstats_feature");
+
+                    b.ToTable("gamblingstats", (string)null);
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.GiveawayModel", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("integer")
+                        .HasColumnName("id");
+
+                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
+
+                    b.Property<decimal>("ChannelId")
+                        .HasColumnType("numeric(20,0)")
+                        .HasColumnName("channelid");
+
+                    b.Property<DateTime>("EndsAt")
+                        .HasColumnType("timestamp without time zone")
+                        .HasColumnName("endsat");
+
+                    b.Property<decimal>("GuildId")
+                        .HasColumnType("numeric(20,0)")
+                        .HasColumnName("guildid");
+
+                    b.Property<string>("Message")
+                        .HasColumnType("text")
+                        .HasColumnName("message");
+
+                    b.Property<decimal>("MessageId")
+                        .HasColumnType("numeric(20,0)")
+                        .HasColumnName("messageid");
+
+                    b.HasKey("Id")
+                        .HasName("pk_giveawaymodel");
+
+                    b.ToTable("giveawaymodel", (string)null);
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.GiveawayUser", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("integer")
+                        .HasColumnName("id");
+
+                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
+
+                    b.Property<int>("GiveawayId")
+                        .HasColumnType("integer")
+                        .HasColumnName("giveawayid");
+
+                    b.Property<string>("Name")
+                        .HasColumnType("text")
+                        .HasColumnName("name");
+
+                    b.Property<decimal>("UserId")
+                        .HasColumnType("numeric(20,0)")
+                        .HasColumnName("userid");
+
+                    b.HasKey("Id")
+                        .HasName("pk_giveawayuser");
+
+                    b.HasIndex("GiveawayId", "UserId")
+                        .IsUnique()
+                        .HasDatabaseName("ix_giveawayuser_giveawayid_userid");
+
+                    b.ToTable("giveawayuser", (string)null);
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.GuildColors", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("integer")
+                        .HasColumnName("id");
+
+                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
+
+                    b.Property<string>("ErrorColor")
+                        .HasMaxLength(9)
+                        .HasColumnType("character varying(9)")
+                        .HasColumnName("errorcolor");
+
+                    b.Property<decimal>("GuildId")
+                        .HasColumnType("numeric(20,0)")
+                        .HasColumnName("guildid");
+
+                    b.Property<string>("OkColor")
+                        .HasMaxLength(9)
+                        .HasColumnType("character varying(9)")
+                        .HasColumnName("okcolor");
+
+                    b.Property<string>("PendingColor")
+                        .HasMaxLength(9)
+                        .HasColumnType("character varying(9)")
+                        .HasColumnName("pendingcolor");
+
+                    b.HasKey("Id")
+                        .HasName("pk_guildcolors");
+
+                    b.HasIndex("GuildId")
+                        .IsUnique()
+                        .HasDatabaseName("ix_guildcolors_guildid");
+
+                    b.ToTable("guildcolors", (string)null);
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.GuildConfig", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("integer")
+                        .HasColumnName("id");
+
+                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
+
+                    b.Property<string>("AutoAssignRoleIds")
+                        .HasColumnType("text")
+                        .HasColumnName("autoassignroleids");
+
+                    b.Property<bool>("AutoDeleteSelfAssignedRoleMessages")
+                        .HasColumnType("boolean")
+                        .HasColumnName("autodeleteselfassignedrolemessages");
+
+                    b.Property<bool>("CleverbotEnabled")
+                        .HasColumnType("boolean")
+                        .HasColumnName("cleverbotenabled");
+
+                    b.Property<DateTime?>("DateAdded")
+                        .HasColumnType("timestamp without time zone")
+                        .HasColumnName("dateadded");
+
+                    b.Property<bool>("DeleteMessageOnCommand")
+                        .HasColumnType("boolean")
+                        .HasColumnName("deletemessageoncommand");
+
+                    b.Property<bool>("DeleteStreamOnlineMessage")
+                        .HasColumnType("boolean")
+                        .HasColumnName("deletestreamonlinemessage");
+
+                    b.Property<bool>("DisableGlobalExpressions")
+                        .HasColumnType("boolean")
+                        .HasColumnName("disableglobalexpressions");
+
+                    b.Property<bool>("ExclusiveSelfAssignedRoles")
+                        .HasColumnType("boolean")
+                        .HasColumnName("exclusiveselfassignedroles");
+
+                    b.Property<bool>("FilterInvites")
+                        .HasColumnType("boolean")
+                        .HasColumnName("filterinvites");
+
+                    b.Property<bool>("FilterLinks")
+                        .HasColumnType("boolean")
+                        .HasColumnName("filterlinks");
+
+                    b.Property<bool>("FilterWords")
+                        .HasColumnType("boolean")
+                        .HasColumnName("filterwords");
+
+                    b.Property<decimal?>("GameVoiceChannel")
+                        .HasColumnType("numeric(20,0)")
+                        .HasColumnName("gamevoicechannel");
+
+                    b.Property<decimal>("GuildId")
+                        .HasColumnType("numeric(20,0)")
+                        .HasColumnName("guildid");
+
+                    b.Property<string>("Locale")
+                        .HasColumnType("text")
+                        .HasColumnName("locale");
+
+                    b.Property<string>("MuteRoleName")
+                        .HasColumnType("text")
+                        .HasColumnName("muterolename");
+
+                    b.Property<bool>("NotifyStreamOffline")
+                        .HasColumnType("boolean")
+                        .HasColumnName("notifystreamoffline");
+
+                    b.Property<string>("PermissionRole")
+                        .HasColumnType("text")
+                        .HasColumnName("permissionrole");
+
+                    b.Property<string>("Prefix")
+                        .HasColumnType("text")
+                        .HasColumnName("prefix");
+
+                    b.Property<bool>("StickyRoles")
+                        .HasColumnType("boolean")
+                        .HasColumnName("stickyroles");
+
+                    b.Property<string>("TimeZoneId")
+                        .HasColumnType("text")
+                        .HasColumnName("timezoneid");
+
+                    b.Property<bool>("VerboseErrors")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("boolean")
+                        .HasDefaultValue(true)
+                        .HasColumnName("verboseerrors");
+
+                    b.Property<bool>("VerbosePermissions")
+                        .HasColumnType("boolean")
+                        .HasColumnName("verbosepermissions");
+
+                    b.Property<int>("WarnExpireAction")
+                        .HasColumnType("integer")
+                        .HasColumnName("warnexpireaction");
+
+                    b.Property<int>("WarnExpireHours")
+                        .HasColumnType("integer")
+                        .HasColumnName("warnexpirehours");
+
+                    b.Property<bool>("WarningsInitialized")
+                        .HasColumnType("boolean")
+                        .HasColumnName("warningsinitialized");
+
+                    b.HasKey("Id")
+                        .HasName("pk_guildconfigs");
+
+                    b.HasIndex("GuildId")
+                        .IsUnique()
+                        .HasDatabaseName("ix_guildconfigs_guildid");
+
+                    b.HasIndex("WarnExpireHours")
+                        .HasDatabaseName("ix_guildconfigs_warnexpirehours");
+
+                    b.ToTable("guildconfigs", (string)null);
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.HoneypotChannel", b =>
+                {
+                    b.Property<decimal>("GuildId")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("numeric(20,0)")
+                        .HasColumnName("guildid");
+
+                    b.Property<decimal>("ChannelId")
+                        .HasColumnType("numeric(20,0)")
+                        .HasColumnName("channelid");
+
+                    b.HasKey("GuildId")
+                        .HasName("pk_honeypotchannels");
+
+                    b.ToTable("honeypotchannels", (string)null);
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.IgnoredLogItem", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("integer")
+                        .HasColumnName("id");
+
+                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
+
+                    b.Property<DateTime?>("DateAdded")
+                        .HasColumnType("timestamp without time zone")
+                        .HasColumnName("dateadded");
+
+                    b.Property<int>("ItemType")
+                        .HasColumnType("integer")
+                        .HasColumnName("itemtype");
+
+                    b.Property<decimal>("LogItemId")
+                        .HasColumnType("numeric(20,0)")
+                        .HasColumnName("logitemid");
+
+                    b.Property<int>("LogSettingId")
+                        .HasColumnType("integer")
+                        .HasColumnName("logsettingid");
+
+                    b.HasKey("Id")
+                        .HasName("pk_ignoredlogchannels");
+
+                    b.HasIndex("LogSettingId", "LogItemId", "ItemType")
+                        .IsUnique()
+                        .HasDatabaseName("ix_ignoredlogchannels_logsettingid_logitemid_itemtype");
+
+                    b.ToTable("ignoredlogchannels", (string)null);
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.ImageOnlyChannel", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("integer")
+                        .HasColumnName("id");
+
+                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
+
+                    b.Property<decimal>("ChannelId")
+                        .HasColumnType("numeric(20,0)")
+                        .HasColumnName("channelid");
+
+                    b.Property<DateTime?>("DateAdded")
+                        .HasColumnType("timestamp without time zone")
+                        .HasColumnName("dateadded");
+
+                    b.Property<decimal>("GuildId")
+                        .HasColumnType("numeric(20,0)")
+                        .HasColumnName("guildid");
+
+                    b.Property<int>("Type")
+                        .HasColumnType("integer")
+                        .HasColumnName("type");
+
+                    b.HasKey("Id")
+                        .HasName("pk_imageonlychannels");
+
+                    b.HasIndex("ChannelId")
+                        .IsUnique()
+                        .HasDatabaseName("ix_imageonlychannels_channelid");
+
+                    b.ToTable("imageonlychannels", (string)null);
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.LogSetting", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("integer")
+                        .HasColumnName("id");
+
+                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
+
+                    b.Property<decimal?>("ChannelCreatedId")
+                        .HasColumnType("numeric(20,0)")
+                        .HasColumnName("channelcreatedid");
+
+                    b.Property<decimal?>("ChannelDestroyedId")
+                        .HasColumnType("numeric(20,0)")
+                        .HasColumnName("channeldestroyedid");
+
+                    b.Property<decimal?>("ChannelUpdatedId")
+                        .HasColumnType("numeric(20,0)")
+                        .HasColumnName("channelupdatedid");
+
+                    b.Property<DateTime?>("DateAdded")
+                        .HasColumnType("timestamp without time zone")
+                        .HasColumnName("dateadded");
+
+                    b.Property<decimal>("GuildId")
+                        .HasColumnType("numeric(20,0)")
+                        .HasColumnName("guildid");
+
+                    b.Property<decimal?>("LogOtherId")
+                        .HasColumnType("numeric(20,0)")
+                        .HasColumnName("logotherid");
+
+                    b.Property<decimal?>("LogUserPresenceId")
+                        .HasColumnType("numeric(20,0)")
+                        .HasColumnName("loguserpresenceid");
+
+                    b.Property<decimal?>("LogVoicePresenceId")
+                        .HasColumnType("numeric(20,0)")
+                        .HasColumnName("logvoicepresenceid");
+
+                    b.Property<decimal?>("LogVoicePresenceTTSId")
+                        .HasColumnType("numeric(20,0)")
+                        .HasColumnName("logvoicepresencettsid");
+
+                    b.Property<decimal?>("LogWarnsId")
+                        .HasColumnType("numeric(20,0)")
+                        .HasColumnName("logwarnsid");
+
+                    b.Property<decimal?>("MessageDeletedId")
+                        .HasColumnType("numeric(20,0)")
+                        .HasColumnName("messagedeletedid");
+
+                    b.Property<decimal?>("MessageUpdatedId")
+                        .HasColumnType("numeric(20,0)")
+                        .HasColumnName("messageupdatedid");
+
+                    b.Property<decimal?>("ThreadCreatedId")
+                        .HasColumnType("numeric(20,0)")
+                        .HasColumnName("threadcreatedid");
+
+                    b.Property<decimal?>("ThreadDeletedId")
+                        .HasColumnType("numeric(20,0)")
+                        .HasColumnName("threaddeletedid");
+
+                    b.Property<decimal?>("UserBannedId")
+                        .HasColumnType("numeric(20,0)")
+                        .HasColumnName("userbannedid");
+
+                    b.Property<decimal?>("UserJoinedId")
+                        .HasColumnType("numeric(20,0)")
+                        .HasColumnName("userjoinedid");
+
+                    b.Property<decimal?>("UserLeftId")
+                        .HasColumnType("numeric(20,0)")
+                        .HasColumnName("userleftid");
+
+                    b.Property<decimal?>("UserMutedId")
+                        .HasColumnType("numeric(20,0)")
+                        .HasColumnName("usermutedid");
+
+                    b.Property<decimal?>("UserUnbannedId")
+                        .HasColumnType("numeric(20,0)")
+                        .HasColumnName("userunbannedid");
+
+                    b.Property<decimal?>("UserUpdatedId")
+                        .HasColumnType("numeric(20,0)")
+                        .HasColumnName("userupdatedid");
+
+                    b.HasKey("Id")
+                        .HasName("pk_logsettings");
+
+                    b.HasIndex("GuildId")
+                        .IsUnique()
+                        .HasDatabaseName("ix_logsettings_guildid");
+
+                    b.ToTable("logsettings", (string)null);
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.MusicPlayerSettings", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("integer")
+                        .HasColumnName("id");
+
+                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
+
+                    b.Property<bool>("AutoDisconnect")
+                        .HasColumnType("boolean")
+                        .HasColumnName("autodisconnect");
+
+                    b.Property<bool>("AutoPlay")
+                        .HasColumnType("boolean")
+                        .HasColumnName("autoplay");
+
+                    b.Property<decimal>("GuildId")
+                        .HasColumnType("numeric(20,0)")
+                        .HasColumnName("guildid");
+
+                    b.Property<decimal?>("MusicChannelId")
+                        .HasColumnType("numeric(20,0)")
+                        .HasColumnName("musicchannelid");
+
+                    b.Property<int>("PlayerRepeat")
+                        .HasColumnType("integer")
+                        .HasColumnName("playerrepeat");
+
+                    b.Property<int>("QualityPreset")
+                        .HasColumnType("integer")
+                        .HasColumnName("qualitypreset");
+
+                    b.Property<int>("Volume")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("integer")
+                        .HasDefaultValue(100)
+                        .HasColumnName("volume");
+
+                    b.HasKey("Id")
+                        .HasName("pk_musicplayersettings");
+
+                    b.HasIndex("GuildId")
+                        .IsUnique()
+                        .HasDatabaseName("ix_musicplayersettings_guildid");
+
+                    b.ToTable("musicplayersettings", (string)null);
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.MusicPlaylist", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("integer")
+                        .HasColumnName("id");
+
+                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
+
+                    b.Property<string>("Author")
+                        .HasColumnType("text")
+                        .HasColumnName("author");
+
+                    b.Property<decimal>("AuthorId")
+                        .HasColumnType("numeric(20,0)")
+                        .HasColumnName("authorid");
+
+                    b.Property<DateTime?>("DateAdded")
+                        .HasColumnType("timestamp without time zone")
+                        .HasColumnName("dateadded");
+
+                    b.Property<string>("Name")
+                        .HasColumnType("text")
+                        .HasColumnName("name");
+
+                    b.HasKey("Id")
+                        .HasName("pk_musicplaylists");
+
+                    b.ToTable("musicplaylists", (string)null);
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.MutedUserId", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("integer")
+                        .HasColumnName("id");
+
+                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
+
+                    b.Property<DateTime?>("DateAdded")
+                        .HasColumnType("timestamp without time zone")
+                        .HasColumnName("dateadded");
+
+                    b.Property<int?>("GuildConfigId")
+                        .HasColumnType("integer")
+                        .HasColumnName("guildconfigid");
+
+                    b.Property<decimal>("UserId")
+                        .HasColumnType("numeric(20,0)")
+                        .HasColumnName("userid");
+
+                    b.HasKey("Id")
+                        .HasName("pk_muteduserid");
+
+                    b.HasIndex("GuildConfigId")
+                        .HasDatabaseName("ix_muteduserid_guildconfigid");
+
+                    b.ToTable("muteduserid", (string)null);
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.NCPixel", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("integer")
+                        .HasColumnName("id");
+
+                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
+
+                    b.Property<long>("Color")
+                        .HasColumnType("bigint")
+                        .HasColumnName("color");
+
+                    b.Property<decimal>("OwnerId")
+                        .HasColumnType("numeric(20,0)")
+                        .HasColumnName("ownerid");
+
+                    b.Property<int>("Position")
+                        .HasColumnType("integer")
+                        .HasColumnName("position");
+
+                    b.Property<long>("Price")
+                        .HasColumnType("bigint")
+                        .HasColumnName("price");
+
+                    b.Property<string>("Text")
+                        .IsRequired()
+                        .HasMaxLength(256)
+                        .HasColumnType("character varying(256)")
+                        .HasColumnName("text");
+
+                    b.HasKey("Id")
+                        .HasName("pk_ncpixel");
+
+                    b.HasAlternateKey("Position")
+                        .HasName("ak_ncpixel_position");
+
+                    b.HasIndex("OwnerId")
+                        .HasDatabaseName("ix_ncpixel_ownerid");
+
+                    b.ToTable("ncpixel", (string)null);
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.Notify", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("integer")
+                        .HasColumnName("id");
+
+                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
+
+                    b.Property<decimal>("ChannelId")
+                        .HasColumnType("numeric(20,0)")
+                        .HasColumnName("channelid");
+
+                    b.Property<int>("Event")
+                        .HasColumnType("integer")
+                        .HasColumnName("event");
+
+                    b.Property<decimal>("GuildId")
+                        .HasColumnType("numeric(20,0)")
+                        .HasColumnName("guildid");
+
+                    b.Property<string>("Message")
+                        .IsRequired()
+                        .HasMaxLength(10000)
+                        .HasColumnType("character varying(10000)")
+                        .HasColumnName("message");
+
+                    b.HasKey("Id")
+                        .HasName("pk_notify");
+
+                    b.HasAlternateKey("GuildId", "Event")
+                        .HasName("ak_notify_guildid_event");
+
+                    b.ToTable("notify", (string)null);
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.PatronUser", b =>
+                {
+                    b.Property<decimal>("UserId")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("numeric(20,0)")
+                        .HasColumnName("userid");
+
+                    b.Property<int>("AmountCents")
+                        .HasColumnType("integer")
+                        .HasColumnName("amountcents");
+
+                    b.Property<DateTime>("LastCharge")
+                        .HasColumnType("timestamp without time zone")
+                        .HasColumnName("lastcharge");
+
+                    b.Property<string>("UniquePlatformUserId")
+                        .HasColumnType("text")
+                        .HasColumnName("uniqueplatformuserid");
+
+                    b.Property<DateTime>("ValidThru")
+                        .HasColumnType("timestamp without time zone")
+                        .HasColumnName("validthru");
+
+                    b.HasKey("UserId")
+                        .HasName("pk_patrons");
+
+                    b.HasIndex("UniquePlatformUserId")
+                        .IsUnique()
+                        .HasDatabaseName("ix_patrons_uniqueplatformuserid");
+
+                    b.ToTable("patrons", (string)null);
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.Permissionv2", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("integer")
+                        .HasColumnName("id");
+
+                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
+
+                    b.Property<DateTime?>("DateAdded")
+                        .HasColumnType("timestamp without time zone")
+                        .HasColumnName("dateadded");
+
+                    b.Property<int?>("GuildConfigId")
+                        .HasColumnType("integer")
+                        .HasColumnName("guildconfigid");
+
+                    b.Property<int>("Index")
+                        .HasColumnType("integer")
+                        .HasColumnName("index");
+
+                    b.Property<bool>("IsCustomCommand")
+                        .HasColumnType("boolean")
+                        .HasColumnName("iscustomcommand");
+
+                    b.Property<int>("PrimaryTarget")
+                        .HasColumnType("integer")
+                        .HasColumnName("primarytarget");
+
+                    b.Property<decimal>("PrimaryTargetId")
+                        .HasColumnType("numeric(20,0)")
+                        .HasColumnName("primarytargetid");
+
+                    b.Property<int>("SecondaryTarget")
+                        .HasColumnType("integer")
+                        .HasColumnName("secondarytarget");
+
+                    b.Property<string>("SecondaryTargetName")
+                        .HasColumnType("text")
+                        .HasColumnName("secondarytargetname");
+
+                    b.Property<bool>("State")
+                        .HasColumnType("boolean")
+                        .HasColumnName("state");
+
+                    b.HasKey("Id")
+                        .HasName("pk_permissions");
+
+                    b.HasIndex("GuildConfigId")
+                        .HasDatabaseName("ix_permissions_guildconfigid");
+
+                    b.ToTable("permissions", (string)null);
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.PlantedCurrency", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("integer")
+                        .HasColumnName("id");
+
+                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
+
+                    b.Property<long>("Amount")
+                        .HasColumnType("bigint")
+                        .HasColumnName("amount");
+
+                    b.Property<decimal>("ChannelId")
+                        .HasColumnType("numeric(20,0)")
+                        .HasColumnName("channelid");
+
+                    b.Property<DateTime?>("DateAdded")
+                        .HasColumnType("timestamp without time zone")
+                        .HasColumnName("dateadded");
+
+                    b.Property<decimal>("GuildId")
+                        .HasColumnType("numeric(20,0)")
+                        .HasColumnName("guildid");
+
+                    b.Property<decimal>("MessageId")
+                        .HasColumnType("numeric(20,0)")
+                        .HasColumnName("messageid");
+
+                    b.Property<string>("Password")
+                        .HasColumnType("text")
+                        .HasColumnName("password");
+
+                    b.Property<decimal>("UserId")
+                        .HasColumnType("numeric(20,0)")
+                        .HasColumnName("userid");
+
+                    b.HasKey("Id")
+                        .HasName("pk_plantedcurrency");
+
+                    b.HasIndex("ChannelId")
+                        .HasDatabaseName("ix_plantedcurrency_channelid");
+
+                    b.HasIndex("MessageId")
+                        .IsUnique()
+                        .HasDatabaseName("ix_plantedcurrency_messageid");
+
+                    b.ToTable("plantedcurrency", (string)null);
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.PlaylistSong", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("integer")
+                        .HasColumnName("id");
+
+                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
+
+                    b.Property<DateTime?>("DateAdded")
+                        .HasColumnType("timestamp without time zone")
+                        .HasColumnName("dateadded");
+
+                    b.Property<int?>("MusicPlaylistId")
+                        .HasColumnType("integer")
+                        .HasColumnName("musicplaylistid");
+
+                    b.Property<string>("Provider")
+                        .HasColumnType("text")
+                        .HasColumnName("provider");
+
+                    b.Property<int>("ProviderType")
+                        .HasColumnType("integer")
+                        .HasColumnName("providertype");
+
+                    b.Property<string>("Query")
+                        .HasColumnType("text")
+                        .HasColumnName("query");
+
+                    b.Property<string>("Title")
+                        .HasColumnType("text")
+                        .HasColumnName("title");
+
+                    b.Property<string>("Uri")
+                        .HasColumnType("text")
+                        .HasColumnName("uri");
+
+                    b.HasKey("Id")
+                        .HasName("pk_playlistsong");
+
+                    b.HasIndex("MusicPlaylistId")
+                        .HasDatabaseName("ix_playlistsong_musicplaylistid");
+
+                    b.ToTable("playlistsong", (string)null);
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.Quote", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("integer")
+                        .HasColumnName("id");
+
+                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
+
+                    b.Property<decimal>("AuthorId")
+                        .HasColumnType("numeric(20,0)")
+                        .HasColumnName("authorid");
+
+                    b.Property<string>("AuthorName")
+                        .IsRequired()
+                        .HasColumnType("text")
+                        .HasColumnName("authorname");
+
+                    b.Property<DateTime?>("DateAdded")
+                        .HasColumnType("timestamp without time zone")
+                        .HasColumnName("dateadded");
+
+                    b.Property<decimal>("GuildId")
+                        .HasColumnType("numeric(20,0)")
+                        .HasColumnName("guildid");
+
+                    b.Property<string>("Keyword")
+                        .IsRequired()
+                        .HasColumnType("text")
+                        .HasColumnName("keyword");
+
+                    b.Property<string>("Text")
+                        .IsRequired()
+                        .HasColumnType("text")
+                        .HasColumnName("text");
+
+                    b.HasKey("Id")
+                        .HasName("pk_quotes");
+
+                    b.HasIndex("GuildId")
+                        .HasDatabaseName("ix_quotes_guildid");
+
+                    b.HasIndex("Keyword")
+                        .HasDatabaseName("ix_quotes_keyword");
+
+                    b.ToTable("quotes", (string)null);
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.ReactionRoleV2", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("integer")
+                        .HasColumnName("id");
+
+                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
+
+                    b.Property<decimal>("ChannelId")
+                        .HasColumnType("numeric(20,0)")
+                        .HasColumnName("channelid");
+
+                    b.Property<DateTime?>("DateAdded")
+                        .HasColumnType("timestamp without time zone")
+                        .HasColumnName("dateadded");
+
+                    b.Property<string>("Emote")
+                        .HasMaxLength(100)
+                        .HasColumnType("character varying(100)")
+                        .HasColumnName("emote");
+
+                    b.Property<int>("Group")
+                        .HasColumnType("integer")
+                        .HasColumnName("group");
+
+                    b.Property<decimal>("GuildId")
+                        .HasColumnType("numeric(20,0)")
+                        .HasColumnName("guildid");
+
+                    b.Property<int>("LevelReq")
+                        .HasColumnType("integer")
+                        .HasColumnName("levelreq");
+
+                    b.Property<decimal>("MessageId")
+                        .HasColumnType("numeric(20,0)")
+                        .HasColumnName("messageid");
+
+                    b.Property<decimal>("RoleId")
+                        .HasColumnType("numeric(20,0)")
+                        .HasColumnName("roleid");
+
+                    b.HasKey("Id")
+                        .HasName("pk_reactionroles");
+
+                    b.HasIndex("GuildId")
+                        .HasDatabaseName("ix_reactionroles_guildid");
+
+                    b.HasIndex("MessageId", "Emote")
+                        .IsUnique()
+                        .HasDatabaseName("ix_reactionroles_messageid_emote");
+
+                    b.ToTable("reactionroles", (string)null);
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.Reminder", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("integer")
+                        .HasColumnName("id");
+
+                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
+
+                    b.Property<decimal>("ChannelId")
+                        .HasColumnType("numeric(20,0)")
+                        .HasColumnName("channelid");
+
+                    b.Property<DateTime?>("DateAdded")
+                        .HasColumnType("timestamp without time zone")
+                        .HasColumnName("dateadded");
+
+                    b.Property<bool>("IsPrivate")
+                        .HasColumnType("boolean")
+                        .HasColumnName("isprivate");
+
+                    b.Property<string>("Message")
+                        .HasColumnType("text")
+                        .HasColumnName("message");
+
+                    b.Property<decimal>("ServerId")
+                        .HasColumnType("numeric(20,0)")
+                        .HasColumnName("serverid");
+
+                    b.Property<int>("Type")
+                        .HasColumnType("integer")
+                        .HasColumnName("type");
+
+                    b.Property<decimal>("UserId")
+                        .HasColumnType("numeric(20,0)")
+                        .HasColumnName("userid");
+
+                    b.Property<DateTime>("When")
+                        .HasColumnType("timestamp without time zone")
+                        .HasColumnName("when");
+
+                    b.HasKey("Id")
+                        .HasName("pk_reminders");
+
+                    b.HasIndex("When")
+                        .HasDatabaseName("ix_reminders_when");
+
+                    b.ToTable("reminders", (string)null);
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.Repeater", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("integer")
+                        .HasColumnName("id");
+
+                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
+
+                    b.Property<decimal>("ChannelId")
+                        .HasColumnType("numeric(20,0)")
+                        .HasColumnName("channelid");
+
+                    b.Property<DateTime>("DateAdded")
+                        .HasColumnType("timestamp without time zone")
+                        .HasColumnName("dateadded");
+
+                    b.Property<decimal>("GuildId")
+                        .HasColumnType("numeric(20,0)")
+                        .HasColumnName("guildid");
+
+                    b.Property<TimeSpan>("Interval")
+                        .HasColumnType("interval")
+                        .HasColumnName("interval");
+
+                    b.Property<decimal?>("LastMessageId")
+                        .HasColumnType("numeric(20,0)")
+                        .HasColumnName("lastmessageid");
+
+                    b.Property<string>("Message")
+                        .HasColumnType("text")
+                        .HasColumnName("message");
+
+                    b.Property<bool>("NoRedundant")
+                        .HasColumnType("boolean")
+                        .HasColumnName("noredundant");
+
+                    b.Property<TimeSpan?>("StartTimeOfDay")
+                        .HasColumnType("interval")
+                        .HasColumnName("starttimeofday");
+
+                    b.HasKey("Id")
+                        .HasName("pk_repeaters");
+
+                    b.ToTable("repeaters", (string)null);
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.RewardedUser", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("integer")
+                        .HasColumnName("id");
+
+                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
+
+                    b.Property<long>("AmountRewardedThisMonth")
+                        .HasColumnType("bigint")
+                        .HasColumnName("amountrewardedthismonth");
+
+                    b.Property<DateTime?>("DateAdded")
+                        .HasColumnType("timestamp without time zone")
+                        .HasColumnName("dateadded");
+
+                    b.Property<DateTime>("LastReward")
+                        .HasColumnType("timestamp without time zone")
+                        .HasColumnName("lastreward");
+
+                    b.Property<string>("PlatformUserId")
+                        .HasColumnType("text")
+                        .HasColumnName("platformuserid");
+
+                    b.Property<decimal>("UserId")
+                        .HasColumnType("numeric(20,0)")
+                        .HasColumnName("userid");
+
+                    b.HasKey("Id")
+                        .HasName("pk_rewardedusers");
+
+                    b.HasIndex("PlatformUserId")
+                        .IsUnique()
+                        .HasDatabaseName("ix_rewardedusers_platformuserid");
+
+                    b.ToTable("rewardedusers", (string)null);
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.RotatingPlayingStatus", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("integer")
+                        .HasColumnName("id");
+
+                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
+
+                    b.Property<DateTime?>("DateAdded")
+                        .HasColumnType("timestamp without time zone")
+                        .HasColumnName("dateadded");
+
+                    b.Property<string>("Status")
+                        .HasColumnType("text")
+                        .HasColumnName("status");
+
+                    b.Property<int>("Type")
+                        .HasColumnType("integer")
+                        .HasColumnName("type");
+
+                    b.HasKey("Id")
+                        .HasName("pk_rotatingstatus");
+
+                    b.ToTable("rotatingstatus", (string)null);
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.Sar", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("integer")
+                        .HasColumnName("id");
+
+                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
+
+                    b.Property<decimal>("GuildId")
+                        .HasColumnType("numeric(20,0)")
+                        .HasColumnName("guildid");
+
+                    b.Property<int>("LevelReq")
+                        .HasColumnType("integer")
+                        .HasColumnName("levelreq");
+
+                    b.Property<decimal>("RoleId")
+                        .HasColumnType("numeric(20,0)")
+                        .HasColumnName("roleid");
+
+                    b.Property<int>("SarGroupId")
+                        .HasColumnType("integer")
+                        .HasColumnName("sargroupid");
+
+                    b.HasKey("Id")
+                        .HasName("pk_sar");
+
+                    b.HasAlternateKey("GuildId", "RoleId")
+                        .HasName("ak_sar_guildid_roleid");
+
+                    b.HasIndex("SarGroupId")
+                        .HasDatabaseName("ix_sar_sargroupid");
+
+                    b.ToTable("sar", (string)null);
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.SarAutoDelete", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("integer")
+                        .HasColumnName("id");
+
+                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
+
+                    b.Property<decimal>("GuildId")
+                        .HasColumnType("numeric(20,0)")
+                        .HasColumnName("guildid");
+
+                    b.Property<bool>("IsEnabled")
+                        .HasColumnType("boolean")
+                        .HasColumnName("isenabled");
+
+                    b.HasKey("Id")
+                        .HasName("pk_sarautodelete");
+
+                    b.HasIndex("GuildId")
+                        .IsUnique()
+                        .HasDatabaseName("ix_sarautodelete_guildid");
+
+                    b.ToTable("sarautodelete", (string)null);
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.SarGroup", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("integer")
+                        .HasColumnName("id");
+
+                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
+
+                    b.Property<int>("GroupNumber")
+                        .HasColumnType("integer")
+                        .HasColumnName("groupnumber");
+
+                    b.Property<decimal>("GuildId")
+                        .HasColumnType("numeric(20,0)")
+                        .HasColumnName("guildid");
+
+                    b.Property<bool>("IsExclusive")
+                        .HasColumnType("boolean")
+                        .HasColumnName("isexclusive");
+
+                    b.Property<string>("Name")
+                        .HasMaxLength(100)
+                        .HasColumnType("character varying(100)")
+                        .HasColumnName("name");
+
+                    b.Property<decimal?>("RoleReq")
+                        .HasColumnType("numeric(20,0)")
+                        .HasColumnName("rolereq");
+
+                    b.HasKey("Id")
+                        .HasName("pk_sargroup");
+
+                    b.HasAlternateKey("GuildId", "GroupNumber")
+                        .HasName("ak_sargroup_guildid_groupnumber");
+
+                    b.ToTable("sargroup", (string)null);
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.ShopEntry", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("integer")
+                        .HasColumnName("id");
+
+                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
+
+                    b.Property<decimal>("AuthorId")
+                        .HasColumnType("numeric(20,0)")
+                        .HasColumnName("authorid");
+
+                    b.Property<string>("Command")
+                        .HasColumnType("text")
+                        .HasColumnName("command");
+
+                    b.Property<DateTime?>("DateAdded")
+                        .HasColumnType("timestamp without time zone")
+                        .HasColumnName("dateadded");
+
+                    b.Property<int?>("GuildConfigId")
+                        .HasColumnType("integer")
+                        .HasColumnName("guildconfigid");
+
+                    b.Property<int>("Index")
+                        .HasColumnType("integer")
+                        .HasColumnName("index");
+
+                    b.Property<string>("Name")
+                        .HasColumnType("text")
+                        .HasColumnName("name");
+
+                    b.Property<int>("Price")
+                        .HasColumnType("integer")
+                        .HasColumnName("price");
+
+                    b.Property<decimal>("RoleId")
+                        .HasColumnType("numeric(20,0)")
+                        .HasColumnName("roleid");
+
+                    b.Property<string>("RoleName")
+                        .HasColumnType("text")
+                        .HasColumnName("rolename");
+
+                    b.Property<decimal?>("RoleRequirement")
+                        .HasColumnType("numeric(20,0)")
+                        .HasColumnName("rolerequirement");
+
+                    b.Property<int>("Type")
+                        .HasColumnType("integer")
+                        .HasColumnName("type");
+
+                    b.HasKey("Id")
+                        .HasName("pk_shopentry");
+
+                    b.HasIndex("GuildConfigId")
+                        .HasDatabaseName("ix_shopentry_guildconfigid");
+
+                    b.ToTable("shopentry", (string)null);
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.ShopEntryItem", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("integer")
+                        .HasColumnName("id");
+
+                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
+
+                    b.Property<DateTime?>("DateAdded")
+                        .HasColumnType("timestamp without time zone")
+                        .HasColumnName("dateadded");
+
+                    b.Property<int?>("ShopEntryId")
+                        .HasColumnType("integer")
+                        .HasColumnName("shopentryid");
+
+                    b.Property<string>("Text")
+                        .HasColumnType("text")
+                        .HasColumnName("text");
+
+                    b.HasKey("Id")
+                        .HasName("pk_shopentryitem");
+
+                    b.HasIndex("ShopEntryId")
+                        .HasDatabaseName("ix_shopentryitem_shopentryid");
+
+                    b.ToTable("shopentryitem", (string)null);
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.SlowmodeIgnoredRole", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("integer")
+                        .HasColumnName("id");
+
+                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
+
+                    b.Property<DateTime?>("DateAdded")
+                        .HasColumnType("timestamp without time zone")
+                        .HasColumnName("dateadded");
+
+                    b.Property<int?>("GuildConfigId")
+                        .HasColumnType("integer")
+                        .HasColumnName("guildconfigid");
+
+                    b.Property<decimal>("RoleId")
+                        .HasColumnType("numeric(20,0)")
+                        .HasColumnName("roleid");
+
+                    b.HasKey("Id")
+                        .HasName("pk_slowmodeignoredrole");
+
+                    b.HasIndex("GuildConfigId")
+                        .HasDatabaseName("ix_slowmodeignoredrole_guildconfigid");
+
+                    b.ToTable("slowmodeignoredrole", (string)null);
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.SlowmodeIgnoredUser", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("integer")
+                        .HasColumnName("id");
+
+                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
+
+                    b.Property<DateTime?>("DateAdded")
+                        .HasColumnType("timestamp without time zone")
+                        .HasColumnName("dateadded");
+
+                    b.Property<int?>("GuildConfigId")
+                        .HasColumnType("integer")
+                        .HasColumnName("guildconfigid");
+
+                    b.Property<decimal>("UserId")
+                        .HasColumnType("numeric(20,0)")
+                        .HasColumnName("userid");
+
+                    b.HasKey("Id")
+                        .HasName("pk_slowmodeignoreduser");
+
+                    b.HasIndex("GuildConfigId")
+                        .HasDatabaseName("ix_slowmodeignoreduser_guildconfigid");
+
+                    b.ToTable("slowmodeignoreduser", (string)null);
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.StickyRole", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("integer")
+                        .HasColumnName("id");
+
+                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
+
+                    b.Property<DateTime?>("DateAdded")
+                        .HasColumnType("timestamp without time zone")
+                        .HasColumnName("dateadded");
+
+                    b.Property<decimal>("GuildId")
+                        .HasColumnType("numeric(20,0)")
+                        .HasColumnName("guildid");
+
+                    b.Property<string>("RoleIds")
+                        .HasColumnType("text")
+                        .HasColumnName("roleids");
+
+                    b.Property<decimal>("UserId")
+                        .HasColumnType("numeric(20,0)")
+                        .HasColumnName("userid");
+
+                    b.HasKey("Id")
+                        .HasName("pk_stickyroles");
+
+                    b.HasIndex("GuildId", "UserId")
+                        .IsUnique()
+                        .HasDatabaseName("ix_stickyroles_guildid_userid");
+
+                    b.ToTable("stickyroles", (string)null);
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.StreamOnlineMessage", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("integer")
+                        .HasColumnName("id");
+
+                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
+
+                    b.Property<decimal>("ChannelId")
+                        .HasColumnType("numeric(20,0)")
+                        .HasColumnName("channelid");
+
+                    b.Property<DateTime?>("DateAdded")
+                        .HasColumnType("timestamp without time zone")
+                        .HasColumnName("dateadded");
+
+                    b.Property<decimal>("MessageId")
+                        .HasColumnType("numeric(20,0)")
+                        .HasColumnName("messageid");
+
+                    b.Property<string>("Name")
+                        .HasColumnType("text")
+                        .HasColumnName("name");
+
+                    b.Property<int>("Type")
+                        .HasColumnType("integer")
+                        .HasColumnName("type");
+
+                    b.HasKey("Id")
+                        .HasName("pk_streamonlinemessages");
+
+                    b.ToTable("streamonlinemessages", (string)null);
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.StreamRoleBlacklistedUser", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("integer")
+                        .HasColumnName("id");
+
+                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
+
+                    b.Property<DateTime?>("DateAdded")
+                        .HasColumnType("timestamp without time zone")
+                        .HasColumnName("dateadded");
+
+                    b.Property<int>("StreamRoleSettingsId")
+                        .HasColumnType("integer")
+                        .HasColumnName("streamrolesettingsid");
+
+                    b.Property<decimal>("UserId")
+                        .HasColumnType("numeric(20,0)")
+                        .HasColumnName("userid");
+
+                    b.Property<string>("Username")
+                        .HasColumnType("text")
+                        .HasColumnName("username");
+
+                    b.HasKey("Id")
+                        .HasName("pk_streamroleblacklisteduser");
+
+                    b.HasIndex("StreamRoleSettingsId")
+                        .HasDatabaseName("ix_streamroleblacklisteduser_streamrolesettingsid");
+
+                    b.ToTable("streamroleblacklisteduser", (string)null);
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.StreamRoleSettings", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("integer")
+                        .HasColumnName("id");
+
+                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
+
+                    b.Property<decimal>("AddRoleId")
+                        .HasColumnType("numeric(20,0)")
+                        .HasColumnName("addroleid");
+
+                    b.Property<DateTime?>("DateAdded")
+                        .HasColumnType("timestamp without time zone")
+                        .HasColumnName("dateadded");
+
+                    b.Property<bool>("Enabled")
+                        .HasColumnType("boolean")
+                        .HasColumnName("enabled");
+
+                    b.Property<decimal>("FromRoleId")
+                        .HasColumnType("numeric(20,0)")
+                        .HasColumnName("fromroleid");
+
+                    b.Property<int>("GuildConfigId")
+                        .HasColumnType("integer")
+                        .HasColumnName("guildconfigid");
+
+                    b.Property<string>("Keyword")
+                        .HasColumnType("text")
+                        .HasColumnName("keyword");
+
+                    b.HasKey("Id")
+                        .HasName("pk_streamrolesettings");
+
+                    b.HasIndex("GuildConfigId")
+                        .IsUnique()
+                        .HasDatabaseName("ix_streamrolesettings_guildconfigid");
+
+                    b.ToTable("streamrolesettings", (string)null);
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.StreamRoleWhitelistedUser", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("integer")
+                        .HasColumnName("id");
+
+                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
+
+                    b.Property<DateTime?>("DateAdded")
+                        .HasColumnType("timestamp without time zone")
+                        .HasColumnName("dateadded");
+
+                    b.Property<int>("StreamRoleSettingsId")
+                        .HasColumnType("integer")
+                        .HasColumnName("streamrolesettingsid");
+
+                    b.Property<decimal>("UserId")
+                        .HasColumnType("numeric(20,0)")
+                        .HasColumnName("userid");
+
+                    b.Property<string>("Username")
+                        .HasColumnType("text")
+                        .HasColumnName("username");
+
+                    b.HasKey("Id")
+                        .HasName("pk_streamrolewhitelisteduser");
+
+                    b.HasIndex("StreamRoleSettingsId")
+                        .HasDatabaseName("ix_streamrolewhitelisteduser_streamrolesettingsid");
+
+                    b.ToTable("streamrolewhitelisteduser", (string)null);
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.TempRole", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("integer")
+                        .HasColumnName("id");
+
+                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
+
+                    b.Property<DateTime>("ExpiresAt")
+                        .HasColumnType("timestamp without time zone")
+                        .HasColumnName("expiresat");
+
+                    b.Property<decimal>("GuildId")
+                        .HasColumnType("numeric(20,0)")
+                        .HasColumnName("guildid");
+
+                    b.Property<bool>("Remove")
+                        .HasColumnType("boolean")
+                        .HasColumnName("remove");
+
+                    b.Property<decimal>("RoleId")
+                        .HasColumnType("numeric(20,0)")
+                        .HasColumnName("roleid");
+
+                    b.Property<decimal>("UserId")
+                        .HasColumnType("numeric(20,0)")
+                        .HasColumnName("userid");
+
+                    b.HasKey("Id")
+                        .HasName("pk_temprole");
+
+                    b.HasAlternateKey("GuildId", "UserId", "RoleId")
+                        .HasName("ak_temprole_guildid_userid_roleid");
+
+                    b.HasIndex("ExpiresAt")
+                        .HasDatabaseName("ix_temprole_expiresat");
+
+                    b.ToTable("temprole", (string)null);
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.TodoModel", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("integer")
+                        .HasColumnName("id");
+
+                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
+
+                    b.Property<int?>("ArchiveId")
+                        .HasColumnType("integer")
+                        .HasColumnName("archiveid");
+
+                    b.Property<DateTime>("DateAdded")
+                        .HasColumnType("timestamp without time zone")
+                        .HasColumnName("dateadded");
+
+                    b.Property<bool>("IsDone")
+                        .HasColumnType("boolean")
+                        .HasColumnName("isdone");
+
+                    b.Property<string>("Todo")
+                        .HasColumnType("text")
+                        .HasColumnName("todo");
+
+                    b.Property<decimal>("UserId")
+                        .HasColumnType("numeric(20,0)")
+                        .HasColumnName("userid");
+
+                    b.HasKey("Id")
+                        .HasName("pk_todos");
+
+                    b.HasIndex("ArchiveId")
+                        .HasDatabaseName("ix_todos_archiveid");
+
+                    b.HasIndex("UserId")
+                        .HasDatabaseName("ix_todos_userid");
+
+                    b.ToTable("todos", (string)null);
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.UnbanTimer", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("integer")
+                        .HasColumnName("id");
+
+                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
+
+                    b.Property<DateTime?>("DateAdded")
+                        .HasColumnType("timestamp without time zone")
+                        .HasColumnName("dateadded");
+
+                    b.Property<int?>("GuildConfigId")
+                        .HasColumnType("integer")
+                        .HasColumnName("guildconfigid");
+
+                    b.Property<DateTime>("UnbanAt")
+                        .HasColumnType("timestamp without time zone")
+                        .HasColumnName("unbanat");
+
+                    b.Property<decimal>("UserId")
+                        .HasColumnType("numeric(20,0)")
+                        .HasColumnName("userid");
+
+                    b.HasKey("Id")
+                        .HasName("pk_unbantimer");
+
+                    b.HasIndex("GuildConfigId")
+                        .HasDatabaseName("ix_unbantimer_guildconfigid");
+
+                    b.ToTable("unbantimer", (string)null);
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.UnmuteTimer", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("integer")
+                        .HasColumnName("id");
+
+                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
+
+                    b.Property<DateTime?>("DateAdded")
+                        .HasColumnType("timestamp without time zone")
+                        .HasColumnName("dateadded");
+
+                    b.Property<int?>("GuildConfigId")
+                        .HasColumnType("integer")
+                        .HasColumnName("guildconfigid");
+
+                    b.Property<DateTime>("UnmuteAt")
+                        .HasColumnType("timestamp without time zone")
+                        .HasColumnName("unmuteat");
+
+                    b.Property<decimal>("UserId")
+                        .HasColumnType("numeric(20,0)")
+                        .HasColumnName("userid");
+
+                    b.HasKey("Id")
+                        .HasName("pk_unmutetimer");
+
+                    b.HasIndex("GuildConfigId")
+                        .HasDatabaseName("ix_unmutetimer_guildconfigid");
+
+                    b.ToTable("unmutetimer", (string)null);
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.UnroleTimer", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("integer")
+                        .HasColumnName("id");
+
+                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
+
+                    b.Property<DateTime?>("DateAdded")
+                        .HasColumnType("timestamp without time zone")
+                        .HasColumnName("dateadded");
+
+                    b.Property<int?>("GuildConfigId")
+                        .HasColumnType("integer")
+                        .HasColumnName("guildconfigid");
+
+                    b.Property<decimal>("RoleId")
+                        .HasColumnType("numeric(20,0)")
+                        .HasColumnName("roleid");
+
+                    b.Property<DateTime>("UnbanAt")
+                        .HasColumnType("timestamp without time zone")
+                        .HasColumnName("unbanat");
+
+                    b.Property<decimal>("UserId")
+                        .HasColumnType("numeric(20,0)")
+                        .HasColumnName("userid");
+
+                    b.HasKey("Id")
+                        .HasName("pk_unroletimer");
+
+                    b.HasIndex("GuildConfigId")
+                        .HasDatabaseName("ix_unroletimer_guildconfigid");
+
+                    b.ToTable("unroletimer", (string)null);
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.UserXpStats", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("integer")
+                        .HasColumnName("id");
+
+                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
+
+                    b.Property<DateTime?>("DateAdded")
+                        .HasColumnType("timestamp without time zone")
+                        .HasColumnName("dateadded");
+
+                    b.Property<decimal>("GuildId")
+                        .HasColumnType("numeric(20,0)")
+                        .HasColumnName("guildid");
+
+                    b.Property<decimal>("UserId")
+                        .HasColumnType("numeric(20,0)")
+                        .HasColumnName("userid");
+
+                    b.Property<long>("Xp")
+                        .HasColumnType("bigint")
+                        .HasColumnName("xp");
+
+                    b.HasKey("Id")
+                        .HasName("pk_userxpstats");
+
+                    b.HasIndex("GuildId")
+                        .HasDatabaseName("ix_userxpstats_guildid");
+
+                    b.HasIndex("UserId")
+                        .HasDatabaseName("ix_userxpstats_userid");
+
+                    b.HasIndex("Xp")
+                        .HasDatabaseName("ix_userxpstats_xp");
+
+                    b.HasIndex("UserId", "GuildId")
+                        .IsUnique()
+                        .HasDatabaseName("ix_userxpstats_userid_guildid");
+
+                    b.ToTable("userxpstats", (string)null);
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.VcRoleInfo", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("integer")
+                        .HasColumnName("id");
+
+                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
+
+                    b.Property<DateTime?>("DateAdded")
+                        .HasColumnType("timestamp without time zone")
+                        .HasColumnName("dateadded");
+
+                    b.Property<int?>("GuildConfigId")
+                        .HasColumnType("integer")
+                        .HasColumnName("guildconfigid");
+
+                    b.Property<decimal>("RoleId")
+                        .HasColumnType("numeric(20,0)")
+                        .HasColumnName("roleid");
+
+                    b.Property<decimal>("VoiceChannelId")
+                        .HasColumnType("numeric(20,0)")
+                        .HasColumnName("voicechannelid");
+
+                    b.HasKey("Id")
+                        .HasName("pk_vcroleinfo");
+
+                    b.HasIndex("GuildConfigId")
+                        .HasDatabaseName("ix_vcroleinfo_guildconfigid");
+
+                    b.ToTable("vcroleinfo", (string)null);
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.WaifuInfo", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("integer")
+                        .HasColumnName("id");
+
+                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
+
+                    b.Property<int?>("AffinityId")
+                        .HasColumnType("integer")
+                        .HasColumnName("affinityid");
+
+                    b.Property<int?>("ClaimerId")
+                        .HasColumnType("integer")
+                        .HasColumnName("claimerid");
+
+                    b.Property<DateTime?>("DateAdded")
+                        .HasColumnType("timestamp without time zone")
+                        .HasColumnName("dateadded");
+
+                    b.Property<long>("Price")
+                        .HasColumnType("bigint")
+                        .HasColumnName("price");
+
+                    b.Property<int>("WaifuId")
+                        .HasColumnType("integer")
+                        .HasColumnName("waifuid");
+
+                    b.HasKey("Id")
+                        .HasName("pk_waifuinfo");
+
+                    b.HasIndex("AffinityId")
+                        .HasDatabaseName("ix_waifuinfo_affinityid");
+
+                    b.HasIndex("ClaimerId")
+                        .HasDatabaseName("ix_waifuinfo_claimerid");
+
+                    b.HasIndex("Price")
+                        .HasDatabaseName("ix_waifuinfo_price");
+
+                    b.HasIndex("WaifuId")
+                        .IsUnique()
+                        .HasDatabaseName("ix_waifuinfo_waifuid");
+
+                    b.ToTable("waifuinfo", (string)null);
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.WaifuItem", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("integer")
+                        .HasColumnName("id");
+
+                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
+
+                    b.Property<DateTime?>("DateAdded")
+                        .HasColumnType("timestamp without time zone")
+                        .HasColumnName("dateadded");
+
+                    b.Property<string>("ItemEmoji")
+                        .HasColumnType("text")
+                        .HasColumnName("itememoji");
+
+                    b.Property<string>("Name")
+                        .HasColumnType("text")
+                        .HasColumnName("name");
+
+                    b.Property<int?>("WaifuInfoId")
+                        .HasColumnType("integer")
+                        .HasColumnName("waifuinfoid");
+
+                    b.HasKey("Id")
+                        .HasName("pk_waifuitem");
+
+                    b.HasIndex("WaifuInfoId")
+                        .HasDatabaseName("ix_waifuitem_waifuinfoid");
+
+                    b.ToTable("waifuitem", (string)null);
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.WaifuUpdate", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("integer")
+                        .HasColumnName("id");
+
+                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
+
+                    b.Property<DateTime?>("DateAdded")
+                        .HasColumnType("timestamp without time zone")
+                        .HasColumnName("dateadded");
+
+                    b.Property<int?>("NewId")
+                        .HasColumnType("integer")
+                        .HasColumnName("newid");
+
+                    b.Property<int?>("OldId")
+                        .HasColumnType("integer")
+                        .HasColumnName("oldid");
+
+                    b.Property<int>("UpdateType")
+                        .HasColumnType("integer")
+                        .HasColumnName("updatetype");
+
+                    b.Property<int>("UserId")
+                        .HasColumnType("integer")
+                        .HasColumnName("userid");
+
+                    b.HasKey("Id")
+                        .HasName("pk_waifuupdates");
+
+                    b.HasIndex("NewId")
+                        .HasDatabaseName("ix_waifuupdates_newid");
+
+                    b.HasIndex("OldId")
+                        .HasDatabaseName("ix_waifuupdates_oldid");
+
+                    b.HasIndex("UserId")
+                        .HasDatabaseName("ix_waifuupdates_userid");
+
+                    b.ToTable("waifuupdates", (string)null);
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.Warning", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("integer")
+                        .HasColumnName("id");
+
+                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
+
+                    b.Property<DateTime?>("DateAdded")
+                        .HasColumnType("timestamp without time zone")
+                        .HasColumnName("dateadded");
+
+                    b.Property<bool>("Forgiven")
+                        .HasColumnType("boolean")
+                        .HasColumnName("forgiven");
+
+                    b.Property<string>("ForgivenBy")
+                        .HasColumnType("text")
+                        .HasColumnName("forgivenby");
+
+                    b.Property<decimal>("GuildId")
+                        .HasColumnType("numeric(20,0)")
+                        .HasColumnName("guildid");
+
+                    b.Property<string>("Moderator")
+                        .HasColumnType("text")
+                        .HasColumnName("moderator");
+
+                    b.Property<string>("Reason")
+                        .HasColumnType("text")
+                        .HasColumnName("reason");
+
+                    b.Property<decimal>("UserId")
+                        .HasColumnType("numeric(20,0)")
+                        .HasColumnName("userid");
+
+                    b.Property<long>("Weight")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("bigint")
+                        .HasDefaultValue(1L)
+                        .HasColumnName("weight");
+
+                    b.HasKey("Id")
+                        .HasName("pk_warnings");
+
+                    b.HasIndex("DateAdded")
+                        .HasDatabaseName("ix_warnings_dateadded");
+
+                    b.HasIndex("GuildId")
+                        .HasDatabaseName("ix_warnings_guildid");
+
+                    b.HasIndex("UserId")
+                        .HasDatabaseName("ix_warnings_userid");
+
+                    b.ToTable("warnings", (string)null);
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.WarningPunishment", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("integer")
+                        .HasColumnName("id");
+
+                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
+
+                    b.Property<int>("Count")
+                        .HasColumnType("integer")
+                        .HasColumnName("count");
+
+                    b.Property<DateTime?>("DateAdded")
+                        .HasColumnType("timestamp without time zone")
+                        .HasColumnName("dateadded");
+
+                    b.Property<decimal>("GuildId")
+                        .HasColumnType("numeric(20,0)")
+                        .HasColumnName("guildid");
+
+                    b.Property<int>("Punishment")
+                        .HasColumnType("integer")
+                        .HasColumnName("punishment");
+
+                    b.Property<decimal?>("RoleId")
+                        .HasColumnType("numeric(20,0)")
+                        .HasColumnName("roleid");
+
+                    b.Property<int>("Time")
+                        .HasColumnType("integer")
+                        .HasColumnName("time");
+
+                    b.HasKey("Id")
+                        .HasName("pk_warningpunishment");
+
+                    b.HasAlternateKey("GuildId", "Count")
+                        .HasName("ak_warningpunishment_guildid_count");
+
+                    b.ToTable("warningpunishment", (string)null);
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.XpCurrencyReward", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("integer")
+                        .HasColumnName("id");
+
+                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
+
+                    b.Property<int>("Amount")
+                        .HasColumnType("integer")
+                        .HasColumnName("amount");
+
+                    b.Property<DateTime?>("DateAdded")
+                        .HasColumnType("timestamp without time zone")
+                        .HasColumnName("dateadded");
+
+                    b.Property<int>("Level")
+                        .HasColumnType("integer")
+                        .HasColumnName("level");
+
+                    b.Property<int>("XpSettingsId")
+                        .HasColumnType("integer")
+                        .HasColumnName("xpsettingsid");
+
+                    b.HasKey("Id")
+                        .HasName("pk_xpcurrencyreward");
+
+                    b.HasIndex("XpSettingsId")
+                        .HasDatabaseName("ix_xpcurrencyreward_xpsettingsid");
+
+                    b.ToTable("xpcurrencyreward", (string)null);
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.XpRoleReward", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("integer")
+                        .HasColumnName("id");
+
+                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
+
+                    b.Property<DateTime?>("DateAdded")
+                        .HasColumnType("timestamp without time zone")
+                        .HasColumnName("dateadded");
+
+                    b.Property<int>("Level")
+                        .HasColumnType("integer")
+                        .HasColumnName("level");
+
+                    b.Property<bool>("Remove")
+                        .HasColumnType("boolean")
+                        .HasColumnName("remove");
+
+                    b.Property<decimal>("RoleId")
+                        .HasColumnType("numeric(20,0)")
+                        .HasColumnName("roleid");
+
+                    b.Property<int>("XpSettingsId")
+                        .HasColumnType("integer")
+                        .HasColumnName("xpsettingsid");
+
+                    b.HasKey("Id")
+                        .HasName("pk_xprolereward");
+
+                    b.HasIndex("XpSettingsId", "Level")
+                        .IsUnique()
+                        .HasDatabaseName("ix_xprolereward_xpsettingsid_level");
+
+                    b.ToTable("xprolereward", (string)null);
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.XpSettings", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("integer")
+                        .HasColumnName("id");
+
+                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
+
+                    b.Property<DateTime?>("DateAdded")
+                        .HasColumnType("timestamp without time zone")
+                        .HasColumnName("dateadded");
+
+                    b.Property<int>("GuildConfigId")
+                        .HasColumnType("integer")
+                        .HasColumnName("guildconfigid");
+
+                    b.Property<bool>("ServerExcluded")
+                        .HasColumnType("boolean")
+                        .HasColumnName("serverexcluded");
+
+                    b.HasKey("Id")
+                        .HasName("pk_xpsettings");
+
+                    b.HasIndex("GuildConfigId")
+                        .IsUnique()
+                        .HasDatabaseName("ix_xpsettings_guildconfigid");
+
+                    b.ToTable("xpsettings", (string)null);
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.XpShopOwnedItem", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("integer")
+                        .HasColumnName("id");
+
+                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
+
+                    b.Property<DateTime?>("DateAdded")
+                        .HasColumnType("timestamp without time zone")
+                        .HasColumnName("dateadded");
+
+                    b.Property<bool>("IsUsing")
+                        .HasColumnType("boolean")
+                        .HasColumnName("isusing");
+
+                    b.Property<string>("ItemKey")
+                        .IsRequired()
+                        .HasColumnType("text")
+                        .HasColumnName("itemkey");
+
+                    b.Property<int>("ItemType")
+                        .HasColumnType("integer")
+                        .HasColumnName("itemtype");
+
+                    b.Property<decimal>("UserId")
+                        .HasColumnType("numeric(20,0)")
+                        .HasColumnName("userid");
+
+                    b.HasKey("Id")
+                        .HasName("pk_xpshopowneditem");
+
+                    b.HasIndex("UserId", "ItemType", "ItemKey")
+                        .IsUnique()
+                        .HasDatabaseName("ix_xpshopowneditem_userid_itemtype_itemkey");
+
+                    b.ToTable("xpshopowneditem", (string)null);
+                });
+
+            modelBuilder.Entity("EllieBot.Services.GreetSettings", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("integer")
+                        .HasColumnName("id");
+
+                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
+
+                    b.Property<int>("AutoDeleteTimer")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("integer")
+                        .HasDefaultValue(0)
+                        .HasColumnName("autodeletetimer");
+
+                    b.Property<decimal?>("ChannelId")
+                        .HasColumnType("numeric(20,0)")
+                        .HasColumnName("channelid");
+
+                    b.Property<int>("GreetType")
+                        .HasColumnType("integer")
+                        .HasColumnName("greettype");
+
+                    b.Property<decimal>("GuildId")
+                        .HasColumnType("numeric(20,0)")
+                        .HasColumnName("guildid");
+
+                    b.Property<bool>("IsEnabled")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("boolean")
+                        .HasDefaultValue(false)
+                        .HasColumnName("isenabled");
+
+                    b.Property<string>("MessageText")
+                        .HasColumnType("text")
+                        .HasColumnName("messagetext");
+
+                    b.HasKey("Id")
+                        .HasName("pk_greetsettings");
+
+                    b.HasIndex("GuildId", "GreetType")
+                        .IsUnique()
+                        .HasDatabaseName("ix_greetsettings_guildid_greettype");
+
+                    b.ToTable("greetsettings", (string)null);
+                });
+
+            modelBuilder.Entity("EllieBot.Services.Rakeback", b =>
+                {
+                    b.Property<decimal>("UserId")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("numeric(20,0)")
+                        .HasColumnName("userid");
+
+                    b.Property<decimal>("Amount")
+                        .HasColumnType("numeric")
+                        .HasColumnName("amount");
+
+                    b.HasKey("UserId")
+                        .HasName("pk_rakeback");
+
+                    b.ToTable("rakeback", (string)null);
+                });
+
+            modelBuilder.Entity("EllieBot.Services.UserBetStats", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("integer")
+                        .HasColumnName("id");
+
+                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
+
+                    b.Property<int>("Game")
+                        .HasColumnType("integer")
+                        .HasColumnName("game");
+
+                    b.Property<long>("LoseCount")
+                        .HasColumnType("bigint")
+                        .HasColumnName("losecount");
+
+                    b.Property<long>("MaxBet")
+                        .HasColumnType("bigint")
+                        .HasColumnName("maxbet");
+
+                    b.Property<long>("MaxWin")
+                        .HasColumnType("bigint")
+                        .HasColumnName("maxwin");
+
+                    b.Property<decimal>("PaidOut")
+                        .HasColumnType("numeric")
+                        .HasColumnName("paidout");
+
+                    b.Property<decimal>("TotalBet")
+                        .HasColumnType("numeric")
+                        .HasColumnName("totalbet");
+
+                    b.Property<decimal>("UserId")
+                        .HasColumnType("numeric(20,0)")
+                        .HasColumnName("userid");
+
+                    b.Property<long>("WinCount")
+                        .HasColumnType("bigint")
+                        .HasColumnName("wincount");
+
+                    b.HasKey("Id")
+                        .HasName("pk_userbetstats");
+
+                    b.HasIndex("UserId", "Game")
+                        .IsUnique()
+                        .HasDatabaseName("ix_userbetstats_userid_game");
+
+                    b.ToTable("userbetstats", (string)null);
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.AntiAltSetting", b =>
+                {
+                    b.HasOne("EllieBot.Db.Models.GuildConfig", null)
+                        .WithOne("AntiAltSetting")
+                        .HasForeignKey("EllieBot.Db.Models.AntiAltSetting", "GuildConfigId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired()
+                        .HasConstraintName("fk_antialtsetting_guildconfigs_guildconfigid");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.AntiRaidSetting", b =>
+                {
+                    b.HasOne("EllieBot.Db.Models.GuildConfig", null)
+                        .WithOne("AntiRaidSetting")
+                        .HasForeignKey("EllieBot.Db.Models.AntiRaidSetting", "GuildConfigId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired()
+                        .HasConstraintName("fk_antiraidsetting_guildconfigs_guildconfigid");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.AntiSpamIgnore", b =>
+                {
+                    b.HasOne("EllieBot.Db.Models.AntiSpamSetting", null)
+                        .WithMany("IgnoredChannels")
+                        .HasForeignKey("AntiSpamSettingId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .HasConstraintName("fk_antispamignore_antispamsetting_antispamsettingid");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.AntiSpamSetting", b =>
+                {
+                    b.HasOne("EllieBot.Db.Models.GuildConfig", null)
+                        .WithOne("AntiSpamSetting")
+                        .HasForeignKey("EllieBot.Db.Models.AntiSpamSetting", "GuildConfigId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired()
+                        .HasConstraintName("fk_antispamsetting_guildconfigs_guildconfigid");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.AutoTranslateUser", b =>
+                {
+                    b.HasOne("EllieBot.Db.Models.AutoTranslateChannel", "Channel")
+                        .WithMany("Users")
+                        .HasForeignKey("ChannelId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired()
+                        .HasConstraintName("fk_autotranslateusers_autotranslatechannels_channelid");
+
+                    b.Navigation("Channel");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.ClubApplicants", b =>
+                {
+                    b.HasOne("EllieBot.Db.Models.ClubInfo", "Club")
+                        .WithMany("Applicants")
+                        .HasForeignKey("ClubId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired()
+                        .HasConstraintName("fk_clubapplicants_clubs_clubid");
+
+                    b.HasOne("EllieBot.Db.Models.DiscordUser", "User")
+                        .WithMany()
+                        .HasForeignKey("UserId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired()
+                        .HasConstraintName("fk_clubapplicants_discorduser_userid");
+
+                    b.Navigation("Club");
+
+                    b.Navigation("User");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.ClubBans", b =>
+                {
+                    b.HasOne("EllieBot.Db.Models.ClubInfo", "Club")
+                        .WithMany("Bans")
+                        .HasForeignKey("ClubId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired()
+                        .HasConstraintName("fk_clubbans_clubs_clubid");
+
+                    b.HasOne("EllieBot.Db.Models.DiscordUser", "User")
+                        .WithMany()
+                        .HasForeignKey("UserId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired()
+                        .HasConstraintName("fk_clubbans_discorduser_userid");
+
+                    b.Navigation("Club");
+
+                    b.Navigation("User");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.ClubInfo", b =>
+                {
+                    b.HasOne("EllieBot.Db.Models.DiscordUser", "Owner")
+                        .WithOne()
+                        .HasForeignKey("EllieBot.Db.Models.ClubInfo", "OwnerId")
+                        .OnDelete(DeleteBehavior.SetNull)
+                        .HasConstraintName("fk_clubs_discorduser_ownerid");
+
+                    b.Navigation("Owner");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.CommandAlias", b =>
+                {
+                    b.HasOne("EllieBot.Db.Models.GuildConfig", null)
+                        .WithMany("CommandAliases")
+                        .HasForeignKey("GuildConfigId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .HasConstraintName("fk_commandalias_guildconfigs_guildconfigid");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.CommandCooldown", b =>
+                {
+                    b.HasOne("EllieBot.Db.Models.GuildConfig", null)
+                        .WithMany("CommandCooldowns")
+                        .HasForeignKey("GuildConfigId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .HasConstraintName("fk_commandcooldown_guildconfigs_guildconfigid");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.DelMsgOnCmdChannel", b =>
+                {
+                    b.HasOne("EllieBot.Db.Models.GuildConfig", null)
+                        .WithMany("DelMsgOnCmdChannels")
+                        .HasForeignKey("GuildConfigId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired()
+                        .HasConstraintName("fk_delmsgoncmdchannel_guildconfigs_guildconfigid");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.DiscordUser", b =>
+                {
+                    b.HasOne("EllieBot.Db.Models.ClubInfo", "Club")
+                        .WithMany("Members")
+                        .HasForeignKey("ClubId")
+                        .OnDelete(DeleteBehavior.NoAction)
+                        .HasConstraintName("fk_discorduser_clubs_clubid");
+
+                    b.Navigation("Club");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.ExcludedItem", b =>
+                {
+                    b.HasOne("EllieBot.Db.Models.XpSettings", "XpSettings")
+                        .WithMany("ExclusionList")
+                        .HasForeignKey("XpSettingsId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .HasConstraintName("fk_excludeditem_xpsettings_xpsettingsid");
+
+                    b.Navigation("XpSettings");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.FeedSub", b =>
+                {
+                    b.HasOne("EllieBot.Db.Models.GuildConfig", "GuildConfig")
+                        .WithMany("FeedSubs")
+                        .HasForeignKey("GuildConfigId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired()
+                        .HasConstraintName("fk_feedsub_guildconfigs_guildconfigid");
+
+                    b.Navigation("GuildConfig");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.FilterChannelId", b =>
+                {
+                    b.HasOne("EllieBot.Db.Models.GuildConfig", null)
+                        .WithMany("FilterInvitesChannelIds")
+                        .HasForeignKey("GuildConfigId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .HasConstraintName("fk_filterchannelid_guildconfigs_guildconfigid");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.FilterLinksChannelId", b =>
+                {
+                    b.HasOne("EllieBot.Db.Models.GuildConfig", null)
+                        .WithMany("FilterLinksChannelIds")
+                        .HasForeignKey("GuildConfigId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .HasConstraintName("fk_filterlinkschannelid_guildconfigs_guildconfigid");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.FilterWordsChannelId", b =>
+                {
+                    b.HasOne("EllieBot.Db.Models.GuildConfig", null)
+                        .WithMany("FilterWordsChannelIds")
+                        .HasForeignKey("GuildConfigId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .HasConstraintName("fk_filterwordschannelid_guildconfigs_guildconfigid");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.FilteredWord", b =>
+                {
+                    b.HasOne("EllieBot.Db.Models.GuildConfig", null)
+                        .WithMany("FilteredWords")
+                        .HasForeignKey("GuildConfigId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .HasConstraintName("fk_filteredword_guildconfigs_guildconfigid");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.FollowedStream", b =>
+                {
+                    b.HasOne("EllieBot.Db.Models.GuildConfig", null)
+                        .WithMany("FollowedStreams")
+                        .HasForeignKey("GuildConfigId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .HasConstraintName("fk_followedstream_guildconfigs_guildconfigid");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.GCChannelId", b =>
+                {
+                    b.HasOne("EllieBot.Db.Models.GuildConfig", "GuildConfig")
+                        .WithMany("GenerateCurrencyChannelIds")
+                        .HasForeignKey("GuildConfigId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .HasConstraintName("fk_gcchannelid_guildconfigs_guildconfigid");
+
+                    b.Navigation("GuildConfig");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.GiveawayUser", b =>
+                {
+                    b.HasOne("EllieBot.Db.Models.GiveawayModel", null)
+                        .WithMany("Participants")
+                        .HasForeignKey("GiveawayId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired()
+                        .HasConstraintName("fk_giveawayuser_giveawaymodel_giveawayid");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.IgnoredLogItem", b =>
+                {
+                    b.HasOne("EllieBot.Db.Models.LogSetting", "LogSetting")
+                        .WithMany("LogIgnores")
+                        .HasForeignKey("LogSettingId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired()
+                        .HasConstraintName("fk_ignoredlogchannels_logsettings_logsettingid");
+
+                    b.Navigation("LogSetting");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.MutedUserId", b =>
+                {
+                    b.HasOne("EllieBot.Db.Models.GuildConfig", null)
+                        .WithMany("MutedUsers")
+                        .HasForeignKey("GuildConfigId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .HasConstraintName("fk_muteduserid_guildconfigs_guildconfigid");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.Permissionv2", b =>
+                {
+                    b.HasOne("EllieBot.Db.Models.GuildConfig", null)
+                        .WithMany("Permissions")
+                        .HasForeignKey("GuildConfigId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .HasConstraintName("fk_permissions_guildconfigs_guildconfigid");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.PlaylistSong", b =>
+                {
+                    b.HasOne("EllieBot.Db.Models.MusicPlaylist", null)
+                        .WithMany("Songs")
+                        .HasForeignKey("MusicPlaylistId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .HasConstraintName("fk_playlistsong_musicplaylists_musicplaylistid");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.Sar", b =>
+                {
+                    b.HasOne("EllieBot.Db.Models.SarGroup", null)
+                        .WithMany("Roles")
+                        .HasForeignKey("SarGroupId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired()
+                        .HasConstraintName("fk_sar_sargroup_sargroupid");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.ShopEntry", b =>
+                {
+                    b.HasOne("EllieBot.Db.Models.GuildConfig", null)
+                        .WithMany("ShopEntries")
+                        .HasForeignKey("GuildConfigId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .HasConstraintName("fk_shopentry_guildconfigs_guildconfigid");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.ShopEntryItem", b =>
+                {
+                    b.HasOne("EllieBot.Db.Models.ShopEntry", null)
+                        .WithMany("Items")
+                        .HasForeignKey("ShopEntryId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .HasConstraintName("fk_shopentryitem_shopentry_shopentryid");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.SlowmodeIgnoredRole", b =>
+                {
+                    b.HasOne("EllieBot.Db.Models.GuildConfig", null)
+                        .WithMany("SlowmodeIgnoredRoles")
+                        .HasForeignKey("GuildConfigId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .HasConstraintName("fk_slowmodeignoredrole_guildconfigs_guildconfigid");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.SlowmodeIgnoredUser", b =>
+                {
+                    b.HasOne("EllieBot.Db.Models.GuildConfig", null)
+                        .WithMany("SlowmodeIgnoredUsers")
+                        .HasForeignKey("GuildConfigId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .HasConstraintName("fk_slowmodeignoreduser_guildconfigs_guildconfigid");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.StreamRoleBlacklistedUser", b =>
+                {
+                    b.HasOne("EllieBot.Db.Models.StreamRoleSettings", "StreamRoleSettings")
+                        .WithMany("Blacklist")
+                        .HasForeignKey("StreamRoleSettingsId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired()
+                        .HasConstraintName("fk_streamroleblacklisteduser_streamrolesettings_streamrolesett~");
+
+                    b.Navigation("StreamRoleSettings");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.StreamRoleSettings", b =>
+                {
+                    b.HasOne("EllieBot.Db.Models.GuildConfig", "GuildConfig")
+                        .WithOne("StreamRole")
+                        .HasForeignKey("EllieBot.Db.Models.StreamRoleSettings", "GuildConfigId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired()
+                        .HasConstraintName("fk_streamrolesettings_guildconfigs_guildconfigid");
+
+                    b.Navigation("GuildConfig");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.StreamRoleWhitelistedUser", b =>
+                {
+                    b.HasOne("EllieBot.Db.Models.StreamRoleSettings", "StreamRoleSettings")
+                        .WithMany("Whitelist")
+                        .HasForeignKey("StreamRoleSettingsId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired()
+                        .HasConstraintName("fk_streamrolewhitelisteduser_streamrolesettings_streamrolesett~");
+
+                    b.Navigation("StreamRoleSettings");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.TodoModel", b =>
+                {
+                    b.HasOne("EllieBot.Db.Models.ArchivedTodoListModel", null)
+                        .WithMany("Items")
+                        .HasForeignKey("ArchiveId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .HasConstraintName("fk_todos_todosarchive_archiveid");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.UnbanTimer", b =>
+                {
+                    b.HasOne("EllieBot.Db.Models.GuildConfig", null)
+                        .WithMany("UnbanTimer")
+                        .HasForeignKey("GuildConfigId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .HasConstraintName("fk_unbantimer_guildconfigs_guildconfigid");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.UnmuteTimer", b =>
+                {
+                    b.HasOne("EllieBot.Db.Models.GuildConfig", null)
+                        .WithMany("UnmuteTimers")
+                        .HasForeignKey("GuildConfigId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .HasConstraintName("fk_unmutetimer_guildconfigs_guildconfigid");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.UnroleTimer", b =>
+                {
+                    b.HasOne("EllieBot.Db.Models.GuildConfig", null)
+                        .WithMany("UnroleTimer")
+                        .HasForeignKey("GuildConfigId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .HasConstraintName("fk_unroletimer_guildconfigs_guildconfigid");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.VcRoleInfo", b =>
+                {
+                    b.HasOne("EllieBot.Db.Models.GuildConfig", null)
+                        .WithMany("VcRoleInfos")
+                        .HasForeignKey("GuildConfigId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .HasConstraintName("fk_vcroleinfo_guildconfigs_guildconfigid");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.WaifuInfo", b =>
+                {
+                    b.HasOne("EllieBot.Db.Models.DiscordUser", "Affinity")
+                        .WithMany()
+                        .HasForeignKey("AffinityId")
+                        .HasConstraintName("fk_waifuinfo_discorduser_affinityid");
+
+                    b.HasOne("EllieBot.Db.Models.DiscordUser", "Claimer")
+                        .WithMany()
+                        .HasForeignKey("ClaimerId")
+                        .HasConstraintName("fk_waifuinfo_discorduser_claimerid");
+
+                    b.HasOne("EllieBot.Db.Models.DiscordUser", "Waifu")
+                        .WithOne()
+                        .HasForeignKey("EllieBot.Db.Models.WaifuInfo", "WaifuId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired()
+                        .HasConstraintName("fk_waifuinfo_discorduser_waifuid");
+
+                    b.Navigation("Affinity");
+
+                    b.Navigation("Claimer");
+
+                    b.Navigation("Waifu");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.WaifuItem", b =>
+                {
+                    b.HasOne("EllieBot.Db.Models.WaifuInfo", "WaifuInfo")
+                        .WithMany("Items")
+                        .HasForeignKey("WaifuInfoId")
+                        .HasConstraintName("fk_waifuitem_waifuinfo_waifuinfoid");
+
+                    b.Navigation("WaifuInfo");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.WaifuUpdate", b =>
+                {
+                    b.HasOne("EllieBot.Db.Models.DiscordUser", "New")
+                        .WithMany()
+                        .HasForeignKey("NewId")
+                        .HasConstraintName("fk_waifuupdates_discorduser_newid");
+
+                    b.HasOne("EllieBot.Db.Models.DiscordUser", "Old")
+                        .WithMany()
+                        .HasForeignKey("OldId")
+                        .HasConstraintName("fk_waifuupdates_discorduser_oldid");
+
+                    b.HasOne("EllieBot.Db.Models.DiscordUser", "User")
+                        .WithMany()
+                        .HasForeignKey("UserId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired()
+                        .HasConstraintName("fk_waifuupdates_discorduser_userid");
+
+                    b.Navigation("New");
+
+                    b.Navigation("Old");
+
+                    b.Navigation("User");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.XpCurrencyReward", b =>
+                {
+                    b.HasOne("EllieBot.Db.Models.XpSettings", "XpSettings")
+                        .WithMany("CurrencyRewards")
+                        .HasForeignKey("XpSettingsId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired()
+                        .HasConstraintName("fk_xpcurrencyreward_xpsettings_xpsettingsid");
+
+                    b.Navigation("XpSettings");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.XpRoleReward", b =>
+                {
+                    b.HasOne("EllieBot.Db.Models.XpSettings", "XpSettings")
+                        .WithMany("RoleRewards")
+                        .HasForeignKey("XpSettingsId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired()
+                        .HasConstraintName("fk_xprolereward_xpsettings_xpsettingsid");
+
+                    b.Navigation("XpSettings");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.XpSettings", b =>
+                {
+                    b.HasOne("EllieBot.Db.Models.GuildConfig", "GuildConfig")
+                        .WithOne("XpSettings")
+                        .HasForeignKey("EllieBot.Db.Models.XpSettings", "GuildConfigId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired()
+                        .HasConstraintName("fk_xpsettings_guildconfigs_guildconfigid");
+
+                    b.Navigation("GuildConfig");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.AntiSpamSetting", b =>
+                {
+                    b.Navigation("IgnoredChannels");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.ArchivedTodoListModel", b =>
+                {
+                    b.Navigation("Items");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.AutoTranslateChannel", b =>
+                {
+                    b.Navigation("Users");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.ClubInfo", b =>
+                {
+                    b.Navigation("Applicants");
+
+                    b.Navigation("Bans");
+
+                    b.Navigation("Members");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.GiveawayModel", b =>
+                {
+                    b.Navigation("Participants");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.GuildConfig", b =>
+                {
+                    b.Navigation("AntiAltSetting");
+
+                    b.Navigation("AntiRaidSetting");
+
+                    b.Navigation("AntiSpamSetting");
+
+                    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("GenerateCurrencyChannelIds");
+
+                    b.Navigation("MutedUsers");
+
+                    b.Navigation("Permissions");
+
+                    b.Navigation("ShopEntries");
+
+                    b.Navigation("SlowmodeIgnoredRoles");
+
+                    b.Navigation("SlowmodeIgnoredUsers");
+
+                    b.Navigation("StreamRole");
+
+                    b.Navigation("UnbanTimer");
+
+                    b.Navigation("UnmuteTimers");
+
+                    b.Navigation("UnroleTimer");
+
+                    b.Navigation("VcRoleInfos");
+
+                    b.Navigation("XpSettings");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.LogSetting", b =>
+                {
+                    b.Navigation("LogIgnores");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.MusicPlaylist", b =>
+                {
+                    b.Navigation("Songs");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.SarGroup", b =>
+                {
+                    b.Navigation("Roles");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.ShopEntry", b =>
+                {
+                    b.Navigation("Items");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.StreamRoleSettings", b =>
+                {
+                    b.Navigation("Blacklist");
+
+                    b.Navigation("Whitelist");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.WaifuInfo", b =>
+                {
+                    b.Navigation("Items");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.XpSettings", b =>
+                {
+                    b.Navigation("CurrencyRewards");
+
+                    b.Navigation("ExclusionList");
+
+                    b.Navigation("RoleRewards");
+                });
+#pragma warning restore 612, 618
+        }
+    }
+}
diff --git a/src/EllieBot/Migrations/PostgreSql/20241208035947_awarded-xp-and-notify-removed.cs b/src/EllieBot/Migrations/PostgreSql/20241208035947_awarded-xp-and-notify-removed.cs
new file mode 100644
index 0000000..a292026
--- /dev/null
+++ b/src/EllieBot/Migrations/PostgreSql/20241208035947_awarded-xp-and-notify-removed.cs
@@ -0,0 +1,107 @@
+using System;
+using Microsoft.EntityFrameworkCore.Migrations;
+using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
+
+#nullable disable
+
+namespace EllieBot.Migrations.PostgreSql
+{
+    /// <inheritdoc />
+    public partial class awardedxpandnotifyremoved : Migration
+    {
+        /// <inheritdoc />
+        protected override void Up(MigrationBuilder migrationBuilder)
+        {
+            migrationBuilder.DropIndex(
+                name: "ix_userxpstats_awardedxp",
+                table: "userxpstats");
+
+            migrationBuilder.DropColumn(
+                name: "awardedxp",
+                table: "userxpstats");
+
+            migrationBuilder.DropColumn(
+                name: "notifyonlevelup",
+                table: "userxpstats");
+
+            migrationBuilder.DropColumn(
+                name: "dateadded",
+                table: "sargroup");
+
+            migrationBuilder.CreateTable(
+                name: "notify",
+                columns: table => new
+                {
+                    id = table.Column<int>(type: "integer", nullable: false)
+                        .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
+                    guildid = table.Column<decimal>(type: "numeric(20,0)", nullable: false),
+                    channelid = table.Column<decimal>(type: "numeric(20,0)", nullable: false),
+                    @event = table.Column<int>(name: "event", type: "integer", nullable: false),
+                    message = table.Column<string>(type: "character varying(10000)", maxLength: 10000, nullable: false)
+                },
+                constraints: table =>
+                {
+                    table.PrimaryKey("pk_notify", x => x.id);
+                    table.UniqueConstraint("ak_notify_guildid_event", x => new { x.guildid, x.@event });
+                });
+
+            migrationBuilder.CreateTable(
+                name: "temprole",
+                columns: table => new
+                {
+                    id = table.Column<int>(type: "integer", nullable: false)
+                        .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
+                    guildid = table.Column<decimal>(type: "numeric(20,0)", nullable: false),
+                    remove = table.Column<bool>(type: "boolean", nullable: false),
+                    roleid = table.Column<decimal>(type: "numeric(20,0)", nullable: false),
+                    userid = table.Column<decimal>(type: "numeric(20,0)", nullable: false),
+                    expiresat = table.Column<DateTime>(type: "timestamp without time zone", nullable: false)
+                },
+                constraints: table =>
+                {
+                    table.PrimaryKey("pk_temprole", x => x.id);
+                    table.UniqueConstraint("ak_temprole_guildid_userid_roleid", x => new { x.guildid, x.userid, x.roleid });
+                });
+
+            migrationBuilder.CreateIndex(
+                name: "ix_temprole_expiresat",
+                table: "temprole",
+                column: "expiresat");
+        }
+
+        /// <inheritdoc />
+        protected override void Down(MigrationBuilder migrationBuilder)
+        {
+            migrationBuilder.DropTable(
+                name: "notify");
+
+            migrationBuilder.DropTable(
+                name: "temprole");
+
+            migrationBuilder.AddColumn<long>(
+                name: "awardedxp",
+                table: "userxpstats",
+                type: "bigint",
+                nullable: false,
+                defaultValue: 0L);
+
+            migrationBuilder.AddColumn<int>(
+                name: "notifyonlevelup",
+                table: "userxpstats",
+                type: "integer",
+                nullable: false,
+                defaultValue: 0);
+
+            migrationBuilder.AddColumn<DateTime>(
+                name: "dateadded",
+                table: "sargroup",
+                type: "timestamp without time zone",
+                nullable: true);
+
+            migrationBuilder.CreateIndex(
+                name: "ix_userxpstats_awardedxp",
+                table: "userxpstats",
+                column: "awardedxp");
+        }
+    }
+}
diff --git a/src/EllieBot/Migrations/PostgreSql/PostgreSqlContextModelSnapshot.cs b/src/EllieBot/Migrations/PostgreSql/PostgreSqlContextModelSnapshot.cs
index b340473..bb98853 100644
--- a/src/EllieBot/Migrations/PostgreSql/PostgreSqlContextModelSnapshot.cs
+++ b/src/EllieBot/Migrations/PostgreSql/PostgreSqlContextModelSnapshot.cs
@@ -1817,6 +1817,42 @@ namespace EllieBot.Migrations.PostgreSql
                     b.ToTable("ncpixel", (string)null);
                 });
 
+            modelBuilder.Entity("EllieBot.Db.Models.Notify", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("integer")
+                        .HasColumnName("id");
+
+                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
+
+                    b.Property<decimal>("ChannelId")
+                        .HasColumnType("numeric(20,0)")
+                        .HasColumnName("channelid");
+
+                    b.Property<int>("Event")
+                        .HasColumnType("integer")
+                        .HasColumnName("event");
+
+                    b.Property<decimal>("GuildId")
+                        .HasColumnType("numeric(20,0)")
+                        .HasColumnName("guildid");
+
+                    b.Property<string>("Message")
+                        .IsRequired()
+                        .HasMaxLength(10000)
+                        .HasColumnType("character varying(10000)")
+                        .HasColumnName("message");
+
+                    b.HasKey("Id")
+                        .HasName("pk_notify");
+
+                    b.HasAlternateKey("GuildId", "Event")
+                        .HasName("ak_notify_guildid_event");
+
+                    b.ToTable("notify", (string)null);
+                });
+
             modelBuilder.Entity("EllieBot.Db.Models.PatronUser", b =>
                 {
                     b.Property<decimal>("UserId")
@@ -2339,10 +2375,6 @@ namespace EllieBot.Migrations.PostgreSql
 
                     NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
 
-                    b.Property<DateTime?>("DateAdded")
-                        .HasColumnType("timestamp without time zone")
-                        .HasColumnName("dateadded");
-
                     b.Property<int>("GroupNumber")
                         .HasColumnType("integer")
                         .HasColumnName("groupnumber");
@@ -2706,6 +2738,47 @@ namespace EllieBot.Migrations.PostgreSql
                     b.ToTable("streamrolewhitelisteduser", (string)null);
                 });
 
+            modelBuilder.Entity("EllieBot.Db.Models.TempRole", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("integer")
+                        .HasColumnName("id");
+
+                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
+
+                    b.Property<DateTime>("ExpiresAt")
+                        .HasColumnType("timestamp without time zone")
+                        .HasColumnName("expiresat");
+
+                    b.Property<decimal>("GuildId")
+                        .HasColumnType("numeric(20,0)")
+                        .HasColumnName("guildid");
+
+                    b.Property<bool>("Remove")
+                        .HasColumnType("boolean")
+                        .HasColumnName("remove");
+
+                    b.Property<decimal>("RoleId")
+                        .HasColumnType("numeric(20,0)")
+                        .HasColumnName("roleid");
+
+                    b.Property<decimal>("UserId")
+                        .HasColumnType("numeric(20,0)")
+                        .HasColumnName("userid");
+
+                    b.HasKey("Id")
+                        .HasName("pk_temprole");
+
+                    b.HasAlternateKey("GuildId", "UserId", "RoleId")
+                        .HasName("ak_temprole_guildid_userid_roleid");
+
+                    b.HasIndex("ExpiresAt")
+                        .HasDatabaseName("ix_temprole_expiresat");
+
+                    b.ToTable("temprole", (string)null);
+                });
+
             modelBuilder.Entity("EllieBot.Db.Models.TodoModel", b =>
                 {
                     b.Property<int>("Id")
@@ -2862,10 +2935,6 @@ namespace EllieBot.Migrations.PostgreSql
 
                     NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
 
-                    b.Property<long>("AwardedXp")
-                        .HasColumnType("bigint")
-                        .HasColumnName("awardedxp");
-
                     b.Property<DateTime?>("DateAdded")
                         .HasColumnType("timestamp without time zone")
                         .HasColumnName("dateadded");
@@ -2874,10 +2943,6 @@ namespace EllieBot.Migrations.PostgreSql
                         .HasColumnType("numeric(20,0)")
                         .HasColumnName("guildid");
 
-                    b.Property<int>("NotifyOnLevelUp")
-                        .HasColumnType("integer")
-                        .HasColumnName("notifyonlevelup");
-
                     b.Property<decimal>("UserId")
                         .HasColumnType("numeric(20,0)")
                         .HasColumnName("userid");
@@ -2889,9 +2954,6 @@ namespace EllieBot.Migrations.PostgreSql
                     b.HasKey("Id")
                         .HasName("pk_userxpstats");
 
-                    b.HasIndex("AwardedXp")
-                        .HasDatabaseName("ix_userxpstats_awardedxp");
-
                     b.HasIndex("GuildId")
                         .HasDatabaseName("ix_userxpstats_guildid");
 
diff --git a/src/EllieBot/Migrations/Sqlite/20241208035845_awarded-xp-and-notify-removed.Designer.cs b/src/EllieBot/Migrations/Sqlite/20241208035845_awarded-xp-and-notify-removed.Designer.cs
new file mode 100644
index 0000000..5424538
--- /dev/null
+++ b/src/EllieBot/Migrations/Sqlite/20241208035845_awarded-xp-and-notify-removed.Designer.cs
@@ -0,0 +1,3171 @@
+// <auto-generated />
+using System;
+using EllieBot.Db;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.Infrastructure;
+using Microsoft.EntityFrameworkCore.Migrations;
+using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
+
+#nullable disable
+
+namespace EllieBot.Migrations
+{
+    [DbContext(typeof(SqliteContext))]
+    [Migration("20241208035845_awarded-xp-and-notify-removed")]
+    partial class awardedxpandnotifyremoved
+    {
+        /// <inheritdoc />
+        protected override void BuildTargetModel(ModelBuilder modelBuilder)
+        {
+#pragma warning disable 612, 618
+            modelBuilder.HasAnnotation("ProductVersion", "8.0.8");
+
+            modelBuilder.Entity("EllieBot.Db.Models.AntiAltSetting", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("INTEGER");
+
+                    b.Property<int>("Action")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<int>("ActionDurationMinutes")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<int>("GuildConfigId")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<TimeSpan>("MinAge")
+                        .HasColumnType("TEXT");
+
+                    b.Property<ulong?>("RoleId")
+                        .HasColumnType("INTEGER");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("GuildConfigId")
+                        .IsUnique();
+
+                    b.ToTable("AntiAltSetting");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.AntiRaidSetting", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("INTEGER");
+
+                    b.Property<int>("Action")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<DateTime?>("DateAdded")
+                        .HasColumnType("TEXT");
+
+                    b.Property<int>("GuildConfigId")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<int>("PunishDuration")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<int>("Seconds")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<int>("UserThreshold")
+                        .HasColumnType("INTEGER");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("GuildConfigId")
+                        .IsUnique();
+
+                    b.ToTable("AntiRaidSetting");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.AntiSpamIgnore", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("INTEGER");
+
+                    b.Property<int?>("AntiSpamSettingId")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<ulong>("ChannelId")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<DateTime?>("DateAdded")
+                        .HasColumnType("TEXT");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("AntiSpamSettingId");
+
+                    b.ToTable("AntiSpamIgnore");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.AntiSpamSetting", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("INTEGER");
+
+                    b.Property<int>("Action")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<DateTime?>("DateAdded")
+                        .HasColumnType("TEXT");
+
+                    b.Property<int>("GuildConfigId")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<int>("MessageThreshold")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<int>("MuteTime")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<ulong?>("RoleId")
+                        .HasColumnType("INTEGER");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("GuildConfigId")
+                        .IsUnique();
+
+                    b.ToTable("AntiSpamSetting");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.ArchivedTodoListModel", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("INTEGER");
+
+                    b.Property<string>("Name")
+                        .HasColumnType("TEXT");
+
+                    b.Property<ulong>("UserId")
+                        .HasColumnType("INTEGER");
+
+                    b.HasKey("Id");
+
+                    b.ToTable("TodosArchive");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.AutoCommand", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("INTEGER");
+
+                    b.Property<ulong>("ChannelId")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<string>("ChannelName")
+                        .HasColumnType("TEXT");
+
+                    b.Property<string>("CommandText")
+                        .HasColumnType("TEXT");
+
+                    b.Property<DateTime?>("DateAdded")
+                        .HasColumnType("TEXT");
+
+                    b.Property<ulong?>("GuildId")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<string>("GuildName")
+                        .HasColumnType("TEXT");
+
+                    b.Property<int>("Interval")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<ulong?>("VoiceChannelId")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<string>("VoiceChannelName")
+                        .HasColumnType("TEXT");
+
+                    b.HasKey("Id");
+
+                    b.ToTable("AutoCommands");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.AutoPublishChannel", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("INTEGER");
+
+                    b.Property<ulong>("ChannelId")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<DateTime?>("DateAdded")
+                        .HasColumnType("TEXT");
+
+                    b.Property<ulong>("GuildId")
+                        .HasColumnType("INTEGER");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("GuildId")
+                        .IsUnique();
+
+                    b.ToTable("AutoPublishChannel");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.AutoTranslateChannel", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("INTEGER");
+
+                    b.Property<bool>("AutoDelete")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<ulong>("ChannelId")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<DateTime?>("DateAdded")
+                        .HasColumnType("TEXT");
+
+                    b.Property<ulong>("GuildId")
+                        .HasColumnType("INTEGER");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("ChannelId")
+                        .IsUnique();
+
+                    b.HasIndex("GuildId");
+
+                    b.ToTable("AutoTranslateChannels");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.AutoTranslateUser", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("INTEGER");
+
+                    b.Property<int>("ChannelId")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<DateTime?>("DateAdded")
+                        .HasColumnType("TEXT");
+
+                    b.Property<string>("Source")
+                        .HasColumnType("TEXT");
+
+                    b.Property<string>("Target")
+                        .HasColumnType("TEXT");
+
+                    b.Property<ulong>("UserId")
+                        .HasColumnType("INTEGER");
+
+                    b.HasKey("Id");
+
+                    b.HasAlternateKey("ChannelId", "UserId");
+
+                    b.ToTable("AutoTranslateUsers");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.BanTemplate", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("INTEGER");
+
+                    b.Property<DateTime?>("DateAdded")
+                        .HasColumnType("TEXT");
+
+                    b.Property<ulong>("GuildId")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<int?>("PruneDays")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<string>("Text")
+                        .HasColumnType("TEXT");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("GuildId")
+                        .IsUnique();
+
+                    b.ToTable("BanTemplates");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.BankUser", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("INTEGER");
+
+                    b.Property<long>("Balance")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<DateTime?>("DateAdded")
+                        .HasColumnType("TEXT");
+
+                    b.Property<ulong>("UserId")
+                        .HasColumnType("INTEGER");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("UserId")
+                        .IsUnique();
+
+                    b.ToTable("BankUsers");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.BlacklistEntry", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("INTEGER");
+
+                    b.Property<DateTime?>("DateAdded")
+                        .HasColumnType("TEXT");
+
+                    b.Property<ulong>("ItemId")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<int>("Type")
+                        .HasColumnType("INTEGER");
+
+                    b.HasKey("Id");
+
+                    b.ToTable("Blacklist");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.ButtonRole", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("INTEGER");
+
+                    b.Property<string>("ButtonId")
+                        .IsRequired()
+                        .HasMaxLength(200)
+                        .HasColumnType("TEXT");
+
+                    b.Property<ulong>("ChannelId")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<string>("Emote")
+                        .IsRequired()
+                        .HasMaxLength(100)
+                        .HasColumnType("TEXT");
+
+                    b.Property<bool>("Exclusive")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<ulong>("GuildId")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<string>("Label")
+                        .IsRequired()
+                        .HasMaxLength(50)
+                        .HasColumnType("TEXT");
+
+                    b.Property<ulong>("MessageId")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<int>("Position")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<ulong>("RoleId")
+                        .HasColumnType("INTEGER");
+
+                    b.HasKey("Id");
+
+                    b.HasAlternateKey("RoleId", "MessageId");
+
+                    b.HasIndex("GuildId");
+
+                    b.ToTable("ButtonRole");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.ClubApplicants", b =>
+                {
+                    b.Property<int>("ClubId")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<int>("UserId")
+                        .HasColumnType("INTEGER");
+
+                    b.HasKey("ClubId", "UserId");
+
+                    b.HasIndex("UserId");
+
+                    b.ToTable("ClubApplicants");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.ClubBans", b =>
+                {
+                    b.Property<int>("ClubId")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<int>("UserId")
+                        .HasColumnType("INTEGER");
+
+                    b.HasKey("ClubId", "UserId");
+
+                    b.HasIndex("UserId");
+
+                    b.ToTable("ClubBans");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.ClubInfo", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("INTEGER");
+
+                    b.Property<DateTime?>("DateAdded")
+                        .HasColumnType("TEXT");
+
+                    b.Property<string>("Description")
+                        .HasColumnType("TEXT");
+
+                    b.Property<string>("ImageUrl")
+                        .HasColumnType("TEXT");
+
+                    b.Property<string>("Name")
+                        .HasMaxLength(20)
+                        .HasColumnType("TEXT");
+
+                    b.Property<int?>("OwnerId")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<int>("Xp")
+                        .HasColumnType("INTEGER");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("Name")
+                        .IsUnique();
+
+                    b.HasIndex("OwnerId")
+                        .IsUnique();
+
+                    b.ToTable("Clubs");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.CommandAlias", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("INTEGER");
+
+                    b.Property<DateTime?>("DateAdded")
+                        .HasColumnType("TEXT");
+
+                    b.Property<int?>("GuildConfigId")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<string>("Mapping")
+                        .HasColumnType("TEXT");
+
+                    b.Property<string>("Trigger")
+                        .HasColumnType("TEXT");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("GuildConfigId");
+
+                    b.ToTable("CommandAlias");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.CommandCooldown", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("INTEGER");
+
+                    b.Property<string>("CommandName")
+                        .HasColumnType("TEXT");
+
+                    b.Property<DateTime?>("DateAdded")
+                        .HasColumnType("TEXT");
+
+                    b.Property<int?>("GuildConfigId")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<int>("Seconds")
+                        .HasColumnType("INTEGER");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("GuildConfigId");
+
+                    b.ToTable("CommandCooldown");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.CurrencyTransaction", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("INTEGER");
+
+                    b.Property<long>("Amount")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<DateTime?>("DateAdded")
+                        .HasColumnType("TEXT");
+
+                    b.Property<string>("Extra")
+                        .IsRequired()
+                        .HasColumnType("TEXT");
+
+                    b.Property<string>("Note")
+                        .HasColumnType("TEXT");
+
+                    b.Property<ulong?>("OtherId")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("INTEGER")
+                        .HasDefaultValueSql("NULL");
+
+                    b.Property<string>("Type")
+                        .IsRequired()
+                        .HasColumnType("TEXT");
+
+                    b.Property<ulong>("UserId")
+                        .HasColumnType("INTEGER");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("UserId");
+
+                    b.ToTable("CurrencyTransactions");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.DelMsgOnCmdChannel", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("INTEGER");
+
+                    b.Property<ulong>("ChannelId")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<DateTime?>("DateAdded")
+                        .HasColumnType("TEXT");
+
+                    b.Property<int>("GuildConfigId")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<bool>("State")
+                        .HasColumnType("INTEGER");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("GuildConfigId");
+
+                    b.ToTable("DelMsgOnCmdChannel");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.DiscordPermOverride", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("INTEGER");
+
+                    b.Property<string>("Command")
+                        .HasColumnType("TEXT");
+
+                    b.Property<DateTime?>("DateAdded")
+                        .HasColumnType("TEXT");
+
+                    b.Property<ulong?>("GuildId")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<ulong>("Perm")
+                        .HasColumnType("INTEGER");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("GuildId", "Command")
+                        .IsUnique();
+
+                    b.ToTable("DiscordPermOverrides");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.DiscordUser", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("INTEGER");
+
+                    b.Property<string>("AvatarId")
+                        .HasColumnType("TEXT");
+
+                    b.Property<int?>("ClubId")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<long>("CurrencyAmount")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("INTEGER")
+                        .HasDefaultValue(0L);
+
+                    b.Property<DateTime?>("DateAdded")
+                        .HasColumnType("TEXT");
+
+                    b.Property<bool>("IsClubAdmin")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("INTEGER")
+                        .HasDefaultValue(false);
+
+                    b.Property<int>("NotifyOnLevelUp")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("INTEGER")
+                        .HasDefaultValue(0);
+
+                    b.Property<long>("TotalXp")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("INTEGER")
+                        .HasDefaultValue(0L);
+
+                    b.Property<ulong>("UserId")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<string>("Username")
+                        .HasColumnType("TEXT");
+
+                    b.HasKey("Id");
+
+                    b.HasAlternateKey("UserId");
+
+                    b.HasIndex("ClubId");
+
+                    b.HasIndex("CurrencyAmount");
+
+                    b.HasIndex("TotalXp");
+
+                    b.HasIndex("UserId");
+
+                    b.HasIndex("Username");
+
+                    b.ToTable("DiscordUser");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.EllieExpression", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("INTEGER");
+
+                    b.Property<bool>("AllowTarget")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<bool>("AutoDeleteTrigger")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<bool>("ContainsAnywhere")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<DateTime?>("DateAdded")
+                        .HasColumnType("TEXT");
+
+                    b.Property<bool>("DmResponse")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<ulong?>("GuildId")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<string>("Reactions")
+                        .HasColumnType("TEXT");
+
+                    b.Property<string>("Response")
+                        .HasColumnType("TEXT");
+
+                    b.Property<string>("Trigger")
+                        .HasColumnType("TEXT");
+
+                    b.HasKey("Id");
+
+                    b.ToTable("Expressions");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.ExcludedItem", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("INTEGER");
+
+                    b.Property<DateTime?>("DateAdded")
+                        .HasColumnType("TEXT");
+
+                    b.Property<ulong>("ItemId")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<int>("ItemType")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<int?>("XpSettingsId")
+                        .HasColumnType("INTEGER");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("XpSettingsId");
+
+                    b.ToTable("ExcludedItem");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.FeedSub", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("INTEGER");
+
+                    b.Property<ulong>("ChannelId")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<DateTime?>("DateAdded")
+                        .HasColumnType("TEXT");
+
+                    b.Property<int>("GuildConfigId")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<string>("Message")
+                        .HasColumnType("TEXT");
+
+                    b.Property<string>("Url")
+                        .IsRequired()
+                        .HasColumnType("TEXT");
+
+                    b.HasKey("Id");
+
+                    b.HasAlternateKey("GuildConfigId", "Url");
+
+                    b.ToTable("FeedSub");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.FilterChannelId", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("INTEGER");
+
+                    b.Property<ulong>("ChannelId")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<DateTime?>("DateAdded")
+                        .HasColumnType("TEXT");
+
+                    b.Property<int?>("GuildConfigId")
+                        .HasColumnType("INTEGER");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("GuildConfigId");
+
+                    b.ToTable("FilterChannelId");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.FilterLinksChannelId", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("INTEGER");
+
+                    b.Property<ulong>("ChannelId")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<DateTime?>("DateAdded")
+                        .HasColumnType("TEXT");
+
+                    b.Property<int?>("GuildConfigId")
+                        .HasColumnType("INTEGER");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("GuildConfigId");
+
+                    b.ToTable("FilterLinksChannelId");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.FilterWordsChannelId", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("INTEGER");
+
+                    b.Property<ulong>("ChannelId")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<DateTime?>("DateAdded")
+                        .HasColumnType("TEXT");
+
+                    b.Property<int?>("GuildConfigId")
+                        .HasColumnType("INTEGER");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("GuildConfigId");
+
+                    b.ToTable("FilterWordsChannelId");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.FilteredWord", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("INTEGER");
+
+                    b.Property<DateTime?>("DateAdded")
+                        .HasColumnType("TEXT");
+
+                    b.Property<int?>("GuildConfigId")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<string>("Word")
+                        .HasColumnType("TEXT");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("GuildConfigId");
+
+                    b.ToTable("FilteredWord");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.FlagTranslateChannel", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("INTEGER");
+
+                    b.Property<ulong>("ChannelId")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<DateTime?>("DateAdded")
+                        .HasColumnType("TEXT");
+
+                    b.Property<ulong>("GuildId")
+                        .HasColumnType("INTEGER");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("GuildId", "ChannelId")
+                        .IsUnique();
+
+                    b.ToTable("FlagTranslateChannel");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.FollowedStream", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("INTEGER");
+
+                    b.Property<ulong>("ChannelId")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<DateTime?>("DateAdded")
+                        .HasColumnType("TEXT");
+
+                    b.Property<int?>("GuildConfigId")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<ulong>("GuildId")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<string>("Message")
+                        .HasColumnType("TEXT");
+
+                    b.Property<int>("Type")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<string>("Username")
+                        .HasColumnType("TEXT");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("GuildConfigId");
+
+                    b.ToTable("FollowedStream");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.GCChannelId", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("INTEGER");
+
+                    b.Property<ulong>("ChannelId")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<DateTime?>("DateAdded")
+                        .HasColumnType("TEXT");
+
+                    b.Property<int?>("GuildConfigId")
+                        .HasColumnType("INTEGER");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("GuildConfigId");
+
+                    b.ToTable("GCChannelId");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.GamblingStats", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("INTEGER");
+
+                    b.Property<decimal>("Bet")
+                        .HasColumnType("TEXT");
+
+                    b.Property<DateTime?>("DateAdded")
+                        .HasColumnType("TEXT");
+
+                    b.Property<string>("Feature")
+                        .HasColumnType("TEXT");
+
+                    b.Property<decimal>("PaidOut")
+                        .HasColumnType("TEXT");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("Feature")
+                        .IsUnique();
+
+                    b.ToTable("GamblingStats");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.GiveawayModel", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("INTEGER");
+
+                    b.Property<ulong>("ChannelId")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<DateTime>("EndsAt")
+                        .HasColumnType("TEXT");
+
+                    b.Property<ulong>("GuildId")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<string>("Message")
+                        .HasColumnType("TEXT");
+
+                    b.Property<ulong>("MessageId")
+                        .HasColumnType("INTEGER");
+
+                    b.HasKey("Id");
+
+                    b.ToTable("GiveawayModel");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.GiveawayUser", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("INTEGER");
+
+                    b.Property<int>("GiveawayId")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<string>("Name")
+                        .HasColumnType("TEXT");
+
+                    b.Property<ulong>("UserId")
+                        .HasColumnType("INTEGER");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("GiveawayId", "UserId")
+                        .IsUnique();
+
+                    b.ToTable("GiveawayUser");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.GuildColors", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("INTEGER");
+
+                    b.Property<string>("ErrorColor")
+                        .HasMaxLength(9)
+                        .HasColumnType("TEXT");
+
+                    b.Property<ulong>("GuildId")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<string>("OkColor")
+                        .HasMaxLength(9)
+                        .HasColumnType("TEXT");
+
+                    b.Property<string>("PendingColor")
+                        .HasMaxLength(9)
+                        .HasColumnType("TEXT");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("GuildId")
+                        .IsUnique();
+
+                    b.ToTable("GuildColors");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.GuildConfig", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("INTEGER");
+
+                    b.Property<string>("AutoAssignRoleIds")
+                        .HasColumnType("TEXT");
+
+                    b.Property<bool>("AutoDeleteSelfAssignedRoleMessages")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<bool>("CleverbotEnabled")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<DateTime?>("DateAdded")
+                        .HasColumnType("TEXT");
+
+                    b.Property<bool>("DeleteMessageOnCommand")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<bool>("DeleteStreamOnlineMessage")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<bool>("DisableGlobalExpressions")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<bool>("ExclusiveSelfAssignedRoles")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<bool>("FilterInvites")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<bool>("FilterLinks")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<bool>("FilterWords")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<ulong?>("GameVoiceChannel")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<ulong>("GuildId")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<string>("Locale")
+                        .HasColumnType("TEXT");
+
+                    b.Property<string>("MuteRoleName")
+                        .HasColumnType("TEXT");
+
+                    b.Property<bool>("NotifyStreamOffline")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<string>("PermissionRole")
+                        .HasColumnType("TEXT");
+
+                    b.Property<string>("Prefix")
+                        .HasColumnType("TEXT");
+
+                    b.Property<bool>("StickyRoles")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<string>("TimeZoneId")
+                        .HasColumnType("TEXT");
+
+                    b.Property<bool>("VerboseErrors")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("INTEGER")
+                        .HasDefaultValue(true);
+
+                    b.Property<bool>("VerbosePermissions")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<int>("WarnExpireAction")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<int>("WarnExpireHours")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<bool>("WarningsInitialized")
+                        .HasColumnType("INTEGER");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("GuildId")
+                        .IsUnique();
+
+                    b.HasIndex("WarnExpireHours");
+
+                    b.ToTable("GuildConfigs");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.HoneypotChannel", b =>
+                {
+                    b.Property<ulong>("GuildId")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("INTEGER");
+
+                    b.Property<ulong>("ChannelId")
+                        .HasColumnType("INTEGER");
+
+                    b.HasKey("GuildId");
+
+                    b.ToTable("HoneyPotChannels");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.IgnoredLogItem", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("INTEGER");
+
+                    b.Property<DateTime?>("DateAdded")
+                        .HasColumnType("TEXT");
+
+                    b.Property<int>("ItemType")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<ulong>("LogItemId")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<int>("LogSettingId")
+                        .HasColumnType("INTEGER");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("LogSettingId", "LogItemId", "ItemType")
+                        .IsUnique();
+
+                    b.ToTable("IgnoredLogChannels");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.ImageOnlyChannel", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("INTEGER");
+
+                    b.Property<ulong>("ChannelId")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<DateTime?>("DateAdded")
+                        .HasColumnType("TEXT");
+
+                    b.Property<ulong>("GuildId")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<int>("Type")
+                        .HasColumnType("INTEGER");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("ChannelId")
+                        .IsUnique();
+
+                    b.ToTable("ImageOnlyChannels");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.LogSetting", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("INTEGER");
+
+                    b.Property<ulong?>("ChannelCreatedId")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<ulong?>("ChannelDestroyedId")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<ulong?>("ChannelUpdatedId")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<DateTime?>("DateAdded")
+                        .HasColumnType("TEXT");
+
+                    b.Property<ulong>("GuildId")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<ulong?>("LogOtherId")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<ulong?>("LogUserPresenceId")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<ulong?>("LogVoicePresenceId")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<ulong?>("LogVoicePresenceTTSId")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<ulong?>("LogWarnsId")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<ulong?>("MessageDeletedId")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<ulong?>("MessageUpdatedId")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<ulong?>("ThreadCreatedId")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<ulong?>("ThreadDeletedId")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<ulong?>("UserBannedId")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<ulong?>("UserJoinedId")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<ulong?>("UserLeftId")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<ulong?>("UserMutedId")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<ulong?>("UserUnbannedId")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<ulong?>("UserUpdatedId")
+                        .HasColumnType("INTEGER");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("GuildId")
+                        .IsUnique();
+
+                    b.ToTable("LogSettings");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.MusicPlayerSettings", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("INTEGER");
+
+                    b.Property<bool>("AutoDisconnect")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<bool>("AutoPlay")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<ulong>("GuildId")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<ulong?>("MusicChannelId")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<int>("PlayerRepeat")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<int>("QualityPreset")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<int>("Volume")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("INTEGER")
+                        .HasDefaultValue(100);
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("GuildId")
+                        .IsUnique();
+
+                    b.ToTable("MusicPlayerSettings");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.MusicPlaylist", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("INTEGER");
+
+                    b.Property<string>("Author")
+                        .HasColumnType("TEXT");
+
+                    b.Property<ulong>("AuthorId")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<DateTime?>("DateAdded")
+                        .HasColumnType("TEXT");
+
+                    b.Property<string>("Name")
+                        .HasColumnType("TEXT");
+
+                    b.HasKey("Id");
+
+                    b.ToTable("MusicPlaylists");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.MutedUserId", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("INTEGER");
+
+                    b.Property<DateTime?>("DateAdded")
+                        .HasColumnType("TEXT");
+
+                    b.Property<int?>("GuildConfigId")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<ulong>("UserId")
+                        .HasColumnType("INTEGER");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("GuildConfigId");
+
+                    b.ToTable("MutedUserId");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.NCPixel", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("INTEGER");
+
+                    b.Property<uint>("Color")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<ulong>("OwnerId")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<int>("Position")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<long>("Price")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<string>("Text")
+                        .IsRequired()
+                        .HasMaxLength(256)
+                        .HasColumnType("TEXT");
+
+                    b.HasKey("Id");
+
+                    b.HasAlternateKey("Position");
+
+                    b.HasIndex("OwnerId");
+
+                    b.ToTable("NCPixel");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.Notify", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("INTEGER");
+
+                    b.Property<ulong>("ChannelId")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<int>("Event")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<ulong>("GuildId")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<string>("Message")
+                        .IsRequired()
+                        .HasMaxLength(10000)
+                        .HasColumnType("TEXT");
+
+                    b.HasKey("Id");
+
+                    b.HasAlternateKey("GuildId", "Event");
+
+                    b.ToTable("Notify");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.PatronUser", b =>
+                {
+                    b.Property<ulong>("UserId")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("INTEGER");
+
+                    b.Property<int>("AmountCents")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<DateTime>("LastCharge")
+                        .HasColumnType("TEXT");
+
+                    b.Property<string>("UniquePlatformUserId")
+                        .HasColumnType("TEXT");
+
+                    b.Property<DateTime>("ValidThru")
+                        .HasColumnType("TEXT");
+
+                    b.HasKey("UserId");
+
+                    b.HasIndex("UniquePlatformUserId")
+                        .IsUnique();
+
+                    b.ToTable("Patrons");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.Permissionv2", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("INTEGER");
+
+                    b.Property<DateTime?>("DateAdded")
+                        .HasColumnType("TEXT");
+
+                    b.Property<int?>("GuildConfigId")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<int>("Index")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<bool>("IsCustomCommand")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<int>("PrimaryTarget")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<ulong>("PrimaryTargetId")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<int>("SecondaryTarget")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<string>("SecondaryTargetName")
+                        .HasColumnType("TEXT");
+
+                    b.Property<bool>("State")
+                        .HasColumnType("INTEGER");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("GuildConfigId");
+
+                    b.ToTable("Permissions");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.PlantedCurrency", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("INTEGER");
+
+                    b.Property<long>("Amount")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<ulong>("ChannelId")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<DateTime?>("DateAdded")
+                        .HasColumnType("TEXT");
+
+                    b.Property<ulong>("GuildId")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<ulong>("MessageId")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<string>("Password")
+                        .HasColumnType("TEXT");
+
+                    b.Property<ulong>("UserId")
+                        .HasColumnType("INTEGER");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("ChannelId");
+
+                    b.HasIndex("MessageId")
+                        .IsUnique();
+
+                    b.ToTable("PlantedCurrency");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.PlaylistSong", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("INTEGER");
+
+                    b.Property<DateTime?>("DateAdded")
+                        .HasColumnType("TEXT");
+
+                    b.Property<int?>("MusicPlaylistId")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<string>("Provider")
+                        .HasColumnType("TEXT");
+
+                    b.Property<int>("ProviderType")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<string>("Query")
+                        .HasColumnType("TEXT");
+
+                    b.Property<string>("Title")
+                        .HasColumnType("TEXT");
+
+                    b.Property<string>("Uri")
+                        .HasColumnType("TEXT");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("MusicPlaylistId");
+
+                    b.ToTable("PlaylistSong");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.Quote", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("INTEGER");
+
+                    b.Property<ulong>("AuthorId")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<string>("AuthorName")
+                        .IsRequired()
+                        .HasColumnType("TEXT");
+
+                    b.Property<DateTime?>("DateAdded")
+                        .HasColumnType("TEXT");
+
+                    b.Property<ulong>("GuildId")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<string>("Keyword")
+                        .IsRequired()
+                        .HasColumnType("TEXT");
+
+                    b.Property<string>("Text")
+                        .IsRequired()
+                        .HasColumnType("TEXT");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("GuildId");
+
+                    b.HasIndex("Keyword");
+
+                    b.ToTable("Quotes");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.ReactionRoleV2", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("INTEGER");
+
+                    b.Property<ulong>("ChannelId")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<DateTime?>("DateAdded")
+                        .HasColumnType("TEXT");
+
+                    b.Property<string>("Emote")
+                        .HasMaxLength(100)
+                        .HasColumnType("TEXT");
+
+                    b.Property<int>("Group")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<ulong>("GuildId")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<int>("LevelReq")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<ulong>("MessageId")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<ulong>("RoleId")
+                        .HasColumnType("INTEGER");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("GuildId");
+
+                    b.HasIndex("MessageId", "Emote")
+                        .IsUnique();
+
+                    b.ToTable("ReactionRoles");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.Reminder", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("INTEGER");
+
+                    b.Property<ulong>("ChannelId")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<DateTime?>("DateAdded")
+                        .HasColumnType("TEXT");
+
+                    b.Property<bool>("IsPrivate")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<string>("Message")
+                        .HasColumnType("TEXT");
+
+                    b.Property<ulong>("ServerId")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<int>("Type")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<ulong>("UserId")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<DateTime>("When")
+                        .HasColumnType("TEXT");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("When");
+
+                    b.ToTable("Reminders");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.Repeater", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("INTEGER");
+
+                    b.Property<ulong>("ChannelId")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<DateTime>("DateAdded")
+                        .HasColumnType("TEXT");
+
+                    b.Property<ulong>("GuildId")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<TimeSpan>("Interval")
+                        .HasColumnType("TEXT");
+
+                    b.Property<ulong?>("LastMessageId")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<string>("Message")
+                        .HasColumnType("TEXT");
+
+                    b.Property<bool>("NoRedundant")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<TimeSpan?>("StartTimeOfDay")
+                        .HasColumnType("TEXT");
+
+                    b.HasKey("Id");
+
+                    b.ToTable("Repeaters");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.RewardedUser", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("INTEGER");
+
+                    b.Property<long>("AmountRewardedThisMonth")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<DateTime?>("DateAdded")
+                        .HasColumnType("TEXT");
+
+                    b.Property<DateTime>("LastReward")
+                        .HasColumnType("TEXT");
+
+                    b.Property<string>("PlatformUserId")
+                        .HasColumnType("TEXT");
+
+                    b.Property<ulong>("UserId")
+                        .HasColumnType("INTEGER");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("PlatformUserId")
+                        .IsUnique();
+
+                    b.ToTable("RewardedUsers");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.RotatingPlayingStatus", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("INTEGER");
+
+                    b.Property<DateTime?>("DateAdded")
+                        .HasColumnType("TEXT");
+
+                    b.Property<string>("Status")
+                        .HasColumnType("TEXT");
+
+                    b.Property<int>("Type")
+                        .HasColumnType("INTEGER");
+
+                    b.HasKey("Id");
+
+                    b.ToTable("RotatingStatus");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.Sar", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("INTEGER");
+
+                    b.Property<ulong>("GuildId")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<int>("LevelReq")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<ulong>("RoleId")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<int>("SarGroupId")
+                        .HasColumnType("INTEGER");
+
+                    b.HasKey("Id");
+
+                    b.HasAlternateKey("GuildId", "RoleId");
+
+                    b.HasIndex("SarGroupId");
+
+                    b.ToTable("Sar");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.SarAutoDelete", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("INTEGER");
+
+                    b.Property<ulong>("GuildId")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<bool>("IsEnabled")
+                        .HasColumnType("INTEGER");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("GuildId")
+                        .IsUnique();
+
+                    b.ToTable("SarAutoDelete");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.SarGroup", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("INTEGER");
+
+                    b.Property<int>("GroupNumber")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<ulong>("GuildId")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<bool>("IsExclusive")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<string>("Name")
+                        .HasMaxLength(100)
+                        .HasColumnType("TEXT");
+
+                    b.Property<ulong?>("RoleReq")
+                        .HasColumnType("INTEGER");
+
+                    b.HasKey("Id");
+
+                    b.HasAlternateKey("GuildId", "GroupNumber");
+
+                    b.ToTable("SarGroup");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.ShopEntry", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("INTEGER");
+
+                    b.Property<ulong>("AuthorId")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<string>("Command")
+                        .HasColumnType("TEXT");
+
+                    b.Property<DateTime?>("DateAdded")
+                        .HasColumnType("TEXT");
+
+                    b.Property<int?>("GuildConfigId")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<int>("Index")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<string>("Name")
+                        .HasColumnType("TEXT");
+
+                    b.Property<int>("Price")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<ulong>("RoleId")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<string>("RoleName")
+                        .HasColumnType("TEXT");
+
+                    b.Property<ulong?>("RoleRequirement")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<int>("Type")
+                        .HasColumnType("INTEGER");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("GuildConfigId");
+
+                    b.ToTable("ShopEntry");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.ShopEntryItem", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("INTEGER");
+
+                    b.Property<DateTime?>("DateAdded")
+                        .HasColumnType("TEXT");
+
+                    b.Property<int?>("ShopEntryId")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<string>("Text")
+                        .HasColumnType("TEXT");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("ShopEntryId");
+
+                    b.ToTable("ShopEntryItem");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.SlowmodeIgnoredRole", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("INTEGER");
+
+                    b.Property<DateTime?>("DateAdded")
+                        .HasColumnType("TEXT");
+
+                    b.Property<int?>("GuildConfigId")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<ulong>("RoleId")
+                        .HasColumnType("INTEGER");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("GuildConfigId");
+
+                    b.ToTable("SlowmodeIgnoredRole");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.SlowmodeIgnoredUser", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("INTEGER");
+
+                    b.Property<DateTime?>("DateAdded")
+                        .HasColumnType("TEXT");
+
+                    b.Property<int?>("GuildConfigId")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<ulong>("UserId")
+                        .HasColumnType("INTEGER");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("GuildConfigId");
+
+                    b.ToTable("SlowmodeIgnoredUser");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.StickyRole", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("INTEGER");
+
+                    b.Property<DateTime?>("DateAdded")
+                        .HasColumnType("TEXT");
+
+                    b.Property<ulong>("GuildId")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<string>("RoleIds")
+                        .HasColumnType("TEXT");
+
+                    b.Property<ulong>("UserId")
+                        .HasColumnType("INTEGER");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("GuildId", "UserId")
+                        .IsUnique();
+
+                    b.ToTable("StickyRoles");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.StreamOnlineMessage", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("INTEGER");
+
+                    b.Property<ulong>("ChannelId")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<DateTime?>("DateAdded")
+                        .HasColumnType("TEXT");
+
+                    b.Property<ulong>("MessageId")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<string>("Name")
+                        .HasColumnType("TEXT");
+
+                    b.Property<int>("Type")
+                        .HasColumnType("INTEGER");
+
+                    b.HasKey("Id");
+
+                    b.ToTable("StreamOnlineMessages");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.StreamRoleBlacklistedUser", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("INTEGER");
+
+                    b.Property<DateTime?>("DateAdded")
+                        .HasColumnType("TEXT");
+
+                    b.Property<int>("StreamRoleSettingsId")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<ulong>("UserId")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<string>("Username")
+                        .HasColumnType("TEXT");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("StreamRoleSettingsId");
+
+                    b.ToTable("StreamRoleBlacklistedUser");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.StreamRoleSettings", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("INTEGER");
+
+                    b.Property<ulong>("AddRoleId")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<DateTime?>("DateAdded")
+                        .HasColumnType("TEXT");
+
+                    b.Property<bool>("Enabled")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<ulong>("FromRoleId")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<int>("GuildConfigId")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<string>("Keyword")
+                        .HasColumnType("TEXT");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("GuildConfigId")
+                        .IsUnique();
+
+                    b.ToTable("StreamRoleSettings");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.StreamRoleWhitelistedUser", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("INTEGER");
+
+                    b.Property<DateTime?>("DateAdded")
+                        .HasColumnType("TEXT");
+
+                    b.Property<int>("StreamRoleSettingsId")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<ulong>("UserId")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<string>("Username")
+                        .HasColumnType("TEXT");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("StreamRoleSettingsId");
+
+                    b.ToTable("StreamRoleWhitelistedUser");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.TempRole", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("INTEGER");
+
+                    b.Property<DateTime>("ExpiresAt")
+                        .HasColumnType("TEXT");
+
+                    b.Property<ulong>("GuildId")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<bool>("Remove")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<ulong>("RoleId")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<ulong>("UserId")
+                        .HasColumnType("INTEGER");
+
+                    b.HasKey("Id");
+
+                    b.HasAlternateKey("GuildId", "UserId", "RoleId");
+
+                    b.HasIndex("ExpiresAt");
+
+                    b.ToTable("TempRole");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.TodoModel", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("INTEGER");
+
+                    b.Property<int?>("ArchiveId")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<DateTime>("DateAdded")
+                        .HasColumnType("TEXT");
+
+                    b.Property<bool>("IsDone")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<string>("Todo")
+                        .HasColumnType("TEXT");
+
+                    b.Property<ulong>("UserId")
+                        .HasColumnType("INTEGER");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("ArchiveId");
+
+                    b.HasIndex("UserId");
+
+                    b.ToTable("Todos");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.UnbanTimer", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("INTEGER");
+
+                    b.Property<DateTime?>("DateAdded")
+                        .HasColumnType("TEXT");
+
+                    b.Property<int?>("GuildConfigId")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<DateTime>("UnbanAt")
+                        .HasColumnType("TEXT");
+
+                    b.Property<ulong>("UserId")
+                        .HasColumnType("INTEGER");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("GuildConfigId");
+
+                    b.ToTable("UnbanTimer");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.UnmuteTimer", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("INTEGER");
+
+                    b.Property<DateTime?>("DateAdded")
+                        .HasColumnType("TEXT");
+
+                    b.Property<int?>("GuildConfigId")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<DateTime>("UnmuteAt")
+                        .HasColumnType("TEXT");
+
+                    b.Property<ulong>("UserId")
+                        .HasColumnType("INTEGER");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("GuildConfigId");
+
+                    b.ToTable("UnmuteTimer");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.UnroleTimer", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("INTEGER");
+
+                    b.Property<DateTime?>("DateAdded")
+                        .HasColumnType("TEXT");
+
+                    b.Property<int?>("GuildConfigId")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<ulong>("RoleId")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<DateTime>("UnbanAt")
+                        .HasColumnType("TEXT");
+
+                    b.Property<ulong>("UserId")
+                        .HasColumnType("INTEGER");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("GuildConfigId");
+
+                    b.ToTable("UnroleTimer");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.UserXpStats", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("INTEGER");
+
+                    b.Property<DateTime?>("DateAdded")
+                        .HasColumnType("TEXT");
+
+                    b.Property<ulong>("GuildId")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<ulong>("UserId")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<long>("Xp")
+                        .HasColumnType("INTEGER");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("GuildId");
+
+                    b.HasIndex("UserId");
+
+                    b.HasIndex("Xp");
+
+                    b.HasIndex("UserId", "GuildId")
+                        .IsUnique();
+
+                    b.ToTable("UserXpStats");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.VcRoleInfo", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("INTEGER");
+
+                    b.Property<DateTime?>("DateAdded")
+                        .HasColumnType("TEXT");
+
+                    b.Property<int?>("GuildConfigId")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<ulong>("RoleId")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<ulong>("VoiceChannelId")
+                        .HasColumnType("INTEGER");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("GuildConfigId");
+
+                    b.ToTable("VcRoleInfo");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.WaifuInfo", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("INTEGER");
+
+                    b.Property<int?>("AffinityId")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<int?>("ClaimerId")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<DateTime?>("DateAdded")
+                        .HasColumnType("TEXT");
+
+                    b.Property<long>("Price")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<int>("WaifuId")
+                        .HasColumnType("INTEGER");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("AffinityId");
+
+                    b.HasIndex("ClaimerId");
+
+                    b.HasIndex("Price");
+
+                    b.HasIndex("WaifuId")
+                        .IsUnique();
+
+                    b.ToTable("WaifuInfo");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.WaifuItem", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("INTEGER");
+
+                    b.Property<DateTime?>("DateAdded")
+                        .HasColumnType("TEXT");
+
+                    b.Property<string>("ItemEmoji")
+                        .HasColumnType("TEXT");
+
+                    b.Property<string>("Name")
+                        .HasColumnType("TEXT");
+
+                    b.Property<int?>("WaifuInfoId")
+                        .HasColumnType("INTEGER");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("WaifuInfoId");
+
+                    b.ToTable("WaifuItem");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.WaifuUpdate", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("INTEGER");
+
+                    b.Property<DateTime?>("DateAdded")
+                        .HasColumnType("TEXT");
+
+                    b.Property<int?>("NewId")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<int?>("OldId")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<int>("UpdateType")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<int>("UserId")
+                        .HasColumnType("INTEGER");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("NewId");
+
+                    b.HasIndex("OldId");
+
+                    b.HasIndex("UserId");
+
+                    b.ToTable("WaifuUpdates");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.Warning", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("INTEGER");
+
+                    b.Property<DateTime?>("DateAdded")
+                        .HasColumnType("TEXT");
+
+                    b.Property<bool>("Forgiven")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<string>("ForgivenBy")
+                        .HasColumnType("TEXT");
+
+                    b.Property<ulong>("GuildId")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<string>("Moderator")
+                        .HasColumnType("TEXT");
+
+                    b.Property<string>("Reason")
+                        .HasColumnType("TEXT");
+
+                    b.Property<ulong>("UserId")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<long>("Weight")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("INTEGER")
+                        .HasDefaultValue(1L);
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("DateAdded");
+
+                    b.HasIndex("GuildId");
+
+                    b.HasIndex("UserId");
+
+                    b.ToTable("Warnings");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.WarningPunishment", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("INTEGER");
+
+                    b.Property<int>("Count")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<DateTime?>("DateAdded")
+                        .HasColumnType("TEXT");
+
+                    b.Property<ulong>("GuildId")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<int>("Punishment")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<ulong?>("RoleId")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<int>("Time")
+                        .HasColumnType("INTEGER");
+
+                    b.HasKey("Id");
+
+                    b.HasAlternateKey("GuildId", "Count");
+
+                    b.ToTable("WarningPunishment");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.XpCurrencyReward", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("INTEGER");
+
+                    b.Property<int>("Amount")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<DateTime?>("DateAdded")
+                        .HasColumnType("TEXT");
+
+                    b.Property<int>("Level")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<int>("XpSettingsId")
+                        .HasColumnType("INTEGER");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("XpSettingsId");
+
+                    b.ToTable("XpCurrencyReward");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.XpRoleReward", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("INTEGER");
+
+                    b.Property<DateTime?>("DateAdded")
+                        .HasColumnType("TEXT");
+
+                    b.Property<int>("Level")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<bool>("Remove")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<ulong>("RoleId")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<int>("XpSettingsId")
+                        .HasColumnType("INTEGER");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("XpSettingsId", "Level")
+                        .IsUnique();
+
+                    b.ToTable("XpRoleReward");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.XpSettings", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("INTEGER");
+
+                    b.Property<DateTime?>("DateAdded")
+                        .HasColumnType("TEXT");
+
+                    b.Property<int>("GuildConfigId")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<bool>("ServerExcluded")
+                        .HasColumnType("INTEGER");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("GuildConfigId")
+                        .IsUnique();
+
+                    b.ToTable("XpSettings");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.XpShopOwnedItem", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("INTEGER");
+
+                    b.Property<DateTime?>("DateAdded")
+                        .HasColumnType("TEXT");
+
+                    b.Property<bool>("IsUsing")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<string>("ItemKey")
+                        .IsRequired()
+                        .HasColumnType("TEXT");
+
+                    b.Property<int>("ItemType")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<ulong>("UserId")
+                        .HasColumnType("INTEGER");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("UserId", "ItemType", "ItemKey")
+                        .IsUnique();
+
+                    b.ToTable("XpShopOwnedItem");
+                });
+
+            modelBuilder.Entity("EllieBot.Services.GreetSettings", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("INTEGER");
+
+                    b.Property<int>("AutoDeleteTimer")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("INTEGER")
+                        .HasDefaultValue(0);
+
+                    b.Property<ulong?>("ChannelId")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<int>("GreetType")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<ulong>("GuildId")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<bool>("IsEnabled")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("INTEGER")
+                        .HasDefaultValue(false);
+
+                    b.Property<string>("MessageText")
+                        .HasColumnType("TEXT");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("GuildId", "GreetType")
+                        .IsUnique();
+
+                    b.ToTable("GreetSettings");
+                });
+
+            modelBuilder.Entity("EllieBot.Services.Rakeback", b =>
+                {
+                    b.Property<ulong>("UserId")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("INTEGER");
+
+                    b.Property<decimal>("Amount")
+                        .HasColumnType("TEXT");
+
+                    b.HasKey("UserId");
+
+                    b.ToTable("Rakeback");
+                });
+
+            modelBuilder.Entity("EllieBot.Services.UserBetStats", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("INTEGER");
+
+                    b.Property<int>("Game")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<long>("LoseCount")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<long>("MaxBet")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<long>("MaxWin")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<decimal>("PaidOut")
+                        .HasColumnType("TEXT");
+
+                    b.Property<decimal>("TotalBet")
+                        .HasColumnType("TEXT");
+
+                    b.Property<ulong>("UserId")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<long>("WinCount")
+                        .HasColumnType("INTEGER");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("UserId", "Game")
+                        .IsUnique();
+
+                    b.ToTable("UserBetStats");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.AntiAltSetting", b =>
+                {
+                    b.HasOne("EllieBot.Db.Models.GuildConfig", null)
+                        .WithOne("AntiAltSetting")
+                        .HasForeignKey("EllieBot.Db.Models.AntiAltSetting", "GuildConfigId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.AntiRaidSetting", b =>
+                {
+                    b.HasOne("EllieBot.Db.Models.GuildConfig", null)
+                        .WithOne("AntiRaidSetting")
+                        .HasForeignKey("EllieBot.Db.Models.AntiRaidSetting", "GuildConfigId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.AntiSpamIgnore", b =>
+                {
+                    b.HasOne("EllieBot.Db.Models.AntiSpamSetting", null)
+                        .WithMany("IgnoredChannels")
+                        .HasForeignKey("AntiSpamSettingId")
+                        .OnDelete(DeleteBehavior.Cascade);
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.AntiSpamSetting", b =>
+                {
+                    b.HasOne("EllieBot.Db.Models.GuildConfig", null)
+                        .WithOne("AntiSpamSetting")
+                        .HasForeignKey("EllieBot.Db.Models.AntiSpamSetting", "GuildConfigId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.AutoTranslateUser", b =>
+                {
+                    b.HasOne("EllieBot.Db.Models.AutoTranslateChannel", "Channel")
+                        .WithMany("Users")
+                        .HasForeignKey("ChannelId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+
+                    b.Navigation("Channel");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.ClubApplicants", b =>
+                {
+                    b.HasOne("EllieBot.Db.Models.ClubInfo", "Club")
+                        .WithMany("Applicants")
+                        .HasForeignKey("ClubId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+
+                    b.HasOne("EllieBot.Db.Models.DiscordUser", "User")
+                        .WithMany()
+                        .HasForeignKey("UserId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+
+                    b.Navigation("Club");
+
+                    b.Navigation("User");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.ClubBans", b =>
+                {
+                    b.HasOne("EllieBot.Db.Models.ClubInfo", "Club")
+                        .WithMany("Bans")
+                        .HasForeignKey("ClubId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+
+                    b.HasOne("EllieBot.Db.Models.DiscordUser", "User")
+                        .WithMany()
+                        .HasForeignKey("UserId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+
+                    b.Navigation("Club");
+
+                    b.Navigation("User");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.ClubInfo", b =>
+                {
+                    b.HasOne("EllieBot.Db.Models.DiscordUser", "Owner")
+                        .WithOne()
+                        .HasForeignKey("EllieBot.Db.Models.ClubInfo", "OwnerId")
+                        .OnDelete(DeleteBehavior.SetNull);
+
+                    b.Navigation("Owner");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.CommandAlias", b =>
+                {
+                    b.HasOne("EllieBot.Db.Models.GuildConfig", null)
+                        .WithMany("CommandAliases")
+                        .HasForeignKey("GuildConfigId")
+                        .OnDelete(DeleteBehavior.Cascade);
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.CommandCooldown", b =>
+                {
+                    b.HasOne("EllieBot.Db.Models.GuildConfig", null)
+                        .WithMany("CommandCooldowns")
+                        .HasForeignKey("GuildConfigId")
+                        .OnDelete(DeleteBehavior.Cascade);
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.DelMsgOnCmdChannel", b =>
+                {
+                    b.HasOne("EllieBot.Db.Models.GuildConfig", null)
+                        .WithMany("DelMsgOnCmdChannels")
+                        .HasForeignKey("GuildConfigId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.DiscordUser", b =>
+                {
+                    b.HasOne("EllieBot.Db.Models.ClubInfo", "Club")
+                        .WithMany("Members")
+                        .HasForeignKey("ClubId")
+                        .OnDelete(DeleteBehavior.NoAction);
+
+                    b.Navigation("Club");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.ExcludedItem", b =>
+                {
+                    b.HasOne("EllieBot.Db.Models.XpSettings", "XpSettings")
+                        .WithMany("ExclusionList")
+                        .HasForeignKey("XpSettingsId")
+                        .OnDelete(DeleteBehavior.Cascade);
+
+                    b.Navigation("XpSettings");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.FeedSub", b =>
+                {
+                    b.HasOne("EllieBot.Db.Models.GuildConfig", "GuildConfig")
+                        .WithMany("FeedSubs")
+                        .HasForeignKey("GuildConfigId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+
+                    b.Navigation("GuildConfig");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.FilterChannelId", b =>
+                {
+                    b.HasOne("EllieBot.Db.Models.GuildConfig", null)
+                        .WithMany("FilterInvitesChannelIds")
+                        .HasForeignKey("GuildConfigId")
+                        .OnDelete(DeleteBehavior.Cascade);
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.FilterLinksChannelId", b =>
+                {
+                    b.HasOne("EllieBot.Db.Models.GuildConfig", null)
+                        .WithMany("FilterLinksChannelIds")
+                        .HasForeignKey("GuildConfigId")
+                        .OnDelete(DeleteBehavior.Cascade);
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.FilterWordsChannelId", b =>
+                {
+                    b.HasOne("EllieBot.Db.Models.GuildConfig", null)
+                        .WithMany("FilterWordsChannelIds")
+                        .HasForeignKey("GuildConfigId")
+                        .OnDelete(DeleteBehavior.Cascade);
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.FilteredWord", b =>
+                {
+                    b.HasOne("EllieBot.Db.Models.GuildConfig", null)
+                        .WithMany("FilteredWords")
+                        .HasForeignKey("GuildConfigId")
+                        .OnDelete(DeleteBehavior.Cascade);
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.FollowedStream", b =>
+                {
+                    b.HasOne("EllieBot.Db.Models.GuildConfig", null)
+                        .WithMany("FollowedStreams")
+                        .HasForeignKey("GuildConfigId")
+                        .OnDelete(DeleteBehavior.Cascade);
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.GCChannelId", b =>
+                {
+                    b.HasOne("EllieBot.Db.Models.GuildConfig", "GuildConfig")
+                        .WithMany("GenerateCurrencyChannelIds")
+                        .HasForeignKey("GuildConfigId")
+                        .OnDelete(DeleteBehavior.Cascade);
+
+                    b.Navigation("GuildConfig");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.GiveawayUser", b =>
+                {
+                    b.HasOne("EllieBot.Db.Models.GiveawayModel", null)
+                        .WithMany("Participants")
+                        .HasForeignKey("GiveawayId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.IgnoredLogItem", b =>
+                {
+                    b.HasOne("EllieBot.Db.Models.LogSetting", "LogSetting")
+                        .WithMany("LogIgnores")
+                        .HasForeignKey("LogSettingId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+
+                    b.Navigation("LogSetting");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.MutedUserId", b =>
+                {
+                    b.HasOne("EllieBot.Db.Models.GuildConfig", null)
+                        .WithMany("MutedUsers")
+                        .HasForeignKey("GuildConfigId")
+                        .OnDelete(DeleteBehavior.Cascade);
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.Permissionv2", b =>
+                {
+                    b.HasOne("EllieBot.Db.Models.GuildConfig", null)
+                        .WithMany("Permissions")
+                        .HasForeignKey("GuildConfigId")
+                        .OnDelete(DeleteBehavior.Cascade);
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.PlaylistSong", b =>
+                {
+                    b.HasOne("EllieBot.Db.Models.MusicPlaylist", null)
+                        .WithMany("Songs")
+                        .HasForeignKey("MusicPlaylistId")
+                        .OnDelete(DeleteBehavior.Cascade);
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.Sar", b =>
+                {
+                    b.HasOne("EllieBot.Db.Models.SarGroup", null)
+                        .WithMany("Roles")
+                        .HasForeignKey("SarGroupId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.ShopEntry", b =>
+                {
+                    b.HasOne("EllieBot.Db.Models.GuildConfig", null)
+                        .WithMany("ShopEntries")
+                        .HasForeignKey("GuildConfigId")
+                        .OnDelete(DeleteBehavior.Cascade);
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.ShopEntryItem", b =>
+                {
+                    b.HasOne("EllieBot.Db.Models.ShopEntry", null)
+                        .WithMany("Items")
+                        .HasForeignKey("ShopEntryId")
+                        .OnDelete(DeleteBehavior.Cascade);
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.SlowmodeIgnoredRole", b =>
+                {
+                    b.HasOne("EllieBot.Db.Models.GuildConfig", null)
+                        .WithMany("SlowmodeIgnoredRoles")
+                        .HasForeignKey("GuildConfigId")
+                        .OnDelete(DeleteBehavior.Cascade);
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.SlowmodeIgnoredUser", b =>
+                {
+                    b.HasOne("EllieBot.Db.Models.GuildConfig", null)
+                        .WithMany("SlowmodeIgnoredUsers")
+                        .HasForeignKey("GuildConfigId")
+                        .OnDelete(DeleteBehavior.Cascade);
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.StreamRoleBlacklistedUser", b =>
+                {
+                    b.HasOne("EllieBot.Db.Models.StreamRoleSettings", "StreamRoleSettings")
+                        .WithMany("Blacklist")
+                        .HasForeignKey("StreamRoleSettingsId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+
+                    b.Navigation("StreamRoleSettings");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.StreamRoleSettings", b =>
+                {
+                    b.HasOne("EllieBot.Db.Models.GuildConfig", "GuildConfig")
+                        .WithOne("StreamRole")
+                        .HasForeignKey("EllieBot.Db.Models.StreamRoleSettings", "GuildConfigId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+
+                    b.Navigation("GuildConfig");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.StreamRoleWhitelistedUser", b =>
+                {
+                    b.HasOne("EllieBot.Db.Models.StreamRoleSettings", "StreamRoleSettings")
+                        .WithMany("Whitelist")
+                        .HasForeignKey("StreamRoleSettingsId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+
+                    b.Navigation("StreamRoleSettings");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.TodoModel", b =>
+                {
+                    b.HasOne("EllieBot.Db.Models.ArchivedTodoListModel", null)
+                        .WithMany("Items")
+                        .HasForeignKey("ArchiveId")
+                        .OnDelete(DeleteBehavior.Cascade);
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.UnbanTimer", b =>
+                {
+                    b.HasOne("EllieBot.Db.Models.GuildConfig", null)
+                        .WithMany("UnbanTimer")
+                        .HasForeignKey("GuildConfigId")
+                        .OnDelete(DeleteBehavior.Cascade);
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.UnmuteTimer", b =>
+                {
+                    b.HasOne("EllieBot.Db.Models.GuildConfig", null)
+                        .WithMany("UnmuteTimers")
+                        .HasForeignKey("GuildConfigId")
+                        .OnDelete(DeleteBehavior.Cascade);
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.UnroleTimer", b =>
+                {
+                    b.HasOne("EllieBot.Db.Models.GuildConfig", null)
+                        .WithMany("UnroleTimer")
+                        .HasForeignKey("GuildConfigId")
+                        .OnDelete(DeleteBehavior.Cascade);
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.VcRoleInfo", b =>
+                {
+                    b.HasOne("EllieBot.Db.Models.GuildConfig", null)
+                        .WithMany("VcRoleInfos")
+                        .HasForeignKey("GuildConfigId")
+                        .OnDelete(DeleteBehavior.Cascade);
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.WaifuInfo", b =>
+                {
+                    b.HasOne("EllieBot.Db.Models.DiscordUser", "Affinity")
+                        .WithMany()
+                        .HasForeignKey("AffinityId");
+
+                    b.HasOne("EllieBot.Db.Models.DiscordUser", "Claimer")
+                        .WithMany()
+                        .HasForeignKey("ClaimerId");
+
+                    b.HasOne("EllieBot.Db.Models.DiscordUser", "Waifu")
+                        .WithOne()
+                        .HasForeignKey("EllieBot.Db.Models.WaifuInfo", "WaifuId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+
+                    b.Navigation("Affinity");
+
+                    b.Navigation("Claimer");
+
+                    b.Navigation("Waifu");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.WaifuItem", b =>
+                {
+                    b.HasOne("EllieBot.Db.Models.WaifuInfo", "WaifuInfo")
+                        .WithMany("Items")
+                        .HasForeignKey("WaifuInfoId");
+
+                    b.Navigation("WaifuInfo");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.WaifuUpdate", b =>
+                {
+                    b.HasOne("EllieBot.Db.Models.DiscordUser", "New")
+                        .WithMany()
+                        .HasForeignKey("NewId");
+
+                    b.HasOne("EllieBot.Db.Models.DiscordUser", "Old")
+                        .WithMany()
+                        .HasForeignKey("OldId");
+
+                    b.HasOne("EllieBot.Db.Models.DiscordUser", "User")
+                        .WithMany()
+                        .HasForeignKey("UserId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+
+                    b.Navigation("New");
+
+                    b.Navigation("Old");
+
+                    b.Navigation("User");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.XpCurrencyReward", b =>
+                {
+                    b.HasOne("EllieBot.Db.Models.XpSettings", "XpSettings")
+                        .WithMany("CurrencyRewards")
+                        .HasForeignKey("XpSettingsId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+
+                    b.Navigation("XpSettings");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.XpRoleReward", b =>
+                {
+                    b.HasOne("EllieBot.Db.Models.XpSettings", "XpSettings")
+                        .WithMany("RoleRewards")
+                        .HasForeignKey("XpSettingsId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+
+                    b.Navigation("XpSettings");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.XpSettings", b =>
+                {
+                    b.HasOne("EllieBot.Db.Models.GuildConfig", "GuildConfig")
+                        .WithOne("XpSettings")
+                        .HasForeignKey("EllieBot.Db.Models.XpSettings", "GuildConfigId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+
+                    b.Navigation("GuildConfig");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.AntiSpamSetting", b =>
+                {
+                    b.Navigation("IgnoredChannels");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.ArchivedTodoListModel", b =>
+                {
+                    b.Navigation("Items");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.AutoTranslateChannel", b =>
+                {
+                    b.Navigation("Users");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.ClubInfo", b =>
+                {
+                    b.Navigation("Applicants");
+
+                    b.Navigation("Bans");
+
+                    b.Navigation("Members");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.GiveawayModel", b =>
+                {
+                    b.Navigation("Participants");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.GuildConfig", b =>
+                {
+                    b.Navigation("AntiAltSetting");
+
+                    b.Navigation("AntiRaidSetting");
+
+                    b.Navigation("AntiSpamSetting");
+
+                    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("GenerateCurrencyChannelIds");
+
+                    b.Navigation("MutedUsers");
+
+                    b.Navigation("Permissions");
+
+                    b.Navigation("ShopEntries");
+
+                    b.Navigation("SlowmodeIgnoredRoles");
+
+                    b.Navigation("SlowmodeIgnoredUsers");
+
+                    b.Navigation("StreamRole");
+
+                    b.Navigation("UnbanTimer");
+
+                    b.Navigation("UnmuteTimers");
+
+                    b.Navigation("UnroleTimer");
+
+                    b.Navigation("VcRoleInfos");
+
+                    b.Navigation("XpSettings");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.LogSetting", b =>
+                {
+                    b.Navigation("LogIgnores");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.MusicPlaylist", b =>
+                {
+                    b.Navigation("Songs");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.SarGroup", b =>
+                {
+                    b.Navigation("Roles");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.ShopEntry", b =>
+                {
+                    b.Navigation("Items");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.StreamRoleSettings", b =>
+                {
+                    b.Navigation("Blacklist");
+
+                    b.Navigation("Whitelist");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.WaifuInfo", b =>
+                {
+                    b.Navigation("Items");
+                });
+
+            modelBuilder.Entity("EllieBot.Db.Models.XpSettings", b =>
+                {
+                    b.Navigation("CurrencyRewards");
+
+                    b.Navigation("ExclusionList");
+
+                    b.Navigation("RoleRewards");
+                });
+#pragma warning restore 612, 618
+        }
+    }
+}
diff --git a/src/EllieBot/Migrations/Sqlite/20241208035845_awarded-xp-and-notify-removed.cs b/src/EllieBot/Migrations/Sqlite/20241208035845_awarded-xp-and-notify-removed.cs
new file mode 100644
index 0000000..af5984c
--- /dev/null
+++ b/src/EllieBot/Migrations/Sqlite/20241208035845_awarded-xp-and-notify-removed.cs
@@ -0,0 +1,106 @@
+using System;
+using Microsoft.EntityFrameworkCore.Migrations;
+
+#nullable disable
+
+namespace EllieBot.Migrations
+{
+    /// <inheritdoc />
+    public partial class awardedxpandnotifyremoved : Migration
+    {
+        /// <inheritdoc />
+        protected override void Up(MigrationBuilder migrationBuilder)
+        {
+            migrationBuilder.DropIndex(
+                name: "IX_UserXpStats_AwardedXp",
+                table: "UserXpStats");
+
+            migrationBuilder.DropColumn(
+                name: "AwardedXp",
+                table: "UserXpStats");
+
+            migrationBuilder.DropColumn(
+                name: "NotifyOnLevelUp",
+                table: "UserXpStats");
+
+            migrationBuilder.DropColumn(
+                name: "DateAdded",
+                table: "SarGroup");
+
+            migrationBuilder.CreateTable(
+                name: "Notify",
+                columns: table => new
+                {
+                    Id = table.Column<int>(type: "INTEGER", nullable: false)
+                        .Annotation("Sqlite:Autoincrement", true),
+                    GuildId = table.Column<ulong>(type: "INTEGER", nullable: false),
+                    ChannelId = table.Column<ulong>(type: "INTEGER", nullable: false),
+                    Event = table.Column<int>(type: "INTEGER", nullable: false),
+                    Message = table.Column<string>(type: "TEXT", maxLength: 10000, nullable: false)
+                },
+                constraints: table =>
+                {
+                    table.PrimaryKey("PK_Notify", x => x.Id);
+                    table.UniqueConstraint("AK_Notify_GuildId_Event", x => new { x.GuildId, x.Event });
+                });
+
+            migrationBuilder.CreateTable(
+                name: "TempRole",
+                columns: table => new
+                {
+                    Id = table.Column<int>(type: "INTEGER", nullable: false)
+                        .Annotation("Sqlite:Autoincrement", true),
+                    GuildId = table.Column<ulong>(type: "INTEGER", nullable: false),
+                    Remove = table.Column<bool>(type: "INTEGER", nullable: false),
+                    RoleId = table.Column<ulong>(type: "INTEGER", nullable: false),
+                    UserId = table.Column<ulong>(type: "INTEGER", nullable: false),
+                    ExpiresAt = table.Column<DateTime>(type: "TEXT", nullable: false)
+                },
+                constraints: table =>
+                {
+                    table.PrimaryKey("PK_TempRole", x => x.Id);
+                    table.UniqueConstraint("AK_TempRole_GuildId_UserId_RoleId", x => new { x.GuildId, x.UserId, x.RoleId });
+                });
+
+            migrationBuilder.CreateIndex(
+                name: "IX_TempRole_ExpiresAt",
+                table: "TempRole",
+                column: "ExpiresAt");
+        }
+
+        /// <inheritdoc />
+        protected override void Down(MigrationBuilder migrationBuilder)
+        {
+            migrationBuilder.DropTable(
+                name: "Notify");
+
+            migrationBuilder.DropTable(
+                name: "TempRole");
+
+            migrationBuilder.AddColumn<long>(
+                name: "AwardedXp",
+                table: "UserXpStats",
+                type: "INTEGER",
+                nullable: false,
+                defaultValue: 0L);
+
+            migrationBuilder.AddColumn<int>(
+                name: "NotifyOnLevelUp",
+                table: "UserXpStats",
+                type: "INTEGER",
+                nullable: false,
+                defaultValue: 0);
+
+            migrationBuilder.AddColumn<DateTime>(
+                name: "DateAdded",
+                table: "SarGroup",
+                type: "TEXT",
+                nullable: true);
+
+            migrationBuilder.CreateIndex(
+                name: "IX_UserXpStats_AwardedXp",
+                table: "UserXpStats",
+                column: "AwardedXp");
+        }
+    }
+}
diff --git a/src/EllieBot/Migrations/Sqlite/EllieSqliteContextModelSnapshot.cs b/src/EllieBot/Migrations/Sqlite/EllieSqliteContextModelSnapshot.cs
index d8edf97..4f03454 100644
--- a/src/EllieBot/Migrations/Sqlite/EllieSqliteContextModelSnapshot.cs
+++ b/src/EllieBot/Migrations/Sqlite/EllieSqliteContextModelSnapshot.cs
@@ -1356,6 +1356,33 @@ namespace EllieBot.Migrations
                     b.ToTable("NCPixel");
                 });
 
+            modelBuilder.Entity("EllieBot.Db.Models.Notify", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("INTEGER");
+
+                    b.Property<ulong>("ChannelId")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<int>("Event")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<ulong>("GuildId")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<string>("Message")
+                        .IsRequired()
+                        .HasMaxLength(10000)
+                        .HasColumnType("TEXT");
+
+                    b.HasKey("Id");
+
+                    b.HasAlternateKey("GuildId", "Event");
+
+                    b.ToTable("Notify");
+                });
+
             modelBuilder.Entity("EllieBot.Db.Models.PatronUser", b =>
                 {
                     b.Property<ulong>("UserId")
@@ -1744,9 +1771,6 @@ namespace EllieBot.Migrations
                         .ValueGeneratedOnAdd()
                         .HasColumnType("INTEGER");
 
-                    b.Property<DateTime?>("DateAdded")
-                        .HasColumnType("TEXT");
-
                     b.Property<int>("GroupNumber")
                         .HasColumnType("INTEGER");
 
@@ -2016,6 +2040,36 @@ namespace EllieBot.Migrations
                     b.ToTable("StreamRoleWhitelistedUser");
                 });
 
+            modelBuilder.Entity("EllieBot.Db.Models.TempRole", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("INTEGER");
+
+                    b.Property<DateTime>("ExpiresAt")
+                        .HasColumnType("TEXT");
+
+                    b.Property<ulong>("GuildId")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<bool>("Remove")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<ulong>("RoleId")
+                        .HasColumnType("INTEGER");
+
+                    b.Property<ulong>("UserId")
+                        .HasColumnType("INTEGER");
+
+                    b.HasKey("Id");
+
+                    b.HasAlternateKey("GuildId", "UserId", "RoleId");
+
+                    b.HasIndex("ExpiresAt");
+
+                    b.ToTable("TempRole");
+                });
+
             modelBuilder.Entity("EllieBot.Db.Models.TodoModel", b =>
                 {
                     b.Property<int>("Id")
@@ -2130,18 +2184,12 @@ namespace EllieBot.Migrations
                         .ValueGeneratedOnAdd()
                         .HasColumnType("INTEGER");
 
-                    b.Property<long>("AwardedXp")
-                        .HasColumnType("INTEGER");
-
                     b.Property<DateTime?>("DateAdded")
                         .HasColumnType("TEXT");
 
                     b.Property<ulong>("GuildId")
                         .HasColumnType("INTEGER");
 
-                    b.Property<int>("NotifyOnLevelUp")
-                        .HasColumnType("INTEGER");
-
                     b.Property<ulong>("UserId")
                         .HasColumnType("INTEGER");
 
@@ -2150,8 +2198,6 @@ namespace EllieBot.Migrations
 
                     b.HasKey("Id");
 
-                    b.HasIndex("AwardedXp");
-
                     b.HasIndex("GuildId");
 
                     b.HasIndex("UserId");
diff --git a/src/EllieBot/Modules/Administration/Administration.cs b/src/EllieBot/Modules/Administration/Administration.cs
index 6c01605..b9332be 100644
--- a/src/EllieBot/Modules/Administration/Administration.cs
+++ b/src/EllieBot/Modules/Administration/Administration.cs
@@ -46,7 +46,7 @@ public partial class Administration : EllieModule<AdministrationService>
     [RequireContext(ContextType.Guild)]
     [UserPerm(GuildPerm.Administrator)]
     [BotPerm(GuildPerm.ManageGuild)]
-    public async Task ImageOnlyChannel(StoopidTime time = null)
+    public async Task ImageOnlyChannel(ParsedTimespan timespan = null)
     {
         var newValue = await _somethingOnly.ToggleImageOnlyChannelAsync(ctx.Guild.Id, ctx.Channel.Id);
         if (newValue)
@@ -54,12 +54,12 @@ public partial class Administration : EllieModule<AdministrationService>
         else
             await Response().Pending(strs.imageonly_disable).SendAsync();
     }
-    
+
     [Cmd]
     [RequireContext(ContextType.Guild)]
     [UserPerm(GuildPerm.Administrator)]
     [BotPerm(GuildPerm.ManageGuild)]
-    public async Task LinkOnlyChannel(StoopidTime time = null)
+    public async Task LinkOnlyChannel(ParsedTimespan timespan = null)
     {
         var newValue = await _somethingOnly.ToggleLinkOnlyChannelAsync(ctx.Guild.Id, ctx.Channel.Id);
         if (newValue)
@@ -72,10 +72,10 @@ public partial class Administration : EllieModule<AdministrationService>
     [RequireContext(ContextType.Guild)]
     [UserPerm(ChannelPerm.ManageChannels)]
     [BotPerm(ChannelPerm.ManageChannels)]
-    public async Task Slowmode(StoopidTime time = null)
+    public async Task Slowmode(ParsedTimespan timespan = null)
     {
-        var seconds = (int?)time?.Time.TotalSeconds ?? 0;
-        if (time is not null && (time.Time < TimeSpan.FromSeconds(0) || time.Time > TimeSpan.FromHours(6)))
+        var seconds = (int?)timespan?.Time.TotalSeconds ?? 0;
+        if (timespan is not null && (timespan.Time < TimeSpan.FromSeconds(0) || timespan.Time > TimeSpan.FromHours(6)))
             return;
 
         await ((ITextChannel)ctx.Channel).ModifyAsync(tcp =>
@@ -221,7 +221,7 @@ public partial class Administration : EllieModule<AdministrationService>
     [BotPerm(GuildPerm.ManageChannels)]
     public async Task CreaTxtChanl([Leftover] string channelName)
     {
-        var txtCh = await ctx.Guild.CreateTextChannelAsync(channelName); 
+        var txtCh = await ctx.Guild.CreateTextChannelAsync(channelName);
         await Response().Confirm(strs.createtextchan(Format.Bold(txtCh.Name))).SendAsync();
     }
 
@@ -298,18 +298,18 @@ public partial class Administration : EllieModule<AdministrationService>
     [RequireContext(ContextType.Guild)]
     [UserPerm(ChannelPerm.ManageMessages)]
     [BotPerm(ChannelPerm.ManageMessages)]
-    public Task Delete(ulong messageId, StoopidTime time = null)
-        => Delete((ITextChannel)ctx.Channel, messageId, time);
+    public Task Delete(ulong messageId, ParsedTimespan timespan = null)
+        => Delete((ITextChannel)ctx.Channel, messageId, timespan);
 
     [Cmd]
     [RequireContext(ContextType.Guild)]
-    public async Task Delete(ITextChannel channel, ulong messageId, StoopidTime time = null)
-        => await InternalMessageAction(channel, messageId, time, msg => msg.DeleteAsync());
+    public async Task Delete(ITextChannel channel, ulong messageId, ParsedTimespan timespan = null)
+        => await InternalMessageAction(channel, messageId, timespan, msg => msg.DeleteAsync());
 
     private async Task InternalMessageAction(
         ITextChannel channel,
         ulong messageId,
-        StoopidTime time,
+        ParsedTimespan timespan,
         Func<IMessage, Task> func)
     {
         var userPerms = ((SocketGuildUser)ctx.User).GetPermissions(channel);
@@ -334,13 +334,13 @@ public partial class Administration : EllieModule<AdministrationService>
             return;
         }
 
-        if (time is null)
+        if (timespan is null)
             await msg.DeleteAsync();
-        else if (time.Time <= TimeSpan.FromDays(7))
+        else if (timespan.Time <= TimeSpan.FromDays(7))
         {
             _ = Task.Run(async () =>
             {
-                await Task.Delay(time.Time);
+                await Task.Delay(timespan.Time);
                 await msg.DeleteAsync();
             });
         }
@@ -360,11 +360,11 @@ public partial class Administration : EllieModule<AdministrationService>
     {
         if (ctx.Channel is not SocketTextChannel stc)
             return;
-        
+
         await stc.CreateThreadAsync(name, message: ctx.Message.ReferencedMessage);
         await ctx.OkAsync();
     }
-    
+
     [Cmd]
     [BotPerm(ChannelPermission.ManageThreads)]
     [UserPerm(ChannelPermission.ManageThreads)]
@@ -380,7 +380,7 @@ public partial class Administration : EllieModule<AdministrationService>
             await Response().Error(strs.not_found).SendAsync();
             return;
         }
-        
+
         await t.DeleteAsync();
         await ctx.OkAsync();
     }
@@ -406,7 +406,7 @@ public partial class Administration : EllieModule<AdministrationService>
             await Response().Confirm(strs.autopublish_disable).SendAsync();
         }
     }
-    
+
     [Cmd]
     [UserPerm(GuildPerm.ManageNicknames)]
     [BotPerm(GuildPerm.ChangeNickname)]
@@ -450,8 +450,9 @@ public partial class Administration : EllieModule<AdministrationService>
     public async Task SetServerBanner([Leftover] string img = null)
     {
         // Tier2 or higher is required to set a banner.
-        if (ctx.Guild.PremiumTier is PremiumTier.Tier1 or PremiumTier.None) return;
-        
+        if (ctx.Guild.PremiumTier is PremiumTier.Tier1 or PremiumTier.None)
+            return;
+
         var result = await _service.SetServerBannerAsync(ctx.Guild, img);
 
         switch (result)
@@ -472,7 +473,7 @@ public partial class Administration : EllieModule<AdministrationService>
                 throw new ArgumentOutOfRangeException();
         }
     }
-    
+
     [Cmd]
     [RequireContext(ContextType.Guild)]
     [UserPerm(GuildPermission.ManageGuild)]
diff --git a/src/EllieBot/Modules/Administration/Mute/MuteCommands.cs b/src/EllieBot/Modules/Administration/Mute/MuteCommands.cs
index 94e797a..e0f502d 100644
--- a/src/EllieBot/Modules/Administration/Mute/MuteCommands.cs
+++ b/src/EllieBot/Modules/Administration/Mute/MuteCommands.cs
@@ -72,18 +72,18 @@ public partial class Administration
         [RequireContext(ContextType.Guild)]
         [UserPerm(GuildPerm.ManageRoles | GuildPerm.MuteMembers)]
         [Priority(1)]
-        public async Task Mute(StoopidTime time, IGuildUser user, [Leftover] string reason = "")
+        public async Task Mute(ParsedTimespan timespan, IGuildUser user, [Leftover] string reason = "")
         {
-            if (time.Time < TimeSpan.FromMinutes(1) || time.Time > TimeSpan.FromDays(49))
+            if (timespan.Time < TimeSpan.FromMinutes(1) || timespan.Time > TimeSpan.FromDays(49))
                 return;
             try
             {
                 if (!await VerifyMutePermissions((IGuildUser)ctx.User, user))
                     return;
 
-                await _service.TimedMute(user, ctx.User, time.Time, reason: reason);
+                await _service.TimedMute(user, ctx.User, timespan.Time, reason: reason);
                 await Response().Confirm(strs.user_muted_time(Format.Bold(user.ToString()),
-                    (int)time.Time.TotalMinutes)).SendAsync();
+                    (int)timespan.Time.TotalMinutes)).SendAsync();
             }
             catch (Exception ex)
             {
@@ -133,18 +133,18 @@ public partial class Administration
         [RequireContext(ContextType.Guild)]
         [UserPerm(GuildPerm.ManageRoles)]
         [Priority(1)]
-        public async Task ChatMute(StoopidTime time, IGuildUser user, [Leftover] string reason = "")
+        public async Task ChatMute(ParsedTimespan timespan, IGuildUser user, [Leftover] string reason = "")
         {
-            if (time.Time < TimeSpan.FromMinutes(1) || time.Time > TimeSpan.FromDays(49))
+            if (timespan.Time < TimeSpan.FromMinutes(1) || timespan.Time > TimeSpan.FromDays(49))
                 return;
             try
             {
                 if (!await VerifyMutePermissions((IGuildUser)ctx.User, user))
                     return;
 
-                await _service.TimedMute(user, ctx.User, time.Time, MuteType.Chat, reason);
+                await _service.TimedMute(user, ctx.User, timespan.Time, MuteType.Chat, reason);
                 await Response().Confirm(strs.user_chat_mute_time(Format.Bold(user.ToString()),
-                    (int)time.Time.TotalMinutes)).SendAsync();
+                    (int)timespan.Time.TotalMinutes)).SendAsync();
             }
             catch (Exception ex)
             {
@@ -193,18 +193,18 @@ public partial class Administration
         [RequireContext(ContextType.Guild)]
         [UserPerm(GuildPerm.MuteMembers)]
         [Priority(1)]
-        public async Task VoiceMute(StoopidTime time, IGuildUser user, [Leftover] string reason = "")
+        public async Task VoiceMute(ParsedTimespan timespan, IGuildUser user, [Leftover] string reason = "")
         {
-            if (time.Time < TimeSpan.FromMinutes(1) || time.Time > TimeSpan.FromDays(49))
+            if (timespan.Time < TimeSpan.FromMinutes(1) || timespan.Time > TimeSpan.FromDays(49))
                 return;
             try
             {
                 if (!await VerifyMutePermissions((IGuildUser)ctx.User, user))
                     return;
 
-                await _service.TimedMute(user, ctx.User, time.Time, MuteType.Voice, reason);
+                await _service.TimedMute(user, ctx.User, timespan.Time, MuteType.Voice, reason);
                 await Response().Confirm(strs.user_voice_mute_time(Format.Bold(user.ToString()),
-                    (int)time.Time.TotalMinutes)).SendAsync();
+                    (int)timespan.Time.TotalMinutes)).SendAsync();
             }
             catch
             {
diff --git a/src/EllieBot/Modules/Administration/Notify/NotifyCommands.cs b/src/EllieBot/Modules/Administration/Notify/NotifyCommands.cs
new file mode 100644
index 0000000..2b33f34
--- /dev/null
+++ b/src/EllieBot/Modules/Administration/Notify/NotifyCommands.cs
@@ -0,0 +1,92 @@
+using LinqToDB;
+using LinqToDB.EntityFrameworkCore;
+using EllieBot.Common.ModuleBehaviors;
+using EllieBot.Db.Models;
+
+namespace EllieBot.Modules.Administration;
+
+public sealed class NotifyService : IReadyExecutor, IEService
+{
+    private readonly DbService _db;
+    private readonly IMessageSenderService _mss;
+    private readonly DiscordSocketClient _client;
+    private readonly IBotCreds _creds;
+
+    public NotifyService(
+        DbService db,
+        IMessageSenderService mss,
+        DiscordSocketClient client,
+        IBotCreds creds)
+    {
+        _db = db;
+        _mss = mss;
+        _client = client;
+        _creds = creds;
+    }
+
+    public async Task OnReadyAsync()
+    {
+        // .Where(x => Linq2DbExpressions.GuildOnShard(guildId,
+        // _creds.TotalShards,
+        // _client.ShardId))
+    }
+
+    public async Task EnableAsync(
+        ulong guildId,
+        ulong channelId,
+        NotifyEvent nEvent,
+        string message)
+    {
+        await using var uow = _db.GetDbContext();
+        await uow.GetTable<Notify>()
+                 .InsertOrUpdateAsync(() => new()
+                 {
+                     GuildId = guildId,
+                     ChannelId = channelId,
+                     Event = nEvent,
+                     Message = message,
+                 },
+                     (_) => new()
+                     {
+                         Message = message,
+                         ChannelId = channelId
+                     },
+                     () => new()
+                     {
+                         GuildId = guildId,
+                         Event = nEvent
+                     });
+    }
+
+    public async Task DisableAsync(ulong guildId, NotifyEvent nEvent)
+    {
+        await using var uow = _db.GetDbContext();
+        var deleted = await uow.GetTable<Notify>()
+                               .Where(x => x.GuildId == guildId && x.Event == nEvent)
+                               .DeleteAsync();
+
+        if (deleted > 0)
+            return;
+    }
+}
+
+public partial class Administration
+{
+    public class NotifyCommands : EllieModule<NotifyService>
+    {
+        [Cmd]
+        [OwnerOnly]
+        public async Task Notify(NotifyEvent nEvent, [Leftover] string message = null)
+        {
+            if (string.IsNullOrWhiteSpace(message))
+            {
+                await _service.DisableAsync(ctx.Guild.Id, nEvent);
+                await Response().Confirm(strs.notify_off(nEvent)).SendAsync();
+                return;
+            }
+
+            await _service.EnableAsync(ctx.Guild.Id, ctx.Channel.Id, nEvent, message);
+            await Response().Confirm(strs.notify_on(nEvent.ToString())).SendAsync();
+        }
+    }
+}
diff --git a/src/EllieBot/Modules/Administration/Protection/ProtectionCommands.cs b/src/EllieBot/Modules/Administration/Protection/ProtectionCommands.cs
index f1721c1..d06d8d4 100644
--- a/src/EllieBot/Modules/Administration/Protection/ProtectionCommands.cs
+++ b/src/EllieBot/Modules/Administration/Protection/ProtectionCommands.cs
@@ -28,17 +28,17 @@ public partial class Administration
         [RequireContext(ContextType.Guild)]
         [UserPerm(GuildPerm.Administrator)]
         public async Task AntiAlt(
-            StoopidTime minAge,
+            ParsedTimespan minAge,
             PunishmentAction action,
-            [Leftover] StoopidTime punishTime = null)
+            [Leftover] ParsedTimespan punishTimespan = null)
         {
             var minAgeMinutes = (int)minAge.Time.TotalMinutes;
-            var punishTimeMinutes = (int?)punishTime?.Time.TotalMinutes ?? 0;
+            var punishTimeMinutes = (int?)punishTimespan?.Time.TotalMinutes ?? 0;
 
             if (minAgeMinutes < 1 || punishTimeMinutes < 0)
                 return;
 
-            var minutes = (int?)punishTime?.Time.TotalMinutes ?? 0;
+            var minutes = (int?)punishTimespan?.Time.TotalMinutes ?? 0;
             if (action is PunishmentAction.TimeOut && minutes < 1)
                 minutes = 1;
 
@@ -53,7 +53,7 @@ public partial class Administration
         [Cmd]
         [RequireContext(ContextType.Guild)]
         [UserPerm(GuildPerm.Administrator)]
-        public async Task AntiAlt(StoopidTime minAge, PunishmentAction action, [Leftover] IRole role)
+        public async Task AntiAlt(ParsedTimespan minAge, PunishmentAction action, [Leftover] IRole role)
         {
             var minAgeMinutes = (int)minAge.Time.TotalMinutes;
 
@@ -86,8 +86,8 @@ public partial class Administration
             int userThreshold,
             int seconds,
             PunishmentAction action,
-            [Leftover] StoopidTime punishTime)
-            => InternalAntiRaid(userThreshold, seconds, action, punishTime);
+            [Leftover] ParsedTimespan punishTimespan)
+            => InternalAntiRaid(userThreshold, seconds, action, punishTimespan);
 
         [Cmd]
         [RequireContext(ContextType.Guild)]
@@ -100,7 +100,7 @@ public partial class Administration
             int userThreshold,
             int seconds = 10,
             PunishmentAction action = PunishmentAction.Mute,
-            StoopidTime punishTime = null)
+            ParsedTimespan punishTimespan = null)
         {
             if (action == PunishmentAction.AddRole)
             {
@@ -120,13 +120,13 @@ public partial class Administration
                 return;
             }
 
-            if (punishTime is not null)
+            if (punishTimespan is not null)
             {
                 if (!_service.IsDurationAllowed(action))
                     await Response().Error(strs.prot_cant_use_time).SendAsync();
             }
 
-            var time = (int?)punishTime?.Time.TotalMinutes ?? 0;
+            var time = (int?)punishTimespan?.Time.TotalMinutes ?? 0;
             if (time is < 0 or > 60 * 24)
                 return;
 
@@ -170,8 +170,8 @@ public partial class Administration
         [RequireContext(ContextType.Guild)]
         [UserPerm(GuildPerm.Administrator)]
         [Priority(1)]
-        public Task AntiSpam(int messageCount, PunishmentAction action, [Leftover] StoopidTime punishTime)
-            => InternalAntiSpam(messageCount, action, punishTime);
+        public Task AntiSpam(int messageCount, PunishmentAction action, [Leftover] ParsedTimespan punishTimespan)
+            => InternalAntiSpam(messageCount, action, punishTimespan);
 
         [Cmd]
         [RequireContext(ContextType.Guild)]
@@ -183,19 +183,19 @@ public partial class Administration
         private async Task InternalAntiSpam(
             int messageCount,
             PunishmentAction action,
-            StoopidTime timeData = null,
+            ParsedTimespan timespanData = null,
             IRole role = null)
         {
             if (messageCount is < 2 or > 10)
                 return;
 
-            if (timeData is not null)
+            if (timespanData is not null)
             {
                 if (!_service.IsDurationAllowed(action))
                     await Response().Error(strs.prot_cant_use_time).SendAsync();
             }
 
-            var time = (int?)timeData?.Time.TotalMinutes ?? 0;
+            var time = (int?)timespanData?.Time.TotalMinutes ?? 0;
             if (time is < 0 or > 60 * 24)
                 return;
 
diff --git a/src/EllieBot/Modules/Administration/Role/RoleCommands.cs b/src/EllieBot/Modules/Administration/Role/RoleCommands.cs
index 66c4251..32d5692 100644
--- a/src/EllieBot/Modules/Administration/Role/RoleCommands.cs
+++ b/src/EllieBot/Modules/Administration/Role/RoleCommands.cs
@@ -1,4 +1,6 @@
 #nullable disable
+using Google.Protobuf.WellKnownTypes;
+using EllieBot.Common.TypeReaders.Models;
 using SixLabors.ImageSharp.PixelFormats;
 using Color = SixLabors.ImageSharp.Color;
 
@@ -13,13 +15,18 @@ public partial class Administration
             Excl
         }
 
+        private readonly TempRoleService _tempRoleService;
         private readonly IServiceProvider _services;
         private StickyRolesService _stickyRoleSvc;
 
-        public RoleCommands(IServiceProvider services, StickyRolesService stickyRoleSvc)
+        public RoleCommands(
+            IServiceProvider services,
+            StickyRolesService stickyRoleSvc,
+            TempRoleService tempRoleService)
         {
             _services = services;
             _stickyRoleSvc = stickyRoleSvc;
+            _tempRoleService = tempRoleService;
         }
 
         [Cmd]
@@ -34,13 +41,16 @@ public partial class Administration
                 return;
             try
             {
-                await targetUser.AddRoleAsync(roleToAdd, new RequestOptions()
-                {
-                    AuditLogReason = $"Added by [{ctx.User.Username}]"
-                });
+                await targetUser.AddRoleAsync(roleToAdd,
+                    new RequestOptions()
+                    {
+                        AuditLogReason = $"Added by [{ctx.User.Username}]"
+                    });
 
-                await Response().Confirm(strs.setrole(Format.Bold(roleToAdd.Name),
-                    Format.Bold(targetUser.ToString()))).SendAsync();
+                await Response()
+                      .Confirm(strs.setrole(Format.Bold(roleToAdd.Name),
+                          Format.Bold(targetUser.ToString())))
+                      .SendAsync();
             }
             catch (Exception ex)
             {
@@ -62,8 +72,10 @@ public partial class Administration
             try
             {
                 await targetUser.RemoveRoleAsync(roleToRemove);
-                await Response().Confirm(strs.remrole(Format.Bold(roleToRemove.Name),
-                    Format.Bold(targetUser.ToString()))).SendAsync();
+                await Response()
+                      .Confirm(strs.remrole(Format.Bold(roleToRemove.Name),
+                          Format.Bold(targetUser.ToString())))
+                      .SendAsync();
             }
             catch
             {
@@ -204,5 +216,29 @@ public partial class Administration
                 await Response().Confirm(strs.sticky_roles_disabled).SendAsync();
             }
         }
+
+        [Cmd]
+        [RequireContext(ContextType.Guild)]
+        [UserPerm(GuildPerm.Administrator)]
+        [BotPerm(GuildPerm.ManageRoles)]
+        public async Task TempRole(ParsedTimespan timespan, IUser user, [Leftover] IRole role)
+        {
+            if (!await CheckRoleHierarchy(role))
+            {
+                await Response()
+                      .Error(strs.hierarchy)
+                      .SendAsync();
+                return;
+            }
+
+            await _tempRoleService.AddTempRoleAsync(ctx.Guild.Id, role.Id, user.Id, timespan.Time);
+
+
+            await Response()
+                  .Confirm(strs.temp_role_added(user.Mention,
+                      Format.Bold(role.Name),
+                      TimestampTag.FromDateTime(DateTime.UtcNow.Add(timespan.Time), TimestampTagStyles.Relative)))
+                  .SendAsync();
+        }
     }
 }
\ No newline at end of file
diff --git a/src/EllieBot/Modules/Administration/Role/TempRoleService.cs b/src/EllieBot/Modules/Administration/Role/TempRoleService.cs
new file mode 100644
index 0000000..aee948a
--- /dev/null
+++ b/src/EllieBot/Modules/Administration/Role/TempRoleService.cs
@@ -0,0 +1,140 @@
+using LinqToDB;
+using LinqToDB.EntityFrameworkCore;
+using EllieBot.Common.ModuleBehaviors;
+using EllieBot.Db.Models;
+
+namespace EllieBot.Modules.Administration;
+
+public class TempRoleService : IReadyExecutor, IEService
+{
+    private readonly DbService _db;
+    private readonly DiscordSocketClient _client;
+    private readonly IBotCreds _creds;
+
+    private TaskCompletionSource<bool> _tcs = new();
+
+    public TempRoleService(
+        DbService db,
+        DiscordSocketClient client,
+        IBotCreds creds)
+    {
+        _db = db;
+        _client = client;
+        _creds = creds;
+    }
+
+    public async Task AddTempRoleAsync(
+        ulong guildId,
+        ulong roleId,
+        ulong userId,
+        TimeSpan duration)
+    {
+        if (duration == TimeSpan.Zero)
+        {
+            await using var uow = _db.GetDbContext();
+            await uow.GetTable<TempRole>()
+                     .Where(x => x.GuildId == guildId && x.UserId == userId)
+                     .DeleteAsync();
+            return;
+        }
+
+        var until = DateTime.UtcNow.Add(duration);
+        await using var ctx = _db.GetDbContext();
+        await ctx.GetTable<TempRole>()
+                 .InsertOrUpdateAsync(() => new()
+                 {
+                     GuildId = guildId,
+                     RoleId = roleId,
+                     UserId = userId,
+                     Remove = false,
+                     ExpiresAt = until
+                 },
+                     (old) => new()
+                     {
+                         ExpiresAt = until,
+                     },
+                     () => new()
+                     {
+                         GuildId = guildId,
+                         UserId = userId,
+                         RoleId = roleId
+                     });
+
+        _tcs.TrySetResult(true);
+    }
+
+    public async Task OnReadyAsync()
+    {
+        while (true)
+        {
+            try
+            {
+                _tcs = new(TaskCreationOptions.RunContinuationsAsynchronously);
+                var latest = await _db.GetDbContext()
+                                      .GetTable<TempRole>()
+                                      .Where(x => Linq2DbExpressions.GuildOnShard(x.GuildId,
+                                          _creds.TotalShards,
+                                          _client.ShardId))
+                                      .OrderBy(x => x.ExpiresAt)
+                                      .FirstOrDefaultAsyncLinqToDB();
+
+                if (latest == default)
+                {
+                    await _tcs.Task;
+                    continue;
+                }
+
+                var now = DateTime.UtcNow;
+                if (latest.ExpiresAt > now)
+                {
+                    await Task.WhenAny(Task.Delay(latest.ExpiresAt - now), _tcs.Task);
+                    continue;
+                }
+
+                var deleted = await _db.GetDbContext()
+                                       .GetTable<TempRole>()
+                                       .Where(x => Linq2DbExpressions.GuildOnShard(x.GuildId,
+                                                       _creds.TotalShards,
+                                                       _client.ShardId)
+                                                   && x.ExpiresAt <= now)
+                                       .DeleteWithOutputAsync();
+
+                foreach (var d in deleted)
+                {
+                    try
+                    {
+                        await RemoveRole(d);
+                    }
+                    catch
+                    {
+                        Log.Warning("Unable to remove temp role {RoleId} from user {UserId}",
+                            d.RoleId,
+                            d.UserId);
+                    }
+
+                    await Task.Delay(1000);
+                }
+            }
+            catch (Exception ex)
+            {
+                Log.Error(ex, "Unexpected error occurred in temprole loop");
+                await Task.Delay(1000);
+            }
+        }
+    }
+
+    private async Task RemoveRole(TempRole tempRole)
+    {
+        var guild = _client.GetGuild(tempRole.GuildId);
+
+        var role = guild?.GetRole(tempRole.RoleId);
+        if (role is null)
+            return;
+
+        var user = guild?.GetUser(tempRole.UserId);
+        if (user is null)
+            return;
+
+        await user.RemoveRoleAsync(role);
+    }
+}
diff --git a/src/EllieBot/Modules/Administration/UserPunish/UserPunishCommands.cs b/src/EllieBot/Modules/Administration/UserPunish/UserPunishCommands.cs
index c9507fa..745df25 100644
--- a/src/EllieBot/Modules/Administration/UserPunish/UserPunishCommands.cs
+++ b/src/EllieBot/Modules/Administration/UserPunish/UserPunishCommands.cs
@@ -313,7 +313,7 @@ public partial class Administration
             int number,
             AddRole _,
             IRole role,
-            StoopidTime time = null)
+            ParsedTimespan timespan = null)
         {
             var punish = PunishmentAction.AddRole;
 
@@ -324,12 +324,12 @@ public partial class Administration
                 return;
             }
 
-            var success = await _service.WarnPunish(ctx.Guild.Id, number, punish, time, role);
+            var success = await _service.WarnPunish(ctx.Guild.Id, number, punish, timespan, role);
 
             if (!success)
                 return;
 
-            if (time is null)
+            if (timespan is null)
             {
                 await Response()
                       .Confirm(strs.warn_punish_set(Format.Bold(punish.ToString()),
@@ -341,7 +341,7 @@ public partial class Administration
                 await Response()
                       .Confirm(strs.warn_punish_set_timed(Format.Bold(punish.ToString()),
                           Format.Bold(number.ToString()),
-                          Format.Bold(time.Input)))
+                          Format.Bold(timespan.Input)))
                       .SendAsync();
             }
         }
@@ -349,7 +349,7 @@ public partial class Administration
         [Cmd]
         [RequireContext(ContextType.Guild)]
         [UserPerm(GuildPerm.BanMembers)]
-        public async Task WarnPunish(int number, PunishmentAction punish, StoopidTime time = null)
+        public async Task WarnPunish(int number, PunishmentAction punish, ParsedTimespan timespan = null)
         {
             // this should never happen. Addrole has its own method with higher priority
             // also disallow warn punishment for getting warned
@@ -357,15 +357,15 @@ public partial class Administration
                 return;
 
             // you must specify the time for timeout
-            if (punish is PunishmentAction.TimeOut && time is null)
+            if (punish is PunishmentAction.TimeOut && timespan is null)
                 return;
 
-            var success = await _service.WarnPunish(ctx.Guild.Id, number, punish, time);
+            var success = await _service.WarnPunish(ctx.Guild.Id, number, punish, timespan);
 
             if (!success)
                 return;
 
-            if (time is null)
+            if (timespan is null)
             {
                 await Response()
                       .Confirm(strs.warn_punish_set(Format.Bold(punish.ToString()),
@@ -377,7 +377,7 @@ public partial class Administration
                 await Response()
                       .Confirm(strs.warn_punish_set_timed(Format.Bold(punish.ToString()),
                           Format.Bold(number.ToString()),
-                          Format.Bold(time.Input)))
+                          Format.Bold(timespan.Input)))
                       .SendAsync();
             }
         }
@@ -417,17 +417,17 @@ public partial class Administration
         [UserPerm(GuildPerm.BanMembers)]
         [BotPerm(GuildPerm.BanMembers)]
         [Priority(1)]
-        public Task Ban(StoopidTime time, IUser user, [Leftover] string msg = null)
-            => Ban(time, user.Id, msg);
+        public Task Ban(ParsedTimespan timespan, IUser user, [Leftover] string msg = null)
+            => Ban(timespan, user.Id, msg);
 
         [Cmd]
         [RequireContext(ContextType.Guild)]
         [UserPerm(GuildPerm.BanMembers)]
         [BotPerm(GuildPerm.BanMembers)]
         [Priority(0)]
-        public async Task Ban(StoopidTime time, ulong userId, [Leftover] string msg = null)
+        public async Task Ban(ParsedTimespan timespan, ulong userId, [Leftover] string msg = null)
         {
-            if (time.Time > TimeSpan.FromDays(49))
+            if (timespan.Time > TimeSpan.FromDays(49))
                 return;
 
             var guildUser = await ((DiscordSocketClient)Context.Client).Rest.GetGuildUserAsync(ctx.Guild.Id, userId);
@@ -444,7 +444,7 @@ public partial class Administration
                 {
                     var defaultMessage = GetText(strs.bandm(Format.Bold(ctx.Guild.Name), msg));
                     var smartText =
-                        await _service.GetBanUserDmEmbed(Context, guildUser, defaultMessage, msg, time.Time);
+                        await _service.GetBanUserDmEmbed(Context, guildUser, defaultMessage, msg, timespan.Time);
                     if (smartText is not null)
                         await Response().User(guildUser).Text(smartText).SendAsync();
                 }
@@ -456,14 +456,14 @@ public partial class Administration
 
             var user = await ctx.Client.GetUserAsync(userId);
             var banPrune = await _service.GetBanPruneAsync(ctx.Guild.Id) ?? 7;
-            await _mute.TimedBan(ctx.Guild, userId, time.Time, (ctx.User + " | " + msg).TrimTo(512), banPrune);
+            await _mute.TimedBan(ctx.Guild, userId, timespan.Time, (ctx.User + " | " + msg).TrimTo(512), banPrune);
             var toSend = CreateEmbed()
                                 .WithOkColor()
                                 .WithTitle("⛔️ " + GetText(strs.banned_user))
                                 .AddField(GetText(strs.username), user?.ToString() ?? userId.ToString(), true)
                                 .AddField("ID", userId.ToString(), true)
                                 .AddField(GetText(strs.duration),
-                                    time.Time.ToPrettyStringHm(),
+                                    timespan.Time.ToPrettyStringHm(),
                                     true);
 
             if (dmFailed)
@@ -601,7 +601,7 @@ public partial class Administration
         [UserPerm(GuildPerm.BanMembers)]
         [BotPerm(GuildPerm.BanMembers)]
         [Priority(1)]
-        public Task BanMessageTest(StoopidTime duration, [Leftover] string reason = null)
+        public Task BanMessageTest(ParsedTimespan duration, [Leftover] string reason = null)
             => InternalBanMessageTest(reason, duration.Time);
 
         private async Task InternalBanMessageTest(string reason, TimeSpan? duration)
@@ -791,7 +791,7 @@ public partial class Administration
         [UserPerm(GuildPerm.ModerateMembers)]
         [BotPerm(GuildPerm.ModerateMembers)]
         [Priority(2)]
-        public async Task Timeout(IUser globalUser, StoopidTime time, [Leftover] string msg = null)
+        public async Task Timeout(IUser globalUser, ParsedTimespan timespan, [Leftover] string msg = null)
         {
             var user = await ctx.Guild.GetUserAsync(globalUser.Id);
 
@@ -817,7 +817,7 @@ public partial class Administration
                 dmFailed = true;
             }
 
-            await user.SetTimeOutAsync(time.Time);
+            await user.SetTimeOutAsync(timespan.Time);
 
             var toSend = CreateEmbed()
                                 .WithOkColor()
diff --git a/src/EllieBot/Modules/Games/Games.cs b/src/EllieBot/Modules/Games/Games.cs
index 4823756..fe11a63 100644
--- a/src/EllieBot/Modules/Games/Games.cs
+++ b/src/EllieBot/Modules/Games/Games.cs
@@ -1,5 +1,6 @@
 #nullable disable
 using EllieBot.Modules.Games.Services;
+using System.Text;
 
 namespace EllieBot.Modules.Games;
 
@@ -38,10 +39,72 @@ public partial class Games : EllieModule<GamesService>
             return;
 
         var res = _service.GetEightballResponse(ctx.User.Id, question);
-        await Response().Embed(CreateEmbed()
-            .WithOkColor()
-            .WithDescription(ctx.User.ToString())
-            .AddField("❓ " + GetText(strs.question), question)
-            .AddField("🎱 " + GetText(strs._8ball), res)).SendAsync();
+        await Response()
+              .Embed(CreateEmbed()
+                     .WithOkColor()
+                     .WithDescription(ctx.User.ToString())
+                     .AddField("❓ " + GetText(strs.question), question)
+                     .AddField("🎱 " + GetText(strs._8ball), res))
+              .SendAsync();
+    }
+
+    private readonly string[] _numberEmojis = ["0️⃣", "1️⃣", "2️⃣", "3️⃣", "4️⃣", "5️⃣", "6️⃣", "7️⃣", "8️⃣", "9️⃣"];
+
+    [Cmd]
+    public async Task Minesweeper(int numberOfMines = 12)
+    {
+        var boardSizeX = 9;
+        var boardSizeY = 10;
+
+        if (numberOfMines < 1)
+        {
+            numberOfMines = 1;
+        }
+        else if (numberOfMines > boardSizeX * boardSizeY / 2)
+        {
+            numberOfMines = boardSizeX * boardSizeY / 2;
+        }
+
+        var mineIndicies = Enumerable.Range(0, boardSizeX * boardSizeY)
+                                     .ToArray()
+                                     .Shuffle()
+                                     .Take(numberOfMines)
+                                     .ToHashSet();
+
+        string GetNumberOnCell(int x, int y)
+        {
+            var count = 0;
+            for (var i = -1; i < 2; i++)
+            {
+                for (var j = -1; j < 2; j++)
+                {
+                    if (y + j >= boardSizeY || y + j < 0)
+                        continue;
+                    if (x + i >= boardSizeX || x + i < 0)
+                        continue;
+
+                    var boardIndex = (y + j) * boardSizeX + (x + i);
+                    if (mineIndicies.Contains(boardIndex))
+                        count++;
+                }
+            }
+
+            return _numberEmojis[count];
+        }
+
+        var sb = new StringBuilder();
+        sb.AppendLine($"### Minesweeper [{numberOfMines}\\💣]");
+        for (var i = 0; i < boardSizeY; i++)
+        {
+            for (var j = 0; j < boardSizeX; j++)
+            {
+                var emoji = mineIndicies.Contains((i * boardSizeX) + j) ? "💣" : GetNumberOnCell(j, i);
+                sb.Append($"||{emoji}||");
+            }
+
+            sb.AppendLine();
+        }
+
+        await Response().Text(sb.ToString()).SendAsync();
     }
 }
\ No newline at end of file
diff --git a/src/EllieBot/Modules/Utility/AfkService.cs b/src/EllieBot/Modules/Utility/AfkService.cs
index 7f8ede4..44b82a0 100644
--- a/src/EllieBot/Modules/Utility/AfkService.cs
+++ b/src/EllieBot/Modules/Utility/AfkService.cs
@@ -9,6 +9,7 @@ public sealed class AfkService : IEService, IReadyExecutor
     private readonly MessageSenderService _mss;
 
     private static readonly TimeSpan _maxAfkDuration = 8.Hours();
+
     public AfkService(IBotCache cache, DiscordSocketClient client, MessageSenderService mss)
     {
         _cache = cache;
@@ -19,6 +20,9 @@ public sealed class AfkService : IEService, IReadyExecutor
     private static TypedKey<string> GetKey(ulong userId)
         => new($"afk:msg:{userId}");
 
+    private static TypedKey<bool> GetRecentlySentKey(ulong userId, ulong channelId)
+        => new($"afk:recent:{userId}:{channelId}");
+
     public async Task<bool> SetAfkAsync(ulong userId, string text)
     {
         var added = await _cache.AddAsync(GetKey(userId), text, _maxAfkDuration, overwrite: true);
@@ -43,9 +47,7 @@ public sealed class AfkService : IEService, IReadyExecutor
                             msg.DeleteAfter(5);
                         });
                     }
-
                 }
-
             }
             catch (Exception ex)
             {
@@ -61,7 +63,7 @@ public sealed class AfkService : IEService, IReadyExecutor
             await Task.Delay(_maxAfkDuration);
             _client.MessageReceived -= StopAfk;
         });
-        
+
         return added;
     }
 
@@ -72,36 +74,29 @@ public sealed class AfkService : IEService, IReadyExecutor
         return Task.CompletedTask;
     }
 
-    private Task TryTriggerAfkMessage(SocketMessage arg)
+    private Task TryTriggerAfkMessage(SocketMessage sm)
     {
-        if (arg.Author.IsBot || arg.Author.IsWebhook)
+        if (sm.Author.IsBot || sm.Author.IsWebhook)
             return Task.CompletedTask;
 
-        if (arg is not IUserMessage uMsg || uMsg.Channel is not ITextChannel tc)
+        if (sm is not IUserMessage uMsg || uMsg.Channel is not ITextChannel tc)
             return Task.CompletedTask;
-        
-        if ((arg.MentionedUsers.Count is 0 or > 3) && uMsg.ReferencedMessage is null)
+
+        if ((sm.MentionedUsers.Count is 0 or > 3) && uMsg.ReferencedMessage is null)
             return Task.CompletedTask;
 
         _ = Task.Run(async () =>
         {
-            var botUser = await tc.Guild.GetCurrentUserAsync();
-
-            var perms = botUser.GetPermissions(tc);
-
-            if (!perms.SendMessages)
-                return;
-
             ulong mentionedUserId = 0;
 
-            if (arg.MentionedUsers.Count <= 3)
+            if (sm.MentionedUsers.Count <= 3)
             {
                 foreach (var uid in uMsg.MentionedUserIds)
                 {
-                    if (uid == arg.Author.Id)
+                    if (uid == sm.Author.Id)
                         continue;
 
-                    if (arg.Content.StartsWith($"<@{uid}>") || arg.Content.StartsWith($"<@!{uid}>"))
+                    if (sm.Content.StartsWith($"<@{uid}>") || sm.Content.StartsWith($"<@!{uid}>"))
                     {
                         mentionedUserId = uid;
                         break;
@@ -115,7 +110,7 @@ public sealed class AfkService : IEService, IReadyExecutor
                 {
                     return;
                 }
-                
+
                 mentionedUserId = repliedUserId;
             }
 
@@ -125,16 +120,35 @@ public sealed class AfkService : IEService, IReadyExecutor
                 if (result.TryPickT0(out var msg, out _))
                 {
                     var st = SmartText.CreateFrom(msg);
-                    
+
                     st = $"The user you've pinged (<#{mentionedUserId}>) is AFK: " + st;
-                    
-                    var toDelete = await _mss.Response(arg.Channel)
-                                             .User(arg.Author)
+
+                    var toDelete = await _mss.Response(sm.Channel)
+                                             .User(sm.Author)
                                              .Message(uMsg)
                                              .Text(st)
                                              .SendAsync();
 
                     toDelete.DeleteAfter(30);
+
+                    var botUser = await tc.Guild.GetCurrentUserAsync();
+                    var perms = botUser.GetPermissions(tc);
+                    if (!perms.SendMessages)
+                        return;
+
+                    var key = GetRecentlySentKey(mentionedUserId, sm.Channel.Id);
+                    var recent = await _cache.GetAsync(key);
+
+                    if (!recent.TryPickT0(out _, out _))
+                    {
+                        var chMsg = await _mss.Response(sm.Channel)
+                                              .Message(uMsg)
+                                              .Pending(strs.user_afk($"<@{mentionedUserId}>"))
+                                              .SendAsync();
+
+                        chMsg.DeleteAfter(5);
+                        await _cache.AddAsync(key, true, expiry: TimeSpan.FromMinutes(5));
+                    }
                 }
             }
             catch (HttpException ex)
diff --git a/src/EllieBot/Modules/Utility/Remind/RemindCommands.cs b/src/EllieBot/Modules/Utility/Remind/RemindCommands.cs
index a575e20..16da439 100644
--- a/src/EllieBot/Modules/Utility/Remind/RemindCommands.cs
+++ b/src/EllieBot/Modules/Utility/Remind/RemindCommands.cs
@@ -98,10 +98,10 @@ public partial class Utility
                 return;
 
             var embed = CreateEmbed()
-                               .WithOkColor()
-                               .WithTitle(GetText(guildId is not null
-                                   ? strs.reminder_server_list
-                                   : strs.reminder_list));
+                        .WithOkColor()
+                        .WithTitle(GetText(guildId is not null
+                            ? strs.reminder_server_list
+                            : strs.reminder_list));
 
             List<Reminder> rems;
             if (guildId is { } gid)
@@ -193,23 +193,14 @@ public partial class Utility
                     message = message.SanitizeAllMentions();
             }
 
-            var rem = new Reminder
-            {
-                ChannelId = targetId,
-                IsPrivate = isPrivate,
-                When = time,
-                Message = message,
-                UserId = ctx.User.Id,
-                ServerId = ctx.Guild?.Id ?? 0
-            };
+            await _service.AddReminderAsync(ctx.User.Id,
+                targetId,
+                ctx.Guild?.Id,
+                isPrivate,
+                time,
+                message,
+                ReminderType.User);
 
-            await using (var uow = _db.GetDbContext())
-            {
-                uow.Set<Reminder>().Add(rem);
-                await uow.SaveChangesAsync();
-            }
-
-            // var gTime = ctx.Guild is null ? time : TimeZoneInfo.ConvertTime(time, _tz.GetTimeZoneOrUtc(ctx.Guild.Id));
             await Response()
                   .Confirm($"\u23f0 {GetText(strs.remind2(
                       Format.Bold(!isPrivate ? $"<#{targetId}>" : ctx.User.Username),
diff --git a/src/EllieBot/Modules/Utility/Remind/RemindService.cs b/src/EllieBot/Modules/Utility/Remind/RemindService.cs
index 3c004c6..db804aa 100644
--- a/src/EllieBot/Modules/Utility/Remind/RemindService.cs
+++ b/src/EllieBot/Modules/Utility/Remind/RemindService.cs
@@ -21,6 +21,8 @@ public class RemindService : IEService, IReadyExecutor, IRemindService
     private readonly IMessageSenderService _sender;
     private readonly CultureInfo _culture;
 
+    private TaskCompletionSource<bool> _tcs;
+
     public RemindService(
         DiscordSocketClient client,
         DbService db,
@@ -44,8 +46,7 @@ public class RemindService : IEService, IReadyExecutor, IRemindService
 
     public async Task OnReadyAsync()
     {
-        using var timer = new PeriodicTimer(TimeSpan.FromSeconds(15));
-        while (await timer.WaitForNextTickAsync())
+        while (true)
         {
             await OnReminderLoopTickInternalAsync();
         }
@@ -55,8 +56,7 @@ public class RemindService : IEService, IReadyExecutor, IRemindService
     {
         try
         {
-            var now = DateTime.UtcNow;
-            var reminders = await GetRemindersBeforeAsync(now);
+            var reminders = await GetRemindersBeforeAsync();
             if (reminders.Count == 0)
                 return;
 
@@ -67,7 +67,6 @@ public class RemindService : IEService, IReadyExecutor, IRemindService
             {
                 var executedReminders = group.ToList();
                 await executedReminders.Select(ReminderTimerAction).WhenAll();
-                await RemoveReminders(executedReminders.Select(x => x.Id));
                 await Task.Delay(1500);
             }
         }
@@ -80,21 +79,51 @@ public class RemindService : IEService, IReadyExecutor, IRemindService
     private async Task RemoveReminders(IEnumerable<int> reminders)
     {
         await using var uow = _db.GetDbContext();
-        await uow.Set<Reminder>()
-                 .ToLinqToDBTable()
+        await uow.GetTable<Reminder>()
                  .DeleteAsync(x => reminders.Contains(x.Id));
 
         await uow.SaveChangesAsync();
     }
 
-    private async Task<List<Reminder>> GetRemindersBeforeAsync(DateTime now)
+    private async Task<IReadOnlyList<Reminder>> GetRemindersBeforeAsync()
     {
-        await using var uow = _db.GetDbContext();
-        return await uow.Set<Reminder>()
-                        .ToLinqToDBTable()
-                        .Where(x => Linq2DbExpressions.GuildOnShard(x.ServerId, _creds.TotalShards, _client.ShardId)
-                                    && x.When < now)
-                        .ToListAsyncLinqToDB();
+        while (true)
+        {
+            _tcs = new(TaskCreationOptions.RunContinuationsAsynchronously);
+            await using var uow = _db.GetDbContext();
+            var earliest = await uow.Set<Reminder>()
+                                    .ToLinqToDBTable()
+                                    .Where(x => Linq2DbExpressions.GuildOnShard(x.ServerId,
+                                        _creds.TotalShards,
+                                        _client.ShardId))
+                                    .OrderBy(x => x.When)
+                                    .FirstOrDefaultAsyncLinqToDB();
+
+            if (earliest == default)
+            {
+                await _tcs.Task;
+                continue;
+            }
+
+            var now = DateTime.UtcNow;
+            if (earliest.When > now)
+            {
+                var diff = earliest.When - now;
+                // Log.Information("Waiting for {Diff}", diff);
+                await Task.WhenAny(Task.Delay(diff), _tcs.Task);
+                continue;
+            }
+
+            var reminders = await uow.Set<Reminder>()
+                                     .ToLinqToDBTable()
+                                     .Where(x => Linq2DbExpressions.GuildOnShard(x.ServerId,
+                                         _creds.TotalShards,
+                                         _client.ShardId))
+                                     .Where(x => x.When <= now)
+                                     .DeleteWithOutputAsync();
+
+            return reminders;
+        }
     }
 
     public bool TryParseRemindMessage(string input, out RemindObject obj)
@@ -243,21 +272,24 @@ public class RemindService : IEService, IReadyExecutor, IRemindService
         string message,
         ReminderType reminderType)
     {
-        var rem = new Reminder
+        await using (var ctx = _db.GetDbContext())
         {
-            UserId = userId,
-            ChannelId = targetId,
-            ServerId = guildId ?? 0,
-            IsPrivate = isPrivate,
-            When = time,
-            Message = message,
-            Type = reminderType
-        };
+            await ctx.GetTable<Reminder>()
+                     .InsertAsync(() => new Reminder
+                     {
+                         UserId = userId,
+                         ChannelId = targetId,
+                         ServerId = guildId ?? 0,
+                         IsPrivate = isPrivate,
+                         When = time,
+                         Message = message,
+                         Type = reminderType,
+                         DateAdded = DateTime.UtcNow
+                     });
+            await ctx.SaveChangesAsync();
+        }
 
-        await using var ctx = _db.GetDbContext();
-        await ctx.Set<Reminder>()
-                 .AddAsync(rem);
-        await ctx.SaveChangesAsync();
+        _tcs.SetResult(true);
     }
 
     public async Task<List<Reminder>> GetServerReminders(int page, ulong guildId)
diff --git a/src/EllieBot/Modules/Utility/Repeater/RepeatCommands.cs b/src/EllieBot/Modules/Utility/Repeater/RepeatCommands.cs
index 4517b9b..e9f52c4 100644
--- a/src/EllieBot/Modules/Utility/Repeater/RepeatCommands.cs
+++ b/src/EllieBot/Modules/Utility/Repeater/RepeatCommands.cs
@@ -110,14 +110,14 @@ public partial class Utility
         [RequireContext(ContextType.Guild)]
         [UserPerm(GuildPerm.ManageMessages)]
         [Priority(0)]
-        public Task Repeat(StoopidTime interval, [Leftover] string message)
+        public Task Repeat(ParsedTimespan interval, [Leftover] string message)
             => Repeat(ctx.Channel, null, interval, message);
 
         [Cmd]
         [RequireContext(ContextType.Guild)]
         [UserPerm(GuildPerm.ManageMessages)]
         [Priority(0)]
-        public Task Repeat(ITextChannel channel, StoopidTime interval, [Leftover] string message)
+        public Task Repeat(ITextChannel channel, ParsedTimespan interval, [Leftover] string message)
             => Repeat(channel, null, interval, message);
 
         [Cmd]
@@ -138,14 +138,14 @@ public partial class Utility
         [RequireContext(ContextType.Guild)]
         [UserPerm(GuildPerm.ManageMessages)]
         [Priority(2)]
-        public Task Repeat(GuildDateTime? timeOfDay, StoopidTime? interval, [Leftover] string message)
+        public Task Repeat(GuildDateTime? timeOfDay, ParsedTimespan? interval, [Leftover] string message)
             => Repeat(ctx.Channel, timeOfDay, interval, message);
 
         [Cmd]
         [RequireContext(ContextType.Guild)]
         [UserPerm(GuildPerm.ManageMessages)]
         [Priority(3)]
-        public async Task Repeat(IMessageChannel channel, GuildDateTime? timeOfDay, StoopidTime? interval,
+        public async Task Repeat(IMessageChannel channel, GuildDateTime? timeOfDay, ParsedTimespan? interval,
             [Leftover] string message)
         {
             if (channel is not ITextChannel txtCh || txtCh.GuildId != ctx.Guild.Id)
diff --git a/src/EllieBot/Modules/Xp/Xp.cs b/src/EllieBot/Modules/Xp/Xp.cs
index f723813..fa6b534 100644
--- a/src/EllieBot/Modules/Xp/Xp.cs
+++ b/src/EllieBot/Modules/Xp/Xp.cs
@@ -56,25 +56,18 @@ public partial class Xp : EllieModule<XpService>
     public async Task XpNotify()
     {
         var globalSetting = _service.GetNotificationType(ctx.User);
-        var serverSetting = _service.GetNotificationType(ctx.User.Id, ctx.Guild.Id);
 
         var embed = CreateEmbed()
                     .WithOkColor()
-                    .AddField(GetText(strs.xpn_setting_global), GetNotifLocationString(globalSetting))
-                    .AddField(GetText(strs.xpn_setting_server), GetNotifLocationString(serverSetting));
+                    .AddField(GetText(strs.xpn_setting_global), GetNotifLocationString(globalSetting));
 
         await Response().Embed(embed).SendAsync();
     }
 
     [Cmd]
-    [RequireContext(ContextType.Guild)]
-    public async Task XpNotify(NotifyPlace place, XpNotificationLocation type)
+    public async Task XpNotify(XpNotificationLocation type)
     {
-        if (place == NotifyPlace.Guild)
-            await _service.ChangeNotificationType(ctx.User.Id, ctx.Guild.Id, type);
-        else
-            await _service.ChangeNotificationType(ctx.User, type);
-
+        await _service.ChangeNotificationType(ctx.User, type);
         await ctx.OkAsync();
     }
 
diff --git a/src/EllieBot/Modules/Xp/XpService.cs b/src/EllieBot/Modules/Xp/XpService.cs
index db18eb0..7de2285 100644
--- a/src/EllieBot/Modules/Xp/XpService.cs
+++ b/src/EllieBot/Modules/Xp/XpService.cs
@@ -159,14 +159,6 @@ public class XpService : IEService, IReadyExecutor, IExecNoCommand
         }
     }
 
-    public sealed class MiniGuildXpStats
-    {
-        public long Xp { get; set; }
-        public XpNotificationLocation NotifyOnLevelUp { get; set; }
-        public ulong GuildId { get; set; }
-        public ulong UserId { get; set; }
-    }
-
     private async Task UpdateXp()
     {
         try
@@ -261,7 +253,6 @@ public class XpService : IEService, IReadyExecutor, IExecNoCommand
                                       GuildId = guildId,
                                       Xp = group.Key,
                                       DateAdded = DateTime.UtcNow,
-                                      NotifyOnLevelUp = XpNotificationLocation.None
                                   },
                                       _ => new()
                                       {
@@ -320,8 +311,7 @@ public class XpService : IEService, IReadyExecutor, IExecNoCommand
                                 du.UserId,
                                 true,
                                 oldLevel.Level,
-                                newLevel.Level,
-                                du.NotifyOnLevelUp));
+                                newLevel.Level));
                     }
                 }
             }
@@ -339,7 +329,7 @@ public class XpService : IEService, IReadyExecutor, IExecNoCommand
         bool isServer,
         long oldLevel,
         long newLevel,
-        XpNotificationLocation notifyLoc)
+        XpNotificationLocation notifyLoc = XpNotificationLocation.None)
         => async () =>
         {
             if (isServer)
@@ -634,21 +624,6 @@ public class XpService : IEService, IReadyExecutor, IExecNoCommand
                         .ToArrayAsyncLinqToDB();
     }
 
-    public async Task ChangeNotificationType(ulong userId, ulong guildId, XpNotificationLocation type)
-    {
-        await using var uow = _db.GetDbContext();
-        var user = uow.GetOrCreateUserXpStats(guildId, userId);
-        user.NotifyOnLevelUp = type;
-        await uow.SaveChangesAsync();
-    }
-
-    public XpNotificationLocation GetNotificationType(ulong userId, ulong guildId)
-    {
-        using var uow = _db.GetDbContext();
-        var user = uow.GetOrCreateUserXpStats(guildId, userId);
-        return user.NotifyOnLevelUp;
-    }
-
     public XpNotificationLocation GetNotificationType(IUser user)
     {
         using var uow = _db.GetDbContext();
@@ -1667,9 +1642,7 @@ public class XpService : IEService, IReadyExecutor, IExecNoCommand
                  {
                      GuildId = guildId,
                      UserId = userId,
-                     AwardedXp = 0,
                      Xp = lvlStats.TotalXp,
-                     NotifyOnLevelUp = XpNotificationLocation.None,
                      DateAdded = DateTime.UtcNow
                  }, (old) => new()
                  {
diff --git a/src/EllieBot/_common/AddRemove.cs b/src/EllieBot/_common/AddRemove.cs
index cccd892..700a773 100644
--- a/src/EllieBot/_common/AddRemove.cs
+++ b/src/EllieBot/_common/AddRemove.cs
@@ -3,8 +3,8 @@ namespace EllieBot.Common;
 
 public enum AddRemove
 {
-    Add = int.MinValue,
-    Remove = int.MinValue + 1,
-    Rem = int.MinValue + 1,
-    Rm = int.MinValue + 1
+    Add = 0,
+    Remove = 1,
+    Rem = 1,
+    Rm = 1,
 }
\ No newline at end of file
diff --git a/src/EllieBot/_common/TypeReaders/Models/StoopidTime.cs b/src/EllieBot/_common/TypeReaders/Models/StoopidTime.cs
index 854dde7..8196b6c 100644
--- a/src/EllieBot/_common/TypeReaders/Models/StoopidTime.cs
+++ b/src/EllieBot/_common/TypeReaders/Models/StoopidTime.cs
@@ -2,7 +2,7 @@
 
 namespace EllieBot.Common.TypeReaders.Models;
 
-public class StoopidTime
+public class ParsedTimespan
 {
     private static readonly Regex _regex = new(
         @"^(?:(?<months>\d)mo)?(?:(?<weeks>\d{1,2})w)?(?:(?<days>\d{1,2})d)?(?:(?<hours>\d{1,4})h)?(?:(?<minutes>\d{1,5})m)?(?:(?<seconds>\d{1,6})s)?$",
@@ -11,9 +11,9 @@ public class StoopidTime
     public string Input { get; set; } = string.Empty;
     public TimeSpan Time { get; set; } = default;
 
-    private StoopidTime() { }
+    private ParsedTimespan() { }
 
-    public static StoopidTime FromInput(string input)
+    public static ParsedTimespan FromInput(string input)
     {
         var m = _regex.Match(input);
 
@@ -52,10 +52,10 @@ public class StoopidTime
         };
     }
 
-    public static implicit operator TimeSpan?(StoopidTime? st)
+    public static implicit operator TimeSpan?(ParsedTimespan? st)
         => st?.Time;
 
-    public static implicit operator StoopidTime(TimeSpan ts)
+    public static implicit operator ParsedTimespan(TimeSpan ts)
         => new()
         {
             Input = ts.ToString(),
diff --git a/src/EllieBot/_common/TypeReaders/StoopidTimeTypeReader.cs b/src/EllieBot/_common/TypeReaders/StoopidTimeTypeReader.cs
index c5b9418..b2c42b9 100644
--- a/src/EllieBot/_common/TypeReaders/StoopidTimeTypeReader.cs
+++ b/src/EllieBot/_common/TypeReaders/StoopidTimeTypeReader.cs
@@ -3,20 +3,20 @@ using EllieBot.Common.TypeReaders.Models;
 
 namespace EllieBot.Common.TypeReaders;
 
-public sealed class StoopidTimeTypeReader : EllieTypeReader<StoopidTime>
+public sealed class StoopidTimeTypeReader : EllieTypeReader<ParsedTimespan>
 {
-    public override ValueTask<TypeReaderResult<StoopidTime>> ReadAsync(ICommandContext context, string input)
+    public override ValueTask<TypeReaderResult<ParsedTimespan>> ReadAsync(ICommandContext context, string input)
     {
         if (string.IsNullOrWhiteSpace(input))
-            return new(TypeReaderResult.FromError<StoopidTime>(CommandError.Unsuccessful, "Input is empty."));
+            return new(TypeReaderResult.FromError<ParsedTimespan>(CommandError.Unsuccessful, "Input is empty."));
         try
         {
-            var time = StoopidTime.FromInput(input);
+            var time = ParsedTimespan.FromInput(input);
             return new(TypeReaderResult.FromSuccess(time));
         }
         catch (Exception ex)
         {
-            return new(TypeReaderResult.FromError<StoopidTime>(CommandError.Exception, ex.Message));
+            return new(TypeReaderResult.FromError<ParsedTimespan>(CommandError.Exception, ex.Message));
         }
     }
 }
\ No newline at end of file
diff --git a/src/EllieBot/data/aliases.yml b/src/EllieBot/data/aliases.yml
index 3581b99..0f9f9fe 100644
--- a/src/EllieBot/data/aliases.yml
+++ b/src/EllieBot/data/aliases.yml
@@ -1541,4 +1541,9 @@ servercolorpending:
   - pending
   - warn
   - warning
-  - pend
\ No newline at end of file
+  - pend
+minesweeper:
+  - minesweeper
+  - mw
+temprole:
+  - temprole
\ No newline at end of file
diff --git a/src/EllieBot/data/strings/commands/commands.en-US.yml b/src/EllieBot/data/strings/commands/commands.en-US.yml
index e269191..384d00b 100644
--- a/src/EllieBot/data/strings/commands/commands.en-US.yml
+++ b/src/EllieBot/data/strings/commands/commands.en-US.yml
@@ -4830,4 +4830,27 @@ xplevelset:
     - level:
         desc: "The level to set the user to."
     - user:
-        desc: "The user to set the level of."
\ No newline at end of file
+        desc: "The user to set the level of."
+temprole:
+  desc: |-
+    Grants a user a temporary role for the specified number of time.
+    The role must exist and be lower in the role hierarchy than your highest role.
+  ex:
+    - '15m @User Jail'
+    - '7d @Newbie Trial Member'
+  params:
+    - days:
+        desc: "The time after which the role is automatically removed."
+    - user:
+        desc: "The user to give the role to."
+    - role:
+        desc: "The role to give to the user."
+minesweeper:
+  desc: |-
+    Creates a spoiler-based minesweeper mini game.
+    You may specify the number of mines.
+  ex:
+    - '15'
+  params:
+    - mines:
+        desc: "The number of mines to create."
\ No newline at end of file
diff --git a/src/EllieBot/data/strings/responses/responses.en-US.json b/src/EllieBot/data/strings/responses/responses.en-US.json
index 72cc0c5..bca49eb 100644
--- a/src/EllieBot/data/strings/responses/responses.en-US.json
+++ b/src/EllieBot/data/strings/responses/responses.en-US.json
@@ -1142,5 +1142,9 @@
   "server_color_set": "Successfully set a new server color.",
   "lasts_until": "Lasts Until",
   "winners_count": "Winners",
-  "level_set": "Level of user {0} set to {1} on this server."
+  "level_set": "Level of user {0} set to {1} on this server.",
+  "temp_role_added": "User {0} has been given {1} role temporarily. The role expires {2}",
+  "user_afk": "User {0} is AFK.",
+  "notify_on": "Notification message will be sent on this channel when {0} event triggers.",
+  "notify_off": "Notification message will no longer be sent when {0} event triggers."
 }