From bb395f18a2898559d2651c6a566628f787476a1c Mon Sep 17 00:00:00 2001 From: Kwoth Date: Wed, 27 Jul 2022 03:14:47 +0200 Subject: [PATCH] Implemented .linkonly (as an alternative to .imageonly). Updated pokaman with latest generations. Updated responses, fixed some warnings --- src/NadekoBot/Db/Models/ImageOnlyChannel.cs | 7 + src/NadekoBot/Db/Models/XpShopOwnedItem.cs | 3 +- ...220727005807_linkonly-channels.Designer.cs | 2858 +++++++++++++++++ .../20220727005807_linkonly-channels.cs | 26 + .../NadekoSqliteContextModelSnapshot.cs | 3 + .../Modules/Administration/Administration.cs | 21 +- .../Administration/ImageOnlyChannelService.cs | 117 +- .../QuestionPool/PokemonQuestionPool.cs | 2 +- src/NadekoBot/Modules/Xp/XpService.cs | 5 +- src/NadekoBot/data/aliases.yml | 4 + src/NadekoBot/data/pokemon/name-id_map.json | 2 +- .../data/strings/commands/commands.en-US.yml | 2 +- .../strings/responses/responses.en-US.json | 2 + 13 files changed, 3017 insertions(+), 35 deletions(-) create mode 100644 src/NadekoBot/Migrations/Sqlite/20220727005807_linkonly-channels.Designer.cs create mode 100644 src/NadekoBot/Migrations/Sqlite/20220727005807_linkonly-channels.cs diff --git a/src/NadekoBot/Db/Models/ImageOnlyChannel.cs b/src/NadekoBot/Db/Models/ImageOnlyChannel.cs index 02b9df481..12cda8578 100644 --- a/src/NadekoBot/Db/Models/ImageOnlyChannel.cs +++ b/src/NadekoBot/Db/Models/ImageOnlyChannel.cs @@ -5,4 +5,11 @@ public class ImageOnlyChannel : DbEntity { public ulong GuildId { get; set; } public ulong ChannelId { get; set; } + public OnlyChannelType Type { get; set; } +} + +public enum OnlyChannelType +{ + Image, + Link } \ No newline at end of file diff --git a/src/NadekoBot/Db/Models/XpShopOwnedItem.cs b/src/NadekoBot/Db/Models/XpShopOwnedItem.cs index dbbf9a255..5df541b99 100644 --- a/src/NadekoBot/Db/Models/XpShopOwnedItem.cs +++ b/src/NadekoBot/Db/Models/XpShopOwnedItem.cs @@ -1,4 +1,5 @@ -using NadekoBot.Services.Database.Models; +#nullable disable warnings +using NadekoBot.Services.Database.Models; namespace NadekoBot.Db.Models; diff --git a/src/NadekoBot/Migrations/Sqlite/20220727005807_linkonly-channels.Designer.cs b/src/NadekoBot/Migrations/Sqlite/20220727005807_linkonly-channels.Designer.cs new file mode 100644 index 000000000..0df0a9cca --- /dev/null +++ b/src/NadekoBot/Migrations/Sqlite/20220727005807_linkonly-channels.Designer.cs @@ -0,0 +1,2858 @@ +// +using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using NadekoBot.Services.Database; + +#nullable disable + +namespace NadekoBot.Migrations +{ + [DbContext(typeof(SqliteContext))] + [Migration("20220727005807_linkonly-channels")] + partial class linkonlychannels + { + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder.HasAnnotation("ProductVersion", "6.0.7"); + + modelBuilder.Entity("NadekoBot.Db.Models.BankUser", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("Balance") + .HasColumnType("INTEGER"); + + b.Property("DateAdded") + .HasColumnType("TEXT"); + + b.Property("UserId") + .HasColumnType("INTEGER"); + + b.HasKey("Id"); + + b.HasIndex("UserId") + .IsUnique(); + + b.ToTable("BankUsers"); + }); + + modelBuilder.Entity("NadekoBot.Db.Models.ClubApplicants", b => + { + b.Property("ClubId") + .HasColumnType("INTEGER"); + + b.Property("UserId") + .HasColumnType("INTEGER"); + + b.HasKey("ClubId", "UserId"); + + b.HasIndex("UserId"); + + b.ToTable("ClubApplicants"); + }); + + modelBuilder.Entity("NadekoBot.Db.Models.ClubBans", b => + { + b.Property("ClubId") + .HasColumnType("INTEGER"); + + b.Property("UserId") + .HasColumnType("INTEGER"); + + b.HasKey("ClubId", "UserId"); + + b.HasIndex("UserId"); + + b.ToTable("ClubBans"); + }); + + modelBuilder.Entity("NadekoBot.Db.Models.ClubInfo", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("DateAdded") + .HasColumnType("TEXT"); + + b.Property("Description") + .HasColumnType("TEXT"); + + b.Property("ImageUrl") + .HasColumnType("TEXT"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(20) + .HasColumnType("TEXT"); + + b.Property("OwnerId") + .HasColumnType("INTEGER"); + + b.Property("Xp") + .HasColumnType("INTEGER"); + + b.HasKey("Id"); + + b.HasAlternateKey("Name"); + + b.HasIndex("OwnerId") + .IsUnique(); + + b.ToTable("Clubs"); + }); + + modelBuilder.Entity("NadekoBot.Db.Models.DiscordUser", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("AvatarId") + .HasColumnType("TEXT"); + + b.Property("ClubId") + .HasColumnType("INTEGER"); + + b.Property("CurrencyAmount") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasDefaultValue(0L); + + b.Property("DateAdded") + .HasColumnType("TEXT"); + + b.Property("Discriminator") + .HasColumnType("TEXT"); + + b.Property("IsClubAdmin") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasDefaultValue(false); + + b.Property("LastLevelUp") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT") + .HasDefaultValueSql("datetime('now')"); + + b.Property("LastXpGain") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT") + .HasDefaultValueSql("datetime('now', '-1 years')"); + + b.Property("NotifyOnLevelUp") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasDefaultValue(0); + + b.Property("TotalXp") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasDefaultValue(0L); + + b.Property("UserId") + .HasColumnType("INTEGER"); + + b.Property("Username") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasAlternateKey("UserId"); + + b.HasIndex("ClubId"); + + b.HasIndex("CurrencyAmount"); + + b.HasIndex("TotalXp"); + + b.HasIndex("UserId"); + + b.ToTable("DiscordUser"); + }); + + modelBuilder.Entity("NadekoBot.Db.Models.FollowedStream", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("ChannelId") + .HasColumnType("INTEGER"); + + b.Property("DateAdded") + .HasColumnType("TEXT"); + + b.Property("GuildConfigId") + .HasColumnType("INTEGER"); + + b.Property("GuildId") + .HasColumnType("INTEGER"); + + b.Property("Message") + .HasColumnType("TEXT"); + + b.Property("Type") + .HasColumnType("INTEGER"); + + b.Property("Username") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("GuildConfigId"); + + b.ToTable("FollowedStream"); + }); + + modelBuilder.Entity("NadekoBot.Db.Models.PatronQuota", b => + { + b.Property("UserId") + .HasColumnType("INTEGER"); + + b.Property("FeatureType") + .HasColumnType("INTEGER"); + + b.Property("Feature") + .HasColumnType("TEXT"); + + b.Property("DailyCount") + .HasColumnType("INTEGER"); + + b.Property("HourlyCount") + .HasColumnType("INTEGER"); + + b.Property("MonthlyCount") + .HasColumnType("INTEGER"); + + b.HasKey("UserId", "FeatureType", "Feature"); + + b.HasIndex("UserId"); + + b.ToTable("PatronQuotas"); + }); + + modelBuilder.Entity("NadekoBot.Db.Models.PatronUser", b => + { + b.Property("UserId") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("AmountCents") + .HasColumnType("INTEGER"); + + b.Property("LastCharge") + .HasColumnType("TEXT"); + + b.Property("UniquePlatformUserId") + .HasColumnType("TEXT"); + + b.Property("ValidThru") + .HasColumnType("TEXT"); + + b.HasKey("UserId"); + + b.HasIndex("UniquePlatformUserId") + .IsUnique(); + + b.ToTable("Patrons"); + }); + + modelBuilder.Entity("NadekoBot.Db.Models.StreamOnlineMessage", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("ChannelId") + .HasColumnType("INTEGER"); + + b.Property("DateAdded") + .HasColumnType("TEXT"); + + b.Property("MessageId") + .HasColumnType("INTEGER"); + + b.Property("Name") + .HasColumnType("TEXT"); + + b.Property("Type") + .HasColumnType("INTEGER"); + + b.HasKey("Id"); + + b.ToTable("StreamOnlineMessages"); + }); + + modelBuilder.Entity("NadekoBot.Db.Models.XpShopOwnedItem", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("DateAdded") + .HasColumnType("TEXT"); + + b.Property("IsUsing") + .HasColumnType("INTEGER"); + + b.Property("ItemKey") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("ItemType") + .HasColumnType("INTEGER"); + + b.Property("UserId") + .HasColumnType("INTEGER"); + + b.HasKey("Id"); + + b.HasIndex("UserId", "ItemType", "ItemKey") + .IsUnique(); + + b.ToTable("XpShopOwnedItem"); + }); + + modelBuilder.Entity("NadekoBot.Services.Database.Models.AntiAltSetting", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("Action") + .HasColumnType("INTEGER"); + + b.Property("ActionDurationMinutes") + .HasColumnType("INTEGER"); + + b.Property("GuildConfigId") + .HasColumnType("INTEGER"); + + b.Property("MinAge") + .HasColumnType("TEXT"); + + b.Property("RoleId") + .HasColumnType("INTEGER"); + + b.HasKey("Id"); + + b.HasIndex("GuildConfigId") + .IsUnique(); + + b.ToTable("AntiAltSetting"); + }); + + modelBuilder.Entity("NadekoBot.Services.Database.Models.AntiRaidSetting", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("Action") + .HasColumnType("INTEGER"); + + b.Property("DateAdded") + .HasColumnType("TEXT"); + + 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("NadekoBot.Services.Database.Models.AntiSpamIgnore", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("AntiSpamSettingId") + .HasColumnType("INTEGER"); + + b.Property("ChannelId") + .HasColumnType("INTEGER"); + + b.Property("DateAdded") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("AntiSpamSettingId"); + + b.ToTable("AntiSpamIgnore"); + }); + + modelBuilder.Entity("NadekoBot.Services.Database.Models.AntiSpamSetting", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("Action") + .HasColumnType("INTEGER"); + + b.Property("DateAdded") + .HasColumnType("TEXT"); + + b.Property("GuildConfigId") + .HasColumnType("INTEGER"); + + b.Property("MessageThreshold") + .HasColumnType("INTEGER"); + + b.Property("MuteTime") + .HasColumnType("INTEGER"); + + b.Property("RoleId") + .HasColumnType("INTEGER"); + + b.HasKey("Id"); + + b.HasIndex("GuildConfigId") + .IsUnique(); + + b.ToTable("AntiSpamSetting"); + }); + + modelBuilder.Entity("NadekoBot.Services.Database.Models.AutoCommand", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("ChannelId") + .HasColumnType("INTEGER"); + + b.Property("ChannelName") + .HasColumnType("TEXT"); + + b.Property("CommandText") + .HasColumnType("TEXT"); + + b.Property("DateAdded") + .HasColumnType("TEXT"); + + b.Property("GuildId") + .HasColumnType("INTEGER"); + + b.Property("GuildName") + .HasColumnType("TEXT"); + + b.Property("Interval") + .HasColumnType("INTEGER"); + + b.Property("VoiceChannelId") + .HasColumnType("INTEGER"); + + b.Property("VoiceChannelName") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.ToTable("AutoCommands"); + }); + + modelBuilder.Entity("NadekoBot.Services.Database.Models.AutoTranslateChannel", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("AutoDelete") + .HasColumnType("INTEGER"); + + b.Property("ChannelId") + .HasColumnType("INTEGER"); + + b.Property("DateAdded") + .HasColumnType("TEXT"); + + b.Property("GuildId") + .HasColumnType("INTEGER"); + + b.HasKey("Id"); + + b.HasIndex("ChannelId") + .IsUnique(); + + b.HasIndex("GuildId"); + + b.ToTable("AutoTranslateChannels"); + }); + + modelBuilder.Entity("NadekoBot.Services.Database.Models.AutoTranslateUser", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("ChannelId") + .HasColumnType("INTEGER"); + + b.Property("DateAdded") + .HasColumnType("TEXT"); + + b.Property("Source") + .HasColumnType("TEXT"); + + b.Property("Target") + .HasColumnType("TEXT"); + + b.Property("UserId") + .HasColumnType("INTEGER"); + + b.HasKey("Id"); + + b.HasAlternateKey("ChannelId", "UserId"); + + b.ToTable("AutoTranslateUsers"); + }); + + modelBuilder.Entity("NadekoBot.Services.Database.Models.BanTemplate", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("DateAdded") + .HasColumnType("TEXT"); + + b.Property("GuildId") + .HasColumnType("INTEGER"); + + b.Property("Text") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("GuildId") + .IsUnique(); + + b.ToTable("BanTemplates"); + }); + + modelBuilder.Entity("NadekoBot.Services.Database.Models.BlacklistEntry", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("DateAdded") + .HasColumnType("TEXT"); + + b.Property("ItemId") + .HasColumnType("INTEGER"); + + b.Property("Type") + .HasColumnType("INTEGER"); + + b.HasKey("Id"); + + b.ToTable("Blacklist"); + }); + + modelBuilder.Entity("NadekoBot.Services.Database.Models.CommandAlias", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("DateAdded") + .HasColumnType("TEXT"); + + 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("NadekoBot.Services.Database.Models.CommandCooldown", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("CommandName") + .HasColumnType("TEXT"); + + b.Property("DateAdded") + .HasColumnType("TEXT"); + + b.Property("GuildConfigId") + .HasColumnType("INTEGER"); + + b.Property("Seconds") + .HasColumnType("INTEGER"); + + b.HasKey("Id"); + + b.HasIndex("GuildConfigId"); + + b.ToTable("CommandCooldown"); + }); + + modelBuilder.Entity("NadekoBot.Services.Database.Models.CurrencyTransaction", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("Amount") + .HasColumnType("INTEGER"); + + b.Property("DateAdded") + .HasColumnType("TEXT"); + + b.Property("Extra") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Note") + .HasColumnType("TEXT"); + + b.Property("OtherId") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasDefaultValueSql("NULL"); + + b.Property("Type") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("UserId") + .HasColumnType("INTEGER"); + + b.HasKey("Id"); + + b.HasIndex("UserId"); + + b.ToTable("CurrencyTransactions"); + }); + + modelBuilder.Entity("NadekoBot.Services.Database.Models.DelMsgOnCmdChannel", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("ChannelId") + .HasColumnType("INTEGER"); + + b.Property("DateAdded") + .HasColumnType("TEXT"); + + b.Property("GuildConfigId") + .HasColumnType("INTEGER"); + + b.Property("State") + .HasColumnType("INTEGER"); + + b.HasKey("Id"); + + b.HasIndex("GuildConfigId"); + + b.ToTable("DelMsgOnCmdChannel"); + }); + + modelBuilder.Entity("NadekoBot.Services.Database.Models.DiscordPermOverride", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("Command") + .HasColumnType("TEXT"); + + b.Property("DateAdded") + .HasColumnType("TEXT"); + + b.Property("GuildId") + .HasColumnType("INTEGER"); + + b.Property("Perm") + .HasColumnType("INTEGER"); + + b.HasKey("Id"); + + b.HasIndex("GuildId", "Command") + .IsUnique(); + + b.ToTable("DiscordPermOverrides"); + }); + + modelBuilder.Entity("NadekoBot.Services.Database.Models.ExcludedItem", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("DateAdded") + .HasColumnType("TEXT"); + + b.Property("ItemId") + .HasColumnType("INTEGER"); + + b.Property("ItemType") + .HasColumnType("INTEGER"); + + b.Property("XpSettingsId") + .HasColumnType("INTEGER"); + + b.HasKey("Id"); + + b.HasIndex("XpSettingsId"); + + b.ToTable("ExcludedItem"); + }); + + modelBuilder.Entity("NadekoBot.Services.Database.Models.FeedSub", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("ChannelId") + .HasColumnType("INTEGER"); + + b.Property("DateAdded") + .HasColumnType("TEXT"); + + b.Property("GuildConfigId") + .HasColumnType("INTEGER"); + + b.Property("Url") + .IsRequired() + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasAlternateKey("GuildConfigId", "Url"); + + b.ToTable("FeedSub"); + }); + + modelBuilder.Entity("NadekoBot.Services.Database.Models.FilterChannelId", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("ChannelId") + .HasColumnType("INTEGER"); + + b.Property("DateAdded") + .HasColumnType("TEXT"); + + b.Property("GuildConfigId") + .HasColumnType("INTEGER"); + + b.HasKey("Id"); + + b.HasIndex("GuildConfigId"); + + b.ToTable("FilterChannelId"); + }); + + modelBuilder.Entity("NadekoBot.Services.Database.Models.FilteredWord", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("DateAdded") + .HasColumnType("TEXT"); + + b.Property("GuildConfigId") + .HasColumnType("INTEGER"); + + b.Property("Word") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("GuildConfigId"); + + b.ToTable("FilteredWord"); + }); + + modelBuilder.Entity("NadekoBot.Services.Database.Models.FilterLinksChannelId", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("ChannelId") + .HasColumnType("INTEGER"); + + b.Property("DateAdded") + .HasColumnType("TEXT"); + + b.Property("GuildConfigId") + .HasColumnType("INTEGER"); + + b.HasKey("Id"); + + b.HasIndex("GuildConfigId"); + + b.ToTable("FilterLinksChannelId"); + }); + + modelBuilder.Entity("NadekoBot.Services.Database.Models.FilterWordsChannelId", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("ChannelId") + .HasColumnType("INTEGER"); + + b.Property("DateAdded") + .HasColumnType("TEXT"); + + b.Property("GuildConfigId") + .HasColumnType("INTEGER"); + + b.HasKey("Id"); + + b.HasIndex("GuildConfigId"); + + b.ToTable("FilterWordsChannelId"); + }); + + modelBuilder.Entity("NadekoBot.Services.Database.Models.GCChannelId", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("ChannelId") + .HasColumnType("INTEGER"); + + b.Property("DateAdded") + .HasColumnType("TEXT"); + + b.Property("GuildConfigId") + .HasColumnType("INTEGER"); + + b.HasKey("Id"); + + b.HasIndex("GuildConfigId"); + + b.ToTable("GCChannelId"); + }); + + modelBuilder.Entity("NadekoBot.Services.Database.Models.GroupName", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("DateAdded") + .HasColumnType("TEXT"); + + b.Property("GuildConfigId") + .HasColumnType("INTEGER"); + + b.Property("Name") + .HasColumnType("TEXT"); + + b.Property("Number") + .HasColumnType("INTEGER"); + + b.HasKey("Id"); + + b.HasIndex("GuildConfigId", "Number") + .IsUnique(); + + b.ToTable("GroupName"); + }); + + modelBuilder.Entity("NadekoBot.Services.Database.Models.GuildConfig", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("AutoAssignRoleIds") + .HasColumnType("TEXT"); + + b.Property("AutoDeleteByeMessagesTimer") + .HasColumnType("INTEGER"); + + b.Property("AutoDeleteGreetMessagesTimer") + .HasColumnType("INTEGER"); + + b.Property("AutoDeleteSelfAssignedRoleMessages") + .HasColumnType("INTEGER"); + + b.Property("BoostMessage") + .HasColumnType("TEXT"); + + b.Property("BoostMessageChannelId") + .HasColumnType("INTEGER"); + + b.Property("BoostMessageDeleteAfter") + .HasColumnType("INTEGER"); + + b.Property("ByeMessageChannelId") + .HasColumnType("INTEGER"); + + b.Property("ChannelByeMessageText") + .HasColumnType("TEXT"); + + b.Property("ChannelGreetMessageText") + .HasColumnType("TEXT"); + + b.Property("CleverbotEnabled") + .HasColumnType("INTEGER"); + + b.Property("DateAdded") + .HasColumnType("TEXT"); + + b.Property("DeleteMessageOnCommand") + .HasColumnType("INTEGER"); + + b.Property("DeleteStreamOnlineMessage") + .HasColumnType("INTEGER"); + + b.Property("DmGreetMessageText") + .HasColumnType("TEXT"); + + b.Property("ExclusiveSelfAssignedRoles") + .HasColumnType("INTEGER"); + + b.Property("FilterInvites") + .HasColumnType("INTEGER"); + + b.Property("FilterLinks") + .HasColumnType("INTEGER"); + + b.Property("FilterWords") + .HasColumnType("INTEGER"); + + b.Property("GameVoiceChannel") + .HasColumnType("INTEGER"); + + b.Property("GreetMessageChannelId") + .HasColumnType("INTEGER"); + + b.Property("GuildId") + .HasColumnType("INTEGER"); + + b.Property("Locale") + .HasColumnType("TEXT"); + + b.Property("MuteRoleName") + .HasColumnType("TEXT"); + + b.Property("NotifyStreamOffline") + .HasColumnType("INTEGER"); + + b.Property("PermissionRole") + .HasColumnType("TEXT"); + + b.Property("Prefix") + .HasColumnType("TEXT"); + + b.Property("SendBoostMessage") + .HasColumnType("INTEGER"); + + b.Property("SendChannelByeMessage") + .HasColumnType("INTEGER"); + + b.Property("SendChannelGreetMessage") + .HasColumnType("INTEGER"); + + b.Property("SendDmGreetMessage") + .HasColumnType("INTEGER"); + + b.Property("TimeZoneId") + .HasColumnType("TEXT"); + + b.Property("VerboseErrors") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasDefaultValue(true); + + b.Property("VerbosePermissions") + .HasColumnType("INTEGER"); + + b.Property("WarnExpireAction") + .HasColumnType("INTEGER"); + + b.Property("WarnExpireHours") + .HasColumnType("INTEGER"); + + b.Property("WarningsInitialized") + .HasColumnType("INTEGER"); + + b.HasKey("Id"); + + b.HasIndex("GuildId") + .IsUnique(); + + b.HasIndex("WarnExpireHours"); + + b.ToTable("GuildConfigs"); + }); + + modelBuilder.Entity("NadekoBot.Services.Database.Models.IgnoredLogItem", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("DateAdded") + .HasColumnType("TEXT"); + + b.Property("ItemType") + .HasColumnType("INTEGER"); + + b.Property("LogItemId") + .HasColumnType("INTEGER"); + + b.Property("LogSettingId") + .HasColumnType("INTEGER"); + + b.HasKey("Id"); + + b.HasIndex("LogSettingId", "LogItemId", "ItemType") + .IsUnique(); + + b.ToTable("IgnoredLogChannels"); + }); + + modelBuilder.Entity("NadekoBot.Services.Database.Models.IgnoredVoicePresenceChannel", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("ChannelId") + .HasColumnType("INTEGER"); + + b.Property("DateAdded") + .HasColumnType("TEXT"); + + b.Property("LogSettingId") + .HasColumnType("INTEGER"); + + b.HasKey("Id"); + + b.HasIndex("LogSettingId"); + + b.ToTable("IgnoredVoicePresenceCHannels"); + }); + + modelBuilder.Entity("NadekoBot.Services.Database.Models.ImageOnlyChannel", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("ChannelId") + .HasColumnType("INTEGER"); + + b.Property("DateAdded") + .HasColumnType("TEXT"); + + b.Property("GuildId") + .HasColumnType("INTEGER"); + + b.Property("Type") + .HasColumnType("INTEGER"); + + b.HasKey("Id"); + + b.HasIndex("ChannelId") + .IsUnique(); + + b.ToTable("ImageOnlyChannels"); + }); + + modelBuilder.Entity("NadekoBot.Services.Database.Models.LogSetting", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("ChannelCreatedId") + .HasColumnType("INTEGER"); + + b.Property("ChannelDestroyedId") + .HasColumnType("INTEGER"); + + b.Property("ChannelUpdatedId") + .HasColumnType("INTEGER"); + + b.Property("DateAdded") + .HasColumnType("TEXT"); + + b.Property("GuildId") + .HasColumnType("INTEGER"); + + b.Property("LogOtherId") + .HasColumnType("INTEGER"); + + b.Property("LogUserPresenceId") + .HasColumnType("INTEGER"); + + b.Property("LogVoicePresenceId") + .HasColumnType("INTEGER"); + + b.Property("LogVoicePresenceTTSId") + .HasColumnType("INTEGER"); + + b.Property("LogWarnsId") + .HasColumnType("INTEGER"); + + b.Property("MessageDeletedId") + .HasColumnType("INTEGER"); + + b.Property("MessageUpdatedId") + .HasColumnType("INTEGER"); + + b.Property("UserBannedId") + .HasColumnType("INTEGER"); + + b.Property("UserJoinedId") + .HasColumnType("INTEGER"); + + b.Property("UserLeftId") + .HasColumnType("INTEGER"); + + b.Property("UserMutedId") + .HasColumnType("INTEGER"); + + b.Property("UserUnbannedId") + .HasColumnType("INTEGER"); + + b.Property("UserUpdatedId") + .HasColumnType("INTEGER"); + + b.HasKey("Id"); + + b.HasIndex("GuildId") + .IsUnique(); + + b.ToTable("LogSettings"); + }); + + modelBuilder.Entity("NadekoBot.Services.Database.Models.MusicPlayerSettings", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("AutoDisconnect") + .HasColumnType("INTEGER"); + + b.Property("AutoPlay") + .HasColumnType("INTEGER"); + + b.Property("GuildId") + .HasColumnType("INTEGER"); + + b.Property("MusicChannelId") + .HasColumnType("INTEGER"); + + b.Property("PlayerRepeat") + .HasColumnType("INTEGER"); + + b.Property("QualityPreset") + .HasColumnType("INTEGER"); + + b.Property("Volume") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasDefaultValue(100); + + b.HasKey("Id"); + + b.HasIndex("GuildId") + .IsUnique(); + + b.ToTable("MusicPlayerSettings"); + }); + + modelBuilder.Entity("NadekoBot.Services.Database.Models.MusicPlaylist", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("Author") + .HasColumnType("TEXT"); + + b.Property("AuthorId") + .HasColumnType("INTEGER"); + + b.Property("DateAdded") + .HasColumnType("TEXT"); + + b.Property("Name") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.ToTable("MusicPlaylists"); + }); + + modelBuilder.Entity("NadekoBot.Services.Database.Models.MutedUserId", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("DateAdded") + .HasColumnType("TEXT"); + + b.Property("GuildConfigId") + .HasColumnType("INTEGER"); + + b.Property("UserId") + .HasColumnType("INTEGER"); + + b.HasKey("Id"); + + b.HasIndex("GuildConfigId"); + + b.ToTable("MutedUserId"); + }); + + modelBuilder.Entity("NadekoBot.Services.Database.Models.NadekoExpression", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("AllowTarget") + .HasColumnType("INTEGER"); + + b.Property("AutoDeleteTrigger") + .HasColumnType("INTEGER"); + + b.Property("ContainsAnywhere") + .HasColumnType("INTEGER"); + + b.Property("DateAdded") + .HasColumnType("TEXT"); + + b.Property("DmResponse") + .HasColumnType("INTEGER"); + + b.Property("GuildId") + .HasColumnType("INTEGER"); + + b.Property("Reactions") + .HasColumnType("TEXT"); + + b.Property("Response") + .HasColumnType("TEXT"); + + b.Property("Trigger") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.ToTable("Expressions"); + }); + + modelBuilder.Entity("NadekoBot.Services.Database.Models.NsfwBlacklistedTag", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("DateAdded") + .HasColumnType("TEXT"); + + b.Property("GuildId") + .HasColumnType("INTEGER"); + + b.Property("Tag") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("GuildId"); + + b.ToTable("NsfwBlacklistedTags"); + }); + + modelBuilder.Entity("NadekoBot.Services.Database.Models.Permissionv2", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("DateAdded") + .HasColumnType("TEXT"); + + b.Property("GuildConfigId") + .HasColumnType("INTEGER"); + + b.Property("Index") + .HasColumnType("INTEGER"); + + b.Property("IsCustomCommand") + .HasColumnType("INTEGER"); + + b.Property("PrimaryTarget") + .HasColumnType("INTEGER"); + + b.Property("PrimaryTargetId") + .HasColumnType("INTEGER"); + + b.Property("SecondaryTarget") + .HasColumnType("INTEGER"); + + b.Property("SecondaryTargetName") + .HasColumnType("TEXT"); + + b.Property("State") + .HasColumnType("INTEGER"); + + b.HasKey("Id"); + + b.HasIndex("GuildConfigId"); + + b.ToTable("Permissions"); + }); + + modelBuilder.Entity("NadekoBot.Services.Database.Models.PlantedCurrency", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("Amount") + .HasColumnType("INTEGER"); + + b.Property("ChannelId") + .HasColumnType("INTEGER"); + + b.Property("DateAdded") + .HasColumnType("TEXT"); + + b.Property("GuildId") + .HasColumnType("INTEGER"); + + b.Property("MessageId") + .HasColumnType("INTEGER"); + + b.Property("Password") + .HasColumnType("TEXT"); + + b.Property("UserId") + .HasColumnType("INTEGER"); + + b.HasKey("Id"); + + b.HasIndex("ChannelId"); + + b.HasIndex("MessageId") + .IsUnique(); + + b.ToTable("PlantedCurrency"); + }); + + modelBuilder.Entity("NadekoBot.Services.Database.Models.PlaylistSong", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("DateAdded") + .HasColumnType("TEXT"); + + b.Property("MusicPlaylistId") + .HasColumnType("INTEGER"); + + b.Property("Provider") + .HasColumnType("TEXT"); + + b.Property("ProviderType") + .HasColumnType("INTEGER"); + + b.Property("Query") + .HasColumnType("TEXT"); + + b.Property("Title") + .HasColumnType("TEXT"); + + b.Property("Uri") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("MusicPlaylistId"); + + b.ToTable("PlaylistSong"); + }); + + modelBuilder.Entity("NadekoBot.Services.Database.Models.Poll", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("ChannelId") + .HasColumnType("INTEGER"); + + b.Property("DateAdded") + .HasColumnType("TEXT"); + + b.Property("GuildId") + .HasColumnType("INTEGER"); + + b.Property("Question") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("GuildId") + .IsUnique(); + + b.ToTable("Poll"); + }); + + modelBuilder.Entity("NadekoBot.Services.Database.Models.PollAnswer", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("DateAdded") + .HasColumnType("TEXT"); + + b.Property("Index") + .HasColumnType("INTEGER"); + + b.Property("PollId") + .HasColumnType("INTEGER"); + + b.Property("Text") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("PollId"); + + b.ToTable("PollAnswer"); + }); + + modelBuilder.Entity("NadekoBot.Services.Database.Models.PollVote", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("DateAdded") + .HasColumnType("TEXT"); + + b.Property("PollId") + .HasColumnType("INTEGER"); + + b.Property("UserId") + .HasColumnType("INTEGER"); + + b.Property("VoteIndex") + .HasColumnType("INTEGER"); + + b.HasKey("Id"); + + b.HasIndex("PollId"); + + b.ToTable("PollVote"); + }); + + modelBuilder.Entity("NadekoBot.Services.Database.Models.Quote", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("AuthorId") + .HasColumnType("INTEGER"); + + b.Property("AuthorName") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("DateAdded") + .HasColumnType("TEXT"); + + b.Property("GuildId") + .HasColumnType("INTEGER"); + + b.Property("Keyword") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Text") + .IsRequired() + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("GuildId"); + + b.HasIndex("Keyword"); + + b.ToTable("Quotes"); + }); + + modelBuilder.Entity("NadekoBot.Services.Database.Models.ReactionRoleV2", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("ChannelId") + .HasColumnType("INTEGER"); + + b.Property("DateAdded") + .HasColumnType("TEXT"); + + b.Property("Emote") + .HasMaxLength(100) + .HasColumnType("TEXT"); + + b.Property("Group") + .HasColumnType("INTEGER"); + + b.Property("GuildId") + .HasColumnType("INTEGER"); + + b.Property("LevelReq") + .HasColumnType("INTEGER"); + + b.Property("MessageId") + .HasColumnType("INTEGER"); + + b.Property("RoleId") + .HasColumnType("INTEGER"); + + b.HasKey("Id"); + + b.HasIndex("GuildId"); + + b.HasIndex("MessageId", "Emote") + .IsUnique(); + + b.ToTable("ReactionRoles"); + }); + + modelBuilder.Entity("NadekoBot.Services.Database.Models.Reminder", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("ChannelId") + .HasColumnType("INTEGER"); + + b.Property("DateAdded") + .HasColumnType("TEXT"); + + b.Property("IsPrivate") + .HasColumnType("INTEGER"); + + b.Property("Message") + .HasColumnType("TEXT"); + + b.Property("ServerId") + .HasColumnType("INTEGER"); + + b.Property("UserId") + .HasColumnType("INTEGER"); + + b.Property("When") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("When"); + + b.ToTable("Reminders"); + }); + + modelBuilder.Entity("NadekoBot.Services.Database.Models.Repeater", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("ChannelId") + .HasColumnType("INTEGER"); + + b.Property("DateAdded") + .HasColumnType("TEXT"); + + b.Property("GuildId") + .HasColumnType("INTEGER"); + + b.Property("Interval") + .HasColumnType("TEXT"); + + b.Property("LastMessageId") + .HasColumnType("INTEGER"); + + b.Property("Message") + .HasColumnType("TEXT"); + + b.Property("NoRedundant") + .HasColumnType("INTEGER"); + + b.Property("StartTimeOfDay") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.ToTable("Repeaters"); + }); + + modelBuilder.Entity("NadekoBot.Services.Database.Models.RewardedUser", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("AmountRewardedThisMonth") + .HasColumnType("INTEGER"); + + b.Property("DateAdded") + .HasColumnType("TEXT"); + + b.Property("LastReward") + .HasColumnType("TEXT"); + + b.Property("PlatformUserId") + .HasColumnType("TEXT"); + + b.Property("UserId") + .HasColumnType("INTEGER"); + + b.HasKey("Id"); + + b.HasIndex("PlatformUserId") + .IsUnique(); + + b.ToTable("RewardedUsers"); + }); + + modelBuilder.Entity("NadekoBot.Services.Database.Models.RotatingPlayingStatus", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("DateAdded") + .HasColumnType("TEXT"); + + b.Property("Status") + .HasColumnType("TEXT"); + + b.Property("Type") + .HasColumnType("INTEGER"); + + b.HasKey("Id"); + + b.ToTable("RotatingStatus"); + }); + + modelBuilder.Entity("NadekoBot.Services.Database.Models.SelfAssignedRole", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("DateAdded") + .HasColumnType("TEXT"); + + b.Property("Group") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasDefaultValue(0); + + b.Property("GuildId") + .HasColumnType("INTEGER"); + + b.Property("LevelRequirement") + .HasColumnType("INTEGER"); + + b.Property("RoleId") + .HasColumnType("INTEGER"); + + b.HasKey("Id"); + + b.HasIndex("GuildId", "RoleId") + .IsUnique(); + + b.ToTable("SelfAssignableRoles"); + }); + + modelBuilder.Entity("NadekoBot.Services.Database.Models.ShopEntry", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("AuthorId") + .HasColumnType("INTEGER"); + + b.Property("DateAdded") + .HasColumnType("TEXT"); + + b.Property("GuildConfigId") + .HasColumnType("INTEGER"); + + b.Property("Index") + .HasColumnType("INTEGER"); + + b.Property("Name") + .HasColumnType("TEXT"); + + b.Property("Price") + .HasColumnType("INTEGER"); + + b.Property("RoleId") + .HasColumnType("INTEGER"); + + b.Property("RoleName") + .HasColumnType("TEXT"); + + b.Property("Type") + .HasColumnType("INTEGER"); + + b.HasKey("Id"); + + b.HasIndex("GuildConfigId"); + + b.ToTable("ShopEntry"); + }); + + modelBuilder.Entity("NadekoBot.Services.Database.Models.ShopEntryItem", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("DateAdded") + .HasColumnType("TEXT"); + + b.Property("ShopEntryId") + .HasColumnType("INTEGER"); + + b.Property("Text") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("ShopEntryId"); + + b.ToTable("ShopEntryItem"); + }); + + modelBuilder.Entity("NadekoBot.Services.Database.Models.SlowmodeIgnoredRole", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("DateAdded") + .HasColumnType("TEXT"); + + b.Property("GuildConfigId") + .HasColumnType("INTEGER"); + + b.Property("RoleId") + .HasColumnType("INTEGER"); + + b.HasKey("Id"); + + b.HasIndex("GuildConfigId"); + + b.ToTable("SlowmodeIgnoredRole"); + }); + + modelBuilder.Entity("NadekoBot.Services.Database.Models.SlowmodeIgnoredUser", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("DateAdded") + .HasColumnType("TEXT"); + + b.Property("GuildConfigId") + .HasColumnType("INTEGER"); + + b.Property("UserId") + .HasColumnType("INTEGER"); + + b.HasKey("Id"); + + b.HasIndex("GuildConfigId"); + + b.ToTable("SlowmodeIgnoredUser"); + }); + + modelBuilder.Entity("NadekoBot.Services.Database.Models.StreamRoleBlacklistedUser", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("DateAdded") + .HasColumnType("TEXT"); + + b.Property("StreamRoleSettingsId") + .HasColumnType("INTEGER"); + + b.Property("UserId") + .HasColumnType("INTEGER"); + + b.Property("Username") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("StreamRoleSettingsId"); + + b.ToTable("StreamRoleBlacklistedUser"); + }); + + modelBuilder.Entity("NadekoBot.Services.Database.Models.StreamRoleSettings", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("AddRoleId") + .HasColumnType("INTEGER"); + + b.Property("DateAdded") + .HasColumnType("TEXT"); + + b.Property("Enabled") + .HasColumnType("INTEGER"); + + b.Property("FromRoleId") + .HasColumnType("INTEGER"); + + b.Property("GuildConfigId") + .HasColumnType("INTEGER"); + + b.Property("Keyword") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("GuildConfigId") + .IsUnique(); + + b.ToTable("StreamRoleSettings"); + }); + + modelBuilder.Entity("NadekoBot.Services.Database.Models.StreamRoleWhitelistedUser", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("DateAdded") + .HasColumnType("TEXT"); + + b.Property("StreamRoleSettingsId") + .HasColumnType("INTEGER"); + + b.Property("UserId") + .HasColumnType("INTEGER"); + + b.Property("Username") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("StreamRoleSettingsId"); + + b.ToTable("StreamRoleWhitelistedUser"); + }); + + modelBuilder.Entity("NadekoBot.Services.Database.Models.UnbanTimer", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("DateAdded") + .HasColumnType("TEXT"); + + b.Property("GuildConfigId") + .HasColumnType("INTEGER"); + + b.Property("UnbanAt") + .HasColumnType("TEXT"); + + b.Property("UserId") + .HasColumnType("INTEGER"); + + b.HasKey("Id"); + + b.HasIndex("GuildConfigId"); + + b.ToTable("UnbanTimer"); + }); + + modelBuilder.Entity("NadekoBot.Services.Database.Models.UnmuteTimer", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("DateAdded") + .HasColumnType("TEXT"); + + b.Property("GuildConfigId") + .HasColumnType("INTEGER"); + + b.Property("UnmuteAt") + .HasColumnType("TEXT"); + + b.Property("UserId") + .HasColumnType("INTEGER"); + + b.HasKey("Id"); + + b.HasIndex("GuildConfigId"); + + b.ToTable("UnmuteTimer"); + }); + + modelBuilder.Entity("NadekoBot.Services.Database.Models.UnroleTimer", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("DateAdded") + .HasColumnType("TEXT"); + + b.Property("GuildConfigId") + .HasColumnType("INTEGER"); + + b.Property("RoleId") + .HasColumnType("INTEGER"); + + b.Property("UnbanAt") + .HasColumnType("TEXT"); + + b.Property("UserId") + .HasColumnType("INTEGER"); + + b.HasKey("Id"); + + b.HasIndex("GuildConfigId"); + + b.ToTable("UnroleTimer"); + }); + + modelBuilder.Entity("NadekoBot.Services.Database.Models.UserXpStats", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("AwardedXp") + .HasColumnType("INTEGER"); + + b.Property("DateAdded") + .HasColumnType("TEXT"); + + b.Property("GuildId") + .HasColumnType("INTEGER"); + + b.Property("LastLevelUp") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT") + .HasDefaultValueSql("datetime('now')"); + + b.Property("NotifyOnLevelUp") + .HasColumnType("INTEGER"); + + b.Property("UserId") + .HasColumnType("INTEGER"); + + b.Property("Xp") + .HasColumnType("INTEGER"); + + b.HasKey("Id"); + + b.HasIndex("AwardedXp"); + + b.HasIndex("GuildId"); + + b.HasIndex("UserId"); + + b.HasIndex("Xp"); + + b.HasIndex("UserId", "GuildId") + .IsUnique(); + + b.ToTable("UserXpStats"); + }); + + modelBuilder.Entity("NadekoBot.Services.Database.Models.VcRoleInfo", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("DateAdded") + .HasColumnType("TEXT"); + + b.Property("GuildConfigId") + .HasColumnType("INTEGER"); + + b.Property("RoleId") + .HasColumnType("INTEGER"); + + b.Property("VoiceChannelId") + .HasColumnType("INTEGER"); + + b.HasKey("Id"); + + b.HasIndex("GuildConfigId"); + + b.ToTable("VcRoleInfo"); + }); + + modelBuilder.Entity("NadekoBot.Services.Database.Models.WaifuInfo", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("AffinityId") + .HasColumnType("INTEGER"); + + b.Property("ClaimerId") + .HasColumnType("INTEGER"); + + b.Property("DateAdded") + .HasColumnType("TEXT"); + + b.Property("Price") + .HasColumnType("INTEGER"); + + b.Property("WaifuId") + .HasColumnType("INTEGER"); + + b.HasKey("Id"); + + b.HasIndex("AffinityId"); + + b.HasIndex("ClaimerId"); + + b.HasIndex("Price"); + + b.HasIndex("WaifuId") + .IsUnique(); + + b.ToTable("WaifuInfo"); + }); + + modelBuilder.Entity("NadekoBot.Services.Database.Models.WaifuItem", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("DateAdded") + .HasColumnType("TEXT"); + + b.Property("ItemEmoji") + .HasColumnType("TEXT"); + + b.Property("Name") + .HasColumnType("TEXT"); + + b.Property("WaifuInfoId") + .HasColumnType("INTEGER"); + + b.HasKey("Id"); + + b.HasIndex("WaifuInfoId"); + + b.ToTable("WaifuItem"); + }); + + modelBuilder.Entity("NadekoBot.Services.Database.Models.WaifuUpdate", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("DateAdded") + .HasColumnType("TEXT"); + + b.Property("NewId") + .HasColumnType("INTEGER"); + + b.Property("OldId") + .HasColumnType("INTEGER"); + + b.Property("UpdateType") + .HasColumnType("INTEGER"); + + b.Property("UserId") + .HasColumnType("INTEGER"); + + b.HasKey("Id"); + + b.HasIndex("NewId"); + + b.HasIndex("OldId"); + + b.HasIndex("UserId"); + + b.ToTable("WaifuUpdates"); + }); + + modelBuilder.Entity("NadekoBot.Services.Database.Models.Warning", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("DateAdded") + .HasColumnType("TEXT"); + + b.Property("Forgiven") + .HasColumnType("INTEGER"); + + b.Property("ForgivenBy") + .HasColumnType("TEXT"); + + b.Property("GuildId") + .HasColumnType("INTEGER"); + + b.Property("Moderator") + .HasColumnType("TEXT"); + + b.Property("Reason") + .HasColumnType("TEXT"); + + b.Property("UserId") + .HasColumnType("INTEGER"); + + b.Property("Weight") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasDefaultValue(1L); + + b.HasKey("Id"); + + b.HasIndex("DateAdded"); + + b.HasIndex("GuildId"); + + b.HasIndex("UserId"); + + b.ToTable("Warnings"); + }); + + modelBuilder.Entity("NadekoBot.Services.Database.Models.WarningPunishment", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("Count") + .HasColumnType("INTEGER"); + + b.Property("DateAdded") + .HasColumnType("TEXT"); + + b.Property("GuildConfigId") + .HasColumnType("INTEGER"); + + b.Property("Punishment") + .HasColumnType("INTEGER"); + + b.Property("RoleId") + .HasColumnType("INTEGER"); + + b.Property("Time") + .HasColumnType("INTEGER"); + + b.HasKey("Id"); + + b.HasIndex("GuildConfigId"); + + b.ToTable("WarningPunishment"); + }); + + modelBuilder.Entity("NadekoBot.Services.Database.Models.XpCurrencyReward", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("Amount") + .HasColumnType("INTEGER"); + + b.Property("DateAdded") + .HasColumnType("TEXT"); + + b.Property("Level") + .HasColumnType("INTEGER"); + + b.Property("XpSettingsId") + .HasColumnType("INTEGER"); + + b.HasKey("Id"); + + b.HasIndex("XpSettingsId"); + + b.ToTable("XpCurrencyReward"); + }); + + modelBuilder.Entity("NadekoBot.Services.Database.Models.XpRoleReward", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("DateAdded") + .HasColumnType("TEXT"); + + b.Property("Level") + .HasColumnType("INTEGER"); + + b.Property("Remove") + .HasColumnType("INTEGER"); + + b.Property("RoleId") + .HasColumnType("INTEGER"); + + b.Property("XpSettingsId") + .HasColumnType("INTEGER"); + + b.HasKey("Id"); + + b.HasIndex("XpSettingsId", "Level") + .IsUnique(); + + b.ToTable("XpRoleReward"); + }); + + modelBuilder.Entity("NadekoBot.Services.Database.Models.XpSettings", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("DateAdded") + .HasColumnType("TEXT"); + + b.Property("GuildConfigId") + .HasColumnType("INTEGER"); + + b.Property("ServerExcluded") + .HasColumnType("INTEGER"); + + b.HasKey("Id"); + + b.HasIndex("GuildConfigId") + .IsUnique(); + + b.ToTable("XpSettings"); + }); + + modelBuilder.Entity("NadekoBot.Db.Models.ClubApplicants", b => + { + b.HasOne("NadekoBot.Db.Models.ClubInfo", "Club") + .WithMany("Applicants") + .HasForeignKey("ClubId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("NadekoBot.Db.Models.DiscordUser", "User") + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Club"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("NadekoBot.Db.Models.ClubBans", b => + { + b.HasOne("NadekoBot.Db.Models.ClubInfo", "Club") + .WithMany("Bans") + .HasForeignKey("ClubId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("NadekoBot.Db.Models.DiscordUser", "User") + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Club"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("NadekoBot.Db.Models.ClubInfo", b => + { + b.HasOne("NadekoBot.Db.Models.DiscordUser", "Owner") + .WithOne() + .HasForeignKey("NadekoBot.Db.Models.ClubInfo", "OwnerId") + .OnDelete(DeleteBehavior.SetNull); + + b.Navigation("Owner"); + }); + + modelBuilder.Entity("NadekoBot.Db.Models.DiscordUser", b => + { + b.HasOne("NadekoBot.Db.Models.ClubInfo", "Club") + .WithMany("Members") + .HasForeignKey("ClubId") + .OnDelete(DeleteBehavior.NoAction); + + b.Navigation("Club"); + }); + + modelBuilder.Entity("NadekoBot.Db.Models.FollowedStream", b => + { + b.HasOne("NadekoBot.Services.Database.Models.GuildConfig", null) + .WithMany("FollowedStreams") + .HasForeignKey("GuildConfigId"); + }); + + modelBuilder.Entity("NadekoBot.Services.Database.Models.AntiAltSetting", b => + { + b.HasOne("NadekoBot.Services.Database.Models.GuildConfig", null) + .WithOne("AntiAltSetting") + .HasForeignKey("NadekoBot.Services.Database.Models.AntiAltSetting", "GuildConfigId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("NadekoBot.Services.Database.Models.AntiRaidSetting", b => + { + b.HasOne("NadekoBot.Services.Database.Models.GuildConfig", "GuildConfig") + .WithOne("AntiRaidSetting") + .HasForeignKey("NadekoBot.Services.Database.Models.AntiRaidSetting", "GuildConfigId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("GuildConfig"); + }); + + modelBuilder.Entity("NadekoBot.Services.Database.Models.AntiSpamIgnore", b => + { + b.HasOne("NadekoBot.Services.Database.Models.AntiSpamSetting", null) + .WithMany("IgnoredChannels") + .HasForeignKey("AntiSpamSettingId"); + }); + + modelBuilder.Entity("NadekoBot.Services.Database.Models.AntiSpamSetting", b => + { + b.HasOne("NadekoBot.Services.Database.Models.GuildConfig", "GuildConfig") + .WithOne("AntiSpamSetting") + .HasForeignKey("NadekoBot.Services.Database.Models.AntiSpamSetting", "GuildConfigId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("GuildConfig"); + }); + + modelBuilder.Entity("NadekoBot.Services.Database.Models.AutoTranslateUser", b => + { + b.HasOne("NadekoBot.Services.Database.Models.AutoTranslateChannel", "Channel") + .WithMany("Users") + .HasForeignKey("ChannelId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Channel"); + }); + + modelBuilder.Entity("NadekoBot.Services.Database.Models.CommandAlias", b => + { + b.HasOne("NadekoBot.Services.Database.Models.GuildConfig", null) + .WithMany("CommandAliases") + .HasForeignKey("GuildConfigId"); + }); + + modelBuilder.Entity("NadekoBot.Services.Database.Models.CommandCooldown", b => + { + b.HasOne("NadekoBot.Services.Database.Models.GuildConfig", null) + .WithMany("CommandCooldowns") + .HasForeignKey("GuildConfigId"); + }); + + modelBuilder.Entity("NadekoBot.Services.Database.Models.DelMsgOnCmdChannel", b => + { + b.HasOne("NadekoBot.Services.Database.Models.GuildConfig", null) + .WithMany("DelMsgOnCmdChannels") + .HasForeignKey("GuildConfigId"); + }); + + modelBuilder.Entity("NadekoBot.Services.Database.Models.ExcludedItem", b => + { + b.HasOne("NadekoBot.Services.Database.Models.XpSettings", null) + .WithMany("ExclusionList") + .HasForeignKey("XpSettingsId"); + }); + + modelBuilder.Entity("NadekoBot.Services.Database.Models.FeedSub", b => + { + b.HasOne("NadekoBot.Services.Database.Models.GuildConfig", "GuildConfig") + .WithMany("FeedSubs") + .HasForeignKey("GuildConfigId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("GuildConfig"); + }); + + modelBuilder.Entity("NadekoBot.Services.Database.Models.FilterChannelId", b => + { + b.HasOne("NadekoBot.Services.Database.Models.GuildConfig", null) + .WithMany("FilterInvitesChannelIds") + .HasForeignKey("GuildConfigId"); + }); + + modelBuilder.Entity("NadekoBot.Services.Database.Models.FilteredWord", b => + { + b.HasOne("NadekoBot.Services.Database.Models.GuildConfig", null) + .WithMany("FilteredWords") + .HasForeignKey("GuildConfigId"); + }); + + modelBuilder.Entity("NadekoBot.Services.Database.Models.FilterLinksChannelId", b => + { + b.HasOne("NadekoBot.Services.Database.Models.GuildConfig", null) + .WithMany("FilterLinksChannelIds") + .HasForeignKey("GuildConfigId"); + }); + + modelBuilder.Entity("NadekoBot.Services.Database.Models.FilterWordsChannelId", b => + { + b.HasOne("NadekoBot.Services.Database.Models.GuildConfig", null) + .WithMany("FilterWordsChannelIds") + .HasForeignKey("GuildConfigId"); + }); + + modelBuilder.Entity("NadekoBot.Services.Database.Models.GCChannelId", b => + { + b.HasOne("NadekoBot.Services.Database.Models.GuildConfig", "GuildConfig") + .WithMany("GenerateCurrencyChannelIds") + .HasForeignKey("GuildConfigId"); + + b.Navigation("GuildConfig"); + }); + + modelBuilder.Entity("NadekoBot.Services.Database.Models.GroupName", b => + { + b.HasOne("NadekoBot.Services.Database.Models.GuildConfig", "GuildConfig") + .WithMany("SelfAssignableRoleGroupNames") + .HasForeignKey("GuildConfigId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("GuildConfig"); + }); + + modelBuilder.Entity("NadekoBot.Services.Database.Models.IgnoredLogItem", b => + { + b.HasOne("NadekoBot.Services.Database.Models.LogSetting", "LogSetting") + .WithMany("LogIgnores") + .HasForeignKey("LogSettingId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("LogSetting"); + }); + + modelBuilder.Entity("NadekoBot.Services.Database.Models.IgnoredVoicePresenceChannel", b => + { + b.HasOne("NadekoBot.Services.Database.Models.LogSetting", "LogSetting") + .WithMany() + .HasForeignKey("LogSettingId"); + + b.Navigation("LogSetting"); + }); + + modelBuilder.Entity("NadekoBot.Services.Database.Models.MutedUserId", b => + { + b.HasOne("NadekoBot.Services.Database.Models.GuildConfig", null) + .WithMany("MutedUsers") + .HasForeignKey("GuildConfigId"); + }); + + modelBuilder.Entity("NadekoBot.Services.Database.Models.Permissionv2", b => + { + b.HasOne("NadekoBot.Services.Database.Models.GuildConfig", null) + .WithMany("Permissions") + .HasForeignKey("GuildConfigId"); + }); + + modelBuilder.Entity("NadekoBot.Services.Database.Models.PlaylistSong", b => + { + b.HasOne("NadekoBot.Services.Database.Models.MusicPlaylist", null) + .WithMany("Songs") + .HasForeignKey("MusicPlaylistId") + .OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity("NadekoBot.Services.Database.Models.PollAnswer", b => + { + b.HasOne("NadekoBot.Services.Database.Models.Poll", null) + .WithMany("Answers") + .HasForeignKey("PollId"); + }); + + modelBuilder.Entity("NadekoBot.Services.Database.Models.PollVote", b => + { + b.HasOne("NadekoBot.Services.Database.Models.Poll", null) + .WithMany("Votes") + .HasForeignKey("PollId"); + }); + + modelBuilder.Entity("NadekoBot.Services.Database.Models.ShopEntry", b => + { + b.HasOne("NadekoBot.Services.Database.Models.GuildConfig", null) + .WithMany("ShopEntries") + .HasForeignKey("GuildConfigId"); + }); + + modelBuilder.Entity("NadekoBot.Services.Database.Models.ShopEntryItem", b => + { + b.HasOne("NadekoBot.Services.Database.Models.ShopEntry", null) + .WithMany("Items") + .HasForeignKey("ShopEntryId"); + }); + + modelBuilder.Entity("NadekoBot.Services.Database.Models.SlowmodeIgnoredRole", b => + { + b.HasOne("NadekoBot.Services.Database.Models.GuildConfig", null) + .WithMany("SlowmodeIgnoredRoles") + .HasForeignKey("GuildConfigId"); + }); + + modelBuilder.Entity("NadekoBot.Services.Database.Models.SlowmodeIgnoredUser", b => + { + b.HasOne("NadekoBot.Services.Database.Models.GuildConfig", null) + .WithMany("SlowmodeIgnoredUsers") + .HasForeignKey("GuildConfigId"); + }); + + modelBuilder.Entity("NadekoBot.Services.Database.Models.StreamRoleBlacklistedUser", b => + { + b.HasOne("NadekoBot.Services.Database.Models.StreamRoleSettings", null) + .WithMany("Blacklist") + .HasForeignKey("StreamRoleSettingsId"); + }); + + modelBuilder.Entity("NadekoBot.Services.Database.Models.StreamRoleSettings", b => + { + b.HasOne("NadekoBot.Services.Database.Models.GuildConfig", "GuildConfig") + .WithOne("StreamRole") + .HasForeignKey("NadekoBot.Services.Database.Models.StreamRoleSettings", "GuildConfigId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("GuildConfig"); + }); + + modelBuilder.Entity("NadekoBot.Services.Database.Models.StreamRoleWhitelistedUser", b => + { + b.HasOne("NadekoBot.Services.Database.Models.StreamRoleSettings", null) + .WithMany("Whitelist") + .HasForeignKey("StreamRoleSettingsId"); + }); + + modelBuilder.Entity("NadekoBot.Services.Database.Models.UnbanTimer", b => + { + b.HasOne("NadekoBot.Services.Database.Models.GuildConfig", null) + .WithMany("UnbanTimer") + .HasForeignKey("GuildConfigId"); + }); + + modelBuilder.Entity("NadekoBot.Services.Database.Models.UnmuteTimer", b => + { + b.HasOne("NadekoBot.Services.Database.Models.GuildConfig", null) + .WithMany("UnmuteTimers") + .HasForeignKey("GuildConfigId"); + }); + + modelBuilder.Entity("NadekoBot.Services.Database.Models.UnroleTimer", b => + { + b.HasOne("NadekoBot.Services.Database.Models.GuildConfig", null) + .WithMany("UnroleTimer") + .HasForeignKey("GuildConfigId"); + }); + + modelBuilder.Entity("NadekoBot.Services.Database.Models.VcRoleInfo", b => + { + b.HasOne("NadekoBot.Services.Database.Models.GuildConfig", null) + .WithMany("VcRoleInfos") + .HasForeignKey("GuildConfigId"); + }); + + modelBuilder.Entity("NadekoBot.Services.Database.Models.WaifuInfo", b => + { + b.HasOne("NadekoBot.Db.Models.DiscordUser", "Affinity") + .WithMany() + .HasForeignKey("AffinityId"); + + b.HasOne("NadekoBot.Db.Models.DiscordUser", "Claimer") + .WithMany() + .HasForeignKey("ClaimerId"); + + b.HasOne("NadekoBot.Db.Models.DiscordUser", "Waifu") + .WithOne() + .HasForeignKey("NadekoBot.Services.Database.Models.WaifuInfo", "WaifuId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Affinity"); + + b.Navigation("Claimer"); + + b.Navigation("Waifu"); + }); + + modelBuilder.Entity("NadekoBot.Services.Database.Models.WaifuItem", b => + { + b.HasOne("NadekoBot.Services.Database.Models.WaifuInfo", "WaifuInfo") + .WithMany("Items") + .HasForeignKey("WaifuInfoId"); + + b.Navigation("WaifuInfo"); + }); + + modelBuilder.Entity("NadekoBot.Services.Database.Models.WaifuUpdate", b => + { + b.HasOne("NadekoBot.Db.Models.DiscordUser", "New") + .WithMany() + .HasForeignKey("NewId"); + + b.HasOne("NadekoBot.Db.Models.DiscordUser", "Old") + .WithMany() + .HasForeignKey("OldId"); + + b.HasOne("NadekoBot.Db.Models.DiscordUser", "User") + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("New"); + + b.Navigation("Old"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("NadekoBot.Services.Database.Models.WarningPunishment", b => + { + b.HasOne("NadekoBot.Services.Database.Models.GuildConfig", null) + .WithMany("WarnPunishments") + .HasForeignKey("GuildConfigId"); + }); + + modelBuilder.Entity("NadekoBot.Services.Database.Models.XpCurrencyReward", b => + { + b.HasOne("NadekoBot.Services.Database.Models.XpSettings", "XpSettings") + .WithMany("CurrencyRewards") + .HasForeignKey("XpSettingsId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("XpSettings"); + }); + + modelBuilder.Entity("NadekoBot.Services.Database.Models.XpRoleReward", b => + { + b.HasOne("NadekoBot.Services.Database.Models.XpSettings", "XpSettings") + .WithMany("RoleRewards") + .HasForeignKey("XpSettingsId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("XpSettings"); + }); + + modelBuilder.Entity("NadekoBot.Services.Database.Models.XpSettings", b => + { + b.HasOne("NadekoBot.Services.Database.Models.GuildConfig", "GuildConfig") + .WithOne("XpSettings") + .HasForeignKey("NadekoBot.Services.Database.Models.XpSettings", "GuildConfigId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("GuildConfig"); + }); + + modelBuilder.Entity("NadekoBot.Db.Models.ClubInfo", b => + { + b.Navigation("Applicants"); + + b.Navigation("Bans"); + + b.Navigation("Members"); + }); + + modelBuilder.Entity("NadekoBot.Services.Database.Models.AntiSpamSetting", b => + { + b.Navigation("IgnoredChannels"); + }); + + modelBuilder.Entity("NadekoBot.Services.Database.Models.AutoTranslateChannel", b => + { + b.Navigation("Users"); + }); + + modelBuilder.Entity("NadekoBot.Services.Database.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("SelfAssignableRoleGroupNames"); + + 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("WarnPunishments"); + + b.Navigation("XpSettings"); + }); + + modelBuilder.Entity("NadekoBot.Services.Database.Models.LogSetting", b => + { + b.Navigation("LogIgnores"); + }); + + modelBuilder.Entity("NadekoBot.Services.Database.Models.MusicPlaylist", b => + { + b.Navigation("Songs"); + }); + + modelBuilder.Entity("NadekoBot.Services.Database.Models.Poll", b => + { + b.Navigation("Answers"); + + b.Navigation("Votes"); + }); + + modelBuilder.Entity("NadekoBot.Services.Database.Models.ShopEntry", b => + { + b.Navigation("Items"); + }); + + modelBuilder.Entity("NadekoBot.Services.Database.Models.StreamRoleSettings", b => + { + b.Navigation("Blacklist"); + + b.Navigation("Whitelist"); + }); + + modelBuilder.Entity("NadekoBot.Services.Database.Models.WaifuInfo", b => + { + b.Navigation("Items"); + }); + + modelBuilder.Entity("NadekoBot.Services.Database.Models.XpSettings", b => + { + b.Navigation("CurrencyRewards"); + + b.Navigation("ExclusionList"); + + b.Navigation("RoleRewards"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/NadekoBot/Migrations/Sqlite/20220727005807_linkonly-channels.cs b/src/NadekoBot/Migrations/Sqlite/20220727005807_linkonly-channels.cs new file mode 100644 index 000000000..f77507411 --- /dev/null +++ b/src/NadekoBot/Migrations/Sqlite/20220727005807_linkonly-channels.cs @@ -0,0 +1,26 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace NadekoBot.Migrations +{ + public partial class linkonlychannels : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AddColumn( + name: "Type", + table: "ImageOnlyChannels", + type: "INTEGER", + nullable: false, + defaultValue: 0); + } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropColumn( + name: "Type", + table: "ImageOnlyChannels"); + } + } +} diff --git a/src/NadekoBot/Migrations/Sqlite/NadekoSqliteContextModelSnapshot.cs b/src/NadekoBot/Migrations/Sqlite/NadekoSqliteContextModelSnapshot.cs index 63bd56dac..ee9f1253b 100644 --- a/src/NadekoBot/Migrations/Sqlite/NadekoSqliteContextModelSnapshot.cs +++ b/src/NadekoBot/Migrations/Sqlite/NadekoSqliteContextModelSnapshot.cs @@ -1088,6 +1088,9 @@ namespace NadekoBot.Migrations b.Property("GuildId") .HasColumnType("INTEGER"); + b.Property("Type") + .HasColumnType("INTEGER"); + b.HasKey("Id"); b.HasIndex("ChannelId") diff --git a/src/NadekoBot/Modules/Administration/Administration.cs b/src/NadekoBot/Modules/Administration/Administration.cs index 6bdac960d..05c0ba49a 100644 --- a/src/NadekoBot/Modules/Administration/Administration.cs +++ b/src/NadekoBot/Modules/Administration/Administration.cs @@ -32,10 +32,10 @@ public partial class Administration : NadekoModule Inherit } - private readonly ImageOnlyChannelService _imageOnly; + private readonly SomethingOnlyChannelService _somethingOnly; - public Administration(ImageOnlyChannelService imageOnly) - => _imageOnly = imageOnly; + public Administration(SomethingOnlyChannelService somethingOnly) + => _somethingOnly = somethingOnly; [Cmd] [RequireContext(ContextType.Guild)] @@ -43,12 +43,25 @@ public partial class Administration : NadekoModule [BotPerm(GuildPerm.ManageGuild)] public async Task ImageOnlyChannel(StoopidTime time = null) { - var newValue = _imageOnly.ToggleImageOnlyChannel(ctx.Guild.Id, ctx.Channel.Id); + var newValue = await _somethingOnly.ToggleImageOnlyChannelAsync(ctx.Guild.Id, ctx.Channel.Id); if (newValue) await ReplyConfirmLocalizedAsync(strs.imageonly_enable); else await ReplyPendingLocalizedAsync(strs.imageonly_disable); } + + [Cmd] + [RequireContext(ContextType.Guild)] + [UserPerm(GuildPerm.Administrator)] + [BotPerm(GuildPerm.ManageGuild)] + public async Task LinkOnlyChannel(StoopidTime time = null) + { + var newValue = await _somethingOnly.ToggleLinkOnlyChannelAsync(ctx.Guild.Id, ctx.Channel.Id); + if (newValue) + await ReplyConfirmLocalizedAsync(strs.linkonly_enable); + else + await ReplyPendingLocalizedAsync(strs.linkonly_disable); + } [Cmd] [RequireContext(ContextType.Guild)] diff --git a/src/NadekoBot/Modules/Administration/ImageOnlyChannelService.cs b/src/NadekoBot/Modules/Administration/ImageOnlyChannelService.cs index b823007ff..5bc2c6f39 100644 --- a/src/NadekoBot/Modules/Administration/ImageOnlyChannelService.cs +++ b/src/NadekoBot/Modules/Administration/ImageOnlyChannelService.cs @@ -5,16 +5,18 @@ using NadekoBot.Common.ModuleBehaviors; using System.Net; using System.Threading.Channels; using Nadeko.Common; +using NadekoBot.Services.Database.Models; namespace NadekoBot.Modules.Administration.Services; -public sealed class ImageOnlyChannelService : IExecOnMessage +public sealed class SomethingOnlyChannelService : IExecOnMessage { public int Priority { get; } = 0; private readonly IMemoryCache _ticketCache; private readonly DiscordSocketClient _client; private readonly DbService _db; - private readonly ConcurrentDictionary> _enabledOn; + private readonly ConcurrentDictionary> _imageOnly; + private readonly ConcurrentDictionary> _linkOnly; private readonly Channel _deleteQueue = Channel.CreateBounded( new BoundedChannelOptions(100) @@ -25,32 +27,39 @@ public sealed class ImageOnlyChannelService : IExecOnMessage }); - public ImageOnlyChannelService(IMemoryCache ticketCache, DiscordSocketClient client, DbService db) + public SomethingOnlyChannelService(IMemoryCache ticketCache, DiscordSocketClient client, DbService db) { _ticketCache = ticketCache; _client = client; _db = db; using var uow = _db.GetDbContext(); - _enabledOn = uow.ImageOnlyChannels.ToList() + _imageOnly = uow.ImageOnlyChannels + .Where(x => x.Type == OnlyChannelType.Image) + .ToList() .GroupBy(x => x.GuildId) .ToDictionary(x => x.Key, x => new ConcurrentHashSet(x.Select(y => y.ChannelId))) .ToConcurrent(); + _linkOnly = uow.ImageOnlyChannels + .Where(x => x.Type == OnlyChannelType.Link) + .ToList() + .GroupBy(x => x.GuildId) + .ToDictionary(x => x.Key, x => new ConcurrentHashSet(x.Select(y => y.ChannelId))) + .ToConcurrent(); + _ = Task.Run(DeleteQueueRunner); _client.ChannelDestroyed += ClientOnChannelDestroyed; } - private Task ClientOnChannelDestroyed(SocketChannel ch) + private async Task ClientOnChannelDestroyed(SocketChannel ch) { if (ch is not IGuildChannel gch) - return Task.CompletedTask; + return; - if (_enabledOn.TryGetValue(gch.GuildId, out var channels) && channels.TryRemove(ch.Id)) - ToggleImageOnlyChannel(gch.GuildId, ch.Id, true); - - return Task.CompletedTask; + if (_imageOnly.TryGetValue(gch.GuildId, out var channels) && channels.TryRemove(ch.Id)) + await ToggleImageOnlyChannelAsync(gch.GuildId, ch.Id, true); } private async Task DeleteQueueRunner() @@ -66,31 +75,68 @@ public sealed class ImageOnlyChannelService : IExecOnMessage catch (HttpException ex) when (ex.HttpCode == HttpStatusCode.Forbidden) { // disable if bot can't delete messages in the channel - ToggleImageOnlyChannel(((ITextChannel)toDelete.Channel).GuildId, toDelete.Channel.Id, true); + await ToggleImageOnlyChannelAsync(((ITextChannel)toDelete.Channel).GuildId, toDelete.Channel.Id, true); } } } - public bool ToggleImageOnlyChannel(ulong guildId, ulong channelId, bool forceDisable = false) + public async Task ToggleImageOnlyChannelAsync(ulong guildId, ulong channelId, bool forceDisable = false) { var newState = false; - using var uow = _db.GetDbContext(); - if (forceDisable || (_enabledOn.TryGetValue(guildId, out var channels) && channels.TryRemove(channelId))) - uow.ImageOnlyChannels.Delete(x => x.ChannelId == channelId); + await using var uow = _db.GetDbContext(); + if (forceDisable || (_imageOnly.TryGetValue(guildId, out var channels) && channels.TryRemove(channelId))) + { + await uow.ImageOnlyChannels.DeleteAsync(x => x.ChannelId == channelId && x.Type == OnlyChannelType.Link); + } else { + await uow.ImageOnlyChannels.DeleteAsync(x => x.ChannelId == channelId); uow.ImageOnlyChannels.Add(new() { GuildId = guildId, - ChannelId = channelId + ChannelId = channelId, + Type = OnlyChannelType.Image }); - channels = _enabledOn.GetOrAdd(guildId, new ConcurrentHashSet()); + if (_linkOnly.TryGetValue(guildId, out var chs)) + chs.TryRemove(channelId); + + channels = _imageOnly.GetOrAdd(guildId, new ConcurrentHashSet()); channels.Add(channelId); newState = true; } - uow.SaveChanges(); + await uow.SaveChangesAsync(); + return newState; + } + + public async Task ToggleLinkOnlyChannelAsync(ulong guildId, ulong channelId, bool forceDisable = false) + { + var newState = false; + await using var uow = _db.GetDbContext(); + if (forceDisable || (_linkOnly.TryGetValue(guildId, out var channels) && channels.TryRemove(channelId))) + { + await uow.ImageOnlyChannels.DeleteAsync(x => x.ChannelId == channelId && x.Type == OnlyChannelType.Link); + } + else + { + await uow.ImageOnlyChannels.DeleteAsync(x => x.ChannelId == channelId); + uow.ImageOnlyChannels.Add(new() + { + GuildId = guildId, + ChannelId = channelId, + Type = OnlyChannelType.Link + }); + + if (_imageOnly.TryGetValue(guildId, out var chs)) + chs.TryRemove(channelId); + + channels = _linkOnly.GetOrAdd(guildId, new ConcurrentHashSet()); + channels.Add(channelId); + newState = true; + } + + await uow.SaveChangesAsync(); return newState; } @@ -99,12 +145,28 @@ public sealed class ImageOnlyChannelService : IExecOnMessage if (msg.Channel is not ITextChannel tch) return false; - if (msg.Attachments.Any(x => x is { Height: > 0, Width: > 0 })) - return false; + if (_imageOnly.TryGetValue(tch.GuildId, out var chs) && chs.Contains(msg.Channel.Id)) + return await HandleOnlyChannel(tch, msg, OnlyChannelType.Image); + + if (_linkOnly.TryGetValue(tch.GuildId, out chs) && chs.Contains(msg.Channel.Id)) + return await HandleOnlyChannel(tch, msg, OnlyChannelType.Link); - if (!_enabledOn.TryGetValue(tch.GuildId, out var chs) || !chs.Contains(msg.Channel.Id)) - return false; + return false; + } + private async Task HandleOnlyChannel(ITextChannel tch, IUserMessage msg, OnlyChannelType type) + { + if (type == OnlyChannelType.Image) + { + if (msg.Attachments.Any(x => x is { Height: > 0, Width: > 0 })) + return false; + } + else + { + if (msg.Content.TryGetUrlPath(out _)) + return false; + } + var user = await tch.Guild.GetUserAsync(msg.Author.Id) ?? await _client.Rest.GetGuildUserAsync(tch.GuildId, msg.Author.Id); @@ -114,7 +176,7 @@ public sealed class ImageOnlyChannelService : IExecOnMessage // ignore owner and admin if (user.Id == tch.Guild.OwnerId || user.GuildPermissions.Administrator) { - Log.Information("Image-Only: Ignoring owner od admin ({ChannelId})", msg.Channel.Id); + Log.Information("{Type}-Only Channel: Ignoring owner od admin ({ChannelId})", type, msg.Channel.Id); return false; } @@ -125,7 +187,11 @@ public sealed class ImageOnlyChannelService : IExecOnMessage if (!botUser.GetPermissions(tch).ManageChannel) { - ToggleImageOnlyChannel(tch.GuildId, tch.Id, true); + if(type == OnlyChannelType.Image) + await ToggleImageOnlyChannelAsync(tch.GuildId, tch.Id, true); + else + await ToggleImageOnlyChannelAsync(tch.GuildId, tch.Id, true); + return false; } @@ -133,7 +199,8 @@ public sealed class ImageOnlyChannelService : IExecOnMessage if (shouldLock) { await tch.AddPermissionOverwriteAsync(msg.Author, new(sendMessages: PermValue.Deny)); - Log.Warning("Image-Only: User {User} [{UserId}] has been banned from typing in the channel [{ChannelId}]", + Log.Warning("{Type}-Only Channel: User {User} [{UserId}] has been banned from typing in the channel [{ChannelId}]", + type, msg.Author, msg.Author.Id, msg.Channel.Id); diff --git a/src/NadekoBot/Modules/Games/Trivia/QuestionPool/PokemonQuestionPool.cs b/src/NadekoBot/Modules/Games/Trivia/QuestionPool/PokemonQuestionPool.cs index f1cbb8e55..80d08ec80 100644 --- a/src/NadekoBot/Modules/Games/Trivia/QuestionPool/PokemonQuestionPool.cs +++ b/src/NadekoBot/Modules/Games/Trivia/QuestionPool/PokemonQuestionPool.cs @@ -2,7 +2,7 @@ namespace NadekoBot.Modules.Games.Common.Trivia; public sealed class PokemonQuestionPool : IQuestionPool { - public int QuestionsCount => 721; // xd + public int QuestionsCount => 905; // xd private readonly NadekoRandom _rng; private readonly ILocalDataCache _cache; diff --git a/src/NadekoBot/Modules/Xp/XpService.cs b/src/NadekoBot/Modules/Xp/XpService.cs index becc68810..406ce40cc 100644 --- a/src/NadekoBot/Modules/Xp/XpService.cs +++ b/src/NadekoBot/Modules/Xp/XpService.cs @@ -1,3 +1,4 @@ +#nullable disable warnings using LinqToDB; using Microsoft.EntityFrameworkCore; using NadekoBot.Common.ModuleBehaviors; @@ -391,9 +392,9 @@ public class XpService : INService, IReadyExecutor, IExecNoCommand template = JsonConvert.DeserializeObject( File.ReadAllText(XP_TEMPLATE_PATH), - settings); + settings)!; - if (template!.Version < 1) + if (template.Version < 1) { Log.Warning("Loaded default xp_template.json values as the old one was version 0. " + "Old one was renamed to xp_template.json.old"); diff --git a/src/NadekoBot/data/aliases.yml b/src/NadekoBot/data/aliases.yml index 3f6354b74..3df0ef602 100644 --- a/src/NadekoBot/data/aliases.yml +++ b/src/NadekoBot/data/aliases.yml @@ -1219,6 +1219,10 @@ imageonlychannel: - imageonlychannel - imageonly - imagesonly +linkonlychannel: + - linkonlychannel + - linkonly + - linkssonly coordreload: - coordreload quotesexport: diff --git a/src/NadekoBot/data/pokemon/name-id_map.json b/src/NadekoBot/data/pokemon/name-id_map.json index ed6411fab..2e674740d 100644 --- a/src/NadekoBot/data/pokemon/name-id_map.json +++ b/src/NadekoBot/data/pokemon/name-id_map.json @@ -1 +1 @@ -[{"Id":1,"Name":"bulbasaur"},{"Id":2,"Name":"ivysaur"},{"Id":3,"Name":"venusaur"},{"Id":4,"Name":"charmander"},{"Id":5,"Name":"charmeleon"},{"Id":6,"Name":"charizard"},{"Id":7,"Name":"squirtle"},{"Id":8,"Name":"wartortle"},{"Id":9,"Name":"blastoise"},{"Id":10,"Name":"caterpie"},{"Id":11,"Name":"metapod"},{"Id":12,"Name":"butterfree"},{"Id":13,"Name":"weedle"},{"Id":14,"Name":"kakuna"},{"Id":15,"Name":"beedrill"},{"Id":16,"Name":"pidgey"},{"Id":17,"Name":"pidgeotto"},{"Id":18,"Name":"pidgeot"},{"Id":19,"Name":"rattata"},{"Id":20,"Name":"raticate"},{"Id":21,"Name":"spearow"},{"Id":22,"Name":"fearow"},{"Id":23,"Name":"ekans"},{"Id":24,"Name":"arbok"},{"Id":25,"Name":"pikachu"},{"Id":26,"Name":"raichu"},{"Id":27,"Name":"sandshrew"},{"Id":28,"Name":"sandslash"},{"Id":29,"Name":"nidoran"},{"Id":30,"Name":"nidorina"},{"Id":31,"Name":"nidoqueen"},{"Id":32,"Name":"nidoran"},{"Id":33,"Name":"nidorino"},{"Id":34,"Name":"nidoking"},{"Id":35,"Name":"clefairy"},{"Id":36,"Name":"clefable"},{"Id":37,"Name":"vulpix"},{"Id":38,"Name":"ninetales"},{"Id":39,"Name":"jigglypuff"},{"Id":40,"Name":"wigglytuff"},{"Id":41,"Name":"zubat"},{"Id":42,"Name":"golbat"},{"Id":43,"Name":"oddish"},{"Id":44,"Name":"gloom"},{"Id":45,"Name":"vileplume"},{"Id":46,"Name":"paras"},{"Id":47,"Name":"parasect"},{"Id":48,"Name":"venonat"},{"Id":49,"Name":"venomoth"},{"Id":50,"Name":"diglett"},{"Id":51,"Name":"dugtrio"},{"Id":52,"Name":"meowth"},{"Id":53,"Name":"persian"},{"Id":54,"Name":"psyduck"},{"Id":55,"Name":"golduck"},{"Id":56,"Name":"mankey"},{"Id":57,"Name":"primeape"},{"Id":58,"Name":"growlithe"},{"Id":59,"Name":"arcanine"},{"Id":60,"Name":"poliwag"},{"Id":61,"Name":"poliwhirl"},{"Id":62,"Name":"poliwrath"},{"Id":63,"Name":"abra"},{"Id":64,"Name":"kadabra"},{"Id":65,"Name":"alakazam"},{"Id":66,"Name":"machop"},{"Id":67,"Name":"machoke"},{"Id":68,"Name":"machamp"},{"Id":69,"Name":"bellsprout"},{"Id":70,"Name":"weepinbell"},{"Id":71,"Name":"victreebel"},{"Id":72,"Name":"tentacool"},{"Id":73,"Name":"tentacruel"},{"Id":74,"Name":"geodude"},{"Id":75,"Name":"graveler"},{"Id":76,"Name":"golem"},{"Id":77,"Name":"ponyta"},{"Id":78,"Name":"rapidash"},{"Id":79,"Name":"slowpoke"},{"Id":80,"Name":"slowbro"},{"Id":81,"Name":"magnemite"},{"Id":82,"Name":"magneton"},{"Id":83,"Name":"farfetchd"},{"Id":84,"Name":"doduo"},{"Id":85,"Name":"dodrio"},{"Id":86,"Name":"seel"},{"Id":87,"Name":"dewgong"},{"Id":88,"Name":"grimer"},{"Id":89,"Name":"muk"},{"Id":90,"Name":"shellder"},{"Id":91,"Name":"cloyster"},{"Id":92,"Name":"gastly"},{"Id":93,"Name":"haunter"},{"Id":94,"Name":"gengar"},{"Id":95,"Name":"onix"},{"Id":96,"Name":"drowzee"},{"Id":97,"Name":"hypno"},{"Id":98,"Name":"krabby"},{"Id":99,"Name":"kingler"},{"Id":100,"Name":"voltorb"},{"Id":101,"Name":"electrode"},{"Id":102,"Name":"exeggcute"},{"Id":103,"Name":"exeggutor"},{"Id":104,"Name":"cubone"},{"Id":105,"Name":"marowak"},{"Id":106,"Name":"hitmonlee"},{"Id":107,"Name":"hitmonchan"},{"Id":108,"Name":"lickitung"},{"Id":109,"Name":"koffing"},{"Id":110,"Name":"weezing"},{"Id":111,"Name":"rhyhorn"},{"Id":112,"Name":"rhydon"},{"Id":113,"Name":"chansey"},{"Id":114,"Name":"tangela"},{"Id":115,"Name":"kangaskhan"},{"Id":116,"Name":"horsea"},{"Id":117,"Name":"seadra"},{"Id":118,"Name":"goldeen"},{"Id":119,"Name":"seaking"},{"Id":120,"Name":"staryu"},{"Id":121,"Name":"starmie"},{"Id":122,"Name":"mr mime"},{"Id":123,"Name":"scyther"},{"Id":124,"Name":"jynx"},{"Id":125,"Name":"electabuzz"},{"Id":126,"Name":"magmar"},{"Id":127,"Name":"pinsir"},{"Id":128,"Name":"tauros"},{"Id":129,"Name":"magikarp"},{"Id":130,"Name":"gyarados"},{"Id":131,"Name":"lapras"},{"Id":132,"Name":"ditto"},{"Id":133,"Name":"eevee"},{"Id":134,"Name":"vaporeon"},{"Id":135,"Name":"jolteon"},{"Id":136,"Name":"flareon"},{"Id":137,"Name":"porygon"},{"Id":138,"Name":"omanyte"},{"Id":139,"Name":"omastar"},{"Id":140,"Name":"kabuto"},{"Id":141,"Name":"kabutops"},{"Id":142,"Name":"aerodactyl"},{"Id":143,"Name":"snorlax"},{"Id":144,"Name":"articuno"},{"Id":145,"Name":"zapdos"},{"Id":146,"Name":"moltres"},{"Id":147,"Name":"dratini"},{"Id":148,"Name":"dragonair"},{"Id":149,"Name":"dragonite"},{"Id":150,"Name":"mewtwo"},{"Id":151,"Name":"mew"},{"Id":152,"Name":"chikorita"},{"Id":153,"Name":"bayleef"},{"Id":154,"Name":"meganium"},{"Id":155,"Name":"cyndaquil"},{"Id":156,"Name":"quilava"},{"Id":157,"Name":"typhlosion"},{"Id":158,"Name":"totodile"},{"Id":159,"Name":"croconaw"},{"Id":160,"Name":"feraligatr"},{"Id":161,"Name":"sentret"},{"Id":162,"Name":"furret"},{"Id":163,"Name":"hoothoot"},{"Id":164,"Name":"noctowl"},{"Id":165,"Name":"ledyba"},{"Id":166,"Name":"ledian"},{"Id":167,"Name":"spinarak"},{"Id":168,"Name":"ariados"},{"Id":169,"Name":"crobat"},{"Id":170,"Name":"chinchou"},{"Id":171,"Name":"lanturn"},{"Id":172,"Name":"pichu"},{"Id":173,"Name":"cleffa"},{"Id":174,"Name":"igglybuff"},{"Id":175,"Name":"togepi"},{"Id":176,"Name":"togetic"},{"Id":177,"Name":"natu"},{"Id":178,"Name":"xatu"},{"Id":179,"Name":"mareep"},{"Id":180,"Name":"flaaffy"},{"Id":181,"Name":"ampharos"},{"Id":182,"Name":"bellossom"},{"Id":183,"Name":"marill"},{"Id":184,"Name":"azumarill"},{"Id":185,"Name":"sudowoodo"},{"Id":186,"Name":"politoed"},{"Id":187,"Name":"hoppip"},{"Id":188,"Name":"skiploom"},{"Id":189,"Name":"jumpluff"},{"Id":190,"Name":"aipom"},{"Id":191,"Name":"sunkern"},{"Id":192,"Name":"sunflora"},{"Id":193,"Name":"yanma"},{"Id":194,"Name":"wooper"},{"Id":195,"Name":"quagsire"},{"Id":196,"Name":"espeon"},{"Id":197,"Name":"umbreon"},{"Id":198,"Name":"murkrow"},{"Id":199,"Name":"slowking"},{"Id":200,"Name":"misdreavus"},{"Id":201,"Name":"unown"},{"Id":202,"Name":"wobbuffet"},{"Id":203,"Name":"girafarig"},{"Id":204,"Name":"pineco"},{"Id":205,"Name":"forretress"},{"Id":206,"Name":"dunsparce"},{"Id":207,"Name":"gligar"},{"Id":208,"Name":"steelix"},{"Id":209,"Name":"snubbull"},{"Id":210,"Name":"granbull"},{"Id":211,"Name":"qwilfish"},{"Id":212,"Name":"scizor"},{"Id":213,"Name":"shuckle"},{"Id":214,"Name":"heracross"},{"Id":215,"Name":"sneasel"},{"Id":216,"Name":"teddiursa"},{"Id":217,"Name":"ursaring"},{"Id":218,"Name":"slugma"},{"Id":219,"Name":"magcargo"},{"Id":220,"Name":"swinub"},{"Id":221,"Name":"piloswine"},{"Id":222,"Name":"corsola"},{"Id":223,"Name":"remoraid"},{"Id":224,"Name":"octillery"},{"Id":225,"Name":"delibird"},{"Id":226,"Name":"mantine"},{"Id":227,"Name":"skarmory"},{"Id":228,"Name":"houndour"},{"Id":229,"Name":"houndoom"},{"Id":230,"Name":"kingdra"},{"Id":231,"Name":"phanpy"},{"Id":232,"Name":"donphan"},{"Id":233,"Name":"porygon2"},{"Id":234,"Name":"stantler"},{"Id":235,"Name":"smeargle"},{"Id":236,"Name":"tyrogue"},{"Id":237,"Name":"hitmontop"},{"Id":238,"Name":"smoochum"},{"Id":239,"Name":"elekid"},{"Id":240,"Name":"magby"},{"Id":241,"Name":"miltank"},{"Id":242,"Name":"blissey"},{"Id":243,"Name":"raikou"},{"Id":244,"Name":"entei"},{"Id":245,"Name":"suicune"},{"Id":246,"Name":"larvitar"},{"Id":247,"Name":"pupitar"},{"Id":248,"Name":"tyranitar"},{"Id":249,"Name":"lugia"},{"Id":250,"Name":"ho-oh"},{"Id":251,"Name":"celebi"},{"Id":252,"Name":"treecko"},{"Id":253,"Name":"grovyle"},{"Id":254,"Name":"sceptile"},{"Id":255,"Name":"torchic"},{"Id":256,"Name":"combusken"},{"Id":257,"Name":"blaziken"},{"Id":258,"Name":"mudkip"},{"Id":259,"Name":"marshtomp"},{"Id":260,"Name":"swampert"},{"Id":261,"Name":"poochyena"},{"Id":262,"Name":"mightyena"},{"Id":263,"Name":"zigzagoon"},{"Id":264,"Name":"linoone"},{"Id":265,"Name":"wurmple"},{"Id":266,"Name":"silcoon"},{"Id":267,"Name":"beautifly"},{"Id":268,"Name":"cascoon"},{"Id":269,"Name":"dustox"},{"Id":270,"Name":"lotad"},{"Id":271,"Name":"lombre"},{"Id":272,"Name":"ludicolo"},{"Id":273,"Name":"seedot"},{"Id":274,"Name":"nuzleaf"},{"Id":275,"Name":"shiftry"},{"Id":276,"Name":"taillow"},{"Id":277,"Name":"swellow"},{"Id":278,"Name":"wingull"},{"Id":279,"Name":"pelipper"},{"Id":280,"Name":"ralts"},{"Id":281,"Name":"kirlia"},{"Id":282,"Name":"gardevoir"},{"Id":283,"Name":"surskit"},{"Id":284,"Name":"masquerain"},{"Id":285,"Name":"shroomish"},{"Id":286,"Name":"breloom"},{"Id":287,"Name":"slakoth"},{"Id":288,"Name":"vigoroth"},{"Id":289,"Name":"slaking"},{"Id":290,"Name":"nincada"},{"Id":291,"Name":"ninjask"},{"Id":292,"Name":"shedinja"},{"Id":293,"Name":"whismur"},{"Id":294,"Name":"loudred"},{"Id":295,"Name":"exploud"},{"Id":296,"Name":"makuhita"},{"Id":297,"Name":"hariyama"},{"Id":298,"Name":"azurill"},{"Id":299,"Name":"nosepass"},{"Id":300,"Name":"skitty"},{"Id":301,"Name":"delcatty"},{"Id":302,"Name":"sableye"},{"Id":303,"Name":"mawile"},{"Id":304,"Name":"aron"},{"Id":305,"Name":"lairon"},{"Id":306,"Name":"aggron"},{"Id":307,"Name":"meditite"},{"Id":308,"Name":"medicham"},{"Id":309,"Name":"electrike"},{"Id":310,"Name":"manectric"},{"Id":311,"Name":"plusle"},{"Id":312,"Name":"minun"},{"Id":313,"Name":"volbeat"},{"Id":314,"Name":"illumise"},{"Id":315,"Name":"roselia"},{"Id":316,"Name":"gulpin"},{"Id":317,"Name":"swalot"},{"Id":318,"Name":"carvanha"},{"Id":319,"Name":"sharpedo"},{"Id":320,"Name":"wailmer"},{"Id":321,"Name":"wailord"},{"Id":322,"Name":"numel"},{"Id":323,"Name":"camerupt"},{"Id":324,"Name":"torkoal"},{"Id":325,"Name":"spoink"},{"Id":326,"Name":"grumpig"},{"Id":327,"Name":"spinda"},{"Id":328,"Name":"trapinch"},{"Id":329,"Name":"vibrava"},{"Id":330,"Name":"flygon"},{"Id":331,"Name":"cacnea"},{"Id":332,"Name":"cacturne"},{"Id":333,"Name":"swablu"},{"Id":334,"Name":"altaria"},{"Id":335,"Name":"zangoose"},{"Id":336,"Name":"seviper"},{"Id":337,"Name":"lunatone"},{"Id":338,"Name":"solrock"},{"Id":339,"Name":"barboach"},{"Id":340,"Name":"whiscash"},{"Id":341,"Name":"corphish"},{"Id":342,"Name":"crawdaunt"},{"Id":343,"Name":"baltoy"},{"Id":344,"Name":"claydol"},{"Id":345,"Name":"lileep"},{"Id":346,"Name":"cradily"},{"Id":347,"Name":"anorith"},{"Id":348,"Name":"armaldo"},{"Id":349,"Name":"feebas"},{"Id":350,"Name":"milotic"},{"Id":351,"Name":"castform"},{"Id":352,"Name":"kecleon"},{"Id":353,"Name":"shuppet"},{"Id":354,"Name":"banette"},{"Id":355,"Name":"duskull"},{"Id":356,"Name":"dusclops"},{"Id":357,"Name":"tropius"},{"Id":358,"Name":"chimecho"},{"Id":359,"Name":"absol"},{"Id":360,"Name":"wynaut"},{"Id":361,"Name":"snorunt"},{"Id":362,"Name":"glalie"},{"Id":363,"Name":"spheal"},{"Id":364,"Name":"sealeo"},{"Id":365,"Name":"walrein"},{"Id":366,"Name":"clamperl"},{"Id":367,"Name":"huntail"},{"Id":368,"Name":"gorebyss"},{"Id":369,"Name":"relicanth"},{"Id":370,"Name":"luvdisc"},{"Id":371,"Name":"bagon"},{"Id":372,"Name":"shelgon"},{"Id":373,"Name":"salamence"},{"Id":374,"Name":"beldum"},{"Id":375,"Name":"metang"},{"Id":376,"Name":"metagross"},{"Id":377,"Name":"regirock"},{"Id":378,"Name":"regice"},{"Id":379,"Name":"registeel"},{"Id":380,"Name":"latias"},{"Id":381,"Name":"latios"},{"Id":382,"Name":"kyogre"},{"Id":383,"Name":"groudon"},{"Id":384,"Name":"rayquaza"},{"Id":385,"Name":"jirachi"},{"Id":386,"Name":"deoxys"},{"Id":387,"Name":"turtwig"},{"Id":388,"Name":"grotle"},{"Id":389,"Name":"torterra"},{"Id":390,"Name":"chimchar"},{"Id":391,"Name":"monferno"},{"Id":392,"Name":"infernape"},{"Id":393,"Name":"piplup"},{"Id":394,"Name":"prinplup"},{"Id":395,"Name":"empoleon"},{"Id":396,"Name":"starly"},{"Id":397,"Name":"staravia"},{"Id":398,"Name":"staraptor"},{"Id":399,"Name":"bidoof"},{"Id":400,"Name":"bibarel"},{"Id":401,"Name":"kricketot"},{"Id":402,"Name":"kricketune"},{"Id":403,"Name":"shinx"},{"Id":404,"Name":"luxio"},{"Id":405,"Name":"luxray"},{"Id":406,"Name":"budew"},{"Id":407,"Name":"roserade"},{"Id":408,"Name":"cranidos"},{"Id":409,"Name":"rampardos"},{"Id":410,"Name":"shieldon"},{"Id":411,"Name":"bastiodon"},{"Id":412,"Name":"burmy"},{"Id":413,"Name":"wormadam"},{"Id":414,"Name":"mothim"},{"Id":415,"Name":"combee"},{"Id":416,"Name":"vespiquen"},{"Id":417,"Name":"pachirisu"},{"Id":418,"Name":"buizel"},{"Id":419,"Name":"floatzel"},{"Id":420,"Name":"cherubi"},{"Id":421,"Name":"cherrim"},{"Id":422,"Name":"shellos"},{"Id":423,"Name":"gastrodon"},{"Id":424,"Name":"ambipom"},{"Id":425,"Name":"drifloon"},{"Id":426,"Name":"drifblim"},{"Id":427,"Name":"buneary"},{"Id":428,"Name":"lopunny"},{"Id":429,"Name":"mismagius"},{"Id":430,"Name":"honchkrow"},{"Id":431,"Name":"glameow"},{"Id":432,"Name":"purugly"},{"Id":433,"Name":"chingling"},{"Id":434,"Name":"stunky"},{"Id":435,"Name":"skuntank"},{"Id":436,"Name":"bronzor"},{"Id":437,"Name":"bronzong"},{"Id":438,"Name":"bonsly"},{"Id":439,"Name":"mime jr"},{"Id":440,"Name":"happiny"},{"Id":441,"Name":"chatot"},{"Id":442,"Name":"spiritomb"},{"Id":443,"Name":"gible"},{"Id":444,"Name":"gabite"},{"Id":445,"Name":"garchomp"},{"Id":446,"Name":"munchlax"},{"Id":447,"Name":"riolu"},{"Id":448,"Name":"lucario"},{"Id":449,"Name":"hippopotas"},{"Id":450,"Name":"hippowdon"},{"Id":451,"Name":"skorupi"},{"Id":452,"Name":"drapion"},{"Id":453,"Name":"croagunk"},{"Id":454,"Name":"toxicroak"},{"Id":455,"Name":"carnivine"},{"Id":456,"Name":"finneon"},{"Id":457,"Name":"lumineon"},{"Id":458,"Name":"mantyke"},{"Id":459,"Name":"snover"},{"Id":460,"Name":"abomasnow"},{"Id":461,"Name":"weavile"},{"Id":462,"Name":"magnezone"},{"Id":463,"Name":"lickilicky"},{"Id":464,"Name":"rhyperior"},{"Id":465,"Name":"tangrowth"},{"Id":466,"Name":"electivire"},{"Id":467,"Name":"magmortar"},{"Id":468,"Name":"togekiss"},{"Id":469,"Name":"yanmega"},{"Id":470,"Name":"leafeon"},{"Id":471,"Name":"glaceon"},{"Id":472,"Name":"gliscor"},{"Id":473,"Name":"mamoswine"},{"Id":474,"Name":"porygon z"},{"Id":475,"Name":"gallade"},{"Id":476,"Name":"probopass"},{"Id":477,"Name":"dusknoir"},{"Id":478,"Name":"froslass"},{"Id":479,"Name":"rotom"},{"Id":480,"Name":"uxie"},{"Id":481,"Name":"mesprit"},{"Id":482,"Name":"azelf"},{"Id":483,"Name":"dialga"},{"Id":484,"Name":"palkia"},{"Id":485,"Name":"heatran"},{"Id":486,"Name":"regigigas"},{"Id":487,"Name":"giratina"},{"Id":488,"Name":"cresselia"},{"Id":489,"Name":"phione"},{"Id":490,"Name":"manaphy"},{"Id":491,"Name":"darkrai"},{"Id":492,"Name":"shaymin"},{"Id":493,"Name":"arceus"},{"Id":494,"Name":"victini"},{"Id":495,"Name":"snivy"},{"Id":496,"Name":"servine"},{"Id":497,"Name":"serperior"},{"Id":498,"Name":"tepig"},{"Id":499,"Name":"pignite"},{"Id":500,"Name":"emboar"},{"Id":501,"Name":"oshawott"},{"Id":502,"Name":"dewott"},{"Id":503,"Name":"samurott"},{"Id":504,"Name":"patrat"},{"Id":505,"Name":"watchog"},{"Id":506,"Name":"lillipup"},{"Id":507,"Name":"herdier"},{"Id":508,"Name":"stoutland"},{"Id":509,"Name":"purrloin"},{"Id":510,"Name":"liepard"},{"Id":511,"Name":"pansage"},{"Id":512,"Name":"simisage"},{"Id":513,"Name":"pansear"},{"Id":514,"Name":"simisear"},{"Id":515,"Name":"panpour"},{"Id":516,"Name":"simipour"},{"Id":517,"Name":"munna"},{"Id":518,"Name":"musharna"},{"Id":519,"Name":"pidove"},{"Id":520,"Name":"tranquill"},{"Id":521,"Name":"unfezant"},{"Id":522,"Name":"blitzle"},{"Id":523,"Name":"zebstrika"},{"Id":524,"Name":"roggenrola"},{"Id":525,"Name":"boldore"},{"Id":526,"Name":"gigalith"},{"Id":527,"Name":"woobat"},{"Id":528,"Name":"swoobat"},{"Id":529,"Name":"drilbur"},{"Id":530,"Name":"excadrill"},{"Id":531,"Name":"audino"},{"Id":532,"Name":"timburr"},{"Id":533,"Name":"gurdurr"},{"Id":534,"Name":"conkeldurr"},{"Id":535,"Name":"tympole"},{"Id":536,"Name":"palpitoad"},{"Id":537,"Name":"seismitoad"},{"Id":538,"Name":"throh"},{"Id":539,"Name":"sawk"},{"Id":540,"Name":"sewaddle"},{"Id":541,"Name":"swadloon"},{"Id":542,"Name":"leavanny"},{"Id":543,"Name":"venipede"},{"Id":544,"Name":"whirlipede"},{"Id":545,"Name":"scolipede"},{"Id":546,"Name":"cottonee"},{"Id":547,"Name":"whimsicott"},{"Id":548,"Name":"petilil"},{"Id":549,"Name":"lilligant"},{"Id":550,"Name":"basculin"},{"Id":551,"Name":"sandile"},{"Id":552,"Name":"krokorok"},{"Id":553,"Name":"krookodile"},{"Id":554,"Name":"darumaka"},{"Id":555,"Name":"darmanitan"},{"Id":556,"Name":"maractus"},{"Id":557,"Name":"dwebble"},{"Id":558,"Name":"crustle"},{"Id":559,"Name":"scraggy"},{"Id":560,"Name":"scrafty"},{"Id":561,"Name":"sigilyph"},{"Id":562,"Name":"yamask"},{"Id":563,"Name":"cofagrigus"},{"Id":564,"Name":"tirtouga"},{"Id":565,"Name":"carracosta"},{"Id":566,"Name":"archen"},{"Id":567,"Name":"archeops"},{"Id":568,"Name":"trubbish"},{"Id":569,"Name":"garbodor"},{"Id":570,"Name":"zorua"},{"Id":571,"Name":"zoroark"},{"Id":572,"Name":"minccino"},{"Id":573,"Name":"cinccino"},{"Id":574,"Name":"gothita"},{"Id":575,"Name":"gothorita"},{"Id":576,"Name":"gothitelle"},{"Id":577,"Name":"solosis"},{"Id":578,"Name":"duosion"},{"Id":579,"Name":"reuniclus"},{"Id":580,"Name":"ducklett"},{"Id":581,"Name":"swanna"},{"Id":582,"Name":"vanillite"},{"Id":583,"Name":"vanillish"},{"Id":584,"Name":"vanilluxe"},{"Id":585,"Name":"deerling"},{"Id":586,"Name":"sawsbuck"},{"Id":587,"Name":"emolga"},{"Id":588,"Name":"karrablast"},{"Id":589,"Name":"escavalier"},{"Id":590,"Name":"foongus"},{"Id":591,"Name":"amoonguss"},{"Id":592,"Name":"frillish"},{"Id":593,"Name":"jellicent"},{"Id":594,"Name":"alomomola"},{"Id":595,"Name":"joltik"},{"Id":596,"Name":"galvantula"},{"Id":597,"Name":"ferroseed"},{"Id":598,"Name":"ferrothorn"},{"Id":599,"Name":"klink"},{"Id":600,"Name":"klang"},{"Id":601,"Name":"klinklang"},{"Id":602,"Name":"tynamo"},{"Id":603,"Name":"eelektrik"},{"Id":604,"Name":"eelektross"},{"Id":605,"Name":"elgyem"},{"Id":606,"Name":"beheeyem"},{"Id":607,"Name":"litwick"},{"Id":608,"Name":"lampent"},{"Id":609,"Name":"chandelure"},{"Id":610,"Name":"axew"},{"Id":611,"Name":"fraxure"},{"Id":612,"Name":"haxorus"},{"Id":613,"Name":"cubchoo"},{"Id":614,"Name":"beartic"},{"Id":615,"Name":"cryogonal"},{"Id":616,"Name":"shelmet"},{"Id":617,"Name":"accelgor"},{"Id":618,"Name":"stunfisk"},{"Id":619,"Name":"mienfoo"},{"Id":620,"Name":"mienshao"},{"Id":621,"Name":"druddigon"},{"Id":622,"Name":"golett"},{"Id":623,"Name":"golurk"},{"Id":624,"Name":"pawniard"},{"Id":625,"Name":"bisharp"},{"Id":626,"Name":"bouffalant"},{"Id":627,"Name":"rufflet"},{"Id":628,"Name":"braviary"},{"Id":629,"Name":"vullaby"},{"Id":630,"Name":"mandibuzz"},{"Id":631,"Name":"heatmor"},{"Id":632,"Name":"durant"},{"Id":633,"Name":"deino"},{"Id":634,"Name":"zweilous"},{"Id":635,"Name":"hydreigon"},{"Id":636,"Name":"larvesta"},{"Id":637,"Name":"volcarona"},{"Id":638,"Name":"cobalion"},{"Id":639,"Name":"terrakion"},{"Id":640,"Name":"virizion"},{"Id":641,"Name":"tornadus"},{"Id":642,"Name":"thundurus"},{"Id":643,"Name":"reshiram"},{"Id":644,"Name":"zekrom"},{"Id":645,"Name":"landorus"},{"Id":646,"Name":"kyurem"},{"Id":647,"Name":"keldeo"},{"Id":648,"Name":"meloetta"},{"Id":649,"Name":"genesect"},{"Id":650,"Name":"chespin"},{"Id":651,"Name":"quilladin"},{"Id":652,"Name":"chesnaught"},{"Id":653,"Name":"fennekin"},{"Id":654,"Name":"braixen"},{"Id":655,"Name":"delphox"},{"Id":656,"Name":"froakie"},{"Id":657,"Name":"frogadier"},{"Id":658,"Name":"greninja"},{"Id":659,"Name":"bunnelby"},{"Id":660,"Name":"diggersby"},{"Id":661,"Name":"fletchling"},{"Id":662,"Name":"fletchinder"},{"Id":663,"Name":"talonflame"},{"Id":664,"Name":"scatterbug"},{"Id":665,"Name":"spewpa"},{"Id":666,"Name":"vivillon"},{"Id":667,"Name":"litleo"},{"Id":668,"Name":"pyroar"},{"Id":669,"Name":"flabebe"},{"Id":670,"Name":"floette"},{"Id":671,"Name":"florges"},{"Id":672,"Name":"skiddo"},{"Id":673,"Name":"gogoat"},{"Id":674,"Name":"pancham"},{"Id":675,"Name":"pangoro"},{"Id":676,"Name":"furfrou"},{"Id":677,"Name":"espurr"},{"Id":678,"Name":"meowstic"},{"Id":679,"Name":"honedge"},{"Id":680,"Name":"doublade"},{"Id":681,"Name":"aegislash"},{"Id":682,"Name":"spritzee"},{"Id":683,"Name":"aromatisse"},{"Id":684,"Name":"swirlix"},{"Id":685,"Name":"slurpuff"},{"Id":686,"Name":"inkay"},{"Id":687,"Name":"malamar"},{"Id":688,"Name":"binacle"},{"Id":689,"Name":"barbaracle"},{"Id":690,"Name":"skrelp"},{"Id":691,"Name":"dragalge"},{"Id":692,"Name":"clauncher"},{"Id":693,"Name":"clawitzer"},{"Id":694,"Name":"helioptile"},{"Id":695,"Name":"heliolisk"},{"Id":696,"Name":"tyrunt"},{"Id":697,"Name":"tyrantrum"},{"Id":698,"Name":"amaura"},{"Id":699,"Name":"aurorus"},{"Id":700,"Name":"sylveon"},{"Id":701,"Name":"hawlucha"},{"Id":702,"Name":"dedenne"},{"Id":703,"Name":"carbink"},{"Id":704,"Name":"goomy"},{"Id":705,"Name":"sliggoo"},{"Id":706,"Name":"goodra"},{"Id":707,"Name":"klefki"},{"Id":708,"Name":"phantump"},{"Id":709,"Name":"trevenant"},{"Id":710,"Name":"pumpkaboo"},{"Id":711,"Name":"gourgeist"},{"Id":712,"Name":"bergmite"},{"Id":713,"Name":"avalugg"},{"Id":714,"Name":"noibat"},{"Id":715,"Name":"noivern"},{"Id":716,"Name":"xerneas"},{"Id":717,"Name":"yveltal"},{"Id":718,"Name":"zygarde"},{"Id":719,"Name":"diancie"},{"Id":720,"Name":"hoopa"},{"Id":721,"Name":"volcanion"}] \ No newline at end of file +[{"Id":1,"Name":"bulbasaur"},{"Id":2,"Name":"ivysaur"},{"Id":3,"Name":"venusaur"},{"Id":4,"Name":"charmander"},{"Id":5,"Name":"charmeleon"},{"Id":6,"Name":"charizard"},{"Id":7,"Name":"squirtle"},{"Id":8,"Name":"wartortle"},{"Id":9,"Name":"blastoise"},{"Id":10,"Name":"caterpie"},{"Id":11,"Name":"metapod"},{"Id":12,"Name":"butterfree"},{"Id":13,"Name":"weedle"},{"Id":14,"Name":"kakuna"},{"Id":15,"Name":"beedrill"},{"Id":16,"Name":"pidgey"},{"Id":17,"Name":"pidgeotto"},{"Id":18,"Name":"pidgeot"},{"Id":19,"Name":"rattata"},{"Id":20,"Name":"raticate"},{"Id":21,"Name":"spearow"},{"Id":22,"Name":"fearow"},{"Id":23,"Name":"ekans"},{"Id":24,"Name":"arbok"},{"Id":25,"Name":"pikachu"},{"Id":26,"Name":"raichu"},{"Id":27,"Name":"sandshrew"},{"Id":28,"Name":"sandslash"},{"Id":29,"Name":"nidoran"},{"Id":30,"Name":"nidorina"},{"Id":31,"Name":"nidoqueen"},{"Id":32,"Name":"nidoran"},{"Id":33,"Name":"nidorino"},{"Id":34,"Name":"nidoking"},{"Id":35,"Name":"clefairy"},{"Id":36,"Name":"clefable"},{"Id":37,"Name":"vulpix"},{"Id":38,"Name":"ninetales"},{"Id":39,"Name":"jigglypuff"},{"Id":40,"Name":"wigglytuff"},{"Id":41,"Name":"zubat"},{"Id":42,"Name":"golbat"},{"Id":43,"Name":"oddish"},{"Id":44,"Name":"gloom"},{"Id":45,"Name":"vileplume"},{"Id":46,"Name":"paras"},{"Id":47,"Name":"parasect"},{"Id":48,"Name":"venonat"},{"Id":49,"Name":"venomoth"},{"Id":50,"Name":"diglett"},{"Id":51,"Name":"dugtrio"},{"Id":52,"Name":"meowth"},{"Id":53,"Name":"persian"},{"Id":54,"Name":"psyduck"},{"Id":55,"Name":"golduck"},{"Id":56,"Name":"mankey"},{"Id":57,"Name":"primeape"},{"Id":58,"Name":"growlithe"},{"Id":59,"Name":"arcanine"},{"Id":60,"Name":"poliwag"},{"Id":61,"Name":"poliwhirl"},{"Id":62,"Name":"poliwrath"},{"Id":63,"Name":"abra"},{"Id":64,"Name":"kadabra"},{"Id":65,"Name":"alakazam"},{"Id":66,"Name":"machop"},{"Id":67,"Name":"machoke"},{"Id":68,"Name":"machamp"},{"Id":69,"Name":"bellsprout"},{"Id":70,"Name":"weepinbell"},{"Id":71,"Name":"victreebel"},{"Id":72,"Name":"tentacool"},{"Id":73,"Name":"tentacruel"},{"Id":74,"Name":"geodude"},{"Id":75,"Name":"graveler"},{"Id":76,"Name":"golem"},{"Id":77,"Name":"ponyta"},{"Id":78,"Name":"rapidash"},{"Id":79,"Name":"slowpoke"},{"Id":80,"Name":"slowbro"},{"Id":81,"Name":"magnemite"},{"Id":82,"Name":"magneton"},{"Id":83,"Name":"farfetchd"},{"Id":84,"Name":"doduo"},{"Id":85,"Name":"dodrio"},{"Id":86,"Name":"seel"},{"Id":87,"Name":"dewgong"},{"Id":88,"Name":"grimer"},{"Id":89,"Name":"muk"},{"Id":90,"Name":"shellder"},{"Id":91,"Name":"cloyster"},{"Id":92,"Name":"gastly"},{"Id":93,"Name":"haunter"},{"Id":94,"Name":"gengar"},{"Id":95,"Name":"onix"},{"Id":96,"Name":"drowzee"},{"Id":97,"Name":"hypno"},{"Id":98,"Name":"krabby"},{"Id":99,"Name":"kingler"},{"Id":100,"Name":"voltorb"},{"Id":101,"Name":"electrode"},{"Id":102,"Name":"exeggcute"},{"Id":103,"Name":"exeggutor"},{"Id":104,"Name":"cubone"},{"Id":105,"Name":"marowak"},{"Id":106,"Name":"hitmonlee"},{"Id":107,"Name":"hitmonchan"},{"Id":108,"Name":"lickitung"},{"Id":109,"Name":"koffing"},{"Id":110,"Name":"weezing"},{"Id":111,"Name":"rhyhorn"},{"Id":112,"Name":"rhydon"},{"Id":113,"Name":"chansey"},{"Id":114,"Name":"tangela"},{"Id":115,"Name":"kangaskhan"},{"Id":116,"Name":"horsea"},{"Id":117,"Name":"seadra"},{"Id":118,"Name":"goldeen"},{"Id":119,"Name":"seaking"},{"Id":120,"Name":"staryu"},{"Id":121,"Name":"starmie"},{"Id":122,"Name":"mr mime"},{"Id":123,"Name":"scyther"},{"Id":124,"Name":"jynx"},{"Id":125,"Name":"electabuzz"},{"Id":126,"Name":"magmar"},{"Id":127,"Name":"pinsir"},{"Id":128,"Name":"tauros"},{"Id":129,"Name":"magikarp"},{"Id":130,"Name":"gyarados"},{"Id":131,"Name":"lapras"},{"Id":132,"Name":"ditto"},{"Id":133,"Name":"eevee"},{"Id":134,"Name":"vaporeon"},{"Id":135,"Name":"jolteon"},{"Id":136,"Name":"flareon"},{"Id":137,"Name":"porygon"},{"Id":138,"Name":"omanyte"},{"Id":139,"Name":"omastar"},{"Id":140,"Name":"kabuto"},{"Id":141,"Name":"kabutops"},{"Id":142,"Name":"aerodactyl"},{"Id":143,"Name":"snorlax"},{"Id":144,"Name":"articuno"},{"Id":145,"Name":"zapdos"},{"Id":146,"Name":"moltres"},{"Id":147,"Name":"dratini"},{"Id":148,"Name":"dragonair"},{"Id":149,"Name":"dragonite"},{"Id":150,"Name":"mewtwo"},{"Id":151,"Name":"mew"},{"Id":152,"Name":"chikorita"},{"Id":153,"Name":"bayleef"},{"Id":154,"Name":"meganium"},{"Id":155,"Name":"cyndaquil"},{"Id":156,"Name":"quilava"},{"Id":157,"Name":"typhlosion"},{"Id":158,"Name":"totodile"},{"Id":159,"Name":"croconaw"},{"Id":160,"Name":"feraligatr"},{"Id":161,"Name":"sentret"},{"Id":162,"Name":"furret"},{"Id":163,"Name":"hoothoot"},{"Id":164,"Name":"noctowl"},{"Id":165,"Name":"ledyba"},{"Id":166,"Name":"ledian"},{"Id":167,"Name":"spinarak"},{"Id":168,"Name":"ariados"},{"Id":169,"Name":"crobat"},{"Id":170,"Name":"chinchou"},{"Id":171,"Name":"lanturn"},{"Id":172,"Name":"pichu"},{"Id":173,"Name":"cleffa"},{"Id":174,"Name":"igglybuff"},{"Id":175,"Name":"togepi"},{"Id":176,"Name":"togetic"},{"Id":177,"Name":"natu"},{"Id":178,"Name":"xatu"},{"Id":179,"Name":"mareep"},{"Id":180,"Name":"flaaffy"},{"Id":181,"Name":"ampharos"},{"Id":182,"Name":"bellossom"},{"Id":183,"Name":"marill"},{"Id":184,"Name":"azumarill"},{"Id":185,"Name":"sudowoodo"},{"Id":186,"Name":"politoed"},{"Id":187,"Name":"hoppip"},{"Id":188,"Name":"skiploom"},{"Id":189,"Name":"jumpluff"},{"Id":190,"Name":"aipom"},{"Id":191,"Name":"sunkern"},{"Id":192,"Name":"sunflora"},{"Id":193,"Name":"yanma"},{"Id":194,"Name":"wooper"},{"Id":195,"Name":"quagsire"},{"Id":196,"Name":"espeon"},{"Id":197,"Name":"umbreon"},{"Id":198,"Name":"murkrow"},{"Id":199,"Name":"slowking"},{"Id":200,"Name":"misdreavus"},{"Id":201,"Name":"unown"},{"Id":202,"Name":"wobbuffet"},{"Id":203,"Name":"girafarig"},{"Id":204,"Name":"pineco"},{"Id":205,"Name":"forretress"},{"Id":206,"Name":"dunsparce"},{"Id":207,"Name":"gligar"},{"Id":208,"Name":"steelix"},{"Id":209,"Name":"snubbull"},{"Id":210,"Name":"granbull"},{"Id":211,"Name":"qwilfish"},{"Id":212,"Name":"scizor"},{"Id":213,"Name":"shuckle"},{"Id":214,"Name":"heracross"},{"Id":215,"Name":"sneasel"},{"Id":216,"Name":"teddiursa"},{"Id":217,"Name":"ursaring"},{"Id":218,"Name":"slugma"},{"Id":219,"Name":"magcargo"},{"Id":220,"Name":"swinub"},{"Id":221,"Name":"piloswine"},{"Id":222,"Name":"corsola"},{"Id":223,"Name":"remoraid"},{"Id":224,"Name":"octillery"},{"Id":225,"Name":"delibird"},{"Id":226,"Name":"mantine"},{"Id":227,"Name":"skarmory"},{"Id":228,"Name":"houndour"},{"Id":229,"Name":"houndoom"},{"Id":230,"Name":"kingdra"},{"Id":231,"Name":"phanpy"},{"Id":232,"Name":"donphan"},{"Id":233,"Name":"porygon2"},{"Id":234,"Name":"stantler"},{"Id":235,"Name":"smeargle"},{"Id":236,"Name":"tyrogue"},{"Id":237,"Name":"hitmontop"},{"Id":238,"Name":"smoochum"},{"Id":239,"Name":"elekid"},{"Id":240,"Name":"magby"},{"Id":241,"Name":"miltank"},{"Id":242,"Name":"blissey"},{"Id":243,"Name":"raikou"},{"Id":244,"Name":"entei"},{"Id":245,"Name":"suicune"},{"Id":246,"Name":"larvitar"},{"Id":247,"Name":"pupitar"},{"Id":248,"Name":"tyranitar"},{"Id":249,"Name":"lugia"},{"Id":250,"Name":"ho-oh"},{"Id":251,"Name":"celebi"},{"Id":252,"Name":"treecko"},{"Id":253,"Name":"grovyle"},{"Id":254,"Name":"sceptile"},{"Id":255,"Name":"torchic"},{"Id":256,"Name":"combusken"},{"Id":257,"Name":"blaziken"},{"Id":258,"Name":"mudkip"},{"Id":259,"Name":"marshtomp"},{"Id":260,"Name":"swampert"},{"Id":261,"Name":"poochyena"},{"Id":262,"Name":"mightyena"},{"Id":263,"Name":"zigzagoon"},{"Id":264,"Name":"linoone"},{"Id":265,"Name":"wurmple"},{"Id":266,"Name":"silcoon"},{"Id":267,"Name":"beautifly"},{"Id":268,"Name":"cascoon"},{"Id":269,"Name":"dustox"},{"Id":270,"Name":"lotad"},{"Id":271,"Name":"lombre"},{"Id":272,"Name":"ludicolo"},{"Id":273,"Name":"seedot"},{"Id":274,"Name":"nuzleaf"},{"Id":275,"Name":"shiftry"},{"Id":276,"Name":"taillow"},{"Id":277,"Name":"swellow"},{"Id":278,"Name":"wingull"},{"Id":279,"Name":"pelipper"},{"Id":280,"Name":"ralts"},{"Id":281,"Name":"kirlia"},{"Id":282,"Name":"gardevoir"},{"Id":283,"Name":"surskit"},{"Id":284,"Name":"masquerain"},{"Id":285,"Name":"shroomish"},{"Id":286,"Name":"breloom"},{"Id":287,"Name":"slakoth"},{"Id":288,"Name":"vigoroth"},{"Id":289,"Name":"slaking"},{"Id":290,"Name":"nincada"},{"Id":291,"Name":"ninjask"},{"Id":292,"Name":"shedinja"},{"Id":293,"Name":"whismur"},{"Id":294,"Name":"loudred"},{"Id":295,"Name":"exploud"},{"Id":296,"Name":"makuhita"},{"Id":297,"Name":"hariyama"},{"Id":298,"Name":"azurill"},{"Id":299,"Name":"nosepass"},{"Id":300,"Name":"skitty"},{"Id":301,"Name":"delcatty"},{"Id":302,"Name":"sableye"},{"Id":303,"Name":"mawile"},{"Id":304,"Name":"aron"},{"Id":305,"Name":"lairon"},{"Id":306,"Name":"aggron"},{"Id":307,"Name":"meditite"},{"Id":308,"Name":"medicham"},{"Id":309,"Name":"electrike"},{"Id":310,"Name":"manectric"},{"Id":311,"Name":"plusle"},{"Id":312,"Name":"minun"},{"Id":313,"Name":"volbeat"},{"Id":314,"Name":"illumise"},{"Id":315,"Name":"roselia"},{"Id":316,"Name":"gulpin"},{"Id":317,"Name":"swalot"},{"Id":318,"Name":"carvanha"},{"Id":319,"Name":"sharpedo"},{"Id":320,"Name":"wailmer"},{"Id":321,"Name":"wailord"},{"Id":322,"Name":"numel"},{"Id":323,"Name":"camerupt"},{"Id":324,"Name":"torkoal"},{"Id":325,"Name":"spoink"},{"Id":326,"Name":"grumpig"},{"Id":327,"Name":"spinda"},{"Id":328,"Name":"trapinch"},{"Id":329,"Name":"vibrava"},{"Id":330,"Name":"flygon"},{"Id":331,"Name":"cacnea"},{"Id":332,"Name":"cacturne"},{"Id":333,"Name":"swablu"},{"Id":334,"Name":"altaria"},{"Id":335,"Name":"zangoose"},{"Id":336,"Name":"seviper"},{"Id":337,"Name":"lunatone"},{"Id":338,"Name":"solrock"},{"Id":339,"Name":"barboach"},{"Id":340,"Name":"whiscash"},{"Id":341,"Name":"corphish"},{"Id":342,"Name":"crawdaunt"},{"Id":343,"Name":"baltoy"},{"Id":344,"Name":"claydol"},{"Id":345,"Name":"lileep"},{"Id":346,"Name":"cradily"},{"Id":347,"Name":"anorith"},{"Id":348,"Name":"armaldo"},{"Id":349,"Name":"feebas"},{"Id":350,"Name":"milotic"},{"Id":351,"Name":"castform"},{"Id":352,"Name":"kecleon"},{"Id":353,"Name":"shuppet"},{"Id":354,"Name":"banette"},{"Id":355,"Name":"duskull"},{"Id":356,"Name":"dusclops"},{"Id":357,"Name":"tropius"},{"Id":358,"Name":"chimecho"},{"Id":359,"Name":"absol"},{"Id":360,"Name":"wynaut"},{"Id":361,"Name":"snorunt"},{"Id":362,"Name":"glalie"},{"Id":363,"Name":"spheal"},{"Id":364,"Name":"sealeo"},{"Id":365,"Name":"walrein"},{"Id":366,"Name":"clamperl"},{"Id":367,"Name":"huntail"},{"Id":368,"Name":"gorebyss"},{"Id":369,"Name":"relicanth"},{"Id":370,"Name":"luvdisc"},{"Id":371,"Name":"bagon"},{"Id":372,"Name":"shelgon"},{"Id":373,"Name":"salamence"},{"Id":374,"Name":"beldum"},{"Id":375,"Name":"metang"},{"Id":376,"Name":"metagross"},{"Id":377,"Name":"regirock"},{"Id":378,"Name":"regice"},{"Id":379,"Name":"registeel"},{"Id":380,"Name":"latias"},{"Id":381,"Name":"latios"},{"Id":382,"Name":"kyogre"},{"Id":383,"Name":"groudon"},{"Id":384,"Name":"rayquaza"},{"Id":385,"Name":"jirachi"},{"Id":386,"Name":"deoxys"},{"Id":387,"Name":"turtwig"},{"Id":388,"Name":"grotle"},{"Id":389,"Name":"torterra"},{"Id":390,"Name":"chimchar"},{"Id":391,"Name":"monferno"},{"Id":392,"Name":"infernape"},{"Id":393,"Name":"piplup"},{"Id":394,"Name":"prinplup"},{"Id":395,"Name":"empoleon"},{"Id":396,"Name":"starly"},{"Id":397,"Name":"staravia"},{"Id":398,"Name":"staraptor"},{"Id":399,"Name":"bidoof"},{"Id":400,"Name":"bibarel"},{"Id":401,"Name":"kricketot"},{"Id":402,"Name":"kricketune"},{"Id":403,"Name":"shinx"},{"Id":404,"Name":"luxio"},{"Id":405,"Name":"luxray"},{"Id":406,"Name":"budew"},{"Id":407,"Name":"roserade"},{"Id":408,"Name":"cranidos"},{"Id":409,"Name":"rampardos"},{"Id":410,"Name":"shieldon"},{"Id":411,"Name":"bastiodon"},{"Id":412,"Name":"burmy"},{"Id":413,"Name":"wormadam"},{"Id":414,"Name":"mothim"},{"Id":415,"Name":"combee"},{"Id":416,"Name":"vespiquen"},{"Id":417,"Name":"pachirisu"},{"Id":418,"Name":"buizel"},{"Id":419,"Name":"floatzel"},{"Id":420,"Name":"cherubi"},{"Id":421,"Name":"cherrim"},{"Id":422,"Name":"shellos"},{"Id":423,"Name":"gastrodon"},{"Id":424,"Name":"ambipom"},{"Id":425,"Name":"drifloon"},{"Id":426,"Name":"drifblim"},{"Id":427,"Name":"buneary"},{"Id":428,"Name":"lopunny"},{"Id":429,"Name":"mismagius"},{"Id":430,"Name":"honchkrow"},{"Id":431,"Name":"glameow"},{"Id":432,"Name":"purugly"},{"Id":433,"Name":"chingling"},{"Id":434,"Name":"stunky"},{"Id":435,"Name":"skuntank"},{"Id":436,"Name":"bronzor"},{"Id":437,"Name":"bronzong"},{"Id":438,"Name":"bonsly"},{"Id":439,"Name":"mime jr"},{"Id":440,"Name":"happiny"},{"Id":441,"Name":"chatot"},{"Id":442,"Name":"spiritomb"},{"Id":443,"Name":"gible"},{"Id":444,"Name":"gabite"},{"Id":445,"Name":"garchomp"},{"Id":446,"Name":"munchlax"},{"Id":447,"Name":"riolu"},{"Id":448,"Name":"lucario"},{"Id":449,"Name":"hippopotas"},{"Id":450,"Name":"hippowdon"},{"Id":451,"Name":"skorupi"},{"Id":452,"Name":"drapion"},{"Id":453,"Name":"croagunk"},{"Id":454,"Name":"toxicroak"},{"Id":455,"Name":"carnivine"},{"Id":456,"Name":"finneon"},{"Id":457,"Name":"lumineon"},{"Id":458,"Name":"mantyke"},{"Id":459,"Name":"snover"},{"Id":460,"Name":"abomasnow"},{"Id":461,"Name":"weavile"},{"Id":462,"Name":"magnezone"},{"Id":463,"Name":"lickilicky"},{"Id":464,"Name":"rhyperior"},{"Id":465,"Name":"tangrowth"},{"Id":466,"Name":"electivire"},{"Id":467,"Name":"magmortar"},{"Id":468,"Name":"togekiss"},{"Id":469,"Name":"yanmega"},{"Id":470,"Name":"leafeon"},{"Id":471,"Name":"glaceon"},{"Id":472,"Name":"gliscor"},{"Id":473,"Name":"mamoswine"},{"Id":474,"Name":"porygon z"},{"Id":475,"Name":"gallade"},{"Id":476,"Name":"probopass"},{"Id":477,"Name":"dusknoir"},{"Id":478,"Name":"froslass"},{"Id":479,"Name":"rotom"},{"Id":480,"Name":"uxie"},{"Id":481,"Name":"mesprit"},{"Id":482,"Name":"azelf"},{"Id":483,"Name":"dialga"},{"Id":484,"Name":"palkia"},{"Id":485,"Name":"heatran"},{"Id":486,"Name":"regigigas"},{"Id":487,"Name":"giratina"},{"Id":488,"Name":"cresselia"},{"Id":489,"Name":"phione"},{"Id":490,"Name":"manaphy"},{"Id":491,"Name":"darkrai"},{"Id":492,"Name":"shaymin"},{"Id":493,"Name":"arceus"},{"Id":494,"Name":"victini"},{"Id":495,"Name":"snivy"},{"Id":496,"Name":"servine"},{"Id":497,"Name":"serperior"},{"Id":498,"Name":"tepig"},{"Id":499,"Name":"pignite"},{"Id":500,"Name":"emboar"},{"Id":501,"Name":"oshawott"},{"Id":502,"Name":"dewott"},{"Id":503,"Name":"samurott"},{"Id":504,"Name":"patrat"},{"Id":505,"Name":"watchog"},{"Id":506,"Name":"lillipup"},{"Id":507,"Name":"herdier"},{"Id":508,"Name":"stoutland"},{"Id":509,"Name":"purrloin"},{"Id":510,"Name":"liepard"},{"Id":511,"Name":"pansage"},{"Id":512,"Name":"simisage"},{"Id":513,"Name":"pansear"},{"Id":514,"Name":"simisear"},{"Id":515,"Name":"panpour"},{"Id":516,"Name":"simipour"},{"Id":517,"Name":"munna"},{"Id":518,"Name":"musharna"},{"Id":519,"Name":"pidove"},{"Id":520,"Name":"tranquill"},{"Id":521,"Name":"unfezant"},{"Id":522,"Name":"blitzle"},{"Id":523,"Name":"zebstrika"},{"Id":524,"Name":"roggenrola"},{"Id":525,"Name":"boldore"},{"Id":526,"Name":"gigalith"},{"Id":527,"Name":"woobat"},{"Id":528,"Name":"swoobat"},{"Id":529,"Name":"drilbur"},{"Id":530,"Name":"excadrill"},{"Id":531,"Name":"audino"},{"Id":532,"Name":"timburr"},{"Id":533,"Name":"gurdurr"},{"Id":534,"Name":"conkeldurr"},{"Id":535,"Name":"tympole"},{"Id":536,"Name":"palpitoad"},{"Id":537,"Name":"seismitoad"},{"Id":538,"Name":"throh"},{"Id":539,"Name":"sawk"},{"Id":540,"Name":"sewaddle"},{"Id":541,"Name":"swadloon"},{"Id":542,"Name":"leavanny"},{"Id":543,"Name":"venipede"},{"Id":544,"Name":"whirlipede"},{"Id":545,"Name":"scolipede"},{"Id":546,"Name":"cottonee"},{"Id":547,"Name":"whimsicott"},{"Id":548,"Name":"petilil"},{"Id":549,"Name":"lilligant"},{"Id":550,"Name":"basculin"},{"Id":551,"Name":"sandile"},{"Id":552,"Name":"krokorok"},{"Id":553,"Name":"krookodile"},{"Id":554,"Name":"darumaka"},{"Id":555,"Name":"darmanitan"},{"Id":556,"Name":"maractus"},{"Id":557,"Name":"dwebble"},{"Id":558,"Name":"crustle"},{"Id":559,"Name":"scraggy"},{"Id":560,"Name":"scrafty"},{"Id":561,"Name":"sigilyph"},{"Id":562,"Name":"yamask"},{"Id":563,"Name":"cofagrigus"},{"Id":564,"Name":"tirtouga"},{"Id":565,"Name":"carracosta"},{"Id":566,"Name":"archen"},{"Id":567,"Name":"archeops"},{"Id":568,"Name":"trubbish"},{"Id":569,"Name":"garbodor"},{"Id":570,"Name":"zorua"},{"Id":571,"Name":"zoroark"},{"Id":572,"Name":"minccino"},{"Id":573,"Name":"cinccino"},{"Id":574,"Name":"gothita"},{"Id":575,"Name":"gothorita"},{"Id":576,"Name":"gothitelle"},{"Id":577,"Name":"solosis"},{"Id":578,"Name":"duosion"},{"Id":579,"Name":"reuniclus"},{"Id":580,"Name":"ducklett"},{"Id":581,"Name":"swanna"},{"Id":582,"Name":"vanillite"},{"Id":583,"Name":"vanillish"},{"Id":584,"Name":"vanilluxe"},{"Id":585,"Name":"deerling"},{"Id":586,"Name":"sawsbuck"},{"Id":587,"Name":"emolga"},{"Id":588,"Name":"karrablast"},{"Id":589,"Name":"escavalier"},{"Id":590,"Name":"foongus"},{"Id":591,"Name":"amoonguss"},{"Id":592,"Name":"frillish"},{"Id":593,"Name":"jellicent"},{"Id":594,"Name":"alomomola"},{"Id":595,"Name":"joltik"},{"Id":596,"Name":"galvantula"},{"Id":597,"Name":"ferroseed"},{"Id":598,"Name":"ferrothorn"},{"Id":599,"Name":"klink"},{"Id":600,"Name":"klang"},{"Id":601,"Name":"klinklang"},{"Id":602,"Name":"tynamo"},{"Id":603,"Name":"eelektrik"},{"Id":604,"Name":"eelektross"},{"Id":605,"Name":"elgyem"},{"Id":606,"Name":"beheeyem"},{"Id":607,"Name":"litwick"},{"Id":608,"Name":"lampent"},{"Id":609,"Name":"chandelure"},{"Id":610,"Name":"axew"},{"Id":611,"Name":"fraxure"},{"Id":612,"Name":"haxorus"},{"Id":613,"Name":"cubchoo"},{"Id":614,"Name":"beartic"},{"Id":615,"Name":"cryogonal"},{"Id":616,"Name":"shelmet"},{"Id":617,"Name":"accelgor"},{"Id":618,"Name":"stunfisk"},{"Id":619,"Name":"mienfoo"},{"Id":620,"Name":"mienshao"},{"Id":621,"Name":"druddigon"},{"Id":622,"Name":"golett"},{"Id":623,"Name":"golurk"},{"Id":624,"Name":"pawniard"},{"Id":625,"Name":"bisharp"},{"Id":626,"Name":"bouffalant"},{"Id":627,"Name":"rufflet"},{"Id":628,"Name":"braviary"},{"Id":629,"Name":"vullaby"},{"Id":630,"Name":"mandibuzz"},{"Id":631,"Name":"heatmor"},{"Id":632,"Name":"durant"},{"Id":633,"Name":"deino"},{"Id":634,"Name":"zweilous"},{"Id":635,"Name":"hydreigon"},{"Id":636,"Name":"larvesta"},{"Id":637,"Name":"volcarona"},{"Id":638,"Name":"cobalion"},{"Id":639,"Name":"terrakion"},{"Id":640,"Name":"virizion"},{"Id":641,"Name":"tornadus"},{"Id":642,"Name":"thundurus"},{"Id":643,"Name":"reshiram"},{"Id":644,"Name":"zekrom"},{"Id":645,"Name":"landorus"},{"Id":646,"Name":"kyurem"},{"Id":647,"Name":"keldeo"},{"Id":648,"Name":"meloetta"},{"Id":649,"Name":"genesect"},{"Id":650,"Name":"chespin"},{"Id":651,"Name":"quilladin"},{"Id":652,"Name":"chesnaught"},{"Id":653,"Name":"fennekin"},{"Id":654,"Name":"braixen"},{"Id":655,"Name":"delphox"},{"Id":656,"Name":"froakie"},{"Id":657,"Name":"frogadier"},{"Id":658,"Name":"greninja"},{"Id":659,"Name":"bunnelby"},{"Id":660,"Name":"diggersby"},{"Id":661,"Name":"fletchling"},{"Id":662,"Name":"fletchinder"},{"Id":663,"Name":"talonflame"},{"Id":664,"Name":"scatterbug"},{"Id":665,"Name":"spewpa"},{"Id":666,"Name":"vivillon"},{"Id":667,"Name":"litleo"},{"Id":668,"Name":"pyroar"},{"Id":669,"Name":"flabebe"},{"Id":670,"Name":"floette"},{"Id":671,"Name":"florges"},{"Id":672,"Name":"skiddo"},{"Id":673,"Name":"gogoat"},{"Id":674,"Name":"pancham"},{"Id":675,"Name":"pangoro"},{"Id":676,"Name":"furfrou"},{"Id":677,"Name":"espurr"},{"Id":678,"Name":"meowstic"},{"Id":679,"Name":"honedge"},{"Id":680,"Name":"doublade"},{"Id":681,"Name":"aegislash"},{"Id":682,"Name":"spritzee"},{"Id":683,"Name":"aromatisse"},{"Id":684,"Name":"swirlix"},{"Id":685,"Name":"slurpuff"},{"Id":686,"Name":"inkay"},{"Id":687,"Name":"malamar"},{"Id":688,"Name":"binacle"},{"Id":689,"Name":"barbaracle"},{"Id":690,"Name":"skrelp"},{"Id":691,"Name":"dragalge"},{"Id":692,"Name":"clauncher"},{"Id":693,"Name":"clawitzer"},{"Id":694,"Name":"helioptile"},{"Id":695,"Name":"heliolisk"},{"Id":696,"Name":"tyrunt"},{"Id":697,"Name":"tyrantrum"},{"Id":698,"Name":"amaura"},{"Id":699,"Name":"aurorus"},{"Id":700,"Name":"sylveon"},{"Id":701,"Name":"hawlucha"},{"Id":702,"Name":"dedenne"},{"Id":703,"Name":"carbink"},{"Id":704,"Name":"goomy"},{"Id":705,"Name":"sliggoo"},{"Id":706,"Name":"goodra"},{"Id":707,"Name":"klefki"},{"Id":708,"Name":"phantump"},{"Id":709,"Name":"trevenant"},{"Id":710,"Name":"pumpkaboo"},{"Id":711,"Name":"gourgeist"},{"Id":712,"Name":"bergmite"},{"Id":713,"Name":"avalugg"},{"Id":714,"Name":"noibat"},{"Id":715,"Name":"noivern"},{"Id":716,"Name":"xerneas"},{"Id":717,"Name":"yveltal"},{"Id":718,"Name":"zygarde"},{"Id":719,"Name":"diancie"},{"Id":720,"Name":"hoopa"},{"Id":721,"Name":"volcanion"},{ "Id":722,"Name":"Rowlet" },{ "Id":723,"Name":"Dartrix" },{ "Id":724,"Name":"Decidueye" },{ "Id":725,"Name":"Litten" },{ "Id":726,"Name":"Torracat" },{ "Id":727,"Name":"Incineroar" },{ "Id":728,"Name":"Popplio" },{ "Id":729,"Name":"Brionne" },{ "Id":730,"Name":"Primarina" },{ "Id":731,"Name":"Pikipek" },{ "Id":732,"Name":"Trumbeak" },{ "Id":733,"Name":"Toucannon" },{ "Id":734,"Name":"Yungoos" },{ "Id":735,"Name":"Gumshoos" },{ "Id":736,"Name":"Grubbin" },{ "Id":737,"Name":"Charjabug" },{ "Id":738,"Name":"Vikavolt" },{ "Id":739,"Name":"Crabrawler" },{ "Id":740,"Name":"Crabominable" },{ "Id":741,"Name":"Oricorio" },{ "Id":742,"Name":"Cutiefly" },{ "Id":743,"Name":"Ribombee" },{ "Id":744,"Name":"Rockruff" },{ "Id":745,"Name":"Lycanroc" },{ "Id":746,"Name":"Wishiwashi" },{ "Id":747,"Name":"Mareanie" },{ "Id":748,"Name":"Toxapex" },{ "Id":749,"Name":"Mudbray" },{ "Id":750,"Name":"Mudsdale" },{ "Id":751,"Name":"Dewpider" },{ "Id":752,"Name":"Araquanid" },{ "Id":753,"Name":"Fomantis" },{ "Id":754,"Name":"Lurantis" },{ "Id":755,"Name":"Morelull" },{ "Id":756,"Name":"Shiinotic" },{ "Id":757,"Name":"Salandit" },{ "Id":758,"Name":"Salazzle" },{ "Id":759,"Name":"Stufful" },{ "Id":760,"Name":"Bewear" },{ "Id":761,"Name":"Bounsweet" },{ "Id":762,"Name":"Steenee" },{ "Id":763,"Name":"Tsareena" },{ "Id":764,"Name":"Comfey" },{ "Id":765,"Name":"Oranguru" },{ "Id":766,"Name":"Passimian" },{ "Id":767,"Name":"Wimpod" },{ "Id":768,"Name":"Golisopod" },{ "Id":769,"Name":"Sandygast" },{ "Id":770,"Name":"Palossand" },{ "Id":771,"Name":"Pyukumuku" },{ "Id":772,"Name":"Type Null" },{ "Id":773,"Name":"Silvally" },{ "Id":774,"Name":"Minior" },{ "Id":775,"Name":"Komala" },{ "Id":776,"Name":"Turtonator" },{ "Id":777,"Name":"Togedemaru" },{ "Id":778,"Name":"Mimikyu" },{ "Id":779,"Name":"Bruxish" },{ "Id":780,"Name":"Drampa" },{ "Id":781,"Name":"Dhelmise" },{ "Id":782,"Name":"Jangmo O" },{ "Id":783,"Name":"Hakamo O" },{ "Id":784,"Name":"Kommo O" },{ "Id":785,"Name":"Tapu Koko" },{ "Id":786,"Name":"Tapu Lele" },{ "Id":787,"Name":"Tapu Bulu" },{ "Id":788,"Name":"Tapu Fini" },{ "Id":789,"Name":"Cosmog" },{ "Id":790,"Name":"Cosmoem" },{ "Id":791,"Name":"Solgaleo" },{ "Id":792,"Name":"Lunala" },{ "Id":793,"Name":"Nihilego" },{ "Id":794,"Name":"Buzzwole" },{ "Id":795,"Name":"Pheromosa" },{ "Id":796,"Name":"Xurkitree" },{ "Id":797,"Name":"Celesteela" },{ "Id":798,"Name":"Kartana" },{ "Id":799,"Name":"Guzzlord" },{ "Id":800,"Name":"Necrozma" },{ "Id":801,"Name":"Magearna" },{ "Id":802,"Name":"Marshadow" },{ "Id":803,"Name":"Poipole" },{ "Id":804,"Name":"Naganadel" },{ "Id":805,"Name":"Stakataka" },{ "Id":806,"Name":"Blacephalon" },{ "Id":807,"Name":"Zeraora" },{ "Id":808,"Name":"Meltan" },{ "Id":809,"Name":"Melmetal" },{ "Id":810,"Name":"Grookey" },{ "Id":811,"Name":"Thwackey" },{ "Id":812,"Name":"Rillaboom" },{ "Id":813,"Name":"Scorbunny" },{ "Id":814,"Name":"Raboot" },{ "Id":815,"Name":"Cinderace" },{ "Id":816,"Name":"Sobble" },{ "Id":817,"Name":"Drizzile" },{ "Id":818,"Name":"Inteleon" },{ "Id":819,"Name":"Skwovet" },{ "Id":820,"Name":"Greedent" },{ "Id":821,"Name":"Rookidee" },{ "Id":822,"Name":"Corvisquire" },{ "Id":823,"Name":"Corviknight" },{ "Id":824,"Name":"Blipbug" },{ "Id":825,"Name":"Dottler" },{ "Id":826,"Name":"Orbeetle" },{ "Id":827,"Name":"Nickit" },{ "Id":828,"Name":"Thievul" },{ "Id":829,"Name":"Gossifleur" },{ "Id":830,"Name":"Eldegoss" },{ "Id":831,"Name":"Wooloo" },{ "Id":832,"Name":"Dubwool" },{ "Id":833,"Name":"Chewtle" },{ "Id":834,"Name":"Drednaw" },{ "Id":835,"Name":"Yamper" },{ "Id":836,"Name":"Boltund" },{ "Id":837,"Name":"Rolycoly" },{ "Id":838,"Name":"Carkol" },{ "Id":839,"Name":"Coalossal" },{ "Id":840,"Name":"Applin" },{ "Id":841,"Name":"Flapple" },{ "Id":842,"Name":"Appletun" },{ "Id":843,"Name":"Silicobra" },{ "Id":844,"Name":"Sandaconda" },{ "Id":845,"Name":"Cramorant" },{ "Id":846,"Name":"Arrokuda" },{ "Id":847,"Name":"Barraskewda" },{ "Id":848,"Name":"Toxel" },{ "Id":849,"Name":"Toxtricity" },{ "Id":850,"Name":"Sizzlipede" },{ "Id":851,"Name":"Centiskorch" },{ "Id":852,"Name":"Clobbopus" },{ "Id":853,"Name":"Grapploct" },{ "Id":854,"Name":"Sinistea" },{ "Id":855,"Name":"Polteageist" },{ "Id":856,"Name":"Hatenna" },{ "Id":857,"Name":"Hattrem" },{ "Id":858,"Name":"Hatterene" },{ "Id":859,"Name":"Impidimp" },{ "Id":860,"Name":"Morgrem" },{ "Id":861,"Name":"Grimmsnarl" },{ "Id":862,"Name":"Obstagoon" },{ "Id":863,"Name":"Perrserker" },{ "Id":864,"Name":"Cursola" },{ "Id":865,"Name":"Sirfetchd" },{ "Id":866,"Name":"Mr Rime" },{ "Id":867,"Name":"Runerigus" },{ "Id":868,"Name":"Milcery" },{ "Id":869,"Name":"Alcremie" },{ "Id":870,"Name":"Falinks" },{ "Id":871,"Name":"Pincurchin" },{ "Id":872,"Name":"Snom" },{ "Id":873,"Name":"Frosmoth" },{ "Id":874,"Name":"Stonjourner" },{ "Id":875,"Name":"Eiscue" },{ "Id":876,"Name":"Indeedee" },{ "Id":877,"Name":"Morpeko" },{ "Id":878,"Name":"Cufant" },{ "Id":879,"Name":"Copperajah" },{ "Id":880,"Name":"Dracozolt" },{ "Id":881,"Name":"Arctozolt" },{ "Id":882,"Name":"Dracovish" },{ "Id":883,"Name":"Arctovish" },{ "Id":884,"Name":"Duraludon" },{ "Id":885,"Name":"Dreepy" },{ "Id":886,"Name":"Drakloak" },{ "Id":887,"Name":"Dragapult" },{ "Id":888,"Name":"Zacian" },{ "Id":889,"Name":"Zamazenta" },{ "Id":890,"Name":"Eternatus" },{ "Id":891,"Name":"Kubfu" },{ "Id":892,"Name":"Urshifu Single Strike" },{ "Id":893,"Name":"Zarude" },{ "Id":894,"Name":"Regieleki" },{ "Id":895,"Name":"Regidrago" },{ "Id":896,"Name":"Glastrier" },{ "Id":897,"Name":"Spectrier" },{ "Id":898,"Name":"Calyrex" },{ "Id":899,"Name":"Wyrdeer" },{ "Id":900,"Name":"Kleavor" },{ "Id":901,"Name":"Ursaluna" },{ "Id":902,"Name":"Basculegion" },{ "Id":903,"Name":"Sneasler" },{ "Id":904,"Name":"Overqwil" },{ "Id":905,"Name":"Enamorus" }] \ No newline at end of file diff --git a/src/NadekoBot/data/strings/commands/commands.en-US.yml b/src/NadekoBot/data/strings/commands/commands.en-US.yml index 8183d8fb6..61d253615 100644 --- a/src/NadekoBot/data/strings/commands/commands.en-US.yml +++ b/src/NadekoBot/data/strings/commands/commands.en-US.yml @@ -2166,7 +2166,7 @@ imageonlychannel: Users who send more than a few non-image messages will be banned from using the channel. args: - "" -linksonlychannel: +linkonlychannel: desc: |- Toggles whether the channel only allows links. Users who send more than a few non-link messages will be banned from using the channel. diff --git a/src/NadekoBot/data/strings/responses/responses.en-US.json b/src/NadekoBot/data/strings/responses/responses.en-US.json index a32b848f4..e7b0a78f0 100644 --- a/src/NadekoBot/data/strings/responses/responses.en-US.json +++ b/src/NadekoBot/data/strings/responses/responses.en-US.json @@ -971,7 +971,9 @@ "favorites": "Favorites", "tags": "Tags", "imageonly_enable": "This channel is now image-only.", + "linkonly_enable": "This channel is now link-only.", "imageonly_disable": "This channel is no longer image-only.", + "linkonly_disable": "This channel is no longer link-only.", "deleted_x_servers": "Deleted {0} servers.", "curtr_gift": "Gift from {0} [{1}]", "curtr_award": "Awarded by bot owner {0} [{1}]",