mirror of
				https://gitlab.com/Kwoth/nadekobot.git
				synced 2025-11-04 00:34:26 -05:00 
			
		
		
		
	Rewrote several raw queries to linqtodb
This commit is contained in:
		@@ -29,7 +29,7 @@ namespace NadekoBot.Migrations
 | 
			
		||||
 | 
			
		||||
                    b.HasIndex("UserId");
 | 
			
		||||
 | 
			
		||||
                    b.ToTable("ClubApplicants");
 | 
			
		||||
                    b.ToTable("ClubApplicants", (string)null);
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
            modelBuilder.Entity("NadekoBot.Db.Models.ClubBans", b =>
 | 
			
		||||
@@ -44,7 +44,7 @@ namespace NadekoBot.Migrations
 | 
			
		||||
 | 
			
		||||
                    b.HasIndex("UserId");
 | 
			
		||||
 | 
			
		||||
                    b.ToTable("ClubBans");
 | 
			
		||||
                    b.ToTable("ClubBans", (string)null);
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
            modelBuilder.Entity("NadekoBot.Db.Models.ClubInfo", b =>
 | 
			
		||||
@@ -86,7 +86,7 @@ namespace NadekoBot.Migrations
 | 
			
		||||
                    b.HasIndex("OwnerId")
 | 
			
		||||
                        .IsUnique();
 | 
			
		||||
 | 
			
		||||
                    b.ToTable("Clubs");
 | 
			
		||||
                    b.ToTable("Clubs", (string)null);
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
            modelBuilder.Entity("NadekoBot.Db.Models.DiscordUser", b =>
 | 
			
		||||
@@ -155,7 +155,7 @@ namespace NadekoBot.Migrations
 | 
			
		||||
 | 
			
		||||
                    b.HasIndex("UserId");
 | 
			
		||||
 | 
			
		||||
                    b.ToTable("DiscordUser");
 | 
			
		||||
                    b.ToTable("DiscordUser", (string)null);
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
            modelBuilder.Entity("NadekoBot.Db.Models.FollowedStream", b =>
 | 
			
		||||
@@ -189,7 +189,7 @@ namespace NadekoBot.Migrations
 | 
			
		||||
 | 
			
		||||
                    b.HasIndex("GuildConfigId");
 | 
			
		||||
 | 
			
		||||
                    b.ToTable("FollowedStream");
 | 
			
		||||
                    b.ToTable("FollowedStream", (string)null);
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
            modelBuilder.Entity("NadekoBot.Services.Database.Models.AntiAltSetting", b =>
 | 
			
		||||
@@ -218,7 +218,7 @@ namespace NadekoBot.Migrations
 | 
			
		||||
                    b.HasIndex("GuildConfigId")
 | 
			
		||||
                        .IsUnique();
 | 
			
		||||
 | 
			
		||||
                    b.ToTable("AntiAltSetting");
 | 
			
		||||
                    b.ToTable("AntiAltSetting", (string)null);
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
            modelBuilder.Entity("NadekoBot.Services.Database.Models.AntiRaidSetting", b =>
 | 
			
		||||
@@ -250,7 +250,7 @@ namespace NadekoBot.Migrations
 | 
			
		||||
                    b.HasIndex("GuildConfigId")
 | 
			
		||||
                        .IsUnique();
 | 
			
		||||
 | 
			
		||||
                    b.ToTable("AntiRaidSetting");
 | 
			
		||||
                    b.ToTable("AntiRaidSetting", (string)null);
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
            modelBuilder.Entity("NadekoBot.Services.Database.Models.AntiSpamIgnore", b =>
 | 
			
		||||
@@ -272,7 +272,7 @@ namespace NadekoBot.Migrations
 | 
			
		||||
 | 
			
		||||
                    b.HasIndex("AntiSpamSettingId");
 | 
			
		||||
 | 
			
		||||
                    b.ToTable("AntiSpamIgnore");
 | 
			
		||||
                    b.ToTable("AntiSpamIgnore", (string)null);
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
            modelBuilder.Entity("NadekoBot.Services.Database.Models.AntiSpamSetting", b =>
 | 
			
		||||
@@ -304,7 +304,7 @@ namespace NadekoBot.Migrations
 | 
			
		||||
                    b.HasIndex("GuildConfigId")
 | 
			
		||||
                        .IsUnique();
 | 
			
		||||
 | 
			
		||||
                    b.ToTable("AntiSpamSetting");
 | 
			
		||||
                    b.ToTable("AntiSpamSetting", (string)null);
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
            modelBuilder.Entity("NadekoBot.Services.Database.Models.AutoCommand", b =>
 | 
			
		||||
@@ -342,7 +342,7 @@ namespace NadekoBot.Migrations
 | 
			
		||||
 | 
			
		||||
                    b.HasKey("Id");
 | 
			
		||||
 | 
			
		||||
                    b.ToTable("AutoCommands");
 | 
			
		||||
                    b.ToTable("AutoCommands", (string)null);
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
            modelBuilder.Entity("NadekoBot.Services.Database.Models.AutoTranslateChannel", b =>
 | 
			
		||||
@@ -370,7 +370,7 @@ namespace NadekoBot.Migrations
 | 
			
		||||
 | 
			
		||||
                    b.HasIndex("GuildId");
 | 
			
		||||
 | 
			
		||||
                    b.ToTable("AutoTranslateChannels");
 | 
			
		||||
                    b.ToTable("AutoTranslateChannels", (string)null);
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
            modelBuilder.Entity("NadekoBot.Services.Database.Models.AutoTranslateUser", b =>
 | 
			
		||||
@@ -398,7 +398,7 @@ namespace NadekoBot.Migrations
 | 
			
		||||
 | 
			
		||||
                    b.HasAlternateKey("ChannelId", "UserId");
 | 
			
		||||
 | 
			
		||||
                    b.ToTable("AutoTranslateUsers");
 | 
			
		||||
                    b.ToTable("AutoTranslateUsers", (string)null);
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
            modelBuilder.Entity("NadekoBot.Services.Database.Models.BanTemplate", b =>
 | 
			
		||||
@@ -421,7 +421,7 @@ namespace NadekoBot.Migrations
 | 
			
		||||
                    b.HasIndex("GuildId")
 | 
			
		||||
                        .IsUnique();
 | 
			
		||||
 | 
			
		||||
                    b.ToTable("BanTemplates");
 | 
			
		||||
                    b.ToTable("BanTemplates", (string)null);
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
            modelBuilder.Entity("NadekoBot.Services.Database.Models.BlacklistEntry", b =>
 | 
			
		||||
@@ -441,7 +441,7 @@ namespace NadekoBot.Migrations
 | 
			
		||||
 | 
			
		||||
                    b.HasKey("Id");
 | 
			
		||||
 | 
			
		||||
                    b.ToTable("Blacklist");
 | 
			
		||||
                    b.ToTable("Blacklist", (string)null);
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
            modelBuilder.Entity("NadekoBot.Services.Database.Models.CommandAlias", b =>
 | 
			
		||||
@@ -466,7 +466,7 @@ namespace NadekoBot.Migrations
 | 
			
		||||
 | 
			
		||||
                    b.HasIndex("GuildConfigId");
 | 
			
		||||
 | 
			
		||||
                    b.ToTable("CommandAlias");
 | 
			
		||||
                    b.ToTable("CommandAlias", (string)null);
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
            modelBuilder.Entity("NadekoBot.Services.Database.Models.CommandCooldown", b =>
 | 
			
		||||
@@ -491,7 +491,7 @@ namespace NadekoBot.Migrations
 | 
			
		||||
 | 
			
		||||
                    b.HasIndex("GuildConfigId");
 | 
			
		||||
 | 
			
		||||
                    b.ToTable("CommandCooldown");
 | 
			
		||||
                    b.ToTable("CommandCooldown", (string)null);
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
            modelBuilder.Entity("NadekoBot.Services.Database.Models.CurrencyTransaction", b =>
 | 
			
		||||
@@ -529,7 +529,7 @@ namespace NadekoBot.Migrations
 | 
			
		||||
 | 
			
		||||
                    b.HasIndex("UserId");
 | 
			
		||||
 | 
			
		||||
                    b.ToTable("CurrencyTransactions");
 | 
			
		||||
                    b.ToTable("CurrencyTransactions", (string)null);
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
            modelBuilder.Entity("NadekoBot.Services.Database.Models.DelMsgOnCmdChannel", b =>
 | 
			
		||||
@@ -554,7 +554,7 @@ namespace NadekoBot.Migrations
 | 
			
		||||
 | 
			
		||||
                    b.HasIndex("GuildConfigId");
 | 
			
		||||
 | 
			
		||||
                    b.ToTable("DelMsgOnCmdChannel");
 | 
			
		||||
                    b.ToTable("DelMsgOnCmdChannel", (string)null);
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
            modelBuilder.Entity("NadekoBot.Services.Database.Models.DiscordPermOverride", b =>
 | 
			
		||||
@@ -580,7 +580,7 @@ namespace NadekoBot.Migrations
 | 
			
		||||
                    b.HasIndex("GuildId", "Command")
 | 
			
		||||
                        .IsUnique();
 | 
			
		||||
 | 
			
		||||
                    b.ToTable("DiscordPermOverrides");
 | 
			
		||||
                    b.ToTable("DiscordPermOverrides", (string)null);
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
            modelBuilder.Entity("NadekoBot.Services.Database.Models.ExcludedItem", b =>
 | 
			
		||||
@@ -605,7 +605,7 @@ namespace NadekoBot.Migrations
 | 
			
		||||
 | 
			
		||||
                    b.HasIndex("XpSettingsId");
 | 
			
		||||
 | 
			
		||||
                    b.ToTable("ExcludedItem");
 | 
			
		||||
                    b.ToTable("ExcludedItem", (string)null);
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
            modelBuilder.Entity("NadekoBot.Services.Database.Models.FeedSub", b =>
 | 
			
		||||
@@ -631,7 +631,7 @@ namespace NadekoBot.Migrations
 | 
			
		||||
 | 
			
		||||
                    b.HasAlternateKey("GuildConfigId", "Url");
 | 
			
		||||
 | 
			
		||||
                    b.ToTable("FeedSub");
 | 
			
		||||
                    b.ToTable("FeedSub", (string)null);
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
            modelBuilder.Entity("NadekoBot.Services.Database.Models.FilterChannelId", b =>
 | 
			
		||||
@@ -653,7 +653,7 @@ namespace NadekoBot.Migrations
 | 
			
		||||
 | 
			
		||||
                    b.HasIndex("GuildConfigId");
 | 
			
		||||
 | 
			
		||||
                    b.ToTable("FilterChannelId");
 | 
			
		||||
                    b.ToTable("FilterChannelId", (string)null);
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
            modelBuilder.Entity("NadekoBot.Services.Database.Models.FilteredWord", b =>
 | 
			
		||||
@@ -675,7 +675,7 @@ namespace NadekoBot.Migrations
 | 
			
		||||
 | 
			
		||||
                    b.HasIndex("GuildConfigId");
 | 
			
		||||
 | 
			
		||||
                    b.ToTable("FilteredWord");
 | 
			
		||||
                    b.ToTable("FilteredWord", (string)null);
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
            modelBuilder.Entity("NadekoBot.Services.Database.Models.FilterLinksChannelId", b =>
 | 
			
		||||
@@ -697,7 +697,7 @@ namespace NadekoBot.Migrations
 | 
			
		||||
 | 
			
		||||
                    b.HasIndex("GuildConfigId");
 | 
			
		||||
 | 
			
		||||
                    b.ToTable("FilterLinksChannelId");
 | 
			
		||||
                    b.ToTable("FilterLinksChannelId", (string)null);
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
            modelBuilder.Entity("NadekoBot.Services.Database.Models.FilterWordsChannelId", b =>
 | 
			
		||||
@@ -719,7 +719,7 @@ namespace NadekoBot.Migrations
 | 
			
		||||
 | 
			
		||||
                    b.HasIndex("GuildConfigId");
 | 
			
		||||
 | 
			
		||||
                    b.ToTable("FilterWordsChannelId");
 | 
			
		||||
                    b.ToTable("FilterWordsChannelId", (string)null);
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
            modelBuilder.Entity("NadekoBot.Services.Database.Models.GCChannelId", b =>
 | 
			
		||||
@@ -741,7 +741,7 @@ namespace NadekoBot.Migrations
 | 
			
		||||
 | 
			
		||||
                    b.HasIndex("GuildConfigId");
 | 
			
		||||
 | 
			
		||||
                    b.ToTable("GCChannelId");
 | 
			
		||||
                    b.ToTable("GCChannelId", (string)null);
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
            modelBuilder.Entity("NadekoBot.Services.Database.Models.GroupName", b =>
 | 
			
		||||
@@ -767,7 +767,7 @@ namespace NadekoBot.Migrations
 | 
			
		||||
                    b.HasIndex("GuildConfigId", "Number")
 | 
			
		||||
                        .IsUnique();
 | 
			
		||||
 | 
			
		||||
                    b.ToTable("GroupName");
 | 
			
		||||
                    b.ToTable("GroupName", (string)null);
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
            modelBuilder.Entity("NadekoBot.Services.Database.Models.GuildConfig", b =>
 | 
			
		||||
@@ -891,7 +891,7 @@ namespace NadekoBot.Migrations
 | 
			
		||||
 | 
			
		||||
                    b.HasIndex("WarnExpireHours");
 | 
			
		||||
 | 
			
		||||
                    b.ToTable("GuildConfigs");
 | 
			
		||||
                    b.ToTable("GuildConfigs", (string)null);
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
            modelBuilder.Entity("NadekoBot.Services.Database.Models.IgnoredLogItem", b =>
 | 
			
		||||
@@ -917,7 +917,7 @@ namespace NadekoBot.Migrations
 | 
			
		||||
                    b.HasIndex("LogSettingId", "LogItemId", "ItemType")
 | 
			
		||||
                        .IsUnique();
 | 
			
		||||
 | 
			
		||||
                    b.ToTable("IgnoredLogChannels");
 | 
			
		||||
                    b.ToTable("IgnoredLogChannels", (string)null);
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
            modelBuilder.Entity("NadekoBot.Services.Database.Models.IgnoredVoicePresenceChannel", b =>
 | 
			
		||||
@@ -939,7 +939,7 @@ namespace NadekoBot.Migrations
 | 
			
		||||
 | 
			
		||||
                    b.HasIndex("LogSettingId");
 | 
			
		||||
 | 
			
		||||
                    b.ToTable("IgnoredVoicePresenceCHannels");
 | 
			
		||||
                    b.ToTable("IgnoredVoicePresenceCHannels", (string)null);
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
            modelBuilder.Entity("NadekoBot.Services.Database.Models.ImageOnlyChannel", b =>
 | 
			
		||||
@@ -962,7 +962,7 @@ namespace NadekoBot.Migrations
 | 
			
		||||
                    b.HasIndex("ChannelId")
 | 
			
		||||
                        .IsUnique();
 | 
			
		||||
 | 
			
		||||
                    b.ToTable("ImageOnlyChannels");
 | 
			
		||||
                    b.ToTable("ImageOnlyChannels", (string)null);
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
            modelBuilder.Entity("NadekoBot.Services.Database.Models.LogSetting", b =>
 | 
			
		||||
@@ -1027,7 +1027,7 @@ namespace NadekoBot.Migrations
 | 
			
		||||
                    b.HasIndex("GuildId")
 | 
			
		||||
                        .IsUnique();
 | 
			
		||||
 | 
			
		||||
                    b.ToTable("LogSettings");
 | 
			
		||||
                    b.ToTable("LogSettings", (string)null);
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
            modelBuilder.Entity("NadekoBot.Services.Database.Models.MusicPlayerSettings", b =>
 | 
			
		||||
@@ -1064,7 +1064,7 @@ namespace NadekoBot.Migrations
 | 
			
		||||
                    b.HasIndex("GuildId")
 | 
			
		||||
                        .IsUnique();
 | 
			
		||||
 | 
			
		||||
                    b.ToTable("MusicPlayerSettings");
 | 
			
		||||
                    b.ToTable("MusicPlayerSettings", (string)null);
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
            modelBuilder.Entity("NadekoBot.Services.Database.Models.MusicPlaylist", b =>
 | 
			
		||||
@@ -1087,7 +1087,7 @@ namespace NadekoBot.Migrations
 | 
			
		||||
 | 
			
		||||
                    b.HasKey("Id");
 | 
			
		||||
 | 
			
		||||
                    b.ToTable("MusicPlaylists");
 | 
			
		||||
                    b.ToTable("MusicPlaylists", (string)null);
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
            modelBuilder.Entity("NadekoBot.Services.Database.Models.MutedUserId", b =>
 | 
			
		||||
@@ -1109,7 +1109,7 @@ namespace NadekoBot.Migrations
 | 
			
		||||
 | 
			
		||||
                    b.HasIndex("GuildConfigId");
 | 
			
		||||
 | 
			
		||||
                    b.ToTable("MutedUserId");
 | 
			
		||||
                    b.ToTable("MutedUserId", (string)null);
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
            modelBuilder.Entity("NadekoBot.Services.Database.Models.NadekoExpression", b =>
 | 
			
		||||
@@ -1147,7 +1147,7 @@ namespace NadekoBot.Migrations
 | 
			
		||||
 | 
			
		||||
                    b.HasKey("Id");
 | 
			
		||||
 | 
			
		||||
                    b.ToTable("Expressions");
 | 
			
		||||
                    b.ToTable("Expressions", (string)null);
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
            modelBuilder.Entity("NadekoBot.Services.Database.Models.NsfwBlacklistedTag", b =>
 | 
			
		||||
@@ -1169,7 +1169,7 @@ namespace NadekoBot.Migrations
 | 
			
		||||
 | 
			
		||||
                    b.HasIndex("GuildId");
 | 
			
		||||
 | 
			
		||||
                    b.ToTable("NsfwBlacklistedTags");
 | 
			
		||||
                    b.ToTable("NsfwBlacklistedTags", (string)null);
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
            modelBuilder.Entity("NadekoBot.Services.Database.Models.Permissionv2", b =>
 | 
			
		||||
@@ -1209,7 +1209,7 @@ namespace NadekoBot.Migrations
 | 
			
		||||
 | 
			
		||||
                    b.HasIndex("GuildConfigId");
 | 
			
		||||
 | 
			
		||||
                    b.ToTable("Permissions");
 | 
			
		||||
                    b.ToTable("Permissions", (string)null);
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
            modelBuilder.Entity("NadekoBot.Services.Database.Models.PlantedCurrency", b =>
 | 
			
		||||
@@ -1246,7 +1246,7 @@ namespace NadekoBot.Migrations
 | 
			
		||||
                    b.HasIndex("MessageId")
 | 
			
		||||
                        .IsUnique();
 | 
			
		||||
 | 
			
		||||
                    b.ToTable("PlantedCurrency");
 | 
			
		||||
                    b.ToTable("PlantedCurrency", (string)null);
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
            modelBuilder.Entity("NadekoBot.Services.Database.Models.PlaylistSong", b =>
 | 
			
		||||
@@ -1280,7 +1280,7 @@ namespace NadekoBot.Migrations
 | 
			
		||||
 | 
			
		||||
                    b.HasIndex("MusicPlaylistId");
 | 
			
		||||
 | 
			
		||||
                    b.ToTable("PlaylistSong");
 | 
			
		||||
                    b.ToTable("PlaylistSong", (string)null);
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
            modelBuilder.Entity("NadekoBot.Services.Database.Models.Poll", b =>
 | 
			
		||||
@@ -1306,7 +1306,7 @@ namespace NadekoBot.Migrations
 | 
			
		||||
                    b.HasIndex("GuildId")
 | 
			
		||||
                        .IsUnique();
 | 
			
		||||
 | 
			
		||||
                    b.ToTable("Poll");
 | 
			
		||||
                    b.ToTable("Poll", (string)null);
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
            modelBuilder.Entity("NadekoBot.Services.Database.Models.PollAnswer", b =>
 | 
			
		||||
@@ -1331,7 +1331,7 @@ namespace NadekoBot.Migrations
 | 
			
		||||
 | 
			
		||||
                    b.HasIndex("PollId");
 | 
			
		||||
 | 
			
		||||
                    b.ToTable("PollAnswer");
 | 
			
		||||
                    b.ToTable("PollAnswer", (string)null);
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
            modelBuilder.Entity("NadekoBot.Services.Database.Models.PollVote", b =>
 | 
			
		||||
@@ -1356,7 +1356,7 @@ namespace NadekoBot.Migrations
 | 
			
		||||
 | 
			
		||||
                    b.HasIndex("PollId");
 | 
			
		||||
 | 
			
		||||
                    b.ToTable("PollVote");
 | 
			
		||||
                    b.ToTable("PollVote", (string)null);
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
            modelBuilder.Entity("NadekoBot.Services.Database.Models.Quote", b =>
 | 
			
		||||
@@ -1392,7 +1392,7 @@ namespace NadekoBot.Migrations
 | 
			
		||||
 | 
			
		||||
                    b.HasIndex("Keyword");
 | 
			
		||||
 | 
			
		||||
                    b.ToTable("Quotes");
 | 
			
		||||
                    b.ToTable("Quotes", (string)null);
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
            modelBuilder.Entity("NadekoBot.Services.Database.Models.ReactionRole", b =>
 | 
			
		||||
@@ -1417,7 +1417,7 @@ namespace NadekoBot.Migrations
 | 
			
		||||
 | 
			
		||||
                    b.HasIndex("ReactionRoleMessageId");
 | 
			
		||||
 | 
			
		||||
                    b.ToTable("ReactionRole");
 | 
			
		||||
                    b.ToTable("ReactionRole", (string)null);
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
            modelBuilder.Entity("NadekoBot.Services.Database.Models.ReactionRoleMessage", b =>
 | 
			
		||||
@@ -1448,7 +1448,7 @@ namespace NadekoBot.Migrations
 | 
			
		||||
 | 
			
		||||
                    b.HasIndex("GuildConfigId");
 | 
			
		||||
 | 
			
		||||
                    b.ToTable("ReactionRoleMessage");
 | 
			
		||||
                    b.ToTable("ReactionRoleMessage", (string)null);
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
            modelBuilder.Entity("NadekoBot.Services.Database.Models.Reminder", b =>
 | 
			
		||||
@@ -1482,7 +1482,7 @@ namespace NadekoBot.Migrations
 | 
			
		||||
 | 
			
		||||
                    b.HasIndex("When");
 | 
			
		||||
 | 
			
		||||
                    b.ToTable("Reminders");
 | 
			
		||||
                    b.ToTable("Reminders", (string)null);
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
            modelBuilder.Entity("NadekoBot.Services.Database.Models.Repeater", b =>
 | 
			
		||||
@@ -1517,7 +1517,7 @@ namespace NadekoBot.Migrations
 | 
			
		||||
 | 
			
		||||
                    b.HasKey("Id");
 | 
			
		||||
 | 
			
		||||
                    b.ToTable("Repeaters");
 | 
			
		||||
                    b.ToTable("Repeaters", (string)null);
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
            modelBuilder.Entity("NadekoBot.Services.Database.Models.RewardedUser", b =>
 | 
			
		||||
@@ -1546,7 +1546,7 @@ namespace NadekoBot.Migrations
 | 
			
		||||
                    b.HasIndex("PatreonUserId")
 | 
			
		||||
                        .IsUnique();
 | 
			
		||||
 | 
			
		||||
                    b.ToTable("RewardedUsers");
 | 
			
		||||
                    b.ToTable("RewardedUsers", (string)null);
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
            modelBuilder.Entity("NadekoBot.Services.Database.Models.RotatingPlayingStatus", b =>
 | 
			
		||||
@@ -1566,7 +1566,7 @@ namespace NadekoBot.Migrations
 | 
			
		||||
 | 
			
		||||
                    b.HasKey("Id");
 | 
			
		||||
 | 
			
		||||
                    b.ToTable("RotatingStatus");
 | 
			
		||||
                    b.ToTable("RotatingStatus", (string)null);
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
            modelBuilder.Entity("NadekoBot.Services.Database.Models.SelfAssignedRole", b =>
 | 
			
		||||
@@ -1597,7 +1597,7 @@ namespace NadekoBot.Migrations
 | 
			
		||||
                    b.HasIndex("GuildId", "RoleId")
 | 
			
		||||
                        .IsUnique();
 | 
			
		||||
 | 
			
		||||
                    b.ToTable("SelfAssignableRoles");
 | 
			
		||||
                    b.ToTable("SelfAssignableRoles", (string)null);
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
            modelBuilder.Entity("NadekoBot.Services.Database.Models.ShopEntry", b =>
 | 
			
		||||
@@ -1637,7 +1637,7 @@ namespace NadekoBot.Migrations
 | 
			
		||||
 | 
			
		||||
                    b.HasIndex("GuildConfigId");
 | 
			
		||||
 | 
			
		||||
                    b.ToTable("ShopEntry");
 | 
			
		||||
                    b.ToTable("ShopEntry", (string)null);
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
            modelBuilder.Entity("NadekoBot.Services.Database.Models.ShopEntryItem", b =>
 | 
			
		||||
@@ -1659,7 +1659,7 @@ namespace NadekoBot.Migrations
 | 
			
		||||
 | 
			
		||||
                    b.HasIndex("ShopEntryId");
 | 
			
		||||
 | 
			
		||||
                    b.ToTable("ShopEntryItem");
 | 
			
		||||
                    b.ToTable("ShopEntryItem", (string)null);
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
            modelBuilder.Entity("NadekoBot.Services.Database.Models.SlowmodeIgnoredRole", b =>
 | 
			
		||||
@@ -1681,7 +1681,7 @@ namespace NadekoBot.Migrations
 | 
			
		||||
 | 
			
		||||
                    b.HasIndex("GuildConfigId");
 | 
			
		||||
 | 
			
		||||
                    b.ToTable("SlowmodeIgnoredRole");
 | 
			
		||||
                    b.ToTable("SlowmodeIgnoredRole", (string)null);
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
            modelBuilder.Entity("NadekoBot.Services.Database.Models.SlowmodeIgnoredUser", b =>
 | 
			
		||||
@@ -1703,7 +1703,7 @@ namespace NadekoBot.Migrations
 | 
			
		||||
 | 
			
		||||
                    b.HasIndex("GuildConfigId");
 | 
			
		||||
 | 
			
		||||
                    b.ToTable("SlowmodeIgnoredUser");
 | 
			
		||||
                    b.ToTable("SlowmodeIgnoredUser", (string)null);
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
            modelBuilder.Entity("NadekoBot.Services.Database.Models.StreamRoleBlacklistedUser", b =>
 | 
			
		||||
@@ -1728,7 +1728,7 @@ namespace NadekoBot.Migrations
 | 
			
		||||
 | 
			
		||||
                    b.HasIndex("StreamRoleSettingsId");
 | 
			
		||||
 | 
			
		||||
                    b.ToTable("StreamRoleBlacklistedUser");
 | 
			
		||||
                    b.ToTable("StreamRoleBlacklistedUser", (string)null);
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
            modelBuilder.Entity("NadekoBot.Services.Database.Models.StreamRoleSettings", b =>
 | 
			
		||||
@@ -1760,7 +1760,7 @@ namespace NadekoBot.Migrations
 | 
			
		||||
                    b.HasIndex("GuildConfigId")
 | 
			
		||||
                        .IsUnique();
 | 
			
		||||
 | 
			
		||||
                    b.ToTable("StreamRoleSettings");
 | 
			
		||||
                    b.ToTable("StreamRoleSettings", (string)null);
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
            modelBuilder.Entity("NadekoBot.Services.Database.Models.StreamRoleWhitelistedUser", b =>
 | 
			
		||||
@@ -1785,7 +1785,7 @@ namespace NadekoBot.Migrations
 | 
			
		||||
 | 
			
		||||
                    b.HasIndex("StreamRoleSettingsId");
 | 
			
		||||
 | 
			
		||||
                    b.ToTable("StreamRoleWhitelistedUser");
 | 
			
		||||
                    b.ToTable("StreamRoleWhitelistedUser", (string)null);
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
            modelBuilder.Entity("NadekoBot.Services.Database.Models.UnbanTimer", b =>
 | 
			
		||||
@@ -1810,7 +1810,7 @@ namespace NadekoBot.Migrations
 | 
			
		||||
 | 
			
		||||
                    b.HasIndex("GuildConfigId");
 | 
			
		||||
 | 
			
		||||
                    b.ToTable("UnbanTimer");
 | 
			
		||||
                    b.ToTable("UnbanTimer", (string)null);
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
            modelBuilder.Entity("NadekoBot.Services.Database.Models.UnmuteTimer", b =>
 | 
			
		||||
@@ -1835,7 +1835,7 @@ namespace NadekoBot.Migrations
 | 
			
		||||
 | 
			
		||||
                    b.HasIndex("GuildConfigId");
 | 
			
		||||
 | 
			
		||||
                    b.ToTable("UnmuteTimer");
 | 
			
		||||
                    b.ToTable("UnmuteTimer", (string)null);
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
            modelBuilder.Entity("NadekoBot.Services.Database.Models.UnroleTimer", b =>
 | 
			
		||||
@@ -1863,7 +1863,7 @@ namespace NadekoBot.Migrations
 | 
			
		||||
 | 
			
		||||
                    b.HasIndex("GuildConfigId");
 | 
			
		||||
 | 
			
		||||
                    b.ToTable("UnroleTimer");
 | 
			
		||||
                    b.ToTable("UnroleTimer", (string)null);
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
            modelBuilder.Entity("NadekoBot.Services.Database.Models.UserXpStats", b =>
 | 
			
		||||
@@ -1908,7 +1908,7 @@ namespace NadekoBot.Migrations
 | 
			
		||||
                    b.HasIndex("UserId", "GuildId")
 | 
			
		||||
                        .IsUnique();
 | 
			
		||||
 | 
			
		||||
                    b.ToTable("UserXpStats");
 | 
			
		||||
                    b.ToTable("UserXpStats", (string)null);
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
            modelBuilder.Entity("NadekoBot.Services.Database.Models.VcRoleInfo", b =>
 | 
			
		||||
@@ -1933,7 +1933,7 @@ namespace NadekoBot.Migrations
 | 
			
		||||
 | 
			
		||||
                    b.HasIndex("GuildConfigId");
 | 
			
		||||
 | 
			
		||||
                    b.ToTable("VcRoleInfo");
 | 
			
		||||
                    b.ToTable("VcRoleInfo", (string)null);
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
            modelBuilder.Entity("NadekoBot.Services.Database.Models.WaifuInfo", b =>
 | 
			
		||||
@@ -1968,7 +1968,7 @@ namespace NadekoBot.Migrations
 | 
			
		||||
                    b.HasIndex("WaifuId")
 | 
			
		||||
                        .IsUnique();
 | 
			
		||||
 | 
			
		||||
                    b.ToTable("WaifuInfo");
 | 
			
		||||
                    b.ToTable("WaifuInfo", (string)null);
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
            modelBuilder.Entity("NadekoBot.Services.Database.Models.WaifuItem", b =>
 | 
			
		||||
@@ -1993,7 +1993,7 @@ namespace NadekoBot.Migrations
 | 
			
		||||
 | 
			
		||||
                    b.HasIndex("WaifuInfoId");
 | 
			
		||||
 | 
			
		||||
                    b.ToTable("WaifuItem");
 | 
			
		||||
                    b.ToTable("WaifuItem", (string)null);
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
            modelBuilder.Entity("NadekoBot.Services.Database.Models.WaifuUpdate", b =>
 | 
			
		||||
@@ -2025,7 +2025,7 @@ namespace NadekoBot.Migrations
 | 
			
		||||
 | 
			
		||||
                    b.HasIndex("UserId");
 | 
			
		||||
 | 
			
		||||
                    b.ToTable("WaifuUpdates");
 | 
			
		||||
                    b.ToTable("WaifuUpdates", (string)null);
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
            modelBuilder.Entity("NadekoBot.Services.Database.Models.Warning", b =>
 | 
			
		||||
@@ -2068,7 +2068,7 @@ namespace NadekoBot.Migrations
 | 
			
		||||
 | 
			
		||||
                    b.HasIndex("UserId");
 | 
			
		||||
 | 
			
		||||
                    b.ToTable("Warnings");
 | 
			
		||||
                    b.ToTable("Warnings", (string)null);
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
            modelBuilder.Entity("NadekoBot.Services.Database.Models.WarningPunishment", b =>
 | 
			
		||||
@@ -2099,7 +2099,7 @@ namespace NadekoBot.Migrations
 | 
			
		||||
 | 
			
		||||
                    b.HasIndex("GuildConfigId");
 | 
			
		||||
 | 
			
		||||
                    b.ToTable("WarningPunishment");
 | 
			
		||||
                    b.ToTable("WarningPunishment", (string)null);
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
            modelBuilder.Entity("NadekoBot.Services.Database.Models.XpCurrencyReward", b =>
 | 
			
		||||
@@ -2124,7 +2124,7 @@ namespace NadekoBot.Migrations
 | 
			
		||||
 | 
			
		||||
                    b.HasIndex("XpSettingsId");
 | 
			
		||||
 | 
			
		||||
                    b.ToTable("XpCurrencyReward");
 | 
			
		||||
                    b.ToTable("XpCurrencyReward", (string)null);
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
            modelBuilder.Entity("NadekoBot.Services.Database.Models.XpRoleReward", b =>
 | 
			
		||||
@@ -2153,7 +2153,7 @@ namespace NadekoBot.Migrations
 | 
			
		||||
                    b.HasIndex("XpSettingsId", "Level")
 | 
			
		||||
                        .IsUnique();
 | 
			
		||||
 | 
			
		||||
                    b.ToTable("XpRoleReward");
 | 
			
		||||
                    b.ToTable("XpRoleReward", (string)null);
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
            modelBuilder.Entity("NadekoBot.Services.Database.Models.XpSettings", b =>
 | 
			
		||||
@@ -2176,7 +2176,7 @@ namespace NadekoBot.Migrations
 | 
			
		||||
                    b.HasIndex("GuildConfigId")
 | 
			
		||||
                        .IsUnique();
 | 
			
		||||
 | 
			
		||||
                    b.ToTable("XpSettings");
 | 
			
		||||
                    b.ToTable("XpSettings", (string)null);
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
            modelBuilder.Entity("NadekoBot.Db.Models.ClubApplicants", b =>
 | 
			
		||||
 
 | 
			
		||||
@@ -10,27 +10,26 @@ namespace NadekoBot.Modules.Administration
 | 
			
		||||
        [OwnerOnly]
 | 
			
		||||
        public partial class DangerousCommands : NadekoModule<DangerousCommandsService>
 | 
			
		||||
        {
 | 
			
		||||
            private async Task InternalExecSql(string sql, params object[] reps)
 | 
			
		||||
            private async Task ConfirmActionInternalAsync(string name, Func<Task> action)
 | 
			
		||||
            {
 | 
			
		||||
                sql = string.Format(sql, reps);
 | 
			
		||||
                try
 | 
			
		||||
                {
 | 
			
		||||
                    var embed = _eb.Create()
 | 
			
		||||
                                   .WithTitle(GetText(strs.sql_confirm_exec))
 | 
			
		||||
                                   .WithDescription(Format.Code(sql));
 | 
			
		||||
                                   .WithDescription(name);
 | 
			
		||||
 | 
			
		||||
                    if (!await PromptUserConfirmAsync(embed))
 | 
			
		||||
                        return;
 | 
			
		||||
 | 
			
		||||
                    var res = await _service.ExecuteSql(sql);
 | 
			
		||||
                    await SendConfirmAsync(res.ToString());
 | 
			
		||||
                    await action();
 | 
			
		||||
                    await ctx.OkAsync();
 | 
			
		||||
                }
 | 
			
		||||
                catch (Exception ex)
 | 
			
		||||
                {
 | 
			
		||||
                    await SendErrorAsync(ex.ToString());
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            
 | 
			
		||||
            [Cmd]
 | 
			
		||||
            [OwnerOnly]
 | 
			
		||||
            public partial Task SqlSelect([Leftover] string sql)
 | 
			
		||||
@@ -57,38 +56,55 @@ namespace NadekoBot.Modules.Administration
 | 
			
		||||
 | 
			
		||||
            [Cmd]
 | 
			
		||||
            [OwnerOnly]
 | 
			
		||||
            public partial Task SqlExec([Leftover] string sql)
 | 
			
		||||
                => InternalExecSql(sql);
 | 
			
		||||
            public async partial Task SqlExec([Leftover] string sql)
 | 
			
		||||
            {
 | 
			
		||||
                try
 | 
			
		||||
                {
 | 
			
		||||
                    var embed = _eb.Create()
 | 
			
		||||
                                   .WithTitle(GetText(strs.sql_confirm_exec))
 | 
			
		||||
                                   .WithDescription(Format.Code(sql));
 | 
			
		||||
 | 
			
		||||
                    if (!await PromptUserConfirmAsync(embed))
 | 
			
		||||
                        return;
 | 
			
		||||
 | 
			
		||||
                    var res = await _service.ExecuteSql(sql);
 | 
			
		||||
                    await SendConfirmAsync(res.ToString());
 | 
			
		||||
                }
 | 
			
		||||
                catch (Exception ex)
 | 
			
		||||
                {
 | 
			
		||||
                    await SendErrorAsync(ex.ToString());
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            [Cmd]
 | 
			
		||||
            [OwnerOnly]
 | 
			
		||||
            public partial Task DeleteWaifus()
 | 
			
		||||
                => SqlExec(DangerousCommandsService.WAIFUS_DELETE_SQL);
 | 
			
		||||
                => ConfirmActionInternalAsync("Delete Waifus", () => _service.DeleteWaifus());
 | 
			
		||||
 | 
			
		||||
            [Cmd]
 | 
			
		||||
            [OwnerOnly]
 | 
			
		||||
            public partial Task DeleteWaifu(IUser user)
 | 
			
		||||
                => DeleteWaifu(user.Id);
 | 
			
		||||
            public async partial Task DeleteWaifu(IUser user)
 | 
			
		||||
                => await DeleteWaifu(user.Id);
 | 
			
		||||
 | 
			
		||||
            [Cmd]
 | 
			
		||||
            [OwnerOnly]
 | 
			
		||||
            public partial Task DeleteWaifu(ulong userId)
 | 
			
		||||
                => InternalExecSql(DangerousCommandsService.WAIFU_DELETE_SQL, userId);
 | 
			
		||||
                => ConfirmActionInternalAsync($"Delete Waifu {userId}", () => _service.DeleteWaifu(userId));
 | 
			
		||||
 | 
			
		||||
            [Cmd]
 | 
			
		||||
            [OwnerOnly]
 | 
			
		||||
            public partial Task DeleteCurrency()
 | 
			
		||||
                => SqlExec(DangerousCommandsService.CURRENCY_DELETE_SQL);
 | 
			
		||||
                => ConfirmActionInternalAsync("Delete Currency", () => _service.DeleteCurrency());
 | 
			
		||||
 | 
			
		||||
            [Cmd]
 | 
			
		||||
            [OwnerOnly]
 | 
			
		||||
            public partial Task DeletePlaylists()
 | 
			
		||||
                => SqlExec(DangerousCommandsService.MUSIC_PLAYLIST_DELETE_SQL);
 | 
			
		||||
                => ConfirmActionInternalAsync("Delete Playlists", () => _service.DeletePlaylists());
 | 
			
		||||
 | 
			
		||||
            [Cmd]
 | 
			
		||||
            [OwnerOnly]
 | 
			
		||||
            public partial Task DeleteXp()
 | 
			
		||||
                => SqlExec(DangerousCommandsService.XP_DELETE_SQL);
 | 
			
		||||
                => ConfirmActionInternalAsync("Delete Xp", () => _service.DeleteXp());
 | 
			
		||||
 | 
			
		||||
            [Cmd]
 | 
			
		||||
            [OwnerOnly]
 | 
			
		||||
@@ -108,10 +124,6 @@ namespace NadekoBot.Modules.Administration
 | 
			
		||||
            [OwnerOnly]
 | 
			
		||||
            public partial Task PurgeUser([Leftover] IUser user)
 | 
			
		||||
                => PurgeUser(user.Id);
 | 
			
		||||
            //[NadekoCommand, Usage, Description, Aliases]
 | 
			
		||||
            //[OwnerOnly]
 | 
			
		||||
            //public partial Task DeleteUnusedCrnQ() =>
 | 
			
		||||
            //    SqlExec(DangerousCommandsService.DeleteUnusedExpressionsAndQuotes);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -2,46 +2,83 @@
 | 
			
		||||
using LinqToDB;
 | 
			
		||||
using LinqToDB.EntityFrameworkCore;
 | 
			
		||||
using Microsoft.EntityFrameworkCore;
 | 
			
		||||
using NadekoBot.Db.Models;
 | 
			
		||||
using NadekoBot.Services.Database.Models;
 | 
			
		||||
 | 
			
		||||
namespace NadekoBot.Modules.Administration.Services;
 | 
			
		||||
 | 
			
		||||
public class DangerousCommandsService : INService
 | 
			
		||||
{
 | 
			
		||||
    public const string WAIFUS_DELETE_SQL = @"DELETE FROM WaifuUpdates;
 | 
			
		||||
DELETE FROM WaifuItem;
 | 
			
		||||
DELETE FROM WaifuInfo;";
 | 
			
		||||
 | 
			
		||||
    public const string WAIFU_DELETE_SQL =
 | 
			
		||||
        @"DELETE FROM WaifuUpdates WHERE UserId=(SELECT Id FROM DiscordUser WHERE UserId={0});
 | 
			
		||||
DELETE FROM WaifuItem WHERE WaifuInfoId=(SELECT Id FROM WaifuInfo WHERE WaifuId=(SELECT Id FROM DiscordUser WHERE UserId={0}));
 | 
			
		||||
UPDATE WaifuInfo SET ClaimerId=NULL WHERE ClaimerId=(SELECT Id FROM DiscordUser WHERE UserId={0});
 | 
			
		||||
DELETE FROM WaifuInfo WHERE WaifuId=(SELECT Id FROM DiscordUser WHERE UserId={0});";
 | 
			
		||||
 | 
			
		||||
    public const string CURRENCY_DELETE_SQL =
 | 
			
		||||
        "UPDATE DiscordUser SET CurrencyAmount=0; DELETE FROM CurrencyTransactions; DELETE FROM PlantedCurrency;";
 | 
			
		||||
 | 
			
		||||
    public const string MUSIC_PLAYLIST_DELETE_SQL = "DELETE FROM MusicPlaylists;";
 | 
			
		||||
 | 
			
		||||
    public const string XP_DELETE_SQL = @"DELETE FROM UserXpStats;
 | 
			
		||||
UPDATE DiscordUser
 | 
			
		||||
SET ClubId=NULL,
 | 
			
		||||
    IsClubAdmin=0,
 | 
			
		||||
    TotalXp=0;
 | 
			
		||||
DELETE FROM ClubApplicants;
 | 
			
		||||
DELETE FROM ClubBans;
 | 
			
		||||
DELETE FROM Clubs;";
 | 
			
		||||
//        public const string DeleteUnusedExpressionsAndQuotes = @"DELETE FROM Expressions 
 | 
			
		||||
//WHERE UseCount=0 AND (DateAdded < date('now', '-7 day') OR DateAdded is null);
 | 
			
		||||
 | 
			
		||||
//DELETE FROM Quotes 
 | 
			
		||||
//WHERE UseCount=0 AND (DateAdded < date('now', '-7 day') OR DateAdded is null);";
 | 
			
		||||
 | 
			
		||||
    private readonly DbService _db;
 | 
			
		||||
 | 
			
		||||
    public DangerousCommandsService(DbService db)
 | 
			
		||||
        => _db = db;
 | 
			
		||||
 | 
			
		||||
    public async Task DeleteXp()
 | 
			
		||||
    {
 | 
			
		||||
        await using var ctx = _db.GetDbContext();
 | 
			
		||||
        await ctx.DiscordUser.UpdateAsync(_ => new DiscordUser()
 | 
			
		||||
        {
 | 
			
		||||
            Club = null,
 | 
			
		||||
            IsClubAdmin = false,
 | 
			
		||||
            TotalXp = 0
 | 
			
		||||
        });
 | 
			
		||||
        await ctx.ClubApplicants.DeleteAsync();
 | 
			
		||||
        await ctx.ClubBans.DeleteAsync();
 | 
			
		||||
        await ctx.Clubs.DeleteAsync();
 | 
			
		||||
        await ctx.SaveChangesAsync();
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    public async Task DeleteWaifus()
 | 
			
		||||
    {
 | 
			
		||||
        await using var ctx = _db.GetDbContext();
 | 
			
		||||
        await ctx.WaifuUpdates.DeleteAsync();
 | 
			
		||||
        await ctx.WaifuItem.DeleteAsync();
 | 
			
		||||
        await ctx.WaifuInfo.DeleteAsync();
 | 
			
		||||
        await ctx.SaveChangesAsync();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public async Task DeleteWaifu(ulong userId)
 | 
			
		||||
    {
 | 
			
		||||
        await using var ctx = _db.GetDbContext();
 | 
			
		||||
        await ctx.WaifuUpdates
 | 
			
		||||
                 .Where(x => x.User.UserId == userId)
 | 
			
		||||
                 .DeleteAsync();
 | 
			
		||||
        await ctx.WaifuItem
 | 
			
		||||
                 .Where(x => x.WaifuInfo.Waifu.UserId == userId)
 | 
			
		||||
                 .DeleteAsync();
 | 
			
		||||
        await ctx.WaifuInfo
 | 
			
		||||
                 .Where(x => x.Claimer.UserId == userId)
 | 
			
		||||
                 .UpdateAsync(old => new WaifuInfo()
 | 
			
		||||
                 {
 | 
			
		||||
                     ClaimerId = null,
 | 
			
		||||
                 });
 | 
			
		||||
        await ctx.WaifuInfo
 | 
			
		||||
                 .Where(x => x.Waifu.UserId == userId)
 | 
			
		||||
                 .DeleteAsync();
 | 
			
		||||
        await ctx.SaveChangesAsync();
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    public async Task DeletePlaylists()
 | 
			
		||||
    {
 | 
			
		||||
        await using var ctx = _db.GetDbContext();
 | 
			
		||||
        await ctx.MusicPlaylists.DeleteAsync();
 | 
			
		||||
        await ctx.SaveChangesAsync();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public async Task DeleteCurrency()
 | 
			
		||||
    {
 | 
			
		||||
        await using var ctx = _db.GetDbContext();
 | 
			
		||||
        await ctx.DiscordUser.UpdateAsync(_ => new DiscordUser()
 | 
			
		||||
        {
 | 
			
		||||
            CurrencyAmount = 0
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        await ctx.CurrencyTransactions.DeleteAsync();
 | 
			
		||||
        await ctx.PlantedCurrency.DeleteAsync();
 | 
			
		||||
        await ctx.SaveChangesAsync();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public async Task<int> ExecuteSql(string sql)
 | 
			
		||||
    {
 | 
			
		||||
        int res;
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,5 @@
 | 
			
		||||
#nullable disable
 | 
			
		||||
using LinqToDB;
 | 
			
		||||
using Microsoft.EntityFrameworkCore;
 | 
			
		||||
using NadekoBot.Common.ModuleBehaviors;
 | 
			
		||||
using NadekoBot.Common.TypeReaders.Models;
 | 
			
		||||
@@ -224,16 +225,34 @@ public class UserPunishService : INService, IReadyExecutor
 | 
			
		||||
    public async Task CheckAllWarnExpiresAsync()
 | 
			
		||||
    {
 | 
			
		||||
        await using var uow = _db.GetDbContext();
 | 
			
		||||
        var cleared = await uow.Database.ExecuteSqlRawAsync(@"UPDATE Warnings
 | 
			
		||||
SET Forgiven = 1,
 | 
			
		||||
    ForgivenBy = 'Expiry'
 | 
			
		||||
WHERE GuildId in (SELECT GuildId FROM GuildConfigs WHERE WarnExpireHours > 0 AND WarnExpireAction = 0)
 | 
			
		||||
	AND Forgiven = 0
 | 
			
		||||
	AND DateAdded < datetime('now', (SELECT '-' || WarnExpireHours || ' hours' FROM GuildConfigs as gc WHERE gc.GuildId = Warnings.GuildId));");
 | 
			
		||||
        var cleared = await uow.Warnings
 | 
			
		||||
                               .Where(x => uow.GuildConfigs
 | 
			
		||||
                                                 .Any(y => y.GuildId == x.GuildId
 | 
			
		||||
                                                           && y.WarnExpireHours > 0
 | 
			
		||||
                                                           && y.WarnExpireAction == WarnExpireAction.Clear)
 | 
			
		||||
                                           && x.Forgiven == false 
 | 
			
		||||
                                           && x.DateAdded
 | 
			
		||||
                                           < DateTime.UtcNow.AddHours(-uow.GuildConfigs
 | 
			
		||||
                                                                          .Where(y => x.GuildId == y.GuildId)
 | 
			
		||||
                                                                          .Select(y => y.WarnExpireHours)
 | 
			
		||||
                                                                          .First()))
 | 
			
		||||
                               .UpdateAsync(_ => new()
 | 
			
		||||
                               {
 | 
			
		||||
                                   Forgiven = true,
 | 
			
		||||
                                   ForgivenBy = "expiry"
 | 
			
		||||
                               });
 | 
			
		||||
 | 
			
		||||
        var deleted = await uow.Database.ExecuteSqlRawAsync(@"DELETE FROM Warnings
 | 
			
		||||
WHERE GuildId in (SELECT GuildId FROM GuildConfigs WHERE WarnExpireHours > 0 AND WarnExpireAction = 1)
 | 
			
		||||
	AND DateAdded < datetime('now', (SELECT '-' || WarnExpireHours || ' hours' FROM GuildConfigs as gc WHERE gc.GuildId = Warnings.GuildId));");
 | 
			
		||||
        var deleted = await uow.Warnings
 | 
			
		||||
                               .Where(x => uow.GuildConfigs
 | 
			
		||||
                                              .Any(y => y.GuildId == x.GuildId
 | 
			
		||||
                                                        && y.WarnExpireHours > 0
 | 
			
		||||
                                                        && y.WarnExpireAction == WarnExpireAction.Delete)
 | 
			
		||||
                                           && x.DateAdded
 | 
			
		||||
                                           < DateTime.UtcNow.AddHours(-uow.GuildConfigs
 | 
			
		||||
                                                                          .Where(y => x.GuildId == y.GuildId)
 | 
			
		||||
                                                                          .Select(y => y.WarnExpireHours)
 | 
			
		||||
                                                                          .First()))
 | 
			
		||||
                               .DeleteAsync();
 | 
			
		||||
 | 
			
		||||
        if (cleared > 0 || deleted > 0)
 | 
			
		||||
        {
 | 
			
		||||
@@ -241,6 +260,8 @@ WHERE GuildId in (SELECT GuildId FROM GuildConfigs WHERE WarnExpireHours > 0 AND
 | 
			
		||||
                cleared,
 | 
			
		||||
                deleted);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        await uow.SaveChangesAsync();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public async Task CheckWarnExpiresAsync(ulong guildId)
 | 
			
		||||
@@ -251,21 +272,24 @@ WHERE GuildId in (SELECT GuildId FROM GuildConfigs WHERE WarnExpireHours > 0 AND
 | 
			
		||||
        if (config.WarnExpireHours == 0)
 | 
			
		||||
            return;
 | 
			
		||||
 | 
			
		||||
        var hours = $"{-config.WarnExpireHours} hours";
 | 
			
		||||
        if (config.WarnExpireAction == WarnExpireAction.Clear)
 | 
			
		||||
        {
 | 
			
		||||
            await uow.Database.ExecuteSqlInterpolatedAsync($@"UPDATE warnings
 | 
			
		||||
SET Forgiven = 1,
 | 
			
		||||
    ForgivenBy = 'Expiry'
 | 
			
		||||
WHERE GuildId={guildId}
 | 
			
		||||
    AND Forgiven = 0
 | 
			
		||||
    AND DateAdded < datetime('now', {hours})");
 | 
			
		||||
            await uow.Warnings
 | 
			
		||||
                     .Where(x => x.GuildId == guildId
 | 
			
		||||
                                 && x.Forgiven == false
 | 
			
		||||
                                 && x.DateAdded < DateTime.UtcNow.AddHours(-config.WarnExpireHours))
 | 
			
		||||
                     .UpdateAsync(_ => new()
 | 
			
		||||
                     {
 | 
			
		||||
                         Forgiven = true,
 | 
			
		||||
                         ForgivenBy = "expiry"
 | 
			
		||||
                     });
 | 
			
		||||
        }
 | 
			
		||||
        else if (config.WarnExpireAction == WarnExpireAction.Delete)
 | 
			
		||||
        {
 | 
			
		||||
            await uow.Database.ExecuteSqlInterpolatedAsync($@"DELETE FROM warnings
 | 
			
		||||
WHERE GuildId={guildId}
 | 
			
		||||
    AND DateAdded < datetime('now', {hours})");
 | 
			
		||||
            await uow.Warnings
 | 
			
		||||
                     .Where(x => x.GuildId == guildId
 | 
			
		||||
                                 && x.DateAdded < DateTime.UtcNow.AddHours(-config.WarnExpireHours))
 | 
			
		||||
                     .DeleteAsync();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        await uow.SaveChangesAsync();
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user