diff --git a/DiscordBot/Program.cs b/DiscordBot/Program.cs index a2907b4..1cfcec1 100644 --- a/DiscordBot/Program.cs +++ b/DiscordBot/Program.cs @@ -227,5 +227,7 @@ public class Program if (Config.GetValue("DeleteLogsAtStartup")) foreach (var file in Directory.GetFiles("./Output/Logs/")) File.Delete(file); + + Config.Plugins.Load(); } } diff --git a/PluginManager/Config.cs b/PluginManager/Config.cs index 48a4a1f..252fde1 100644 --- a/PluginManager/Config.cs +++ b/PluginManager/Config.cs @@ -1,8 +1,10 @@ -using PluginManager.Others; +using System; +using PluginManager.Others; using System.IO; using System.Text.Json; using System.Threading.Tasks; using System.Collections.Generic; +using System.Threading; namespace PluginManager { @@ -14,6 +16,64 @@ namespace PluginManager public static class Config { + public static class Plugins + { + public static List> InstalledPlugins = new(); + + public static void Load() + { + new Thread(LoadCommands).Start(); + new Thread(LoadEvents).Start(); + } + + private static void LoadCommands() + { + string cmd_path = "./Data/Plugins/Commands/"; + string[] files = Directory.GetFiles(cmd_path, $"*.{Loaders.PluginLoader.pluginCMDExtension}", SearchOption.AllDirectories); + foreach (var file in files) + if (!file.Contains("PluginManager", StringComparison.InvariantCultureIgnoreCase)) + { + string PluginName = new FileInfo(file).Name; + string name = PluginName.Substring(0, PluginName.Length - 1 - PluginManager.Loaders.PluginLoader.pluginCMDExtension.Length); + InstalledPlugins.Add(new(name, PluginType.Command)); + } + } + + private static void LoadEvents() + { + string eve_path = "./Data/Plugins/Events/"; + string[] files = Directory.GetFiles(eve_path, $"*.{Loaders.PluginLoader.pluginEVEExtension}", SearchOption.AllDirectories); + foreach (var file in files) + if (!file.Contains("PluginManager", StringComparison.InvariantCultureIgnoreCase)) + if (!file.Contains("PluginManager", StringComparison.InvariantCultureIgnoreCase)) + { + string PluginName = new FileInfo(file).Name; + string name = PluginName.Substring(0, PluginName.Length - 1 - PluginManager.Loaders.PluginLoader.pluginEVEExtension.Length); + InstalledPlugins.Add(new(name, PluginType.Event)); + } + } + + public static bool Contains(string pluginName) + { + foreach (var tuple in InstalledPlugins) + { + if (tuple.Item1 == pluginName) return true; + } + + return false; + } + + public static PluginType GetPluginType(string pluginName) + { + foreach (var tuple in InstalledPlugins) + { + if (tuple.Item1 == pluginName) return tuple.Item2; + } + + return PluginType.Unknown; + } + } + private static AppConfig? appConfig { get; set; } public static bool AddValueToVariables(string key, T value, bool isProtected) diff --git a/PluginManager/Items/ConsoleCommandsHandler.cs b/PluginManager/Items/ConsoleCommandsHandler.cs index 957e66a..c2b9efd 100644 --- a/PluginManager/Items/ConsoleCommandsHandler.cs +++ b/PluginManager/Items/ConsoleCommandsHandler.cs @@ -32,6 +32,16 @@ public class ConsoleCommandsHandler AddCommand("help", "Show help", "help ", args => { + if (args[1] == "lip") + { + foreach (var tuple in Config.Plugins.InstalledPlugins) + { + Console.WriteLine(tuple.Item1); + } + + return; + } + if (args.Length <= 1) { Console.WriteLine("Available commands:"); @@ -129,6 +139,12 @@ public class ConsoleCommandsHandler else path = $"./{info[1].Split('/')[info[1].Split('/').Length - 1]}"; await ServerCom.DownloadFileAsync(info[1], path); + if (info[0] == "Command" || info[0] == "Event") + if (info[0] == "Event") + Config.Plugins.InstalledPlugins.Add(new(name, PluginType.Event)); + else if (info[0] == "Command") Config.Plugins.InstalledPlugins.Add(new(name, PluginType.Command)); + + Console.WriteLine("\n"); // check requirements if any diff --git a/PluginManager/Loaders/PluginLoader.cs b/PluginManager/Loaders/PluginLoader.cs index a4568d2..6fdaf74 100644 --- a/PluginManager/Loaders/PluginLoader.cs +++ b/PluginManager/Loaders/PluginLoader.cs @@ -15,8 +15,8 @@ public class PluginLoader private const string pluginCMDFolder = @"./Data/Plugins/Commands/"; private const string pluginEVEFolder = @"./Data/Plugins/Events/"; - private const string pluginCMDExtension = "dll"; - private const string pluginEVEExtension = "dll"; + internal const string pluginCMDExtension = "dll"; + internal const string pluginEVEExtension = "dll"; private readonly DiscordSocketClient _client; /// diff --git a/PluginManager/Online/PluginsManager.cs b/PluginManager/Online/PluginsManager.cs index 5f9dad6..6870d3b 100644 --- a/PluginManager/Online/PluginsManager.cs +++ b/PluginManager/Online/PluginsManager.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Threading.Tasks; using PluginManager.Others; @@ -37,15 +37,15 @@ public class PluginsManager var op = Functions.GetOperatingSystem(); var len = lines.Length; - string[] titles = { "Name", "Description", "Plugin Type", "Libraries" }; - data.Add(new[] { "-", "-", "-", "-" }); + string[] titles = { "Name", "Description", "Plugin Type", "Libraries", "Installed" }; + data.Add(new[] { "-", "-", "-", "-", "-" }); data.Add(titles); - data.Add(new[] { "-", "-", "-", "-" }); + data.Add(new[] { "-", "-", "-", "-", "-" }); for (var i = 0; i < len; i++) { if (lines[i].Length <= 2) continue; var content = lines[i].Split(','); - var display = new string[4]; + var display = new string[titles.Length]; if (op == OperatingSystem.WINDOWS) { if (content[4].Contains("Windows")) @@ -58,6 +58,10 @@ public class PluginsManager else display[3] = "1"; + if (Config.Plugins.Contains(content[0]) || Config.Plugins.Contains(content[0])) + display[4] = "✓"; + else + display[4] = "X"; data.Add(display); } } @@ -68,12 +72,17 @@ public class PluginsManager display[0] = content[0]; display[1] = content[1]; display[2] = content[2]; + if (content.Length == 6 && (content[5] != null || content[5].Length > 2)) display[3] = ((await ServerCom.ReadTextFromFile(content[5])).Count + 1).ToString(); + if (Config.Plugins.Contains(content[0]) || Config.Plugins.Contains(content[0])) + display[4] = "✓"; + else + display[4] = "X"; data.Add(display); } } } - data.Add(new[] { "-", "-", "-", "-" }); + data.Add(new[] { "-", "-", "-", "-", "-" }); Console_Utilities.FormatAndAlignTable(data); } diff --git a/PluginManager/Others/Enums.cs b/PluginManager/Others/Enums.cs index d8b22fb..c516802 100644 --- a/PluginManager/Others/Enums.cs +++ b/PluginManager/Others/Enums.cs @@ -1,4 +1,6 @@ -namespace PluginManager.Others; +using PluginManager.Interfaces; + +namespace PluginManager.Others; /// /// A list of operating systems @@ -20,3 +22,8 @@ public enum Error /// The output log type /// public enum OutputLogLevel { NONE, INFO, WARNING, ERROR, CRITICAL } + +/// +/// Plugin Type +/// +public enum PluginType { Command, Event, Unknown } \ No newline at end of file