From a9ba7b716607a94104e33cdbc689610a49b5efff Mon Sep 17 00:00:00 2001
From: SylveonDeko <59923820+SylveonDeko@users.noreply.github.com>
Date: Sun, 13 Oct 2024 17:10:44 -0400
Subject: [PATCH] update all packages, add invite counting.
---
.../Yml/CommentGatheringTypeInspector.cs | 17 +
.../Common/Yml/CommentsObjectGraphVisitor.cs | 5 +-
src/Mewdeko/Common/Yml/Rgba32Converter.cs | 8 +-
src/Mewdeko/Common/Yml/UriConverter.cs | 5 +-
src/Mewdeko/Controllers/BotStatus.cs | 9 +-
src/Mewdeko/Database/MewdekoContext.cs | 18 +-
.../20241011165238_SeparateSettings.cs | 3 +-
.../20241013145247_Invites.Designer.cs | 4650 ++++++++++++++++
.../PostgreSql/20241013145247_Invites.cs | 58 +
...1013204914_InviteCountSettings.Designer.cs | 4678 +++++++++++++++++
.../20241013204914_InviteCountSettings.cs | 40 +
.../MewdekoPostgresContextModelSnapshot.cs | 80 +-
src/Mewdeko/Database/Models/Giveaways.cs | 1 -
src/Mewdeko/Database/Models/GuildConfig.cs | 1 -
src/Mewdeko/Database/Models/InviteCount.cs | 25 +
.../Database/Models/InviteCountSettings.cs | 27 +
src/Mewdeko/Database/Models/InvitedBy.cs | 25 +
src/Mewdeko/Mewdeko.csproj | 52 +-
.../Modules/OwnerOnly/InstanceManagement.cs | 59 +
.../OwnerOnly/Services/BotInstanceService.cs | 220 +
.../Services/ChannelCommandService.cs | 2 +
src/Mewdeko/Modules/Utility/InviteCommands.cs | 231 +-
.../Utility/Services/InviteCountService.cs | 379 ++
.../Modules/Utility/Services/InviteService.cs | 58 -
src/Mewdeko/Services/Impl/BotCredentials.cs | 12 +-
src/Mewdeko/Services/Impl/EventHandler.cs | 25 +
src/Mewdeko/Services/Impl/StatsService.cs | 1 +
src/Mewdeko/data/aliases.yml | 22 +
.../data/strings/commands/commands.en-US.yml | 24 +
.../strings/responses/responses.en-US.json | 22 +
30 files changed, 10556 insertions(+), 201 deletions(-)
create mode 100644 src/Mewdeko/Database/Migrations/PostgreSql/20241013145247_Invites.Designer.cs
create mode 100644 src/Mewdeko/Database/Migrations/PostgreSql/20241013145247_Invites.cs
create mode 100644 src/Mewdeko/Database/Migrations/PostgreSql/20241013204914_InviteCountSettings.Designer.cs
create mode 100644 src/Mewdeko/Database/Migrations/PostgreSql/20241013204914_InviteCountSettings.cs
create mode 100644 src/Mewdeko/Database/Models/InviteCount.cs
create mode 100644 src/Mewdeko/Database/Models/InviteCountSettings.cs
create mode 100644 src/Mewdeko/Database/Models/InvitedBy.cs
create mode 100644 src/Mewdeko/Modules/OwnerOnly/InstanceManagement.cs
create mode 100644 src/Mewdeko/Modules/OwnerOnly/Services/BotInstanceService.cs
create mode 100644 src/Mewdeko/Modules/Utility/Services/InviteCountService.cs
delete mode 100644 src/Mewdeko/Modules/Utility/Services/InviteService.cs
diff --git a/src/Mewdeko/Common/Yml/CommentGatheringTypeInspector.cs b/src/Mewdeko/Common/Yml/CommentGatheringTypeInspector.cs
index db6ac2448..554c8cc6f 100644
--- a/src/Mewdeko/Common/Yml/CommentGatheringTypeInspector.cs
+++ b/src/Mewdeko/Common/Yml/CommentGatheringTypeInspector.cs
@@ -22,6 +22,18 @@ public CommentGatheringTypeInspector(ITypeInspector innerTypeDescriptor)
innerTypeDescriptor ?? throw new ArgumentNullException(nameof(innerTypeDescriptor));
}
+ ///
+ public override string GetEnumName(Type enumType, string name)
+ {
+ return name;
+ }
+
+ ///
+ public override string GetEnumValue(object enumValue)
+ {
+ return enumValue.ToString();
+ }
+
///
public override IEnumerable GetProperties(Type type, object? container)
{
@@ -43,6 +55,8 @@ public CommentsPropertyDescriptor(IPropertyDescriptor baseDescriptor)
///
public string Name { get; }
+ public bool AllowNulls { get; }
+
///
public Type Type
{
@@ -81,6 +95,9 @@ public ScalarStyle ScalarStyle
}
}
+ public bool Required { get; }
+ public Type? ConverterType { get; }
+
///
public bool CanWrite
{
diff --git a/src/Mewdeko/Common/Yml/CommentsObjectGraphVisitor.cs b/src/Mewdeko/Common/Yml/CommentsObjectGraphVisitor.cs
index 4d3ad5311..5888ebb5a 100644
--- a/src/Mewdeko/Common/Yml/CommentsObjectGraphVisitor.cs
+++ b/src/Mewdeko/Common/Yml/CommentsObjectGraphVisitor.cs
@@ -19,8 +19,9 @@ public CommentsObjectGraphVisitor(IObjectGraphVisitor nextVisitor)
{
}
+
///
- public override bool EnterMapping(IPropertyDescriptor key, IObjectDescriptor value, IEmitter context)
+ public override bool EnterMapping(IObjectDescriptor key, IObjectDescriptor value, IEmitter context, ObjectSerializer serializer)
{
if (value is CommentsObjectDescriptor commentsDescriptor &&
!string.IsNullOrWhiteSpace(commentsDescriptor.Comment))
@@ -29,6 +30,6 @@ public override bool EnterMapping(IPropertyDescriptor key, IObjectDescriptor val
context.Emit(new Comment(commentsDescriptor.Comment.Replace("\n", "\n# "), false));
}
- return base.EnterMapping(key, value, context);
+ return base.EnterMapping(key, value, context, serializer);
}
}
\ No newline at end of file
diff --git a/src/Mewdeko/Common/Yml/Rgba32Converter.cs b/src/Mewdeko/Common/Yml/Rgba32Converter.cs
index 66497f537..640cf2755 100644
--- a/src/Mewdeko/Common/Yml/Rgba32Converter.cs
+++ b/src/Mewdeko/Common/Yml/Rgba32Converter.cs
@@ -18,14 +18,14 @@ public bool Accepts(Type type)
}
///
- public object ReadYaml(IParser parser, Type type)
+ public object? ReadYaml(IParser parser, Type type, ObjectDeserializer rootDeserializer)
{
var scalar = parser.Consume();
return SKColor.Parse(scalar.Value);
}
///
- public void WriteYaml(IEmitter emitter, object? value, Type type)
+ public void WriteYaml(IEmitter emitter, object? value, Type type, ObjectSerializer serializer)
{
var color = (SKColor)value;
var val = (uint)((color.Blue << 0) | (color.Green << 8) | (color.Red << 16));
@@ -45,14 +45,14 @@ public bool Accepts(Type type)
}
///
- public object ReadYaml(IParser parser, Type type)
+ public object? ReadYaml(IParser parser, Type type, ObjectDeserializer rootDeserializer)
{
var scalar = parser.Consume();
return new CultureInfo(scalar.Value);
}
///
- public void WriteYaml(IEmitter emitter, object? value, Type type)
+ public void WriteYaml(IEmitter emitter, object? value, Type type, ObjectSerializer serializer)
{
var ci = (CultureInfo)value;
emitter.Emit(new Scalar(ci.Name));
diff --git a/src/Mewdeko/Common/Yml/UriConverter.cs b/src/Mewdeko/Common/Yml/UriConverter.cs
index 4bed31c08..e4cf54421 100644
--- a/src/Mewdeko/Common/Yml/UriConverter.cs
+++ b/src/Mewdeko/Common/Yml/UriConverter.cs
@@ -16,16 +16,17 @@ public bool Accepts(Type type)
}
///
- public object ReadYaml(IParser parser, Type type)
+ public object? ReadYaml(IParser parser, Type type, ObjectDeserializer rootDeserializer)
{
var scalar = parser.Consume();
return new Uri(scalar.Value);
}
///
- public void WriteYaml(IEmitter emitter, object? value, Type type)
+ public void WriteYaml(IEmitter emitter, object? value, Type type, ObjectSerializer serializer)
{
var uri = (Uri)value;
emitter.Emit(new Scalar(uri.ToString()));
}
+
}
\ No newline at end of file
diff --git a/src/Mewdeko/Controllers/BotStatus.cs b/src/Mewdeko/Controllers/BotStatus.cs
index 6a2f99c39..7fbade8ff 100644
--- a/src/Mewdeko/Controllers/BotStatus.cs
+++ b/src/Mewdeko/Controllers/BotStatus.cs
@@ -24,6 +24,7 @@ public class BotStatus(DiscordShardedClient client, StatsService statsService, C
[HttpGet]
public async Task GetStatus()
{
+ var creds = new BotCredentials();
var clients = client.Shards;
var rest = client.Rest;
var curUser = await rest.GetUserAsync(client.CurrentUser.Id);
@@ -40,7 +41,8 @@ public async Task GetStatus()
BotStatus = client.Status.ToString(),
UserCount = clients.Select(x => x.Guilds.Sum(g => g.Users.Count)).Sum(),
CommitHash = GetCommitHash(),
- BotId = client.CurrentUser.Id
+ BotId = client.CurrentUser.Id,
+ InstanceUrl = $"http://localhost:{creds.ApiPort}"
};
return Ok(toReturn);
@@ -159,5 +161,10 @@ public class BotStatusModel
/// The bots userId
///
public ulong BotId { get; set; }
+
+ ///
+ /// The api url of this instance.
+ ///
+ public string InstanceUrl { get; set; }
}
}
\ No newline at end of file
diff --git a/src/Mewdeko/Database/MewdekoContext.cs b/src/Mewdeko/Database/MewdekoContext.cs
index 4ce475da2..39627c2ba 100644
--- a/src/Mewdeko/Database/MewdekoContext.cs
+++ b/src/Mewdeko/Database/MewdekoContext.cs
@@ -1,6 +1,4 @@
-using Mewdeko.Common.Attributes.DB;
-using Mewdeko.Modules.OwnerOnly.Services;
-using Mewdeko.Services.Impl;
+using Mewdeko.Services.Impl;
using Microsoft.EntityFrameworkCore;
namespace Mewdeko.Database;
@@ -26,6 +24,15 @@ public MewdekoContext(DbContextOptions options) : base(options)
///
public DbSet GlobalUserBalances { get; set; }
+ ///
+ /// Gets or sets invite counts
+ ///
+ public DbSet InviteCounts { get; set; }
+ ///
+ /// Gets or sets invited by
+ ///
+ public DbSet InvitedBy { get; set; }
+
///
/// Gets or sets the lockdown channel permissions.
///
@@ -421,6 +428,11 @@ public MewdekoContext(DbContextOptions options) : base(options)
///
public DbSet BotInstances { get; set; }
+ ///
+ /// Settings for invite counting
+ ///
+ public DbSet InviteCountSettings { get; set; }
+
///
/// Configures the model that was discovered by convention from the entity types
/// exposed in properties on your derived context.
diff --git a/src/Mewdeko/Database/Migrations/PostgreSql/20241011165238_SeparateSettings.cs b/src/Mewdeko/Database/Migrations/PostgreSql/20241011165238_SeparateSettings.cs
index 9e499eb7a..294e06c89 100644
--- a/src/Mewdeko/Database/Migrations/PostgreSql/20241011165238_SeparateSettings.cs
+++ b/src/Mewdeko/Database/Migrations/PostgreSql/20241011165238_SeparateSettings.cs
@@ -1,5 +1,4 @@
-using System;
-using Microsoft.EntityFrameworkCore.Migrations;
+using Microsoft.EntityFrameworkCore.Migrations;
using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
#nullable disable
diff --git a/src/Mewdeko/Database/Migrations/PostgreSql/20241013145247_Invites.Designer.cs b/src/Mewdeko/Database/Migrations/PostgreSql/20241013145247_Invites.Designer.cs
new file mode 100644
index 000000000..b5be8fdac
--- /dev/null
+++ b/src/Mewdeko/Database/Migrations/PostgreSql/20241013145247_Invites.Designer.cs
@@ -0,0 +1,4650 @@
+//
+using System;
+using Mewdeko.Database;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.Infrastructure;
+using Microsoft.EntityFrameworkCore.Migrations;
+using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
+using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
+
+#nullable disable
+
+namespace Mewdeko.Database.Migrations.PostgreSql
+{
+ [DbContext(typeof(MewdekoPostgresContext))]
+ [Migration("20241013145247_Invites")]
+ partial class Invites
+ {
+ ///
+ protected override void BuildTargetModel(ModelBuilder modelBuilder)
+ {
+#pragma warning disable 612, 618
+ modelBuilder
+ .HasAnnotation("ProductVersion", "8.0.10")
+ .HasAnnotation("Relational:MaxIdentifierLength", 63);
+
+ NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder);
+
+ modelBuilder.Entity("Mewdeko.Database.Models.Afk", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("DateAdded")
+ .HasColumnType("timestamp without time zone");
+
+ b.Property("GuildId")
+ .HasColumnType("numeric(20,0)");
+
+ b.Property("Message")
+ .HasColumnType("text");
+
+ b.Property("UserId")
+ .HasColumnType("numeric(20,0)");
+
+ b.Property("WasTimed")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("boolean")
+ .HasDefaultValue(false);
+
+ b.Property("When")
+ .HasColumnType("timestamp without time zone");
+
+ b.HasKey("Id");
+
+ b.ToTable("AFK");
+ });
+
+ modelBuilder.Entity("Mewdeko.Database.Models.AntiAltSetting", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("Action")
+ .HasColumnType("integer");
+
+ b.Property("ActionDurationMinutes")
+ .HasColumnType("integer");
+
+ b.Property("GuildConfigId")
+ .HasColumnType("integer");
+
+ b.Property("MinAge")
+ .HasColumnType("text");
+
+ b.Property("RoleId")
+ .HasColumnType("numeric(20,0)");
+
+ b.HasKey("Id");
+
+ b.HasIndex("GuildConfigId")
+ .IsUnique();
+
+ b.ToTable("AntiAltSetting");
+ });
+
+ modelBuilder.Entity("Mewdeko.Database.Models.AntiMassMentionSetting", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("Action")
+ .HasColumnType("integer");
+
+ b.Property("DateAdded")
+ .HasColumnType("timestamp without time zone");
+
+ b.Property("GuildConfigId")
+ .HasColumnType("integer");
+
+ b.Property("IgnoreBots")
+ .HasColumnType("boolean");
+
+ b.Property("MaxMentionsInTimeWindow")
+ .HasColumnType("integer");
+
+ b.Property("MentionThreshold")
+ .HasColumnType("integer");
+
+ b.Property("MuteTime")
+ .HasColumnType("integer");
+
+ b.Property("RoleId")
+ .HasColumnType("numeric(20,0)");
+
+ b.Property("TimeWindowSeconds")
+ .HasColumnType("integer");
+
+ b.HasKey("Id");
+
+ b.HasIndex("GuildConfigId")
+ .IsUnique();
+
+ b.ToTable("AntiMassMentionSetting");
+ });
+
+ modelBuilder.Entity("Mewdeko.Database.Models.AntiRaidSetting", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("Action")
+ .HasColumnType("integer");
+
+ b.Property("DateAdded")
+ .HasColumnType("timestamp without time zone");
+
+ b.Property("GuildConfigId")
+ .HasColumnType("integer");
+
+ b.Property("PunishDuration")
+ .HasColumnType("integer");
+
+ b.Property("Seconds")
+ .HasColumnType("integer");
+
+ b.Property("UserThreshold")
+ .HasColumnType("integer");
+
+ b.HasKey("Id");
+
+ b.HasIndex("GuildConfigId")
+ .IsUnique();
+
+ b.ToTable("AntiRaidSetting");
+ });
+
+ modelBuilder.Entity("Mewdeko.Database.Models.AntiSpamIgnore", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("AntiMassMentionSettingId")
+ .HasColumnType("integer");
+
+ b.Property("AntiSpamSettingId")
+ .HasColumnType("integer");
+
+ b.Property("ChannelId")
+ .HasColumnType("numeric(20,0)");
+
+ b.Property("DateAdded")
+ .HasColumnType("timestamp without time zone");
+
+ b.HasKey("Id");
+
+ b.HasIndex("AntiMassMentionSettingId");
+
+ b.HasIndex("AntiSpamSettingId");
+
+ b.ToTable("AntiSpamIgnore");
+ });
+
+ modelBuilder.Entity("Mewdeko.Database.Models.AntiSpamSetting", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("Action")
+ .HasColumnType("integer");
+
+ b.Property("DateAdded")
+ .HasColumnType("timestamp without time zone");
+
+ b.Property("GuildConfigId")
+ .HasColumnType("integer");
+
+ b.Property("MessageThreshold")
+ .HasColumnType("integer");
+
+ b.Property("MuteTime")
+ .HasColumnType("integer");
+
+ b.Property("RoleId")
+ .HasColumnType("numeric(20,0)");
+
+ b.HasKey("Id");
+
+ b.HasIndex("GuildConfigId")
+ .IsUnique();
+
+ b.ToTable("AntiSpamSetting");
+ });
+
+ modelBuilder.Entity("Mewdeko.Database.Models.AutoBanEntry", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("DateAdded")
+ .HasColumnType("timestamp without time zone");
+
+ b.Property("GuildId")
+ .HasColumnType("numeric(20,0)");
+
+ b.Property("Word")
+ .HasColumnType("text");
+
+ b.HasKey("Id");
+
+ b.ToTable("AutoBanWords");
+ });
+
+ modelBuilder.Entity("Mewdeko.Database.Models.AutoBanRoles", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("DateAdded")
+ .HasColumnType("timestamp without time zone");
+
+ b.Property("GuildId")
+ .HasColumnType("numeric(20,0)");
+
+ b.Property("RoleId")
+ .HasColumnType("numeric(20,0)");
+
+ b.HasKey("Id");
+
+ b.ToTable("AutoBanRoles");
+ });
+
+ modelBuilder.Entity("Mewdeko.Database.Models.AutoCommand", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("ChannelId")
+ .HasColumnType("numeric(20,0)");
+
+ b.Property("ChannelName")
+ .HasColumnType("text");
+
+ b.Property("CommandText")
+ .HasColumnType("text");
+
+ b.Property("DateAdded")
+ .HasColumnType("timestamp without time zone");
+
+ b.Property("GuildId")
+ .HasColumnType("numeric(20,0)");
+
+ b.Property("GuildName")
+ .HasColumnType("text");
+
+ b.Property("Interval")
+ .HasColumnType("integer");
+
+ b.Property("VoiceChannelId")
+ .HasColumnType("numeric(20,0)");
+
+ b.Property("VoiceChannelName")
+ .HasColumnType("text");
+
+ b.HasKey("Id");
+
+ b.ToTable("AutoCommands");
+ });
+
+ modelBuilder.Entity("Mewdeko.Database.Models.AutoPublish", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("BlacklistedUsers")
+ .HasColumnType("numeric(20,0)");
+
+ b.Property("ChannelId")
+ .HasColumnType("numeric(20,0)");
+
+ b.Property("DateAdded")
+ .HasColumnType("timestamp without time zone");
+
+ b.Property("GuildId")
+ .HasColumnType("numeric(20,0)");
+
+ b.HasKey("Id");
+
+ b.ToTable("AutoPublish");
+ });
+
+ modelBuilder.Entity("Mewdeko.Database.Models.BanTemplate", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("DateAdded")
+ .HasColumnType("timestamp without time zone");
+
+ b.Property("GuildId")
+ .HasColumnType("numeric(20,0)");
+
+ b.Property("Text")
+ .HasColumnType("text");
+
+ b.HasKey("Id");
+
+ b.HasIndex("GuildId")
+ .IsUnique();
+
+ b.ToTable("BanTemplates");
+ });
+
+ modelBuilder.Entity("Mewdeko.Database.Models.BlacklistEntry", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("DateAdded")
+ .HasColumnType("timestamp without time zone");
+
+ b.Property("ItemId")
+ .HasColumnType("numeric(20,0)");
+
+ b.Property("Reason")
+ .HasColumnType("text");
+
+ b.Property("Type")
+ .HasColumnType("integer");
+
+ b.HasKey("Id");
+
+ b.ToTable("Blacklist");
+ });
+
+ modelBuilder.Entity("Mewdeko.Database.Models.BlacklistedPermission", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("DateAdded")
+ .HasColumnType("timestamp without time zone");
+
+ b.Property("GuildId")
+ .HasColumnType("numeric(20,0)");
+
+ b.Property("Permission")
+ .HasColumnType("numeric(20,0)");
+
+ b.Property("PunishmentAction")
+ .HasColumnType("integer");
+
+ b.HasKey("Id");
+
+ b.ToTable("BlacklistedPermissions");
+ });
+
+ modelBuilder.Entity("Mewdeko.Database.Models.BlacklistedRole", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("DateAdded")
+ .HasColumnType("timestamp without time zone");
+
+ b.Property("GuildId")
+ .HasColumnType("numeric(20,0)");
+
+ b.Property("PunishmentAction")
+ .HasColumnType("integer");
+
+ b.Property("RoleId")
+ .HasColumnType("numeric(20,0)");
+
+ b.HasKey("Id");
+
+ b.ToTable("BlacklistedRoles");
+ });
+
+ modelBuilder.Entity("Mewdeko.Database.Models.BotReviews", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("AvatarUrl")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.Property("DateAdded")
+ .HasColumnType("timestamp without time zone");
+
+ b.Property("Review")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.Property("Stars")
+ .HasColumnType("integer");
+
+ b.Property("UserId")
+ .HasColumnType("numeric(20,0)");
+
+ b.Property("Username")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.HasKey("Id");
+
+ b.ToTable("BotReviews");
+ });
+
+ modelBuilder.Entity("Mewdeko.Database.Models.ChatTriggers", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("AllowTarget")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("boolean")
+ .HasDefaultValue(false);
+
+ b.Property("ApplicationCommandDescription")
+ .HasColumnType("text");
+
+ b.Property("ApplicationCommandId")
+ .HasColumnType("numeric(20,0)");
+
+ b.Property("ApplicationCommandName")
+ .HasColumnType("text");
+
+ b.Property("ApplicationCommandType")
+ .HasColumnType("integer");
+
+ b.Property("AutoDeleteTrigger")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("boolean")
+ .HasDefaultValue(false);
+
+ b.Property("ContainsAnywhere")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("boolean")
+ .HasDefaultValue(false);
+
+ b.Property("CrosspostingChannelId")
+ .HasColumnType("numeric(20,0)");
+
+ b.Property("CrosspostingWebhookUrl")
+ .HasColumnType("text");
+
+ b.Property("CustomPrefix")
+ .HasColumnType("text");
+
+ b.Property("DateAdded")
+ .HasColumnType("timestamp without time zone");
+
+ b.Property("DmResponse")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("boolean")
+ .HasDefaultValue(false);
+
+ b.Property("EphemeralResponse")
+ .HasColumnType("boolean");
+
+ b.Property("GrantedRoles")
+ .HasColumnType("text");
+
+ b.Property("GuildId")
+ .HasColumnType("numeric(20,0)");
+
+ b.Property("IsRegex")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("boolean")
+ .HasDefaultValue(false);
+
+ b.Property("NoRespond")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("boolean")
+ .HasDefaultValue(false);
+
+ b.Property("OwnerOnly")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("boolean")
+ .HasDefaultValue(false);
+
+ b.Property("PrefixType")
+ .HasColumnType("integer");
+
+ b.Property("ReactToTrigger")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("boolean")
+ .HasDefaultValue(false);
+
+ b.Property("Reactions")
+ .HasColumnType("text");
+
+ b.Property("RemovedRoles")
+ .HasColumnType("text");
+
+ b.Property("Response")
+ .HasColumnType("text");
+
+ b.Property("RoleGrantType")
+ .HasColumnType("integer");
+
+ b.Property("Trigger")
+ .HasColumnType("text");
+
+ b.Property("UseCount")
+ .HasColumnType("numeric(20,0)");
+
+ b.Property("ValidTriggerTypes")
+ .HasColumnType("integer");
+
+ b.HasKey("Id");
+
+ b.ToTable("ChatTriggers");
+ });
+
+ modelBuilder.Entity("Mewdeko.Database.Models.CommandAlias", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("DateAdded")
+ .HasColumnType("timestamp without time zone");
+
+ b.Property("GuildConfigId")
+ .HasColumnType("integer");
+
+ b.Property("Mapping")
+ .HasColumnType("text");
+
+ b.Property("Trigger")
+ .HasColumnType("text");
+
+ b.HasKey("Id");
+
+ b.HasIndex("GuildConfigId");
+
+ b.ToTable("CommandAlias");
+ });
+
+ modelBuilder.Entity("Mewdeko.Database.Models.CommandCooldown", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("CommandName")
+ .HasColumnType("text");
+
+ b.Property("DateAdded")
+ .HasColumnType("timestamp without time zone");
+
+ b.Property("GuildConfigId")
+ .HasColumnType("integer");
+
+ b.Property("Seconds")
+ .HasColumnType("integer");
+
+ b.HasKey("Id");
+
+ b.HasIndex("GuildConfigId");
+
+ b.ToTable("CommandCooldown");
+ });
+
+ modelBuilder.Entity("Mewdeko.Database.Models.CommandStats", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("ChannelId")
+ .HasColumnType("numeric(20,0)");
+
+ b.Property("DateAdded")
+ .HasColumnType("timestamp without time zone");
+
+ b.Property("GuildId")
+ .HasColumnType("numeric(20,0)");
+
+ b.Property("IsSlash")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("boolean")
+ .HasDefaultValue(false);
+
+ b.Property("Module")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("text")
+ .HasDefaultValue("");
+
+ b.Property("NameOrId")
+ .HasColumnType("text");
+
+ b.Property("Trigger")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("boolean")
+ .HasDefaultValue(false);
+
+ b.Property("UserId")
+ .HasColumnType("numeric(20,0)");
+
+ b.HasKey("Id");
+
+ b.ToTable("CommandStats");
+ });
+
+ modelBuilder.Entity("Mewdeko.Database.Models.Confessions", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("ChannelId")
+ .HasColumnType("numeric(20,0)");
+
+ b.Property("ConfessNumber")
+ .HasColumnType("numeric(20,0)");
+
+ b.Property("Confession")
+ .HasColumnType("text");
+
+ b.Property("DateAdded")
+ .HasColumnType("timestamp without time zone");
+
+ b.Property("GuildId")
+ .HasColumnType("numeric(20,0)");
+
+ b.Property("MessageId")
+ .HasColumnType("numeric(20,0)");
+
+ b.Property("UserId")
+ .HasColumnType("numeric(20,0)");
+
+ b.HasKey("Id");
+
+ b.ToTable("Confessions");
+ });
+
+ modelBuilder.Entity("Mewdeko.Database.Models.DelMsgOnCmdChannel", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("ChannelId")
+ .HasColumnType("numeric(20,0)");
+
+ b.Property("DateAdded")
+ .HasColumnType("timestamp without time zone");
+
+ b.Property("GuildConfigId")
+ .HasColumnType("integer");
+
+ b.Property("State")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("boolean")
+ .HasDefaultValue(true);
+
+ b.HasKey("Id");
+
+ b.HasIndex("GuildConfigId");
+
+ b.ToTable("DelMsgOnCmdChannel");
+ });
+
+ modelBuilder.Entity("Mewdeko.Database.Models.DiscordPermOverride", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("Command")
+ .HasColumnType("text");
+
+ b.Property("DateAdded")
+ .HasColumnType("timestamp without time zone");
+
+ b.Property("GuildId")
+ .HasColumnType("numeric(20,0)");
+
+ b.Property("Perm")
+ .HasColumnType("numeric(20,0)");
+
+ b.HasKey("Id");
+
+ b.HasIndex("GuildId", "Command")
+ .IsUnique();
+
+ b.ToTable("DiscordPermOverrides");
+ });
+
+ modelBuilder.Entity("Mewdeko.Database.Models.DiscordUser", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("AvatarId")
+ .HasColumnType("text");
+
+ b.Property("Bio")
+ .HasColumnType("text");
+
+ b.Property("Birthday")
+ .HasColumnType("timestamp without time zone");
+
+ b.Property("BirthdayDisplayMode")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer")
+ .HasDefaultValue(0);
+
+ b.Property("DateAdded")
+ .HasColumnType("timestamp without time zone");
+
+ b.Property("Discriminator")
+ .HasColumnType("text");
+
+ b.Property("IsClubAdmin")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("boolean")
+ .HasDefaultValue(false);
+
+ b.Property("IsDragon")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("boolean")
+ .HasDefaultValue(false);
+
+ b.Property("LastLevelUp")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("timestamp without time zone")
+ .HasDefaultValue(new DateTime(2017, 9, 21, 20, 53, 13, 305, DateTimeKind.Local));
+
+ b.Property("NotifyOnLevelUp")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer")
+ .HasDefaultValue(0);
+
+ b.Property("ProfileColor")
+ .HasColumnType("bigint");
+
+ b.Property("ProfileImageUrl")
+ .HasColumnType("text");
+
+ b.Property("ProfilePrivacy")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer")
+ .HasDefaultValue(0);
+
+ b.Property("Pronouns")
+ .HasColumnType("text");
+
+ b.Property("PronounsClearedReason")
+ .HasColumnType("text");
+
+ b.Property("PronounsDisabled")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("boolean")
+ .HasDefaultValue(false);
+
+ b.Property("StatsOptOut")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("boolean")
+ .HasDefaultValue(false);
+
+ b.Property("SwitchFriendCode")
+ .HasColumnType("text");
+
+ b.Property("TotalXp")
+ .HasColumnType("integer");
+
+ b.Property("UserId")
+ .HasColumnType("numeric(20,0)");
+
+ b.Property("Username")
+ .HasColumnType("text");
+
+ b.Property("ZodiacSign")
+ .HasColumnType("text");
+
+ b.HasKey("Id");
+
+ b.HasAlternateKey("UserId");
+
+ b.HasIndex("TotalXp");
+
+ b.HasIndex("UserId");
+
+ b.ToTable("DiscordUser");
+ });
+
+ modelBuilder.Entity("Mewdeko.Database.Models.ExcludedItem", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("DateAdded")
+ .HasColumnType("timestamp without time zone");
+
+ b.Property("ItemId")
+ .HasColumnType("numeric(20,0)");
+
+ b.Property("ItemType")
+ .HasColumnType("integer");
+
+ b.Property("XpSettingsId")
+ .HasColumnType("integer");
+
+ b.HasKey("Id");
+
+ b.HasIndex("XpSettingsId");
+
+ b.ToTable("ExcludedItem");
+ });
+
+ modelBuilder.Entity("Mewdeko.Database.Models.FeedSub", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("ChannelId")
+ .HasColumnType("numeric(20,0)");
+
+ b.Property("DateAdded")
+ .HasColumnType("timestamp without time zone");
+
+ b.Property("GuildConfigId")
+ .HasColumnType("integer");
+
+ b.Property("Message")
+ .HasColumnType("text");
+
+ b.Property("Url")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.HasKey("Id");
+
+ b.HasAlternateKey("GuildConfigId", "Url");
+
+ b.ToTable("FeedSub");
+ });
+
+ modelBuilder.Entity("Mewdeko.Database.Models.FilterInvitesChannelIds", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("ChannelId")
+ .HasColumnType("numeric(20,0)");
+
+ b.Property("DateAdded")
+ .HasColumnType("timestamp without time zone");
+
+ b.Property("GuildConfigId")
+ .HasColumnType("integer");
+
+ b.HasKey("Id");
+
+ b.HasIndex("GuildConfigId");
+
+ b.ToTable("FilterInvitesChannelIds");
+ });
+
+ modelBuilder.Entity("Mewdeko.Database.Models.FilterLinksChannelId", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("ChannelId")
+ .HasColumnType("numeric(20,0)");
+
+ b.Property("DateAdded")
+ .HasColumnType("timestamp without time zone");
+
+ b.Property("GuildConfigId")
+ .HasColumnType("integer");
+
+ b.HasKey("Id");
+
+ b.HasIndex("GuildConfigId");
+
+ b.ToTable("FilterLinksChannelId");
+ });
+
+ modelBuilder.Entity("Mewdeko.Database.Models.FilterWordsChannelIds", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("ChannelId")
+ .HasColumnType("numeric(20,0)");
+
+ b.Property("DateAdded")
+ .HasColumnType("timestamp without time zone");
+
+ b.Property("GuildConfigId")
+ .HasColumnType("integer");
+
+ b.HasKey("Id");
+
+ b.HasIndex("GuildConfigId");
+
+ b.ToTable("FilterWordsChannelIds");
+ });
+
+ modelBuilder.Entity("Mewdeko.Database.Models.FilteredWord", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("DateAdded")
+ .HasColumnType("timestamp without time zone");
+
+ b.Property("GuildConfigId")
+ .HasColumnType("integer");
+
+ b.Property("Word")
+ .HasColumnType("text");
+
+ b.HasKey("Id");
+
+ b.HasIndex("GuildConfigId");
+
+ b.ToTable("FilteredWord");
+ });
+
+ modelBuilder.Entity("Mewdeko.Database.Models.FollowedStream", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("ChannelId")
+ .HasColumnType("numeric(20,0)");
+
+ b.Property("DateAdded")
+ .HasColumnType("timestamp without time zone");
+
+ b.Property("GuildConfigId")
+ .HasColumnType("integer");
+
+ b.Property("GuildId")
+ .HasColumnType("numeric(20,0)");
+
+ b.Property