diff --git a/ModerationBot.sln b/ModerationBot.sln
new file mode 100644
index 0000000..1891670
--- /dev/null
+++ b/ModerationBot.sln
@@ -0,0 +1,161 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 17
+VisualStudioVersion = 17.0.31903.59
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "LibMatrix", "LibMatrix", "{936A3DB8-59EE-4F00-AF73-F677F47B8217}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ArcaneLibs", "ArcaneLibs", "{2FF6B89E-4B6A-409F-84FA-EEC0D0E30095}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ArcaneLibs", "LibMatrix\ArcaneLibs\ArcaneLibs\ArcaneLibs.csproj", "{3093BA83-1A30-4462-B5E2-42BBAA3416FF}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ArcaneLibs.Blazor.Components", "LibMatrix\ArcaneLibs\ArcaneLibs.Blazor.Components\ArcaneLibs.Blazor.Components.csproj", "{19AEA6EC-6918-462D-8448-2E15032C6BFD}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ArcaneLibs.Legacy", "LibMatrix\ArcaneLibs\ArcaneLibs.Legacy\ArcaneLibs.Legacy.csproj", "{A97C3494-C68A-4B36-A64A-1567D0313E92}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ArcaneLibs.Logging", "LibMatrix\ArcaneLibs\ArcaneLibs.Logging\ArcaneLibs.Logging.csproj", "{DDAE66B2-31B0-4332-B9E9-3F28B4336B0D}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ArcaneLibs.StringNormalisation", "LibMatrix\ArcaneLibs\ArcaneLibs.StringNormalisation\ArcaneLibs.StringNormalisation.csproj", "{6042C750-8881-4AAE-8F1E-5FAEB730300D}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ArcaneLibs.Timings", "LibMatrix\ArcaneLibs\ArcaneLibs.Timings\ArcaneLibs.Timings.csproj", "{51D305FB-362A-4038-8ED6-91DD2D3D4551}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ArcaneLibs.UsageTest", "LibMatrix\ArcaneLibs\ArcaneLibs.UsageTest\ArcaneLibs.UsageTest.csproj", "{6B61BDF3-FAB2-4859-9D0E-99E2BACB1735}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ArcaneLib.Tests", "LibMatrix\ArcaneLibs\ArcaneLib.Tests\ArcaneLib.Tests.csproj", "{02174E9A-6500-4A32-8BE6-3749DE188BFC}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LibMatrix.EventTypes", "LibMatrix\LibMatrix.EventTypes\LibMatrix.EventTypes.csproj", "{B0FB923E-DA7B-49B6-B34B-B6730A52754B}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LibMatrix", "LibMatrix\LibMatrix\LibMatrix.csproj", "{A4FD5687-B963-49ED-ABC1-030A64347FE3}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LibMatrix.MxApiExtensions", "LibMatrix\LibMatrix.MxApiExtensions\LibMatrix.MxApiExtensions.csproj", "{B4010E66-35D0-4060-8265-E4BA81825A5F}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tests", "Tests", "{25D6A95A-856B-4C76-A144-8E7F718139F9}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LibMatrix.HomeserverEmulator", "LibMatrix\Tests\LibMatrix.HomeserverEmulator\LibMatrix.HomeserverEmulator.csproj", "{DB0A52A1-8B7D-4230-832A-1F9E7C0BB5D6}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LibMatrix.Tests", "LibMatrix\Tests\LibMatrix.Tests\LibMatrix.Tests.csproj", "{4EFA7ECF-19D1-4054-AFCE-1E8F6CEC7AB0}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TestDataGenerator", "LibMatrix\Tests\TestDataGenerator\TestDataGenerator.csproj", "{AFD7C054-B2ED-4465-BA2F-8BC6B0E90D85}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Utilities", "Utilities", "{4BBABE0C-2F0B-4174-BD45-043F66AAA205}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LibMatrix.DebugDataValidationApi", "LibMatrix\Utilities\LibMatrix.DebugDataValidationApi\LibMatrix.DebugDataValidationApi.csproj", "{92373993-AE27-4321-B7E3-7597F0B16461}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LibMatrix.DevTestBot", "LibMatrix\Utilities\LibMatrix.DevTestBot\LibMatrix.DevTestBot.csproj", "{2E39F6B2-A861-4230-A18E-E6586AF86CC4}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LibMatrix.JsonSerializerContextGenerator", "LibMatrix\Utilities\LibMatrix.JsonSerializerContextGenerator\LibMatrix.JsonSerializerContextGenerator.csproj", "{6F2D0A13-CBB6-4186-9C83-538486963985}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LibMatrix.Utilities.Bot", "LibMatrix\Utilities\LibMatrix.Utilities.Bot\LibMatrix.Utilities.Bot.csproj", "{E75F7B39-3A15-401E-8400-548C77A5FDEE}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ModerationBot", "ModerationBot\ModerationBot.csproj", "{81AC8293-A9CB-4466-84E2-C04BEB2AC852}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {3093BA83-1A30-4462-B5E2-42BBAA3416FF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {3093BA83-1A30-4462-B5E2-42BBAA3416FF}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {3093BA83-1A30-4462-B5E2-42BBAA3416FF}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {3093BA83-1A30-4462-B5E2-42BBAA3416FF}.Release|Any CPU.Build.0 = Release|Any CPU
+ {19AEA6EC-6918-462D-8448-2E15032C6BFD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {19AEA6EC-6918-462D-8448-2E15032C6BFD}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {19AEA6EC-6918-462D-8448-2E15032C6BFD}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {19AEA6EC-6918-462D-8448-2E15032C6BFD}.Release|Any CPU.Build.0 = Release|Any CPU
+ {A97C3494-C68A-4B36-A64A-1567D0313E92}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {A97C3494-C68A-4B36-A64A-1567D0313E92}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {A97C3494-C68A-4B36-A64A-1567D0313E92}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {A97C3494-C68A-4B36-A64A-1567D0313E92}.Release|Any CPU.Build.0 = Release|Any CPU
+ {DDAE66B2-31B0-4332-B9E9-3F28B4336B0D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {DDAE66B2-31B0-4332-B9E9-3F28B4336B0D}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {DDAE66B2-31B0-4332-B9E9-3F28B4336B0D}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {DDAE66B2-31B0-4332-B9E9-3F28B4336B0D}.Release|Any CPU.Build.0 = Release|Any CPU
+ {6042C750-8881-4AAE-8F1E-5FAEB730300D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {6042C750-8881-4AAE-8F1E-5FAEB730300D}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {6042C750-8881-4AAE-8F1E-5FAEB730300D}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {6042C750-8881-4AAE-8F1E-5FAEB730300D}.Release|Any CPU.Build.0 = Release|Any CPU
+ {51D305FB-362A-4038-8ED6-91DD2D3D4551}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {51D305FB-362A-4038-8ED6-91DD2D3D4551}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {51D305FB-362A-4038-8ED6-91DD2D3D4551}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {51D305FB-362A-4038-8ED6-91DD2D3D4551}.Release|Any CPU.Build.0 = Release|Any CPU
+ {6B61BDF3-FAB2-4859-9D0E-99E2BACB1735}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {6B61BDF3-FAB2-4859-9D0E-99E2BACB1735}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {6B61BDF3-FAB2-4859-9D0E-99E2BACB1735}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {6B61BDF3-FAB2-4859-9D0E-99E2BACB1735}.Release|Any CPU.Build.0 = Release|Any CPU
+ {02174E9A-6500-4A32-8BE6-3749DE188BFC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {02174E9A-6500-4A32-8BE6-3749DE188BFC}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {02174E9A-6500-4A32-8BE6-3749DE188BFC}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {02174E9A-6500-4A32-8BE6-3749DE188BFC}.Release|Any CPU.Build.0 = Release|Any CPU
+ {B0FB923E-DA7B-49B6-B34B-B6730A52754B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {B0FB923E-DA7B-49B6-B34B-B6730A52754B}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {B0FB923E-DA7B-49B6-B34B-B6730A52754B}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {B0FB923E-DA7B-49B6-B34B-B6730A52754B}.Release|Any CPU.Build.0 = Release|Any CPU
+ {A4FD5687-B963-49ED-ABC1-030A64347FE3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {A4FD5687-B963-49ED-ABC1-030A64347FE3}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {A4FD5687-B963-49ED-ABC1-030A64347FE3}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {A4FD5687-B963-49ED-ABC1-030A64347FE3}.Release|Any CPU.Build.0 = Release|Any CPU
+ {B4010E66-35D0-4060-8265-E4BA81825A5F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {B4010E66-35D0-4060-8265-E4BA81825A5F}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {B4010E66-35D0-4060-8265-E4BA81825A5F}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {B4010E66-35D0-4060-8265-E4BA81825A5F}.Release|Any CPU.Build.0 = Release|Any CPU
+ {DB0A52A1-8B7D-4230-832A-1F9E7C0BB5D6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {DB0A52A1-8B7D-4230-832A-1F9E7C0BB5D6}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {DB0A52A1-8B7D-4230-832A-1F9E7C0BB5D6}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {DB0A52A1-8B7D-4230-832A-1F9E7C0BB5D6}.Release|Any CPU.Build.0 = Release|Any CPU
+ {4EFA7ECF-19D1-4054-AFCE-1E8F6CEC7AB0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {4EFA7ECF-19D1-4054-AFCE-1E8F6CEC7AB0}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {4EFA7ECF-19D1-4054-AFCE-1E8F6CEC7AB0}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {4EFA7ECF-19D1-4054-AFCE-1E8F6CEC7AB0}.Release|Any CPU.Build.0 = Release|Any CPU
+ {AFD7C054-B2ED-4465-BA2F-8BC6B0E90D85}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {AFD7C054-B2ED-4465-BA2F-8BC6B0E90D85}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {AFD7C054-B2ED-4465-BA2F-8BC6B0E90D85}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {AFD7C054-B2ED-4465-BA2F-8BC6B0E90D85}.Release|Any CPU.Build.0 = Release|Any CPU
+ {92373993-AE27-4321-B7E3-7597F0B16461}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {92373993-AE27-4321-B7E3-7597F0B16461}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {92373993-AE27-4321-B7E3-7597F0B16461}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {92373993-AE27-4321-B7E3-7597F0B16461}.Release|Any CPU.Build.0 = Release|Any CPU
+ {2E39F6B2-A861-4230-A18E-E6586AF86CC4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {2E39F6B2-A861-4230-A18E-E6586AF86CC4}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {2E39F6B2-A861-4230-A18E-E6586AF86CC4}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {2E39F6B2-A861-4230-A18E-E6586AF86CC4}.Release|Any CPU.Build.0 = Release|Any CPU
+ {6F2D0A13-CBB6-4186-9C83-538486963985}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {6F2D0A13-CBB6-4186-9C83-538486963985}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {6F2D0A13-CBB6-4186-9C83-538486963985}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {6F2D0A13-CBB6-4186-9C83-538486963985}.Release|Any CPU.Build.0 = Release|Any CPU
+ {E75F7B39-3A15-401E-8400-548C77A5FDEE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {E75F7B39-3A15-401E-8400-548C77A5FDEE}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {E75F7B39-3A15-401E-8400-548C77A5FDEE}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {E75F7B39-3A15-401E-8400-548C77A5FDEE}.Release|Any CPU.Build.0 = Release|Any CPU
+ {81AC8293-A9CB-4466-84E2-C04BEB2AC852}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {81AC8293-A9CB-4466-84E2-C04BEB2AC852}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {81AC8293-A9CB-4466-84E2-C04BEB2AC852}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {81AC8293-A9CB-4466-84E2-C04BEB2AC852}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(NestedProjects) = preSolution
+ {2FF6B89E-4B6A-409F-84FA-EEC0D0E30095} = {936A3DB8-59EE-4F00-AF73-F677F47B8217}
+ {3093BA83-1A30-4462-B5E2-42BBAA3416FF} = {2FF6B89E-4B6A-409F-84FA-EEC0D0E30095}
+ {19AEA6EC-6918-462D-8448-2E15032C6BFD} = {2FF6B89E-4B6A-409F-84FA-EEC0D0E30095}
+ {A97C3494-C68A-4B36-A64A-1567D0313E92} = {2FF6B89E-4B6A-409F-84FA-EEC0D0E30095}
+ {DDAE66B2-31B0-4332-B9E9-3F28B4336B0D} = {2FF6B89E-4B6A-409F-84FA-EEC0D0E30095}
+ {6042C750-8881-4AAE-8F1E-5FAEB730300D} = {2FF6B89E-4B6A-409F-84FA-EEC0D0E30095}
+ {51D305FB-362A-4038-8ED6-91DD2D3D4551} = {2FF6B89E-4B6A-409F-84FA-EEC0D0E30095}
+ {6B61BDF3-FAB2-4859-9D0E-99E2BACB1735} = {2FF6B89E-4B6A-409F-84FA-EEC0D0E30095}
+ {02174E9A-6500-4A32-8BE6-3749DE188BFC} = {2FF6B89E-4B6A-409F-84FA-EEC0D0E30095}
+ {B0FB923E-DA7B-49B6-B34B-B6730A52754B} = {936A3DB8-59EE-4F00-AF73-F677F47B8217}
+ {A4FD5687-B963-49ED-ABC1-030A64347FE3} = {936A3DB8-59EE-4F00-AF73-F677F47B8217}
+ {B4010E66-35D0-4060-8265-E4BA81825A5F} = {936A3DB8-59EE-4F00-AF73-F677F47B8217}
+ {25D6A95A-856B-4C76-A144-8E7F718139F9} = {936A3DB8-59EE-4F00-AF73-F677F47B8217}
+ {DB0A52A1-8B7D-4230-832A-1F9E7C0BB5D6} = {25D6A95A-856B-4C76-A144-8E7F718139F9}
+ {4EFA7ECF-19D1-4054-AFCE-1E8F6CEC7AB0} = {25D6A95A-856B-4C76-A144-8E7F718139F9}
+ {AFD7C054-B2ED-4465-BA2F-8BC6B0E90D85} = {25D6A95A-856B-4C76-A144-8E7F718139F9}
+ {4BBABE0C-2F0B-4174-BD45-043F66AAA205} = {936A3DB8-59EE-4F00-AF73-F677F47B8217}
+ {92373993-AE27-4321-B7E3-7597F0B16461} = {4BBABE0C-2F0B-4174-BD45-043F66AAA205}
+ {2E39F6B2-A861-4230-A18E-E6586AF86CC4} = {4BBABE0C-2F0B-4174-BD45-043F66AAA205}
+ {6F2D0A13-CBB6-4186-9C83-538486963985} = {4BBABE0C-2F0B-4174-BD45-043F66AAA205}
+ {E75F7B39-3A15-401E-8400-548C77A5FDEE} = {4BBABE0C-2F0B-4174-BD45-043F66AAA205}
+ EndGlobalSection
+EndGlobal
|