From 1c026e7f496eb2674926c0a26ab866a76d935501 Mon Sep 17 00:00:00 2001 From: Wizzy69 Date: Wed, 2 Nov 2022 19:42:58 +0200 Subject: [PATCH] patch --- DiscordBot/DiscordBot.csproj | 2 +- PluginManager/Items/ConsoleCommandsHandler.cs | 39 ++++++------ PluginManager/Loaders/PluginLoader.cs | 37 +++++++++++- PluginManager/Others/Channels.cs | 60 ------------------- PluginManager/Others/Functions.cs | 5 -- 5 files changed, 56 insertions(+), 87 deletions(-) delete mode 100644 PluginManager/Others/Channels.cs diff --git a/DiscordBot/DiscordBot.csproj b/DiscordBot/DiscordBot.csproj index 8fbd91a..e4b4394 100644 --- a/DiscordBot/DiscordBot.csproj +++ b/DiscordBot/DiscordBot.csproj @@ -8,7 +8,7 @@ False True - 1.0.1.0 + 1.0.1.1 diff --git a/PluginManager/Items/ConsoleCommandsHandler.cs b/PluginManager/Items/ConsoleCommandsHandler.cs index a99e935..36589e0 100644 --- a/PluginManager/Items/ConsoleCommandsHandler.cs +++ b/PluginManager/Items/ConsoleCommandsHandler.cs @@ -9,7 +9,6 @@ using System.Threading.Tasks; using Discord.WebSocket; -using PluginManager.Interfaces; using PluginManager.Loaders; using PluginManager.Online; using PluginManager.Others; @@ -259,6 +258,8 @@ public class ConsoleCommandsHandler await Config.Plugins.SetVersionAsync(name, ver); isDownloading = false; + + await ExecuteCommad("localload " + name); } ); @@ -307,15 +308,10 @@ public class ConsoleCommandsHandler { if (client is null) return; - var bar = new Utilities.ProgressBar(ProgressBarType.NO_END); - bar.Start(); - bar.Stop("Saved config !"); - Settings.Variables.outputStream.WriteLine(); Settings.sqlDatabase.Stop(); await client.StopAsync(); await client.DisposeAsync(); - await Task.Delay(1000); Environment.Exit(0); } @@ -335,19 +331,23 @@ public class ConsoleCommandsHandler await s.CopyToAsync(str); var asmb = Assembly.Load(str.ToArray()); - var types = asmb.GetTypes(); - foreach (var type in types) - if (type.IsClass && typeof(DBEvent).IsAssignableFrom(type)) - { - var instance = (DBEvent)Activator.CreateInstance(type); - instance.Start(this.client); - Settings.Variables.outputStream.WriteLine($"[EVENT] Loaded external {type.FullName}!"); - } - else if (type.IsClass && typeof(DBCommand).IsAssignableFrom(type)) - { - var instance = (DBCommand)Activator.CreateInstance(type); - Settings.Variables.outputStream.WriteLine($"[CMD] Instance: {type.FullName} loaded !"); - } + await PluginLoader.LoadPluginFromAssembly(asmb, this.client); + } + catch (Exception ex) + { + Settings.Variables.outputStream.WriteLine(ex.Message); + } + }); + + AddCommand("localload", "Load a local command", "local [pluginName]", async args => + { + if (args.Length <= 1) return; + try + { + var pName = string.Join(' ', args, 1, args.Length - 1); + var asmb = Assembly.LoadFile(Path.GetFullPath("./Data/Plugins/" + pName + ".dll")); + + await PluginLoader.LoadPluginFromAssembly(asmb, this.client); } catch (Exception ex) { @@ -422,6 +422,7 @@ public class ConsoleCommandsHandler AddCommand("reload", "Reload the bot with all plugins", () => { + if (Functions.GetOperatingSystem() == OperatingSystem.WINDOWS) { Process.Start("DiscordBot.exe", "lp"); diff --git a/PluginManager/Loaders/PluginLoader.cs b/PluginManager/Loaders/PluginLoader.cs index 934788d..98ea502 100644 --- a/PluginManager/Loaders/PluginLoader.cs +++ b/PluginManager/Loaders/PluginLoader.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.IO; +using System.Reflection; using System.Threading.Tasks; using Discord; @@ -108,7 +109,7 @@ public class PluginLoader private async void Loader_PluginLoaded(LoaderArgs args) { - // Settings.Variables.outputStream.WriteLine(args.TypeName); + switch (args.TypeName) { case "DBCommand": @@ -139,7 +140,7 @@ public class PluginLoader builder.WithDescription(slash.Description); builder.WithDMPermission(slash.canUseDM); builder.Options = slash.Options; - //Settings.Variables.outputStream.WriteLine("Loaded " + slash.Name); + onSLSHLoad?.Invoke(((DBSlashCommand)args.Plugin!).Name, args.TypeName, args.IsLoaded, args.Exception); await _client.CreateGlobalApplicationCommandAsync(builder.Build()); @@ -148,4 +149,36 @@ public class PluginLoader break; } } + public static async Task LoadPluginFromAssembly(Assembly asmb, DiscordSocketClient client) + { + var types = asmb.GetTypes(); + foreach (var type in types) + if (type.IsClass && typeof(DBEvent).IsAssignableFrom(type)) + { + var instance = (DBEvent)Activator.CreateInstance(type); + instance.Start(client); + PluginLoader.Events.Add(instance); + Settings.Variables.outputStream.WriteLine($"[EVENT] Loaded external {type.FullName}!"); + } + else if (type.IsClass && typeof(DBCommand).IsAssignableFrom(type)) + { + var instance = (DBCommand)Activator.CreateInstance(type); + PluginLoader.Commands.Add(instance); + Settings.Variables.outputStream.WriteLine($"[CMD] Instance: {type.FullName} loaded !"); + } + else if (type.IsClass && typeof(DBSlashCommand).IsAssignableFrom(type)) + { + var instance = (DBSlashCommand)Activator.CreateInstance(type); + SlashCommandBuilder builder = new SlashCommandBuilder(); + builder.WithName(instance.Name); + builder.WithDescription(instance.Description); + builder.WithDMPermission(instance.canUseDM); + builder.Options = instance.Options; + + await client.CreateGlobalApplicationCommandAsync(builder.Build()); + PluginLoader.SlashCommands.Add(instance); + Settings.Variables.outputStream.WriteLine($"[SLASH] Instance: {type.FullName} loaded !"); + + } + } } \ No newline at end of file diff --git a/PluginManager/Others/Channels.cs b/PluginManager/Others/Channels.cs deleted file mode 100644 index ca8a270..0000000 --- a/PluginManager/Others/Channels.cs +++ /dev/null @@ -1,60 +0,0 @@ -using System.Threading.Tasks; -using Discord; - -namespace PluginManager.Others; - -/// -/// A class that handles the sending of messages to the user. -/// -public static class ChannelManagement -{ - /// - /// Get the text channel by name from server - /// - /// The server - /// The channel name - /// - /// - /// - public static IGuildChannel GetTextChannel(this IGuild server, string name) - { - return server.GetTextChannel(name); - } - - /// - /// Get the voice channel by name from server - /// - /// The server - /// The channel name - /// - /// - /// - public static IGuildChannel GetVoiceChannel(this IGuild server, string name) - { - return server.GetVoiceChannel(name); - } - - /// - /// Get the DM channel between and - /// - /// - /// - /// - /// - public static async Task GetDMChannel(IGuildUser user) - { - return await user.CreateDMChannelAsync(); - } - - /// - /// Get the channel where the message was sent - /// - /// The message - /// - /// - /// - public static IChannel GetChannel(IMessage message) - { - return message.Channel; - } -} \ No newline at end of file diff --git a/PluginManager/Others/Functions.cs b/PluginManager/Others/Functions.cs index 4e2d89f..eb29510 100644 --- a/PluginManager/Others/Functions.cs +++ b/PluginManager/Others/Functions.cs @@ -41,11 +41,6 @@ public static class Functions /// public static readonly string pakFolder = @"./Data/PAKS/"; - /// - /// Beta testing folder - /// - public static readonly string betaFolder = @"./Data/BetaTest/"; - /// /// Read data from a file that is inside an archive (ZIP format)