diff --git a/NadekoBot.Core/Migrations/20171115040313_currency level up reward.Designer.cs b/NadekoBot.Core/Migrations/20171115040313_currency level up reward.Designer.cs
new file mode 100644
index 00000000..53ee737a
--- /dev/null
+++ b/NadekoBot.Core/Migrations/20171115040313_currency level up reward.Designer.cs
@@ -0,0 +1,2022 @@
+//
+using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.Infrastructure;
+using Microsoft.EntityFrameworkCore.Metadata;
+using Microsoft.EntityFrameworkCore.Migrations;
+using Microsoft.EntityFrameworkCore.Storage;
+using Microsoft.EntityFrameworkCore.Storage.Internal;
+using NadekoBot.Core.Services.Database;
+using NadekoBot.Core.Services.Database.Models;
+using System;
+
+namespace NadekoBot.Migrations
+{
+ [DbContext(typeof(NadekoContext))]
+ [Migration("20171115040313_currency level up reward")]
+ partial class currencylevelupreward
+ {
+ protected override void BuildTargetModel(ModelBuilder modelBuilder)
+ {
+#pragma warning disable 612, 618
+ modelBuilder
+ .HasAnnotation("ProductVersion", "2.0.0-rtm-26452");
+
+ modelBuilder.Entity("NadekoBot.Core.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.Core.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.Core.Services.Database.Models.AntiSpamSetting", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd();
+
+ b.Property("Action");
+
+ b.Property("DateAdded");
+
+ b.Property("GuildConfigId");
+
+ b.Property("MessageThreshold");
+
+ b.Property("MuteTime");
+
+ b.HasKey("Id");
+
+ b.HasIndex("GuildConfigId")
+ .IsUnique();
+
+ b.ToTable("AntiSpamSetting");
+ });
+
+ modelBuilder.Entity("NadekoBot.Core.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.Core.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.Core.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("CurrencyDropAmountMax");
+
+ b.Property("CurrencyGenerationChance");
+
+ b.Property("CurrencyGenerationCooldown");
+
+ b.Property("CurrencyName");
+
+ b.Property("CurrencyPluralName");
+
+ b.Property("CurrencySign");
+
+ b.Property("CustomReactionsStartWith");
+
+ b.Property("DMHelpString");
+
+ b.Property("DateAdded");
+
+ b.Property("DefaultPrefix");
+
+ 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("TimelyCurrency");
+
+ b.Property("TimelyCurrencyPeriod");
+
+ b.Property("TriviaCurrencyReward");
+
+ b.Property("XpMinutesTimeout")
+ .ValueGeneratedOnAdd()
+ .HasDefaultValue(5);
+
+ b.Property("XpPerMessage")
+ .ValueGeneratedOnAdd()
+ .HasDefaultValue(3);
+
+ b.HasKey("Id");
+
+ b.ToTable("BotConfig");
+ });
+
+ modelBuilder.Entity("NadekoBot.Core.Services.Database.Models.ClubApplicants", b =>
+ {
+ b.Property("ClubId");
+
+ b.Property("UserId");
+
+ b.HasKey("ClubId", "UserId");
+
+ b.HasIndex("UserId");
+
+ b.ToTable("ClubApplicants");
+ });
+
+ modelBuilder.Entity("NadekoBot.Core.Services.Database.Models.ClubBans", b =>
+ {
+ b.Property("ClubId");
+
+ b.Property("UserId");
+
+ b.HasKey("ClubId", "UserId");
+
+ b.HasIndex("UserId");
+
+ b.ToTable("ClubBans");
+ });
+
+ modelBuilder.Entity("NadekoBot.Core.Services.Database.Models.ClubInfo", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd();
+
+ b.Property("DateAdded");
+
+ b.Property("Discrim");
+
+ b.Property("ImageUrl");
+
+ b.Property("MinimumLevelReq");
+
+ b.Property("Name")
+ .IsRequired()
+ .HasMaxLength(20);
+
+ b.Property("OwnerId");
+
+ b.Property("Xp");
+
+ b.HasKey("Id");
+
+ b.HasAlternateKey("Name", "Discrim");
+
+ b.HasIndex("OwnerId")
+ .IsUnique();
+
+ b.ToTable("Clubs");
+ });
+
+ modelBuilder.Entity("NadekoBot.Core.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.Core.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.Core.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.Core.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.Core.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.Core.Services.Database.Models.CustomReaction", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd();
+
+ b.Property("AutoDeleteTrigger");
+
+ b.Property("ContainsAnywhere");
+
+ 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.Core.Services.Database.Models.DiscordUser", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd();
+
+ b.Property("AvatarId");
+
+ b.Property("ClubId");
+
+ b.Property("DateAdded");
+
+ b.Property("Discriminator");
+
+ b.Property("IsClubAdmin");
+
+ b.Property("LastLevelUp")
+ .ValueGeneratedOnAdd()
+ .HasDefaultValue(new DateTime(2017, 9, 21, 20, 53, 13, 305, DateTimeKind.Local));
+
+ b.Property("LastXpGain");
+
+ b.Property("NotifyOnLevelUp");
+
+ b.Property("TotalXp");
+
+ b.Property("UserId");
+
+ b.Property("Username");
+
+ b.HasKey("Id");
+
+ b.HasAlternateKey("UserId");
+
+ b.HasIndex("ClubId");
+
+ b.ToTable("DiscordUser");
+ });
+
+ modelBuilder.Entity("NadekoBot.Core.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.Core.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.Core.Services.Database.Models.ExcludedItem", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd();
+
+ b.Property("DateAdded");
+
+ b.Property("ItemId");
+
+ b.Property("ItemType");
+
+ b.Property("XpSettingsId");
+
+ b.HasKey("Id");
+
+ b.HasIndex("XpSettingsId");
+
+ b.ToTable("ExcludedItem");
+ });
+
+ modelBuilder.Entity("NadekoBot.Core.Services.Database.Models.FeedSub", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd();
+
+ b.Property("ChannelId");
+
+ b.Property("DateAdded");
+
+ b.Property("GuildConfigId");
+
+ b.Property("Url")
+ .IsRequired();
+
+ b.HasKey("Id");
+
+ b.HasAlternateKey("GuildConfigId", "Url");
+
+ b.ToTable("FeedSub");
+ });
+
+ modelBuilder.Entity("NadekoBot.Core.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.Core.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.Core.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.Core.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.Core.Services.Database.Models.GuildConfig", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd();
+
+ b.Property("AutoAssignRoleId");
+
+ b.Property("AutoDcFromVc");
+
+ 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("Prefix");
+
+ b.Property("RootPermissionId");
+
+ b.Property("SendChannelByeMessage");
+
+ b.Property("SendChannelGreetMessage");
+
+ b.Property("SendDmGreetMessage");
+
+ b.Property("TimeZoneId");
+
+ b.Property("VerboseErrors");
+
+ 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.Core.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.Property("StartTimeOfDay");
+
+ b.HasKey("Id");
+
+ b.HasIndex("GuildConfigId");
+
+ b.ToTable("GuildRepeater");
+ });
+
+ modelBuilder.Entity("NadekoBot.Core.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.Core.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.Core.Services.Database.Models.LoadedPackage", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd();
+
+ b.Property("BotConfigId");
+
+ b.Property("DateAdded");
+
+ b.Property("Name");
+
+ b.HasKey("Id");
+
+ b.HasIndex("BotConfigId");
+
+ b.ToTable("LoadedPackages");
+ });
+
+ modelBuilder.Entity("NadekoBot.Core.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.Core.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.Core.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.Core.Services.Database.Models.NsfwBlacklitedTag", b =>
+ {
+ b.Property