diff --git a/src/NadekoBot/DataStructures/ModuleBehaviors/IEarlyBlocker.cs b/src/NadekoBot/DataStructures/ModuleBehaviors/IEarlyBlocker.cs
new file mode 100644
index 00000000..e553f186
--- /dev/null
+++ b/src/NadekoBot/DataStructures/ModuleBehaviors/IEarlyBlocker.cs
@@ -0,0 +1,14 @@
+using Discord;
+using Discord.WebSocket;
+using System.Threading.Tasks;
+
+namespace NadekoBot.DataStructures.ModuleBehaviors
+{
+ ///
+ /// Implemented by modules which block execution before anything is executed
+ ///
+ public interface IEarlyBlocker
+ {
+ Task TryBlockEarly(DiscordShardedClient client, IGuild guild, IUserMessage msg);
+ }
+}
diff --git a/src/NadekoBot/DataStructures/ModuleBehaviors/IBlockingExecutor.cs b/src/NadekoBot/DataStructures/ModuleBehaviors/IEarlyBlockingExecutor.cs
similarity index 77%
rename from src/NadekoBot/DataStructures/ModuleBehaviors/IBlockingExecutor.cs
rename to src/NadekoBot/DataStructures/ModuleBehaviors/IEarlyBlockingExecutor.cs
index 8a338e7b..f28eaf4f 100644
--- a/src/NadekoBot/DataStructures/ModuleBehaviors/IBlockingExecutor.cs
+++ b/src/NadekoBot/DataStructures/ModuleBehaviors/IEarlyBlockingExecutor.cs
@@ -7,12 +7,12 @@ namespace NadekoBot.DataStructures.ModuleBehaviors
///
/// Implemented by modules which can execute something and prevent further commands from being executed.
///
- public interface IBlockingExecutor
+ public interface IEarlyBlockingExecutor
{
///
/// Try to execute some logic within some module's service.
///
/// Whether it should block other command executions after it.
- Task TryExecute(DiscordShardedClient client, IGuild guild, IUserMessage msg);
+ Task TryExecuteEarly(DiscordShardedClient client, IGuild guild, IUserMessage msg);
}
}
diff --git a/src/NadekoBot/DataStructures/ModuleBehaviors/IEarlyExecutor.cs b/src/NadekoBot/DataStructures/ModuleBehaviors/IEarlyExecutor.cs
new file mode 100644
index 00000000..f761ef85
--- /dev/null
+++ b/src/NadekoBot/DataStructures/ModuleBehaviors/IEarlyExecutor.cs
@@ -0,0 +1,7 @@
+namespace NadekoBot.DataStructures.ModuleBehaviors
+{
+ public interface IEarlyExecutor
+ {
+
+ }
+}
diff --git a/src/NadekoBot/DataStructures/ModuleBehaviors/ILateBlocker.cs b/src/NadekoBot/DataStructures/ModuleBehaviors/ILateBlocker.cs
new file mode 100644
index 00000000..3b3fc020
--- /dev/null
+++ b/src/NadekoBot/DataStructures/ModuleBehaviors/ILateBlocker.cs
@@ -0,0 +1,12 @@
+using Discord;
+using Discord.WebSocket;
+using System.Threading.Tasks;
+
+namespace NadekoBot.DataStructures.ModuleBehaviors
+{
+ public interface ILateBlocker
+ {
+ Task TryBlockLate(DiscordShardedClient client, IUserMessage msg, IGuild guild,
+ IMessageChannel channel, IUser user, string moduleName, string commandName);
+ }
+}
diff --git a/src/NadekoBot/DataStructures/ModuleBehaviors/ILateBlockingExecutor.cs b/src/NadekoBot/DataStructures/ModuleBehaviors/ILateBlockingExecutor.cs
new file mode 100644
index 00000000..b4ebe54d
--- /dev/null
+++ b/src/NadekoBot/DataStructures/ModuleBehaviors/ILateBlockingExecutor.cs
@@ -0,0 +1,7 @@
+namespace NadekoBot.DataStructures.ModuleBehaviors
+{
+ public interface ILateBlockingExecutor
+ {
+
+ }
+}
diff --git a/src/NadekoBot/DataStructures/ModuleBehaviors/ILateExecutor.cs b/src/NadekoBot/DataStructures/ModuleBehaviors/ILateExecutor.cs
new file mode 100644
index 00000000..3cf11603
--- /dev/null
+++ b/src/NadekoBot/DataStructures/ModuleBehaviors/ILateExecutor.cs
@@ -0,0 +1,14 @@
+using Discord;
+using Discord.WebSocket;
+using System.Threading.Tasks;
+
+namespace NadekoBot.DataStructures.ModuleBehaviors
+{
+ ///
+ /// Last thing to be executed, won't stop further executions
+ ///
+ public interface ILateExecutor
+ {
+ Task LateExecute(DiscordShardedClient client, IGuild guild, IUserMessage msg);
+ }
+}
diff --git a/src/NadekoBot/DataStructures/NoPublicBotPrecondition.cs b/src/NadekoBot/DataStructures/NoPublicBotPrecondition.cs
new file mode 100644
index 00000000..c5e06578
--- /dev/null
+++ b/src/NadekoBot/DataStructures/NoPublicBotPrecondition.cs
@@ -0,0 +1,18 @@
+using Discord.Commands;
+using System;
+using System.Threading.Tasks;
+
+namespace NadekoBot.DataStructures
+{
+ public class NoPublicBot : PreconditionAttribute
+ {
+ public override Task CheckPermissions(ICommandContext context, CommandInfo command, IServiceProvider services)
+ {
+#if GLOBAL_NADEKo
+ return Task.FromResult(PreconditionResult.FromError("Not available on the public bot"));
+#else
+ return Task.FromResult(PreconditionResult.FromSuccess());
+#endif
+ }
+ }
+}
diff --git a/src/NadekoBot/Migrations/20161011200458_first.cs b/src/NadekoBot/Migrations/20161011200458_first.cs
index 25b3a717..b2ad7c45 100644
--- a/src/NadekoBot/Migrations/20161011200458_first.cs
+++ b/src/NadekoBot/Migrations/20161011200458_first.cs
@@ -702,7 +702,7 @@ namespace NadekoBot.Migrations
column: "BotConfigId");
migrationBuilder.CreateIndex(
- name: "IX_Repeaters_ChannelId",
+ name: "IX_Repeaters_channelId",
table: "Repeaters",
column: "ChannelId",
unique: true);
diff --git a/src/NadekoBot/Migrations/20170110111159_repeater-drop.cs b/src/NadekoBot/Migrations/20170110111159_repeater-drop.cs
index 386ea2dd..4193a631 100644
--- a/src/NadekoBot/Migrations/20170110111159_repeater-drop.cs
+++ b/src/NadekoBot/Migrations/20170110111159_repeater-drop.cs
@@ -30,7 +30,7 @@ namespace NadekoBot.Migrations
});
migrationBuilder.CreateIndex(
- name: "IX_Repeaters_ChannelId",
+ name: "IX_Repeaters_channelId",
table: "Repeaters",
column: "ChannelId",
unique: true);
diff --git a/src/NadekoBot/Migrations/20170528001839_permissions-version.Designer.cs b/src/NadekoBot/Migrations/20170528001839_permissions-version.Designer.cs
new file mode 100644
index 00000000..b46dd601
--- /dev/null
+++ b/src/NadekoBot/Migrations/20170528001839_permissions-version.Designer.cs
@@ -0,0 +1,1556 @@
+using System;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.Infrastructure;
+using Microsoft.EntityFrameworkCore.Metadata;
+using Microsoft.EntityFrameworkCore.Migrations;
+using NadekoBot.Services.Database;
+using NadekoBot.Services.Database.Models;
+
+namespace NadekoBot.Migrations
+{
+ [DbContext(typeof(NadekoContext))]
+ [Migration("20170528001839_permissions-version")]
+ partial class permissionsversion
+ {
+ protected override void BuildTargetModel(ModelBuilder modelBuilder)
+ {
+ modelBuilder
+ .HasAnnotation("ProductVersion", "1.1.1");
+
+ modelBuilder.Entity("NadekoBot.Services.Database.Models.AntiRaidSetting", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd();
+
+ b.Property("Action");
+
+ b.Property("DateAdded");
+
+ b.Property("GuildConfigId");
+
+ b.Property("Seconds");
+
+ b.Property("UserThreshold");
+
+ b.HasKey("Id");
+
+ b.HasIndex("GuildConfigId")
+ .IsUnique();
+
+ b.ToTable("AntiRaidSetting");
+ });
+
+ modelBuilder.Entity("NadekoBot.Services.Database.Models.AntiSpamIgnore", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd();
+
+ b.Property("AntiSpamSettingId");
+
+ b.Property("ChannelId");
+
+ b.Property("DateAdded");
+
+ b.HasKey("Id");
+
+ b.HasIndex("AntiSpamSettingId");
+
+ b.ToTable("AntiSpamIgnore");
+ });
+
+ modelBuilder.Entity("NadekoBot.Services.Database.Models.AntiSpamSetting", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd();
+
+ b.Property("Action");
+
+ b.Property("DateAdded");
+
+ b.Property("GuildConfigId");
+
+ b.Property("MessageThreshold");
+
+ b.HasKey("Id");
+
+ b.HasIndex("GuildConfigId")
+ .IsUnique();
+
+ b.ToTable("AntiSpamSetting");
+ });
+
+ modelBuilder.Entity("NadekoBot.Services.Database.Models.BlacklistItem", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd();
+
+ b.Property("BotConfigId");
+
+ b.Property("DateAdded");
+
+ b.Property("ItemId");
+
+ b.Property("Type");
+
+ b.HasKey("Id");
+
+ b.HasIndex("BotConfigId");
+
+ b.ToTable("BlacklistItem");
+ });
+
+ modelBuilder.Entity("NadekoBot.Services.Database.Models.BlockedCmdOrMdl", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd();
+
+ b.Property("BotConfigId");
+
+ b.Property("BotConfigId1");
+
+ b.Property("DateAdded");
+
+ b.Property("Name");
+
+ b.HasKey("Id");
+
+ b.HasIndex("BotConfigId");
+
+ b.HasIndex("BotConfigId1");
+
+ b.ToTable("BlockedCmdOrMdl");
+ });
+
+ modelBuilder.Entity("NadekoBot.Services.Database.Models.BotConfig", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd();
+
+ b.Property("BetflipMultiplier");
+
+ b.Property("Betroll100Multiplier");
+
+ b.Property("Betroll67Multiplier");
+
+ b.Property("Betroll91Multiplier");
+
+ b.Property("BufferSize");
+
+ b.Property("CurrencyDropAmount");
+
+ b.Property("CurrencyGenerationChance");
+
+ b.Property("CurrencyGenerationCooldown");
+
+ b.Property("CurrencyName");
+
+ b.Property("CurrencyPluralName");
+
+ b.Property("CurrencySign");
+
+ b.Property("DMHelpString");
+
+ b.Property("DateAdded");
+
+ b.Property("ErrorColor");
+
+ b.Property("ForwardMessages");
+
+ b.Property("ForwardToAllOwners");
+
+ b.Property("HelpString");
+
+ b.Property("Locale");
+
+ b.Property("MigrationVersion");
+
+ b.Property("MinimumBetAmount");
+
+ b.Property("OkColor");
+
+ b.Property("PermissionVersion");
+
+ b.Property("RemindMessageFormat");
+
+ b.Property("RotatingStatuses");
+
+ b.Property("TriviaCurrencyReward");
+
+ b.HasKey("Id");
+
+ b.ToTable("BotConfig");
+ });
+
+ modelBuilder.Entity("NadekoBot.Services.Database.Models.ClashCaller", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd();
+
+ b.Property("BaseDestroyed");
+
+ b.Property("CallUser");
+
+ b.Property("ClashWarId");
+
+ b.Property("DateAdded");
+
+ b.Property("SequenceNumber");
+
+ b.Property("Stars");
+
+ b.Property("TimeAdded");
+
+ b.HasKey("Id");
+
+ b.HasIndex("ClashWarId");
+
+ b.ToTable("ClashCallers");
+ });
+
+ modelBuilder.Entity("NadekoBot.Services.Database.Models.ClashWar", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd();
+
+ b.Property("ChannelId");
+
+ b.Property("DateAdded");
+
+ b.Property("EnemyClan");
+
+ b.Property("GuildId");
+
+ b.Property("Size");
+
+ b.Property("StartedAt");
+
+ b.Property("WarState");
+
+ b.HasKey("Id");
+
+ b.ToTable("ClashOfClans");
+ });
+
+ modelBuilder.Entity("NadekoBot.Services.Database.Models.CommandAlias", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd();
+
+ b.Property("DateAdded");
+
+ b.Property("GuildConfigId");
+
+ b.Property("Mapping");
+
+ b.Property("Trigger");
+
+ b.HasKey("Id");
+
+ b.HasIndex("GuildConfigId");
+
+ b.ToTable("CommandAlias");
+ });
+
+ modelBuilder.Entity("NadekoBot.Services.Database.Models.CommandCooldown", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd();
+
+ b.Property("CommandName");
+
+ b.Property("DateAdded");
+
+ b.Property("GuildConfigId");
+
+ b.Property("Seconds");
+
+ b.HasKey("Id");
+
+ b.HasIndex("GuildConfigId");
+
+ b.ToTable("CommandCooldown");
+ });
+
+ modelBuilder.Entity("NadekoBot.Services.Database.Models.CommandPrice", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd();
+
+ b.Property("BotConfigId");
+
+ b.Property("CommandName");
+
+ b.Property("DateAdded");
+
+ b.Property("Price");
+
+ b.HasKey("Id");
+
+ b.HasIndex("BotConfigId");
+
+ b.HasIndex("Price")
+ .IsUnique();
+
+ b.ToTable("CommandPrice");
+ });
+
+ modelBuilder.Entity("NadekoBot.Services.Database.Models.ConvertUnit", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd();
+
+ b.Property("DateAdded");
+
+ b.Property("InternalTrigger");
+
+ b.Property("Modifier");
+
+ b.Property("UnitType");
+
+ b.HasKey("Id");
+
+ b.ToTable("ConversionUnits");
+ });
+
+ modelBuilder.Entity("NadekoBot.Services.Database.Models.Currency", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd();
+
+ b.Property("Amount");
+
+ b.Property("DateAdded");
+
+ b.Property("UserId");
+
+ b.HasKey("Id");
+
+ b.HasIndex("UserId")
+ .IsUnique();
+
+ b.ToTable("Currency");
+ });
+
+ modelBuilder.Entity("NadekoBot.Services.Database.Models.CurrencyTransaction", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd();
+
+ b.Property("Amount");
+
+ b.Property("DateAdded");
+
+ b.Property("Reason");
+
+ b.Property("UserId");
+
+ b.HasKey("Id");
+
+ b.ToTable("CurrencyTransactions");
+ });
+
+ modelBuilder.Entity("NadekoBot.Services.Database.Models.CustomReaction", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd();
+
+ b.Property("AutoDeleteTrigger");
+
+ b.Property("DateAdded");
+
+ b.Property("DmResponse");
+
+ b.Property("GuildId");
+
+ b.Property("IsRegex");
+
+ b.Property("OwnerOnly");
+
+ b.Property("Response");
+
+ b.Property("Trigger");
+
+ b.HasKey("Id");
+
+ b.ToTable("CustomReactions");
+ });
+
+ modelBuilder.Entity("NadekoBot.Services.Database.Models.DiscordUser", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd();
+
+ b.Property("AvatarId");
+
+ b.Property("DateAdded");
+
+ b.Property("Discriminator");
+
+ b.Property("UserId");
+
+ b.Property("Username");
+
+ b.HasKey("Id");
+
+ b.HasAlternateKey("UserId");
+
+ b.ToTable("DiscordUser");
+ });
+
+ modelBuilder.Entity("NadekoBot.Services.Database.Models.Donator", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd();
+
+ b.Property("Amount");
+
+ b.Property("DateAdded");
+
+ b.Property("Name");
+
+ b.Property("UserId");
+
+ b.HasKey("Id");
+
+ b.HasIndex("UserId")
+ .IsUnique();
+
+ b.ToTable("Donators");
+ });
+
+ modelBuilder.Entity("NadekoBot.Services.Database.Models.EightBallResponse", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd();
+
+ b.Property("BotConfigId");
+
+ b.Property("DateAdded");
+
+ b.Property("Text");
+
+ b.HasKey("Id");
+
+ b.HasIndex("BotConfigId");
+
+ b.ToTable("EightBallResponses");
+ });
+
+ modelBuilder.Entity("NadekoBot.Services.Database.Models.FilterChannelId", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd();
+
+ b.Property("ChannelId");
+
+ b.Property("DateAdded");
+
+ b.Property("GuildConfigId");
+
+ b.Property("GuildConfigId1");
+
+ b.HasKey("Id");
+
+ b.HasIndex("GuildConfigId");
+
+ b.HasIndex("GuildConfigId1");
+
+ b.ToTable("FilterChannelId");
+ });
+
+ modelBuilder.Entity("NadekoBot.Services.Database.Models.FilteredWord", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd();
+
+ b.Property("DateAdded");
+
+ b.Property("GuildConfigId");
+
+ b.Property("Word");
+
+ b.HasKey("Id");
+
+ b.HasIndex("GuildConfigId");
+
+ b.ToTable("FilteredWord");
+ });
+
+ modelBuilder.Entity("NadekoBot.Services.Database.Models.FollowedStream", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd();
+
+ b.Property("ChannelId");
+
+ b.Property("DateAdded");
+
+ b.Property("GuildConfigId");
+
+ b.Property("GuildId");
+
+ b.Property("Type");
+
+ b.Property("Username");
+
+ b.HasKey("Id");
+
+ b.HasIndex("GuildConfigId");
+
+ b.ToTable("FollowedStream");
+ });
+
+ modelBuilder.Entity("NadekoBot.Services.Database.Models.GCChannelId", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd();
+
+ b.Property("ChannelId");
+
+ b.Property("DateAdded");
+
+ b.Property("GuildConfigId");
+
+ b.HasKey("Id");
+
+ b.HasIndex("GuildConfigId");
+
+ b.ToTable("GCChannelId");
+ });
+
+ modelBuilder.Entity("NadekoBot.Services.Database.Models.GuildConfig", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd();
+
+ b.Property("AutoAssignRoleId");
+
+ b.Property("AutoDeleteByeMessages");
+
+ b.Property("AutoDeleteByeMessagesTimer");
+
+ b.Property("AutoDeleteGreetMessages");
+
+ b.Property("AutoDeleteGreetMessagesTimer");
+
+ b.Property("AutoDeleteSelfAssignedRoleMessages");
+
+ b.Property("ByeMessageChannelId");
+
+ b.Property("ChannelByeMessageText");
+
+ b.Property("ChannelGreetMessageText");
+
+ b.Property("CleverbotEnabled");
+
+ b.Property("DateAdded");
+
+ b.Property("DefaultMusicVolume");
+
+ b.Property("DeleteMessageOnCommand");
+
+ b.Property("DmGreetMessageText");
+
+ b.Property("ExclusiveSelfAssignedRoles");
+
+ b.Property("FilterInvites");
+
+ b.Property("FilterWords");
+
+ b.Property("GameVoiceChannel");
+
+ b.Property("GreetMessageChannelId");
+
+ b.Property("GuildId");
+
+ b.Property("Locale");
+
+ b.Property("LogSettingId");
+
+ b.Property("MuteRoleName");
+
+ b.Property("PermissionRole");
+
+ b.Property("RootPermissionId");
+
+ b.Property("SendChannelByeMessage");
+
+ b.Property("SendChannelGreetMessage");
+
+ b.Property("SendDmGreetMessage");
+
+ b.Property("TimeZoneId");
+
+ b.Property("VerbosePermissions");
+
+ b.Property("VoicePlusTextEnabled");
+
+ b.Property("WarningsInitialized");
+
+ b.HasKey("Id");
+
+ b.HasIndex("GuildId")
+ .IsUnique();
+
+ b.HasIndex("LogSettingId");
+
+ b.HasIndex("RootPermissionId");
+
+ b.ToTable("GuildConfigs");
+ });
+
+ modelBuilder.Entity("NadekoBot.Services.Database.Models.GuildRepeater", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd();
+
+ b.Property("ChannelId");
+
+ b.Property("DateAdded");
+
+ b.Property("GuildConfigId");
+
+ b.Property("GuildId");
+
+ b.Property("Interval");
+
+ b.Property("Message");
+
+ b.HasKey("Id");
+
+ b.HasIndex("GuildConfigId");
+
+ b.ToTable("GuildRepeater");
+ });
+
+ modelBuilder.Entity("NadekoBot.Services.Database.Models.IgnoredLogChannel", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd();
+
+ b.Property("ChannelId");
+
+ b.Property("DateAdded");
+
+ b.Property("LogSettingId");
+
+ b.HasKey("Id");
+
+ b.HasIndex("LogSettingId");
+
+ b.ToTable("IgnoredLogChannels");
+ });
+
+ modelBuilder.Entity("NadekoBot.Services.Database.Models.IgnoredVoicePresenceChannel", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd();
+
+ b.Property("ChannelId");
+
+ b.Property("DateAdded");
+
+ b.Property("LogSettingId");
+
+ b.HasKey("Id");
+
+ b.HasIndex("LogSettingId");
+
+ b.ToTable("IgnoredVoicePresenceCHannels");
+ });
+
+ modelBuilder.Entity("NadekoBot.Services.Database.Models.LogSetting", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd();
+
+ b.Property("ChannelCreated");
+
+ b.Property("ChannelCreatedId");
+
+ b.Property("ChannelDestroyed");
+
+ b.Property("ChannelDestroyedId");
+
+ b.Property("ChannelId");
+
+ b.Property("ChannelUpdated");
+
+ b.Property("ChannelUpdatedId");
+
+ b.Property("DateAdded");
+
+ b.Property("IsLogging");
+
+ b.Property("LogOtherId");
+
+ b.Property("LogUserPresence");
+
+ b.Property("LogUserPresenceId");
+
+ b.Property("LogVoicePresence");
+
+ b.Property("LogVoicePresenceId");
+
+ b.Property("LogVoicePresenceTTSId");
+
+ b.Property("MessageDeleted");
+
+ b.Property("MessageDeletedId");
+
+ b.Property("MessageUpdated");
+
+ b.Property("MessageUpdatedId");
+
+ b.Property("UserBanned");
+
+ b.Property("UserBannedId");
+
+ b.Property("UserJoined");
+
+ b.Property("UserJoinedId");
+
+ b.Property("UserLeft");
+
+ b.Property("UserLeftId");
+
+ b.Property("UserMutedId");
+
+ b.Property("UserPresenceChannelId");
+
+ b.Property("UserUnbanned");
+
+ b.Property("UserUnbannedId");
+
+ b.Property("UserUpdated");
+
+ b.Property("UserUpdatedId");
+
+ b.Property("VoicePresenceChannelId");
+
+ b.HasKey("Id");
+
+ b.ToTable("LogSettings");
+ });
+
+ modelBuilder.Entity("NadekoBot.Services.Database.Models.ModulePrefix", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd();
+
+ b.Property("BotConfigId");
+
+ b.Property("DateAdded");
+
+ b.Property("ModuleName");
+
+ b.Property("Prefix");
+
+ b.HasKey("Id");
+
+ b.HasIndex("BotConfigId");
+
+ b.ToTable("ModulePrefixes");
+ });
+
+ modelBuilder.Entity("NadekoBot.Services.Database.Models.MusicPlaylist", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd();
+
+ b.Property("Author");
+
+ b.Property("AuthorId");
+
+ b.Property("DateAdded");
+
+ b.Property("Name");
+
+ b.HasKey("Id");
+
+ b.ToTable("MusicPlaylists");
+ });
+
+ modelBuilder.Entity("NadekoBot.Services.Database.Models.MutedUserId", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd();
+
+ b.Property("DateAdded");
+
+ b.Property("GuildConfigId");
+
+ b.Property("UserId");
+
+ b.HasKey("Id");
+
+ b.HasIndex("GuildConfigId");
+
+ b.ToTable("MutedUserId");
+ });
+
+ modelBuilder.Entity("NadekoBot.Services.Database.Models.Permission", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd();
+
+ b.Property("DateAdded");
+
+ b.Property("NextId");
+
+ b.Property("PrimaryTarget");
+
+ b.Property("PrimaryTargetId");
+
+ b.Property("SecondaryTarget");
+
+ b.Property("SecondaryTargetName");
+
+ b.Property("State");
+
+ b.HasKey("Id");
+
+ b.HasIndex("NextId")
+ .IsUnique();
+
+ b.ToTable("Permission");
+ });
+
+ modelBuilder.Entity("NadekoBot.Services.Database.Models.Permissionv2", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd();
+
+ b.Property("DateAdded");
+
+ b.Property("GuildConfigId");
+
+ b.Property("Index");
+
+ b.Property("PrimaryTarget");
+
+ b.Property("PrimaryTargetId");
+
+ b.Property