Code cleanup
This commit is contained in:
@@ -1,10 +1,6 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
|
||||
using Discord;
|
||||
using Discord.Commands;
|
||||
using Discord.WebSocket;
|
||||
|
||||
using PluginManager;
|
||||
using PluginManager.Interfaces;
|
||||
using PluginManager.Loaders;
|
||||
@@ -66,12 +62,10 @@ internal class Help : DBCommand
|
||||
var normalCommands = "";
|
||||
|
||||
foreach (var cmd in PluginLoader.Commands!)
|
||||
{
|
||||
if (cmd.requireAdmin)
|
||||
adminCommands += cmd.Command + " ";
|
||||
else
|
||||
normalCommands += cmd.Command + " ";
|
||||
}
|
||||
|
||||
embedBuilder.AddField("Admin Commands", adminCommands);
|
||||
embedBuilder.AddField("Normal Commands", normalCommands);
|
||||
@@ -81,7 +75,8 @@ internal class Help : DBCommand
|
||||
private EmbedBuilder GenerateHelpCommand(string command)
|
||||
{
|
||||
var embedBuilder = new EmbedBuilder();
|
||||
var cmd = PluginLoader.Commands!.Find(p => p.Command == command || (p.Aliases is not null && p.Aliases.Contains(command)));
|
||||
var cmd = PluginLoader.Commands!.Find(p => p.Command == command ||
|
||||
(p.Aliases is not null && p.Aliases.Contains(command)));
|
||||
if (cmd == null) return null;
|
||||
|
||||
embedBuilder.AddField("Usage", Config.GetValue<string>("prefix") + cmd.Usage);
|
||||
|
||||
@@ -1,10 +1,8 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using Discord.WebSocket;
|
||||
using PluginManager.Interfaces;
|
||||
using PluginManager.Others;
|
||||
using PluginManager.Others.Permissions;
|
||||
using DiscordLibCommands = Discord.Commands;
|
||||
using DiscordLib = Discord;
|
||||
using OperatingSystem = PluginManager.Others.OperatingSystem;
|
||||
|
||||
@@ -1,10 +1,6 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
using Discord;
|
||||
using Discord.Commands;
|
||||
using Discord.WebSocket;
|
||||
|
||||
using PluginManager;
|
||||
using PluginManager.Interfaces;
|
||||
|
||||
@@ -48,8 +44,10 @@ internal class Settings : DBCommand
|
||||
var keyword = data[1];
|
||||
if (keyword.ToLower() == "help")
|
||||
{
|
||||
await channel.SendMessageAsync("set token [new value] -- set the value of the new token (require restart)");
|
||||
await channel.SendMessageAsync("set prefix [new value] -- set the value of the new preifx (require restart)");
|
||||
await channel.SendMessageAsync(
|
||||
"set token [new value] -- set the value of the new token (require restart)");
|
||||
await channel.SendMessageAsync(
|
||||
"set prefix [new value] -- set the value of the new preifx (require restart)");
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -1,13 +1,8 @@
|
||||
using System;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
using Discord;
|
||||
using Discord.Commands;
|
||||
using Discord.WebSocket;
|
||||
|
||||
using PluginManager;
|
||||
|
||||
using static PluginManager.Others.Functions;
|
||||
|
||||
namespace DiscordBot.Discord.Core;
|
||||
@@ -63,7 +58,7 @@ internal class Boot
|
||||
/// <returns>Task</returns>
|
||||
public async Task Awake()
|
||||
{
|
||||
DiscordSocketConfig config = new DiscordSocketConfig { AlwaysDownloadUsers = true };
|
||||
var config = new DiscordSocketConfig { AlwaysDownloadUsers = true };
|
||||
|
||||
client = new DiscordSocketClient(config);
|
||||
service = new CommandService();
|
||||
@@ -141,5 +136,4 @@ internal class Boot
|
||||
|
||||
return Task.CompletedTask;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,10 +1,9 @@
|
||||
using System.Linq;
|
||||
using System;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
using Discord.Commands;
|
||||
using Discord.WebSocket;
|
||||
|
||||
using PluginManager.Loaders;
|
||||
using PluginManager.Others;
|
||||
using PluginManager.Others.Permissions;
|
||||
@@ -75,9 +74,15 @@ internal class CommandHandler
|
||||
|
||||
await commandService.ExecuteAsync(context, argPos, null);
|
||||
|
||||
var plugin = PluginLoader.Commands!.Where(p => p.Command == message.Content.Split(' ')[0].Substring(botPrefix.Length) || (p.Aliases is not null && p.Aliases.Contains(message.Content.Split(' ')[0].Substring(botPrefix.Length)))).FirstOrDefault();
|
||||
var plugin = PluginLoader.Commands!
|
||||
.Where(
|
||||
p => p.Command == message.Content.Split(' ')[0].Substring(botPrefix.Length) ||
|
||||
(p.Aliases is not null &&
|
||||
p.Aliases.Contains(
|
||||
message.Content.Split(' ')[0].Substring(botPrefix.Length))))
|
||||
.FirstOrDefault();
|
||||
|
||||
if (plugin is null) throw new System.Exception("Failed to run command. !");
|
||||
if (plugin is null) throw new Exception("Failed to run command. !");
|
||||
|
||||
if (plugin.requireAdmin && !context.Message.Author.isAdmin())
|
||||
return;
|
||||
@@ -85,9 +90,8 @@ internal class CommandHandler
|
||||
if (context.Channel is SocketDMChannel)
|
||||
plugin.ExecuteDM(context);
|
||||
else plugin.ExecuteServer(context);
|
||||
|
||||
}
|
||||
catch (System.Exception ex)
|
||||
catch (Exception ex)
|
||||
{
|
||||
ex.WriteErrFile();
|
||||
}
|
||||
|
||||
@@ -7,7 +7,6 @@ using PluginManager.Online.Helpers;
|
||||
using PluginManager.Others;
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.IO;
|
||||
using System.Reflection;
|
||||
@@ -16,6 +15,8 @@ using System.Threading.Tasks;
|
||||
|
||||
using Terminal.Gui;
|
||||
|
||||
using OperatingSystem = PluginManager.Others.OperatingSystem;
|
||||
|
||||
namespace DiscordBot;
|
||||
|
||||
public class Program
|
||||
@@ -31,11 +32,14 @@ public class Program
|
||||
[Obsolete]
|
||||
public static void Main(string[] args)
|
||||
{
|
||||
|
||||
Console.WriteLine("Loading resources ...");
|
||||
PreLoadComponents().Wait();
|
||||
|
||||
if (!Config.ContainsKey("ServerID") || (!Config.ContainsKey("token") || Config.GetValue<string>("token") == null || (Config.GetValue<string>("token")?.Length != 70 && Config.GetValue<string>("token")?.Length != 59)) || (!Config.ContainsKey("prefix") || Config.GetValue<string>("prefix") == null || Config.GetValue<string>("prefix")?.Length != 1) || (args.Length > 0 && args[0] == "/newconfig"))
|
||||
if (!Config.ContainsKey("ServerID") || !Config.ContainsKey("token") ||
|
||||
Config.GetValue<string>("token") == null ||
|
||||
(Config.GetValue<string>("token")?.Length != 70 && Config.GetValue<string>("token")?.Length != 59) ||
|
||||
!Config.ContainsKey("prefix") || Config.GetValue<string>("prefix") == null ||
|
||||
Config.GetValue<string>("prefix")?.Length != 1 || (args.Length > 0 && args[0] == "/newconfig"))
|
||||
{
|
||||
Application.Init();
|
||||
var top = Application.Top;
|
||||
@@ -49,7 +53,9 @@ public class Program
|
||||
|
||||
top.Add(win);
|
||||
|
||||
var labelInfo = new Label("Configuration file not found or invalid. Please fill the following fields to create a new configuration file.")
|
||||
var labelInfo =
|
||||
new Label(
|
||||
"Configuration file not found or invalid. Please fill the following fields to create a new configuration file.")
|
||||
{
|
||||
X = Pos.Center(),
|
||||
Y = 2
|
||||
@@ -84,8 +90,7 @@ public class Program
|
||||
var labelServerid = new Label("Please insert your server id here (optional): ")
|
||||
{
|
||||
X = 5,
|
||||
Y = 11,
|
||||
|
||||
Y = 11
|
||||
};
|
||||
var textFiledServerID = new TextField("")
|
||||
{
|
||||
@@ -106,15 +111,11 @@ public class Program
|
||||
Y = 16
|
||||
};
|
||||
|
||||
Console.CancelKeyPress += (sender, e) =>
|
||||
{
|
||||
top.Running = false;
|
||||
|
||||
};
|
||||
Console.CancelKeyPress += (sender, e) => { top.Running = false; };
|
||||
|
||||
button.Clicked += () =>
|
||||
{
|
||||
string passMessage = "";
|
||||
var passMessage = "";
|
||||
if (textFiledToken.Text.Length != 70 && textFiledToken.Text.Length != 59)
|
||||
passMessage += "Invalid token, ";
|
||||
if (textFiledPrefix.Text.ContainsAny("0123456789/\\ ") || textFiledPrefix.Text.Length != 1)
|
||||
@@ -124,37 +125,39 @@ public class Program
|
||||
|
||||
if (passMessage != "")
|
||||
{
|
||||
MessageBox.ErrorQuery("Discord Bot Settings", "Failed to pass check. Invalid information given:\n" + passMessage, "Retry");
|
||||
MessageBox.ErrorQuery("Discord Bot Settings",
|
||||
"Failed to pass check. Invalid information given:\n" + passMessage, "Retry");
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
Config.AddValueToVariables<string>("ServerID", ((string)textFiledServerID.Text), true);
|
||||
Config.AddValueToVariables<string>("token", ((string)textFiledToken.Text), true);
|
||||
Config.AddValueToVariables<string>("prefix", ((string)textFiledPrefix.Text), true);
|
||||
Config.AddValueToVariables("ServerID", (string)textFiledServerID.Text, true);
|
||||
Config.AddValueToVariables("token", (string)textFiledToken.Text, true);
|
||||
Config.AddValueToVariables("prefix", (string)textFiledPrefix.Text, true);
|
||||
|
||||
MessageBox.Query("Discord Bot Settings", "Successfully saved config !\nJust start the bot :D", "Start :D");
|
||||
MessageBox.Query("Discord Bot Settings", "Successfully saved config !\nJust start the bot :D",
|
||||
"Start :D");
|
||||
top.Running = false;
|
||||
|
||||
|
||||
};
|
||||
|
||||
button2.Clicked += async () =>
|
||||
{
|
||||
List<string> license = await ServerCom.ReadTextFromURL("https://raw.githubusercontent.com/Wizzy69/installer/discord-bot-files/LICENSE.txt");
|
||||
string ProductLicense = "Seth Discord Bot\n\nDeveloped by Wizzy#9181\nThis application can be used and modified by anyone. Plugin development for this application is also free and supported";
|
||||
int r = MessageBox.Query("Discord Bot Settings", ProductLicense, "Close", "Read about libraries used");
|
||||
var license =
|
||||
await ServerCom.ReadTextFromURL(
|
||||
"https://raw.githubusercontent.com/Wizzy69/installer/discord-bot-files/LICENSE.txt");
|
||||
var ProductLicense =
|
||||
"Seth Discord Bot\n\nDeveloped by Wizzy#9181\nThis application can be used and modified by anyone. Plugin development for this application is also free and supported";
|
||||
var r = MessageBox.Query("Discord Bot Settings", ProductLicense, "Close", "Read about libraries used");
|
||||
if (r == 1)
|
||||
{
|
||||
int i = 0;
|
||||
var i = 0;
|
||||
while (i < license.Count)
|
||||
{
|
||||
string print_message = license[i++] + "\n";
|
||||
var print_message = license[i++] + "\n";
|
||||
for (; i < license.Count && !license[i].StartsWith("-----------"); i++)
|
||||
print_message += license[i] + "\n";
|
||||
if (MessageBox.Query("Licenses", print_message, "Next", "Quit") == 1) break;
|
||||
}
|
||||
|
||||
}
|
||||
};
|
||||
|
||||
@@ -174,7 +177,6 @@ public class Program
|
||||
/// <param name="discordbooter">The discord booter used to start the application</param>
|
||||
private static void NoGUI(Boot discordbooter)
|
||||
{
|
||||
|
||||
#if DEBUG
|
||||
Console.WriteLine();
|
||||
ConsoleCommandsHandler.ExecuteCommad("lp").Wait();
|
||||
@@ -186,7 +188,6 @@ public class Program
|
||||
|
||||
while (true)
|
||||
{
|
||||
|
||||
var cmd = Console.ReadLine();
|
||||
if (!consoleCommandsHandler.HandleCommand(cmd!
|
||||
#if DEBUG
|
||||
@@ -207,15 +208,19 @@ public class Program
|
||||
Console.Clear();
|
||||
Console.ForegroundColor = ConsoleColor.DarkYellow;
|
||||
|
||||
List<string> startupMessageList = await ServerCom.ReadTextFromURL("https://raw.githubusercontent.com/Wizzy69/installer/discord-bot-files/StartupMessage");
|
||||
var startupMessageList =
|
||||
await ServerCom.ReadTextFromURL(
|
||||
"https://raw.githubusercontent.com/Wizzy69/installer/discord-bot-files/StartupMessage");
|
||||
|
||||
foreach (var message in startupMessageList)
|
||||
Console.WriteLine(message);
|
||||
|
||||
Console.WriteLine($"Running on version: {Config.GetValue<string>("Version") ?? System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString()}");
|
||||
Console.WriteLine(
|
||||
$"Running on version: {Config.GetValue<string>("Version") ?? Assembly.GetExecutingAssembly().GetName().Version.ToString()}");
|
||||
Console.WriteLine($"Git URL: {Config.GetValue<string>("GitURL") ?? " Could not find Git URL"}");
|
||||
|
||||
Console_Utilities.WriteColorText("&rRemember to close the bot using the ShutDown command (&ysd&r) or some settings won't be saved\n");
|
||||
Console_Utilities.WriteColorText(
|
||||
"&rRemember to close the bot using the ShutDown command (&ysd&r) or some settings won't be saved\n");
|
||||
Console.ForegroundColor = ConsoleColor.White;
|
||||
|
||||
if (Config.ContainsKey("LaunchMessage"))
|
||||
@@ -224,8 +229,9 @@ public class Program
|
||||
Config.RemoveKey("LaunchMessage");
|
||||
}
|
||||
|
||||
Console_Utilities.WriteColorText("Please note that the bot saves a backup save file every time you are using the shudown command (&ysd&c)");
|
||||
Console.WriteLine($"============================ LOG ============================");
|
||||
Console_Utilities.WriteColorText(
|
||||
"Please note that the bot saves a backup save file every time you are using the shudown command (&ysd&c)");
|
||||
Console.WriteLine("============================ LOG ============================");
|
||||
|
||||
try
|
||||
{
|
||||
@@ -235,11 +241,8 @@ public class Program
|
||||
if (!Directory.Exists("./Data/BetaTest"))
|
||||
Console.WriteLine("Failed to start in debug mode because the folder ./Data/BetaTest does not exist");
|
||||
else
|
||||
{
|
||||
token = File.ReadAllText("./Data/BetaTest/token.txt");
|
||||
|
||||
//Debug mode code...
|
||||
}
|
||||
#endif
|
||||
|
||||
var prefix = Config.GetValue<string>("prefix");
|
||||
@@ -284,14 +287,13 @@ public class Program
|
||||
|
||||
if (len > 0 && args[0] == "/remplug")
|
||||
{
|
||||
|
||||
string plugName = Functions.MergeStrings(args, 1);
|
||||
var plugName = args.MergeStrings(1);
|
||||
Console.WriteLine("Starting to remove " + plugName);
|
||||
await ConsoleCommandsHandler.ExecuteCommad("remplug " + plugName);
|
||||
loadPluginsOnStartup = true;
|
||||
}
|
||||
|
||||
Thread mainThread = new Thread(() =>
|
||||
var mainThread = new Thread(() =>
|
||||
{
|
||||
try
|
||||
{
|
||||
@@ -302,20 +304,19 @@ public class Program
|
||||
if (ex.Message == "No process is on the other end of the pipe." || (uint)ex.HResult == 0x800700E9)
|
||||
{
|
||||
if (!Config.ContainsKey("LaunchMessage"))
|
||||
Config.AddValueToVariables("LaunchMessage", "An error occured while closing the bot last time. Please consider closing the bot using the &rsd&c method !\nThere is a risk of losing all data or corruption of the save file, which in some cases requires to reinstall the bot !", false);
|
||||
Config.AddValueToVariables("LaunchMessage",
|
||||
"An error occured while closing the bot last time. Please consider closing the bot using the &rsd&c method !\nThere is a risk of losing all data or corruption of the save file, which in some cases requires to reinstall the bot !",
|
||||
false);
|
||||
Functions.WriteErrFile(ex.ToString());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
});
|
||||
mainThread.Start();
|
||||
}
|
||||
|
||||
private static async Task PreLoadComponents()
|
||||
{
|
||||
Console_Utilities.ProgressBar main = new Console_Utilities.ProgressBar(ProgressBarType.NO_END);
|
||||
var main = new Console_Utilities.ProgressBar(ProgressBarType.NO_END);
|
||||
main.Start();
|
||||
Directory.CreateDirectory("./Data/Resources");
|
||||
Directory.CreateDirectory("./Data/Plugins/Commands");
|
||||
@@ -326,7 +327,9 @@ public class Program
|
||||
if (Config.GetValue<bool>("DeleteLogsAtStartup"))
|
||||
foreach (var file in Directory.GetFiles("./Output/Logs/"))
|
||||
File.Delete(file);
|
||||
List<string> OnlineDefaultKeys = await ServerCom.ReadTextFromURL("https://raw.githubusercontent.com/Wizzy69/installer/discord-bot-files/SetupKeys");
|
||||
var OnlineDefaultKeys =
|
||||
await ServerCom.ReadTextFromURL(
|
||||
"https://raw.githubusercontent.com/Wizzy69/installer/discord-bot-files/SetupKeys");
|
||||
|
||||
Config.PluginConfig.Load();
|
||||
|
||||
@@ -338,11 +341,13 @@ public class Program
|
||||
foreach (var key in OnlineDefaultKeys)
|
||||
{
|
||||
if (key.Length <= 3 || !key.Contains(' ')) continue;
|
||||
string[] s = key.Split(' ');
|
||||
var s = key.Split(' ');
|
||||
try
|
||||
{
|
||||
if (Config.ContainsKey(s[0])) Config.SetValue(s[0], s[1]);
|
||||
else Config.GetAndAddValueToVariable(s[0], s[1], s[2].Equals("true", StringComparison.CurrentCultureIgnoreCase));
|
||||
else
|
||||
Config.GetAndAddValueToVariable(
|
||||
s[0], s[1], s[2].Equals("true", StringComparison.CurrentCultureIgnoreCase));
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
@@ -351,66 +356,72 @@ public class Program
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
List<string> onlineSettingsList = await ServerCom.ReadTextFromURL("https://raw.githubusercontent.com/Wizzy69/installer/discord-bot-files/OnlineData");
|
||||
var onlineSettingsList =
|
||||
await ServerCom.ReadTextFromURL(
|
||||
"https://raw.githubusercontent.com/Wizzy69/installer/discord-bot-files/OnlineData");
|
||||
main.Stop("Loaded online settings. Loading updates ...");
|
||||
foreach (var key in onlineSettingsList)
|
||||
{
|
||||
if (key.Length <= 3 || !key.Contains(' ')) continue;
|
||||
|
||||
string[] s = key.Split(' ');
|
||||
var s = key.Split(' ');
|
||||
switch (s[0])
|
||||
{
|
||||
case "CurrentVersion":
|
||||
string newVersion = s[1];
|
||||
var newVersion = s[1];
|
||||
if (!newVersion.Equals(Config.GetValue<string>("Version")))
|
||||
{
|
||||
|
||||
VersionString nVer = new VersionString(newVersion.Substring(2));
|
||||
VersionString cVer = new VersionString(Config.GetValue<string>("Version").Substring(2));
|
||||
var nVer = new VersionString(newVersion.Substring(2));
|
||||
var cVer = new VersionString(Config.GetValue<string>("Version").Substring(2));
|
||||
if (cVer > nVer)
|
||||
{
|
||||
Config.SetValue<string>("Version", "1." + cVer.ToShortString() + " (Beta)");
|
||||
Config.SetValue("Version", "1." + cVer.ToShortString() + " (Beta)");
|
||||
break;
|
||||
}
|
||||
|
||||
if (Functions.GetOperatingSystem() == PluginManager.Others.OperatingSystem.WINDOWS)
|
||||
if (Functions.GetOperatingSystem() == OperatingSystem.WINDOWS)
|
||||
{
|
||||
|
||||
string url = $"https://github.com/Wizzy69/SethDiscordBot/releases/download/v{newVersion}/net6.0.zip";
|
||||
Process.Start(".\\Updater\\Updater.exe", $"{newVersion} {url} {Process.GetCurrentProcess().ProcessName}");
|
||||
|
||||
var url =
|
||||
$"https://github.com/Wizzy69/SethDiscordBot/releases/download/v{newVersion}/net6.0.zip";
|
||||
Process.Start(".\\Updater\\Updater.exe",
|
||||
$"{newVersion} {url} {Process.GetCurrentProcess().ProcessName}");
|
||||
}
|
||||
else
|
||||
{
|
||||
string url = $"https://github.com/Wizzy69/SethDiscordBot/releases/download/v{newVersion}/net6.0_linux.zip";
|
||||
var url =
|
||||
$"https://github.com/Wizzy69/SethDiscordBot/releases/download/v{newVersion}/net6.0_linux.zip";
|
||||
Console.WriteLine("Downloading update ...");
|
||||
await ServerCom.DownloadFileNoProgressAsync(url, "./update.zip");
|
||||
await File.WriteAllTextAsync("Install.sh", "#!/bin/bash\nunzip -qq update.zip -d ./\nrm update.zip\nchmod +x SethDiscordBot\n./DiscordBot");
|
||||
await File.WriteAllTextAsync("Install.sh",
|
||||
"#!/bin/bash\nunzip -qq update.zip -d ./\nrm update.zip\nchmod +x SethDiscordBot\n./DiscordBot");
|
||||
Process.Start("Install.sh").WaitForExit();
|
||||
Environment.Exit(0);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
case "UpdaterVersion":
|
||||
string updaternewversion = s[1];
|
||||
if ((Config.UpdaterVersion != updaternewversion && Functions.GetOperatingSystem() == PluginManager.Others.OperatingSystem.WINDOWS) || !Directory.Exists("./Updater") || !File.Exists("./Updater/Updater.exe"))
|
||||
var updaternewversion = s[1];
|
||||
if ((Config.UpdaterVersion != updaternewversion &&
|
||||
Functions.GetOperatingSystem() == OperatingSystem.WINDOWS) || !Directory.Exists("./Updater") ||
|
||||
!File.Exists("./Updater/Updater.exe"))
|
||||
{
|
||||
Console.Clear();
|
||||
Console.WriteLine("Installing updater ...\nDo NOT close the bot during update !");
|
||||
Console_Utilities.ProgressBar bar = new Console_Utilities.ProgressBar(ProgressBarType.NO_END);
|
||||
var bar = new Console_Utilities.ProgressBar(ProgressBarType.NO_END);
|
||||
bar.Start();
|
||||
await ServerCom.DownloadFileNoProgressAsync("https://github.com/Wizzy69/installer/releases/download/release-1-discordbot/Updater.zip", "./Updater.zip");
|
||||
await Functions.ExtractArchive("./Updater.zip", "./", null, UnzipProgressType.PercentageFromTotalSize);
|
||||
await ServerCom.DownloadFileNoProgressAsync(
|
||||
"https://github.com/Wizzy69/installer/releases/download/release-1-discordbot/Updater.zip",
|
||||
"./Updater.zip");
|
||||
await Functions.ExtractArchive("./Updater.zip", "./", null,
|
||||
UnzipProgressType.PercentageFromTotalSize);
|
||||
Config.UpdaterVersion = updaternewversion;
|
||||
File.Delete("Updater.zip");
|
||||
await Config.SaveConfig(SaveType.NORMAL);
|
||||
bar.Stop("Updater has been updated !");
|
||||
Console.Clear();
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
using PluginManager.Others;
|
||||
|
||||
using System;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Text.Json;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using PluginManager.Loaders;
|
||||
using PluginManager.Others;
|
||||
|
||||
namespace PluginManager;
|
||||
|
||||
namespace PluginManager
|
||||
{
|
||||
internal class AppConfig
|
||||
{
|
||||
public string? UpdaterVersion { get; set; }
|
||||
@@ -19,68 +19,19 @@ namespace PluginManager
|
||||
|
||||
public static class Config
|
||||
{
|
||||
public static class PluginConfig
|
||||
{
|
||||
public static readonly List<Tuple<string, PluginType>> 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 string UpdaterVersion { get => appConfig.UpdaterVersion; set => appConfig.UpdaterVersion = value; }
|
||||
public static string UpdaterVersion
|
||||
{
|
||||
get => appConfig.UpdaterVersion;
|
||||
set => appConfig.UpdaterVersion = value;
|
||||
}
|
||||
|
||||
public static string GetPluginVersion(string pluginName)
|
||||
{
|
||||
return appConfig!.PluginVersions![pluginName];
|
||||
}
|
||||
|
||||
public static string GetPluginVersion(string pluginName) => appConfig!.PluginVersions![pluginName];
|
||||
public static void SetPluginVersion(string pluginName, string newVersion)
|
||||
{
|
||||
if (appConfig!.PluginVersions!.ContainsKey(pluginName))
|
||||
@@ -90,8 +41,15 @@ namespace PluginManager
|
||||
// SaveConfig();
|
||||
}
|
||||
|
||||
public static void RemovePluginVersion(string pluginName) => appConfig!.PluginVersions!.Remove(pluginName);
|
||||
public static bool PluginVersionsContainsKey(string pluginName) => appConfig!.PluginVersions!.ContainsKey(pluginName);
|
||||
public static void RemovePluginVersion(string pluginName)
|
||||
{
|
||||
appConfig!.PluginVersions!.Remove(pluginName);
|
||||
}
|
||||
|
||||
public static bool PluginVersionsContainsKey(string pluginName)
|
||||
{
|
||||
return appConfig!.PluginVersions!.ContainsKey(pluginName);
|
||||
}
|
||||
|
||||
public static void AddValueToVariables<T>(string key, T value, bool isProtected)
|
||||
{
|
||||
@@ -128,24 +86,24 @@ namespace PluginManager
|
||||
|
||||
public static void GetAndAddValueToVariable(string key, string value, bool isReadOnly)
|
||||
{
|
||||
if (Config.ContainsKey(key))
|
||||
if (ContainsKey(key))
|
||||
return;
|
||||
if (int.TryParse(value, out var intValue))
|
||||
Config.AddValueToVariables(key, intValue, isReadOnly);
|
||||
AddValueToVariables(key, intValue, isReadOnly);
|
||||
else if (bool.TryParse(value, out var boolValue))
|
||||
Config.AddValueToVariables(key, boolValue, isReadOnly);
|
||||
AddValueToVariables(key, boolValue, isReadOnly);
|
||||
else if (float.TryParse(value, out var floatValue))
|
||||
Config.AddValueToVariables(key, floatValue, isReadOnly);
|
||||
AddValueToVariables(key, floatValue, isReadOnly);
|
||||
else if (double.TryParse(value, out var doubleValue))
|
||||
Config.AddValueToVariables(key, doubleValue, isReadOnly);
|
||||
AddValueToVariables(key, doubleValue, isReadOnly);
|
||||
else if (uint.TryParse(value, out var uintValue))
|
||||
Config.AddValueToVariables(key, uintValue, isReadOnly);
|
||||
AddValueToVariables(key, uintValue, isReadOnly);
|
||||
else if (long.TryParse(value, out var longValue))
|
||||
Config.AddValueToVariables(key, longValue, isReadOnly);
|
||||
AddValueToVariables(key, longValue, isReadOnly);
|
||||
else if (byte.TryParse(value, out var byteValue))
|
||||
Config.AddValueToVariables(key, byteValue, isReadOnly);
|
||||
AddValueToVariables(key, byteValue, isReadOnly);
|
||||
else
|
||||
Config.AddValueToVariables(key, value, isReadOnly);
|
||||
AddValueToVariables(key, value, isReadOnly);
|
||||
}
|
||||
|
||||
public static T? GetValue<T>(string key)
|
||||
@@ -153,7 +111,7 @@ namespace PluginManager
|
||||
if (!appConfig!.ApplicationVariables!.ContainsKey(key)) return default;
|
||||
try
|
||||
{
|
||||
JsonElement element = (JsonElement)appConfig.ApplicationVariables[key];
|
||||
var element = (JsonElement)appConfig.ApplicationVariables[key];
|
||||
return element.Deserialize<T>();
|
||||
}
|
||||
catch
|
||||
@@ -193,22 +151,21 @@ namespace PluginManager
|
||||
{
|
||||
if (type == SaveType.NORMAL)
|
||||
{
|
||||
string path = Functions.dataFolder + "config.json";
|
||||
await Functions.SaveToJsonFile<AppConfig>(path, appConfig!);
|
||||
return;
|
||||
}
|
||||
if (type == SaveType.BACKUP)
|
||||
{
|
||||
string path = Functions.dataFolder + "config.json.bak";
|
||||
await Functions.SaveToJsonFile<AppConfig>(path, appConfig!);
|
||||
var path = Functions.dataFolder + "config.json";
|
||||
await Functions.SaveToJsonFile(path, appConfig!);
|
||||
return;
|
||||
}
|
||||
|
||||
if (type == SaveType.BACKUP)
|
||||
{
|
||||
var path = Functions.dataFolder + "config.json.bak";
|
||||
await Functions.SaveToJsonFile(path, appConfig!);
|
||||
}
|
||||
}
|
||||
|
||||
public static async Task LoadConfig()
|
||||
{
|
||||
string path = Functions.dataFolder + "config.json";
|
||||
var path = Functions.dataFolder + "config.json";
|
||||
if (File.Exists(path))
|
||||
{
|
||||
try
|
||||
@@ -225,15 +182,15 @@ namespace PluginManager
|
||||
}
|
||||
|
||||
|
||||
Functions.WriteLogFile($"Loaded {appConfig.ApplicationVariables!.Keys.Count} application variables.\nLoaded {appConfig.ProtectedKeyWords!.Count} readonly variables.");
|
||||
Functions.WriteLogFile(
|
||||
$"Loaded {appConfig.ApplicationVariables!.Keys.Count} application variables.\nLoaded {appConfig.ProtectedKeyWords!.Count} readonly variables.");
|
||||
return;
|
||||
}
|
||||
else if (File.Exists(Functions.dataFolder + "config.json.bak"))
|
||||
|
||||
if (File.Exists(Functions.dataFolder + "config.json.bak"))
|
||||
{
|
||||
try
|
||||
{
|
||||
|
||||
|
||||
Console.WriteLine("An error occured while loading the settings. Importing from backup file...");
|
||||
path = Functions.dataFolder + "config.json.bak";
|
||||
appConfig = await Functions.ConvertFromJson<AppConfig>(path);
|
||||
@@ -245,12 +202,86 @@ namespace PluginManager
|
||||
Console.WriteLine(ex.Message);
|
||||
}
|
||||
}
|
||||
appConfig = new() { ApplicationVariables = new Dictionary<string, object>(), ProtectedKeyWords = new List<string>(), PluginVersions = new Dictionary<string, string>(), UpdaterVersion = "-1" };
|
||||
|
||||
appConfig = new AppConfig
|
||||
{
|
||||
ApplicationVariables = new Dictionary<string, object>(), ProtectedKeyWords = new List<string>(),
|
||||
PluginVersions = new Dictionary<string, string>(), UpdaterVersion = "-1"
|
||||
};
|
||||
}
|
||||
|
||||
public static bool ContainsValue<T>(T value) => appConfig!.ApplicationVariables!.ContainsValue(value!);
|
||||
public static bool ContainsKey(string key) => appConfig!.ApplicationVariables!.ContainsKey(key);
|
||||
public static bool ContainsValue<T>(T value)
|
||||
{
|
||||
return appConfig!.ApplicationVariables!.ContainsValue(value!);
|
||||
}
|
||||
|
||||
public static IDictionary<string, object> GetAllVariables() => appConfig.ApplicationVariables;
|
||||
public static bool ContainsKey(string key)
|
||||
{
|
||||
return appConfig!.ApplicationVariables!.ContainsKey(key);
|
||||
}
|
||||
|
||||
public static IDictionary<string, object> GetAllVariables()
|
||||
{
|
||||
return appConfig.ApplicationVariables;
|
||||
}
|
||||
|
||||
public static class PluginConfig
|
||||
{
|
||||
public static readonly List<Tuple<string, PluginType>> InstalledPlugins = new();
|
||||
|
||||
public static void Load()
|
||||
{
|
||||
new Thread(LoadCommands).Start();
|
||||
new Thread(LoadEvents).Start();
|
||||
}
|
||||
|
||||
private static void LoadCommands()
|
||||
{
|
||||
var cmd_path = "./Data/Plugins/Commands/";
|
||||
var files = Directory.GetFiles(cmd_path, $"*.{PluginLoader.pluginCMDExtension}",
|
||||
SearchOption.AllDirectories);
|
||||
foreach (var file in files)
|
||||
if (!file.Contains("PluginManager", StringComparison.InvariantCultureIgnoreCase))
|
||||
{
|
||||
var PluginName = new FileInfo(file).Name;
|
||||
var name = PluginName.Substring(0, PluginName.Length - 1 - PluginLoader.pluginCMDExtension.Length);
|
||||
InstalledPlugins.Add(new Tuple<string, PluginType>(name, PluginType.Command));
|
||||
}
|
||||
}
|
||||
|
||||
private static void LoadEvents()
|
||||
{
|
||||
var eve_path = "./Data/Plugins/Events/";
|
||||
var files = Directory.GetFiles(eve_path, $"*.{PluginLoader.pluginEVEExtension}",
|
||||
SearchOption.AllDirectories);
|
||||
foreach (var file in files)
|
||||
if (!file.Contains("PluginManager", StringComparison.InvariantCultureIgnoreCase))
|
||||
if (!file.Contains("PluginManager", StringComparison.InvariantCultureIgnoreCase))
|
||||
{
|
||||
var PluginName = new FileInfo(file).Name;
|
||||
var name = PluginName.Substring(
|
||||
0, PluginName.Length - 1 - PluginLoader.pluginEVEExtension.Length);
|
||||
InstalledPlugins.Add(new Tuple<string, PluginType>(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;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,7 +1,5 @@
|
||||
using System.Collections.Generic;
|
||||
|
||||
using Discord.Commands;
|
||||
using Discord.WebSocket;
|
||||
|
||||
namespace PluginManager.Interfaces;
|
||||
|
||||
@@ -38,11 +36,15 @@ public interface DBCommand
|
||||
/// The main body of the command. This is what is executed when user calls the command in Server
|
||||
/// </summary>
|
||||
/// <param name="context">The disocrd Context</param>
|
||||
void ExecuteServer(SocketCommandContext context) { }
|
||||
void ExecuteServer(SocketCommandContext context)
|
||||
{
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// The main body of the command. This is what is executed when user calls the command in DM
|
||||
/// </summary>
|
||||
/// <param name="context">The disocrd Context</param>
|
||||
void ExecuteDM(SocketCommandContext context) { }
|
||||
void ExecuteDM(SocketCommandContext context)
|
||||
{
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,5 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Threading.Tasks;
|
||||
using Discord.WebSocket;
|
||||
using PluginManager.Others;
|
||||
|
||||
|
||||
@@ -3,7 +3,6 @@
|
||||
using PluginManager.Interfaces;
|
||||
using PluginManager.Loaders;
|
||||
using PluginManager.Online;
|
||||
using PluginManager.Online.Helpers;
|
||||
using PluginManager.Others;
|
||||
|
||||
using System;
|
||||
@@ -15,19 +14,22 @@ using System.Net.Http;
|
||||
using System.Reflection;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
using OperatingSystem = PluginManager.Others.OperatingSystem;
|
||||
|
||||
namespace PluginManager.Items;
|
||||
|
||||
public class ConsoleCommandsHandler
|
||||
{
|
||||
private static readonly PluginsManager manager = new("https://raw.githubusercontent.com/Wizzy69/installer/discord-bot-files/Plugins.txt");
|
||||
private static readonly PluginsManager manager =
|
||||
new("https://raw.githubusercontent.com/Wizzy69/installer/discord-bot-files/Plugins.txt");
|
||||
|
||||
private static readonly List<ConsoleCommand> commandList = new();
|
||||
|
||||
|
||||
private static bool isDownloading;
|
||||
private static bool pluginsLoaded;
|
||||
private readonly DiscordSocketClient? client;
|
||||
|
||||
|
||||
private static bool isDownloading = false;
|
||||
private static bool pluginsLoaded = false;
|
||||
|
||||
public ConsoleCommandsHandler(DiscordSocketClient client)
|
||||
{
|
||||
this.client = client;
|
||||
@@ -37,7 +39,6 @@ public class ConsoleCommandsHandler
|
||||
|
||||
private void InitializeBasicCommands()
|
||||
{
|
||||
|
||||
commandList.Clear();
|
||||
|
||||
AddCommand("help", "Show help", "help <command>", args =>
|
||||
@@ -45,7 +46,7 @@ public class ConsoleCommandsHandler
|
||||
if (args.Length <= 1)
|
||||
{
|
||||
Console.WriteLine("Available commands:");
|
||||
List<string[]> items = new List<string[]>();
|
||||
var items = new List<string[]>();
|
||||
items.Add(new[] { "-", "-", "-" });
|
||||
items.Add(new[] { "Command", "Description", "Usage" });
|
||||
items.Add(new[] { " ", " ", "Argument type: <optional> [required]" });
|
||||
@@ -53,7 +54,9 @@ public class ConsoleCommandsHandler
|
||||
|
||||
foreach (var command in commandList)
|
||||
{
|
||||
var pa = from p in command.Action.Method.GetParameters() where p.Name != null select p.ParameterType.FullName;
|
||||
var pa = from p in command.Action.Method.GetParameters()
|
||||
where p.Name != null
|
||||
select p.ParameterType.FullName;
|
||||
items.Add(new[] { command.CommandName, command.Description, command.Usage });
|
||||
}
|
||||
|
||||
@@ -81,10 +84,9 @@ public class ConsoleCommandsHandler
|
||||
if (pluginsLoaded)
|
||||
return;
|
||||
var loader = new PluginLoader(client!);
|
||||
ConsoleColor cc = Console.ForegroundColor;
|
||||
var cc = Console.ForegroundColor;
|
||||
loader.onCMDLoad += (name, typeName, success, exception) =>
|
||||
{
|
||||
|
||||
if (name == null || name.Length < 2)
|
||||
name = typeName;
|
||||
if (success)
|
||||
@@ -99,6 +101,7 @@ public class ConsoleCommandsHandler
|
||||
|
||||
Console.WriteLine("[CMD] Failed to load command : " + name + " because " + exception!.Message);
|
||||
}
|
||||
|
||||
Console.ForegroundColor = cc;
|
||||
};
|
||||
loader.onEVELoad += (name, typeName, success, exception) =>
|
||||
@@ -116,13 +119,13 @@ public class ConsoleCommandsHandler
|
||||
Console.ForegroundColor = ConsoleColor.Red;
|
||||
Console.WriteLine("[EVENT] Failed to load event : " + name + " because " + exception!.Message);
|
||||
}
|
||||
|
||||
Console.ForegroundColor = cc;
|
||||
};
|
||||
|
||||
loader.LoadPlugins();
|
||||
Console.ForegroundColor = cc;
|
||||
pluginsLoaded = true;
|
||||
|
||||
}
|
||||
);
|
||||
|
||||
@@ -130,7 +133,6 @@ public class ConsoleCommandsHandler
|
||||
|
||||
AddCommand("dwplug", "download plugin", "dwplug [name]", async args =>
|
||||
{
|
||||
|
||||
isDownloading = true;
|
||||
if (args.Length == 1)
|
||||
{
|
||||
@@ -152,32 +154,36 @@ public class ConsoleCommandsHandler
|
||||
Console_Utilities.WriteColorText("Name is invalid");
|
||||
return;
|
||||
}
|
||||
|
||||
isDownloading = false;
|
||||
Console_Utilities.WriteColorText($"Failed to find plugin &b{name} &c!" + " Use &glistplugs &ccommand to display all available plugins !");
|
||||
Console_Utilities.WriteColorText($"Failed to find plugin &b{name} &c!" +
|
||||
" Use &glistplugs &ccommand to display all available plugins !");
|
||||
return;
|
||||
}
|
||||
|
||||
string path;
|
||||
if (info[0] == "Command" || info[0] == "Event")
|
||||
path = "./Data/Plugins/" + info[0] + "s/" + name + "." + (info[0] == "Command" ? PluginLoader.pluginCMDExtension : PluginLoader.pluginEVEExtension);
|
||||
path = "./Data/Plugins/" + info[0] + "s/" + name + "." + (info[0] == "Command"
|
||||
? PluginLoader.pluginCMDExtension
|
||||
: PluginLoader.pluginEVEExtension);
|
||||
else
|
||||
path = $"./{info[1].Split('/')[info[1].Split('/').Length - 1]}";
|
||||
if (Others.OperatingSystem.WINDOWS == Functions.GetOperatingSystem())
|
||||
if (OperatingSystem.WINDOWS == Functions.GetOperatingSystem())
|
||||
{
|
||||
await ServerCom.DownloadFileAsync(info[1], path);
|
||||
}
|
||||
else if (Others.OperatingSystem.LINUX == Functions.GetOperatingSystem())
|
||||
else if (OperatingSystem.LINUX == Functions.GetOperatingSystem())
|
||||
{
|
||||
Others.Console_Utilities.ProgressBar bar = new Console_Utilities.ProgressBar(ProgressBarType.NO_END);
|
||||
var bar = new Console_Utilities.ProgressBar(ProgressBarType.NO_END);
|
||||
bar.Start();
|
||||
await ServerCom.DownloadFileNoProgressAsync(info[1], path);
|
||||
bar.Stop("Plugin Downloaded !");
|
||||
}
|
||||
|
||||
if (info[0] == "Event")
|
||||
Config.PluginConfig.InstalledPlugins.Add(new(name, PluginType.Event));
|
||||
Config.PluginConfig.InstalledPlugins.Add(new Tuple<string, PluginType>(name, PluginType.Event));
|
||||
else if (info[0] == "Command")
|
||||
Config.PluginConfig.InstalledPlugins.Add(new(name, PluginType.Command));
|
||||
Config.PluginConfig.InstalledPlugins.Add(new Tuple<string, PluginType>(name, PluginType.Command));
|
||||
|
||||
|
||||
Console.WriteLine("\n");
|
||||
@@ -197,25 +203,31 @@ public class ConsoleCommandsHandler
|
||||
var split = line.Split(',');
|
||||
Console.WriteLine($"\nDownloading item: {split[1]}");
|
||||
if (File.Exists("./" + split[1])) File.Delete("./" + split[1]);
|
||||
if (Others.OperatingSystem.WINDOWS == Functions.GetOperatingSystem())
|
||||
await ServerCom.DownloadFileAsync(split[0], "./" + split[1]);
|
||||
else if (Others.OperatingSystem.LINUX == Functions.GetOperatingSystem())
|
||||
if (OperatingSystem.WINDOWS == Functions.GetOperatingSystem())
|
||||
{
|
||||
Others.Console_Utilities.ProgressBar bar = new Console_Utilities.ProgressBar(ProgressBarType.NO_END);
|
||||
await ServerCom.DownloadFileAsync(split[0], "./" + split[1]);
|
||||
}
|
||||
else if (OperatingSystem.LINUX == Functions.GetOperatingSystem())
|
||||
{
|
||||
var bar = new Console_Utilities.ProgressBar(ProgressBarType.NO_END);
|
||||
bar.Start();
|
||||
await ServerCom.DownloadFileNoProgressAsync(split[0], "./" + split[1]);
|
||||
bar.Stop("Item downloaded !");
|
||||
|
||||
}
|
||||
|
||||
Console.WriteLine();
|
||||
if (split[0].EndsWith(".pak"))
|
||||
{
|
||||
File.Move("./" + split[1], "./Data/PAKS/" + split[1], true);
|
||||
}
|
||||
else if (split[0].EndsWith(".zip") || split[0].EndsWith(".pkg"))
|
||||
{
|
||||
Console.WriteLine($"Extracting {split[1]} ...");
|
||||
var bar = new Console_Utilities.ProgressBar(ProgressBarType.NO_END);// { Max = 100f, Color = ConsoleColor.Green };
|
||||
var bar = new Console_Utilities.ProgressBar(
|
||||
ProgressBarType.NO_END); // { Max = 100f, Color = ConsoleColor.Green };
|
||||
bar.Start();
|
||||
await Functions.ExtractArchive("./" + split[1], "./", null, UnzipProgressType.PercentageFromTotalSize);
|
||||
await Functions.ExtractArchive("./" + split[1], "./", null,
|
||||
UnzipProgressType.PercentageFromTotalSize);
|
||||
bar.Stop("Extracted");
|
||||
Console.WriteLine("\n");
|
||||
File.Delete("./" + split[1]);
|
||||
@@ -224,15 +236,14 @@ public class ConsoleCommandsHandler
|
||||
|
||||
Console.WriteLine();
|
||||
}
|
||||
VersionString? ver = await Online.ServerCom.GetVersionOfPackageFromWeb(name);
|
||||
|
||||
var ver = await ServerCom.GetVersionOfPackageFromWeb(name);
|
||||
if (ver is null) throw new Exception("Incorrect version");
|
||||
Config.SetPluginVersion(name, $"{ver.PackageVersionID}.{ver.PackageMainVersion}.{ver.PackageCheckVersion}");
|
||||
Config.SetPluginVersion(
|
||||
name, $"{ver.PackageVersionID}.{ver.PackageMainVersion}.{ver.PackageCheckVersion}");
|
||||
|
||||
isDownloading = false;
|
||||
|
||||
|
||||
}
|
||||
|
||||
);
|
||||
|
||||
|
||||
@@ -280,7 +291,7 @@ public class ConsoleCommandsHandler
|
||||
{
|
||||
if (client is null)
|
||||
return;
|
||||
Console_Utilities.ProgressBar bar = new Console_Utilities.ProgressBar(ProgressBarType.NO_END);
|
||||
var bar = new Console_Utilities.ProgressBar(ProgressBarType.NO_END);
|
||||
|
||||
bar.Start();
|
||||
await Config.SaveConfig(SaveType.NORMAL);
|
||||
@@ -292,57 +303,52 @@ public class ConsoleCommandsHandler
|
||||
|
||||
await Task.Delay(1000);
|
||||
Environment.Exit(0);
|
||||
|
||||
}
|
||||
);
|
||||
|
||||
AddCommand("import", "Load an external command", "import [pluginName]", async (args) =>
|
||||
AddCommand("import", "Load an external command", "import [pluginName]", async args =>
|
||||
{
|
||||
if (args.Length <= 1) return;
|
||||
try
|
||||
{
|
||||
string pName = Functions.MergeStrings(args, 1);
|
||||
HttpClient client = new HttpClient();
|
||||
string url = (await manager.GetPluginLinkByName(pName))[1];
|
||||
var pName = args.MergeStrings(1);
|
||||
var client = new HttpClient();
|
||||
var url = (await manager.GetPluginLinkByName(pName))[1];
|
||||
if (url is null) throw new Exception($"Invalid plugin name {pName}.");
|
||||
Stream s = await client.GetStreamAsync(url);
|
||||
MemoryStream str = new MemoryStream();
|
||||
var s = await client.GetStreamAsync(url);
|
||||
var str = new MemoryStream();
|
||||
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))
|
||||
{
|
||||
DBEvent instance = (DBEvent)Activator.CreateInstance(type);
|
||||
var instance = (DBEvent)Activator.CreateInstance(type);
|
||||
instance.Start(this.client);
|
||||
Console.WriteLine($"[EVENT] Loaded external {type.FullName}!");
|
||||
}
|
||||
else if (type.IsClass && typeof(DBCommand).IsAssignableFrom(type))
|
||||
{
|
||||
DBCommand instance = (DBCommand)Activator.CreateInstance(type);
|
||||
var instance = (DBCommand)Activator.CreateInstance(type);
|
||||
Console.WriteLine($"[CMD] Instance: {type.FullName} loaded !");
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Console.WriteLine(ex.Message);
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
AddCommand("remplug", "Remove a plugin", "remplug [plugName]", async args =>
|
||||
{
|
||||
|
||||
if (args.Length <= 1) return;
|
||||
|
||||
isDownloading = true;
|
||||
string plugName = Functions.MergeStrings(args, 1);
|
||||
var plugName = args.MergeStrings(1);
|
||||
if (pluginsLoaded)
|
||||
{
|
||||
if (Functions.GetOperatingSystem() == Others.OperatingSystem.WINDOWS)
|
||||
if (Functions.GetOperatingSystem() == OperatingSystem.WINDOWS)
|
||||
{
|
||||
Process.Start("DiscordBot.exe", $"/remplug {plugName}");
|
||||
await Task.Delay(100);
|
||||
@@ -354,16 +360,18 @@ public class ConsoleCommandsHandler
|
||||
await Task.Delay(100);
|
||||
Environment.Exit(0);
|
||||
}
|
||||
|
||||
isDownloading = false;
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
string location = "./Data/Plugins/";
|
||||
var location = "./Data/Plugins/";
|
||||
|
||||
location = Config.PluginConfig.GetPluginType(plugName) switch
|
||||
{
|
||||
PluginType.Command => location + "Commands/" + plugName + "." + PluginLoader.pluginCMDExtension,
|
||||
PluginType.Command => location + "Commands/" + plugName + "." +
|
||||
PluginLoader.pluginCMDExtension,
|
||||
PluginType.Event => location + "Events/" + plugName + "." + PluginLoader.pluginEVEExtension,
|
||||
PluginType.Unknown => "./",
|
||||
_ => throw new NotImplementedException("Plugin type incorrect")
|
||||
@@ -379,11 +387,12 @@ public class ConsoleCommandsHandler
|
||||
if (Config.PluginConfig.Contains(plugName))
|
||||
{
|
||||
var tuple = Config.PluginConfig.InstalledPlugins.Where(t => t.Item1 == plugName).FirstOrDefault();
|
||||
Console.WriteLine("Found: " + tuple.ToString());
|
||||
Console.WriteLine("Found: " + tuple);
|
||||
Config.PluginConfig.InstalledPlugins.Remove(tuple);
|
||||
Config.RemovePluginVersion(plugName);
|
||||
await Config.SaveConfig(SaveType.NORMAL);
|
||||
}
|
||||
|
||||
Console.WriteLine("Removed the plugin DLL. Checking for other files ...");
|
||||
|
||||
var info = await manager.GetPluginLinkByName(plugName);
|
||||
@@ -406,33 +415,35 @@ public class ConsoleCommandsHandler
|
||||
if (Directory.Exists(plugName))
|
||||
Directory.Delete(plugName, true);
|
||||
}
|
||||
|
||||
isDownloading = false;
|
||||
Console.WriteLine(plugName + " has been successfully deleted !");
|
||||
|
||||
});
|
||||
|
||||
AddCommand("reload", "Reload the bot with all plugins", () =>
|
||||
{
|
||||
if (Functions.GetOperatingSystem() == Others.OperatingSystem.WINDOWS)
|
||||
if (Functions.GetOperatingSystem() == OperatingSystem.WINDOWS)
|
||||
{
|
||||
Process.Start("DiscordBot.exe", $"lp");
|
||||
Process.Start("DiscordBot.exe", "lp");
|
||||
HandleCommand("sd");
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
Process.Start("./DiscordBot", $"lp");
|
||||
Process.Start("./DiscordBot", "lp");
|
||||
HandleCommand("sd");
|
||||
}
|
||||
});
|
||||
|
||||
//AddCommand("");
|
||||
|
||||
//Sort the commands by name
|
||||
commandList.Sort((x, y) => x.CommandName.CompareTo(y.CommandName));
|
||||
}
|
||||
|
||||
public static void AddCommand(string command, string description, string usage, Action<string[]> action)
|
||||
{
|
||||
commandList.Add(new ConsoleCommand { CommandName = command, Description = description, Action = action, Usage = usage });
|
||||
commandList.Add(new ConsoleCommand
|
||||
{ CommandName = command, Description = description, Action = action, Usage = usage });
|
||||
Console.ForegroundColor = ConsoleColor.White;
|
||||
Console_Utilities.WriteColorText($"Command &r{command} &cadded to the list of commands");
|
||||
}
|
||||
@@ -468,7 +479,6 @@ public class ConsoleCommandsHandler
|
||||
Console.WriteLine();
|
||||
|
||||
while (isDownloading) await Task.Delay(1000);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -482,7 +492,7 @@ public class ConsoleCommandsHandler
|
||||
if (removeCommandExecution)
|
||||
{
|
||||
Console.SetCursorPosition(0, Console.CursorTop - 1);
|
||||
for (int i = 0; i < command.Length + 30; i++)
|
||||
for (var i = 0; i < command.Length + 30; i++)
|
||||
Console.Write(" ");
|
||||
Console.SetCursorPosition(0, Console.CursorTop);
|
||||
}
|
||||
|
||||
@@ -3,9 +3,6 @@ using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
using PluginManager.Online.Updates;
|
||||
using PluginManager.Others;
|
||||
|
||||
namespace PluginManager.Loaders;
|
||||
@@ -31,11 +28,6 @@ internal class Loader<T>
|
||||
private string path { get; }
|
||||
private string extension { get; }
|
||||
|
||||
|
||||
internal delegate void FileLoadedEventHandler(LoaderArgs args);
|
||||
|
||||
internal delegate void PluginLoadedEventHandler(LoaderArgs args);
|
||||
|
||||
internal event FileLoadedEventHandler? FileLoaded;
|
||||
|
||||
internal event PluginLoadedEventHandler? PluginLoaded;
|
||||
@@ -52,7 +44,6 @@ internal class Loader<T>
|
||||
var files = Directory.GetFiles(path, $"*.{extension}", SearchOption.AllDirectories);
|
||||
foreach (var file in files)
|
||||
{
|
||||
|
||||
Assembly.LoadFrom(file);
|
||||
if (FileLoaded != null)
|
||||
{
|
||||
@@ -98,7 +89,11 @@ internal class Loader<T>
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
if (PluginLoaded != null) PluginLoaded.Invoke(new LoaderArgs { Exception = ex, IsLoaded = false, PluginName = type.FullName, TypeName = nameof(T) });
|
||||
if (PluginLoaded != null)
|
||||
PluginLoaded.Invoke(new LoaderArgs
|
||||
{
|
||||
Exception = ex, IsLoaded = false, PluginName = type.FullName, TypeName = nameof(T)
|
||||
});
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
@@ -109,4 +104,9 @@ internal class Loader<T>
|
||||
|
||||
return list;
|
||||
}
|
||||
|
||||
|
||||
internal delegate void FileLoadedEventHandler(LoaderArgs args);
|
||||
|
||||
internal delegate void PluginLoadedEventHandler(LoaderArgs args);
|
||||
}
|
||||
@@ -1,14 +1,10 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
using Discord.WebSocket;
|
||||
|
||||
using PluginManager.Interfaces;
|
||||
using PluginManager.Online.Helpers;
|
||||
using PluginManager.Online;
|
||||
using PluginManager.Online.Updates;
|
||||
using PluginManager.Others;
|
||||
|
||||
@@ -63,35 +59,33 @@ public class PluginLoader
|
||||
public async void LoadPlugins()
|
||||
{
|
||||
//Check for updates in commands
|
||||
foreach (var file in Directory.GetFiles("./Data/Plugins/Commands", $"*.{pluginCMDExtension}", SearchOption.AllDirectories))
|
||||
{
|
||||
foreach (var file in Directory.GetFiles("./Data/Plugins/Commands", $"*.{pluginCMDExtension}",
|
||||
SearchOption.AllDirectories))
|
||||
await Task.Run(async () =>
|
||||
{
|
||||
string name = new FileInfo(file).Name.Split('.')[0];
|
||||
var name = new FileInfo(file).Name.Split('.')[0];
|
||||
if (!Config.PluginVersionsContainsKey(name))
|
||||
Config.SetPluginVersion(name, (await Online.ServerCom.GetVersionOfPackageFromWeb(name))?.PackageVersionID + ".0.0");
|
||||
Config.SetPluginVersion(
|
||||
name, (await ServerCom.GetVersionOfPackageFromWeb(name))?.PackageVersionID + ".0.0");
|
||||
|
||||
if (await PluginUpdater.CheckForUpdates(name))
|
||||
await PluginUpdater.Download(name);
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
//Check for updates in events
|
||||
foreach (var file in Directory.GetFiles("./Data/Plugins/Events", $"*.{pluginEVEExtension}", SearchOption.AllDirectories))
|
||||
{
|
||||
foreach (var file in Directory.GetFiles("./Data/Plugins/Events", $"*.{pluginEVEExtension}",
|
||||
SearchOption.AllDirectories))
|
||||
await Task.Run(async () =>
|
||||
{
|
||||
string name = new FileInfo(file).Name.Split('.')[0];
|
||||
var name = new FileInfo(file).Name.Split('.')[0];
|
||||
if (!Config.PluginVersionsContainsKey(name))
|
||||
Config.SetPluginVersion(name, (await Online.ServerCom.GetVersionOfPackageFromWeb(name))?.PackageVersionID + ".0.0");
|
||||
Config.SetPluginVersion(
|
||||
name, (await ServerCom.GetVersionOfPackageFromWeb(name))?.PackageVersionID + ".0.0");
|
||||
|
||||
if (await PluginUpdater.CheckForUpdates(name))
|
||||
await PluginUpdater.Download(name);
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
|
||||
//Save the new config file (after the updates)
|
||||
await Config.SaveConfig(SaveType.NORMAL);
|
||||
@@ -116,24 +110,19 @@ public class PluginLoader
|
||||
|
||||
Commands = commandsLoader.Load();
|
||||
Events = eventsLoader.Load();
|
||||
|
||||
}
|
||||
|
||||
private void EventFileLoaded(LoaderArgs e)
|
||||
{
|
||||
if (!e.IsLoaded)
|
||||
{
|
||||
Functions.WriteLogFile($"[EVENT] Event from file [{e.PluginName}] has been successfully created !");
|
||||
}
|
||||
}
|
||||
|
||||
private void OnCommandFileLoaded(LoaderArgs e)
|
||||
{
|
||||
if (!e.IsLoaded)
|
||||
{
|
||||
Functions.WriteLogFile($"[CMD] Command from file [{e.PluginName}] has been successfully loaded !");
|
||||
}
|
||||
}
|
||||
|
||||
private void OnEventLoaded(LoaderArgs e)
|
||||
{
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
using System;
|
||||
using System.Net.Http;
|
||||
using System.Threading.Tasks;
|
||||
using System.IO;
|
||||
using System.Net.Http;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using PluginManager.Others;
|
||||
|
||||
namespace PluginManager.Online.Helpers
|
||||
{
|
||||
namespace PluginManager.Online.Helpers;
|
||||
|
||||
internal static class OnlineFunctions
|
||||
{
|
||||
/// <summary>
|
||||
@@ -18,7 +18,10 @@ namespace PluginManager.Online.Helpers
|
||||
/// <param name="progress">The <see cref="IProgress{T}" /> that is used to track the download progress</param>
|
||||
/// <param name="cancellation">The cancellation token</param>
|
||||
/// <returns></returns>
|
||||
internal static async Task DownloadFileAsync(this HttpClient client, string url, Stream destination, IProgress<float>? progress = null, IProgress<long>? downloadedBytes = null, int bufferSize = 81920, CancellationToken cancellation = default)
|
||||
internal static async Task DownloadFileAsync(this HttpClient client, string url, Stream destination,
|
||||
IProgress<float>? progress = null,
|
||||
IProgress<long>? downloadedBytes = null, int bufferSize = 81920,
|
||||
CancellationToken cancellation = default)
|
||||
{
|
||||
using (var response = await client.GetAsync(url, HttpCompletionOption.ResponseHeadersRead, cancellation))
|
||||
{
|
||||
@@ -60,8 +63,4 @@ namespace PluginManager.Online.Helpers
|
||||
using var client = new HttpClient();
|
||||
return await client.GetStringAsync(url, cancellation);
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
@@ -1,16 +1,16 @@
|
||||
using System;
|
||||
|
||||
namespace PluginManager.Online.Helpers
|
||||
{
|
||||
namespace PluginManager.Online.Helpers;
|
||||
|
||||
public class VersionString
|
||||
{
|
||||
public int PackageVersionID;
|
||||
public int PackageMainVersion;
|
||||
public int PackageCheckVersion;
|
||||
public int PackageMainVersion;
|
||||
public int PackageVersionID;
|
||||
|
||||
public VersionString(string version)
|
||||
{
|
||||
string[] data = version.Split('.');
|
||||
var data = version.Split('.');
|
||||
try
|
||||
{
|
||||
PackageVersionID = int.Parse(data[0]);
|
||||
@@ -23,38 +23,10 @@ namespace PluginManager.Online.Helpers
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
#region operators
|
||||
public static bool operator >(VersionString s1, VersionString s2)
|
||||
{
|
||||
if (s1.PackageVersionID > s2.PackageVersionID) return true;
|
||||
if (s1.PackageVersionID == s2.PackageVersionID)
|
||||
{
|
||||
if (s1.PackageMainVersion > s2.PackageMainVersion) return true;
|
||||
if (s1.PackageMainVersion == s2.PackageMainVersion && s1.PackageCheckVersion > s2.PackageCheckVersion) return true;
|
||||
|
||||
}
|
||||
return false;
|
||||
}
|
||||
public static bool operator <(VersionString s1, VersionString s2) => !(s1 > s2) && s1 != s2;
|
||||
|
||||
public static bool operator ==(VersionString s1, VersionString s2)
|
||||
{
|
||||
if (s1.PackageVersionID == s2.PackageVersionID && s1.PackageMainVersion == s2.PackageMainVersion && s1.PackageCheckVersion == s2.PackageCheckVersion) return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
public static bool operator !=(VersionString s1, VersionString s2) => !(s1 == s2);
|
||||
|
||||
public static bool operator <=(VersionString s1, VersionString s2) => (s1 < s2 || s1 == s2);
|
||||
public static bool operator >=(VersionString s1, VersionString s2) => (s1 > s2 || s1 == s2);
|
||||
|
||||
#endregion
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
return "{PackageID: " + PackageVersionID + ", PackageVersion: " + PackageMainVersion + ", PackageCheckVersion: " + PackageCheckVersion + "}";
|
||||
return "{PackageID: " + PackageVersionID + ", PackageVersion: " + PackageMainVersion +
|
||||
", PackageCheckVersion: " + PackageCheckVersion + "}";
|
||||
}
|
||||
|
||||
public string ToShortString()
|
||||
@@ -64,5 +36,48 @@ namespace PluginManager.Online.Helpers
|
||||
return $"{PackageVersionID}.{PackageMainVersion}.{PackageCheckVersion}";
|
||||
}
|
||||
|
||||
|
||||
#region operators
|
||||
|
||||
public static bool operator >(VersionString s1, VersionString s2)
|
||||
{
|
||||
if (s1.PackageVersionID > s2.PackageVersionID) return true;
|
||||
if (s1.PackageVersionID == s2.PackageVersionID)
|
||||
{
|
||||
if (s1.PackageMainVersion > s2.PackageMainVersion) return true;
|
||||
if (s1.PackageMainVersion == s2.PackageMainVersion &&
|
||||
s1.PackageCheckVersion > s2.PackageCheckVersion) return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public static bool operator <(VersionString s1, VersionString s2)
|
||||
{
|
||||
return !(s1 > s2) && s1 != s2;
|
||||
}
|
||||
|
||||
public static bool operator ==(VersionString s1, VersionString s2)
|
||||
{
|
||||
if (s1.PackageVersionID == s2.PackageVersionID && s1.PackageMainVersion == s2.PackageMainVersion &&
|
||||
s1.PackageCheckVersion == s2.PackageCheckVersion) return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
public static bool operator !=(VersionString s1, VersionString s2)
|
||||
{
|
||||
return !(s1 == s2);
|
||||
}
|
||||
|
||||
public static bool operator <=(VersionString s1, VersionString s2)
|
||||
{
|
||||
return s1 < s2 || s1 == s2;
|
||||
}
|
||||
|
||||
public static bool operator >=(VersionString s1, VersionString s2)
|
||||
{
|
||||
return s1 > s2 || s1 == s2;
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
@@ -1,10 +1,8 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
using PluginManager.Online.Helpers;
|
||||
using PluginManager.Others;
|
||||
|
||||
using OperatingSystem = PluginManager.Others.OperatingSystem;
|
||||
|
||||
namespace PluginManager.Online;
|
||||
@@ -57,7 +55,9 @@ public class PluginsManager
|
||||
display[0] = content[0];
|
||||
display[1] = content[1];
|
||||
display[2] = content[2];
|
||||
display[3] = (await Online.ServerCom.GetVersionOfPackageFromWeb(content[0]) ?? new VersionString("0.0.0")).ToShortString();
|
||||
display[3] =
|
||||
(await ServerCom.GetVersionOfPackageFromWeb(content[0]) ?? new VersionString("0.0.0"))
|
||||
.ToShortString();
|
||||
if (Config.PluginConfig.Contains(content[0]) || Config.PluginConfig.Contains(content[0]))
|
||||
display[4] = "✓";
|
||||
else
|
||||
@@ -72,7 +72,9 @@ public class PluginsManager
|
||||
display[0] = content[0];
|
||||
display[1] = content[1];
|
||||
display[2] = content[2];
|
||||
display[3] = (await Online.ServerCom.GetVersionOfPackageFromWeb(content[0]) ?? new VersionString("0.0.0")).ToShortString();
|
||||
display[3] =
|
||||
(await ServerCom.GetVersionOfPackageFromWeb(content[0]) ?? new VersionString("0.0.0"))
|
||||
.ToShortString();
|
||||
if (Config.PluginConfig.Contains(content[0]) || Config.PluginConfig.Contains(content[0]))
|
||||
display[4] = "✓";
|
||||
else
|
||||
|
||||
@@ -1,14 +1,16 @@
|
||||
using PluginManager.Online.Helpers;
|
||||
using PluginManager.Others;
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Net.Http;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using PluginManager.Others;
|
||||
|
||||
namespace PluginManager.Online
|
||||
{
|
||||
namespace PluginManager.Online;
|
||||
|
||||
public static class ServerCom
|
||||
{
|
||||
/// <summary>
|
||||
@@ -18,8 +20,8 @@ namespace PluginManager.Online
|
||||
/// <returns></returns>
|
||||
public static async Task<List<string>> ReadTextFromURL(string link)
|
||||
{
|
||||
string response = await OnlineFunctions.DownloadStringAsync(link);
|
||||
string[] lines = response.Split('\n');
|
||||
var response = await OnlineFunctions.DownloadStringAsync(link);
|
||||
var lines = response.Split('\n');
|
||||
return lines.ToList();
|
||||
}
|
||||
|
||||
@@ -30,9 +32,10 @@ namespace PluginManager.Online
|
||||
/// <param name="location">The location where to store the downloaded data</param>
|
||||
/// <param name="progress">The <see cref="IProgress{T}" /> to track the download</param>
|
||||
/// <returns></returns>
|
||||
public static async Task DownloadFileAsync(string URL, string location, IProgress<float> progress, IProgress<long>? downloadedBytes = null)
|
||||
public static async Task DownloadFileAsync(string URL, string location, IProgress<float> progress,
|
||||
IProgress<long>? downloadedBytes = null)
|
||||
{
|
||||
using (var client = new System.Net.Http.HttpClient())
|
||||
using (var client = new HttpClient())
|
||||
{
|
||||
client.Timeout = TimeSpan.FromMinutes(5);
|
||||
|
||||
@@ -51,15 +54,15 @@ namespace PluginManager.Online
|
||||
/// <returns></returns>
|
||||
public static async Task DownloadFileAsync(string URL, string location)
|
||||
{
|
||||
bool isDownloading = true;
|
||||
var isDownloading = true;
|
||||
float c_progress = 0;
|
||||
|
||||
Console_Utilities.ProgressBar pbar = new Console_Utilities.ProgressBar(ProgressBarType.NORMAL) { Max = 100f, NoColor = true };
|
||||
var pbar = new Console_Utilities.ProgressBar(ProgressBarType.NORMAL) { Max = 100f, NoColor = true };
|
||||
|
||||
IProgress<float> progress = new Progress<float>(percent => { c_progress = percent; });
|
||||
|
||||
|
||||
Task updateProgressBarTask = new Task(() =>
|
||||
var updateProgressBarTask = new Task(() =>
|
||||
{
|
||||
while (isDownloading)
|
||||
{
|
||||
@@ -79,6 +82,7 @@ namespace PluginManager.Online
|
||||
pbar.Update(100f);
|
||||
isDownloading = false;
|
||||
}
|
||||
|
||||
public static async Task DownloadFileNoProgressAsync(string URL, string location)
|
||||
{
|
||||
IProgress<float> progress = new Progress<float>();
|
||||
@@ -94,14 +98,12 @@ namespace PluginManager.Online
|
||||
|
||||
public static async Task<VersionString?> GetVersionOfPackageFromWeb(string pakName)
|
||||
{
|
||||
string url = "https://raw.githubusercontent.com/Wizzy69/installer/discord-bot-files/Versions";
|
||||
List<string> data = await ServerCom.ReadTextFromURL(url);
|
||||
string? version = (from item in data
|
||||
var url = "https://raw.githubusercontent.com/Wizzy69/installer/discord-bot-files/Versions";
|
||||
var data = await ReadTextFromURL(url);
|
||||
var version = (from item in data
|
||||
where !item.StartsWith("#") && item.StartsWith(pakName)
|
||||
select item.Split(',')[1]).FirstOrDefault();
|
||||
if (version == default || version == null) return null;
|
||||
return new VersionString(version);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -1,21 +1,18 @@
|
||||
using PluginManager.Items;
|
||||
using PluginManager.Online.Helpers;
|
||||
using System;
|
||||
using System.Threading.Tasks;
|
||||
using PluginManager.Items;
|
||||
using PluginManager.Others;
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Threading.Tasks;
|
||||
namespace PluginManager.Online.Updates;
|
||||
|
||||
namespace PluginManager.Online.Updates
|
||||
{
|
||||
public class PluginUpdater
|
||||
{
|
||||
public static async Task<bool> CheckForUpdates(string pakName)
|
||||
{
|
||||
try
|
||||
{
|
||||
var webV = await Online.ServerCom.GetVersionOfPackageFromWeb(pakName);
|
||||
var local = Online.ServerCom.GetVersionOfPackage(pakName);
|
||||
var webV = await ServerCom.GetVersionOfPackageFromWeb(pakName);
|
||||
var local = ServerCom.GetVersionOfPackage(pakName);
|
||||
|
||||
if (local is null) return true;
|
||||
if (webV is null) return false;
|
||||
@@ -23,7 +20,10 @@ namespace PluginManager.Online.Updates
|
||||
if (webV == local) return false;
|
||||
if (webV > local) return true;
|
||||
}
|
||||
catch (Exception ex) { Console.WriteLine(ex.Message); }
|
||||
catch (Exception ex)
|
||||
{
|
||||
Console.WriteLine(ex.Message);
|
||||
}
|
||||
|
||||
|
||||
return false;
|
||||
@@ -31,21 +31,21 @@ namespace PluginManager.Online.Updates
|
||||
|
||||
public static async Task<Update> DownloadUpdateInfo(string pakName)
|
||||
{
|
||||
string url = "https://raw.githubusercontent.com/Wizzy69/installer/discord-bot-files/Versions";
|
||||
List<string> info = await ServerCom.ReadTextFromURL(url);
|
||||
VersionString? version = await Online.ServerCom.GetVersionOfPackageFromWeb(pakName);
|
||||
var url = "https://raw.githubusercontent.com/Wizzy69/installer/discord-bot-files/Versions";
|
||||
var info = await ServerCom.ReadTextFromURL(url);
|
||||
var version = await ServerCom.GetVersionOfPackageFromWeb(pakName);
|
||||
|
||||
if (version is null) return Update.Empty;
|
||||
Update update = new Update(pakName, string.Join('\n', info), version);
|
||||
var update = new Update(pakName, string.Join('\n', info), version);
|
||||
return update;
|
||||
}
|
||||
|
||||
public static async Task Download(string pakName)
|
||||
{
|
||||
Console_Utilities.WriteColorText("An update was found for &g" + pakName + "&c. Version: &r" + (await Online.ServerCom.GetVersionOfPackageFromWeb(pakName))?.ToShortString() + "&c. Current Version: &y" + Online.ServerCom.GetVersionOfPackage(pakName)?.ToShortString());
|
||||
Console_Utilities.WriteColorText("An update was found for &g" + pakName + "&c. Version: &r" +
|
||||
(await ServerCom.GetVersionOfPackageFromWeb(pakName))?.ToShortString() +
|
||||
"&c. Current Version: &y" +
|
||||
ServerCom.GetVersionOfPackage(pakName)?.ToShortString());
|
||||
await ConsoleCommandsHandler.ExecuteCommad("dwplug " + pakName);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
@@ -1,16 +1,17 @@
|
||||
using PluginManager.Online.Helpers;
|
||||
using System;
|
||||
using PluginManager.Online.Helpers;
|
||||
|
||||
namespace PluginManager.Online.Updates;
|
||||
|
||||
namespace PluginManager.Online.Updates
|
||||
{
|
||||
public class Update
|
||||
{
|
||||
public static Update Empty = new Update(null, null, null);
|
||||
public string pakName;
|
||||
public string UpdateMessage;
|
||||
public static Update Empty = new(null, null, null);
|
||||
|
||||
private readonly bool isEmpty;
|
||||
|
||||
public VersionString newVersion;
|
||||
|
||||
private bool isEmpty;
|
||||
public string pakName;
|
||||
public string UpdateMessage;
|
||||
|
||||
public Update(string pakName, string updateMessage, VersionString newVersion)
|
||||
{
|
||||
@@ -20,17 +21,14 @@ namespace PluginManager.Online.Updates
|
||||
|
||||
if (pakName is null && updateMessage is null && newVersion is null)
|
||||
isEmpty = true;
|
||||
|
||||
}
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
if (isEmpty)
|
||||
throw new System.Exception("The update is EMPTY. Can not print information about an empty update !");
|
||||
return $"Package Name: {this.pakName}\n" +
|
||||
throw new Exception("The update is EMPTY. Can not print information about an empty update !");
|
||||
return $"Package Name: {pakName}\n" +
|
||||
$"Update Message: {UpdateMessage}\n" +
|
||||
$"Version: {newVersion.ToString()}";
|
||||
}
|
||||
|
||||
$"Version: {newVersion}";
|
||||
}
|
||||
}
|
||||
@@ -1,24 +1,24 @@
|
||||
using Discord;
|
||||
|
||||
using System;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace PluginManager.Others;
|
||||
|
||||
namespace PluginManager.Others
|
||||
{
|
||||
public static class Console_Utilities
|
||||
{
|
||||
public static void Initialize()
|
||||
{
|
||||
if (!Config.ContainsKey("TableVariables"))
|
||||
Config.AddValueToVariables("TableVariables", new Dictionary<string, string> { { "DefaultSpace", "3" } }, false);
|
||||
Config.AddValueToVariables("TableVariables", new Dictionary<string, string> { { "DefaultSpace", "3" } },
|
||||
false);
|
||||
if (!Config.ContainsKey("ColorDataBase"))
|
||||
Config.AddValueToVariables("ColorDataBase", new Dictionary<char, ConsoleColor>()
|
||||
Config.AddValueToVariables("ColorDataBase", new Dictionary<char, ConsoleColor>
|
||||
{
|
||||
{ 'g', ConsoleColor.Green },
|
||||
{ 'b', ConsoleColor.Blue },
|
||||
{ 'r', ConsoleColor.Red },
|
||||
{ 'm', ConsoleColor.Magenta },
|
||||
{ 'y', ConsoleColor.Yellow },
|
||||
{ 'y', ConsoleColor.Yellow }
|
||||
}, false
|
||||
);
|
||||
|
||||
@@ -27,168 +27,11 @@ namespace PluginManager.Others
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Progress bar object
|
||||
/// </summary>
|
||||
public class ProgressBar
|
||||
private static bool CanAproximateTo(this float f, float y)
|
||||
{
|
||||
public ProgressBar(ProgressBarType type)
|
||||
{
|
||||
this.type = type;
|
||||
return MathF.Abs(f - y) < 0.000001;
|
||||
}
|
||||
|
||||
public float Max { get; init; }
|
||||
public ConsoleColor Color { get; init; }
|
||||
public bool NoColor { get; init; }
|
||||
public ProgressBarType type { get; set; }
|
||||
|
||||
public int TotalLength { get; private set; }
|
||||
|
||||
private int BarLength = 32;
|
||||
private int position = 1;
|
||||
private bool positive = true;
|
||||
|
||||
private bool isRunning;
|
||||
|
||||
|
||||
public async void Start()
|
||||
{
|
||||
if (type != ProgressBarType.NO_END)
|
||||
throw new Exception("Only NO_END progress bar can use this method");
|
||||
if (isRunning)
|
||||
throw new Exception("This progress bar is already running");
|
||||
|
||||
isRunning = true;
|
||||
while (isRunning)
|
||||
{
|
||||
UpdateNoEnd();
|
||||
await System.Threading.Tasks.Task.Delay(100);
|
||||
}
|
||||
}
|
||||
|
||||
public async void Start(string message)
|
||||
{
|
||||
if (type != ProgressBarType.NO_END)
|
||||
throw new Exception("Only NO_END progress bar can use this method");
|
||||
if (isRunning)
|
||||
throw new Exception("This progress bar is already running");
|
||||
|
||||
isRunning = true;
|
||||
|
||||
TotalLength = message.Length + BarLength + 5;
|
||||
while (isRunning)
|
||||
{
|
||||
UpdateNoEnd(message);
|
||||
await System.Threading.Tasks.Task.Delay(100);
|
||||
}
|
||||
}
|
||||
|
||||
public void Stop()
|
||||
{
|
||||
if (type != ProgressBarType.NO_END)
|
||||
throw new Exception("Only NO_END progress bar can use this method");
|
||||
if (!isRunning)
|
||||
throw new Exception("Can not stop a progressbar that did not start");
|
||||
isRunning = false;
|
||||
}
|
||||
|
||||
public void Stop(string message)
|
||||
{
|
||||
Stop();
|
||||
|
||||
if (message is not null)
|
||||
{
|
||||
Console.CursorLeft = 0;
|
||||
for (int i = 0; i < BarLength + message.Length + 1; i++)
|
||||
Console.Write(" ");
|
||||
Console.CursorLeft = 0;
|
||||
Console.WriteLine(message);
|
||||
}
|
||||
}
|
||||
|
||||
public void Update(float progress)
|
||||
{
|
||||
if (type == ProgressBarType.NO_END)
|
||||
throw new Exception("This function is for progress bars with end");
|
||||
|
||||
UpdateNormal(progress);
|
||||
}
|
||||
|
||||
private void UpdateNoEnd(string message)
|
||||
{
|
||||
Console.CursorLeft = 0;
|
||||
Console.Write("[");
|
||||
for (int i = 1; i <= position; i++)
|
||||
Console.Write(" ");
|
||||
Console.Write("<==()==>");
|
||||
position += positive ? 1 : -1;
|
||||
for (int i = position; i <= BarLength - 1 - (positive ? 0 : 2); i++)
|
||||
Console.Write(" ");
|
||||
Console.Write("] " + message);
|
||||
|
||||
|
||||
|
||||
|
||||
if (position == BarLength - 1 || position == 1)
|
||||
positive = !positive;
|
||||
}
|
||||
|
||||
private void UpdateNoEnd()
|
||||
{
|
||||
Console.CursorLeft = 0;
|
||||
Console.Write("[");
|
||||
for (int i = 1; i <= position; i++)
|
||||
Console.Write(" ");
|
||||
Console.Write("<==()==>");
|
||||
position += positive ? 1 : -1;
|
||||
for (int i = position; i <= BarLength - 1 - (positive ? 0 : 2); i++)
|
||||
Console.Write(" ");
|
||||
Console.Write("]");
|
||||
|
||||
|
||||
|
||||
|
||||
if (position == BarLength - 1 || position == 1)
|
||||
positive = !positive;
|
||||
}
|
||||
|
||||
private void UpdateNormal(float progress)
|
||||
{
|
||||
Console.CursorLeft = 0;
|
||||
Console.Write("[");
|
||||
Console.CursorLeft = BarLength;
|
||||
Console.Write("]");
|
||||
Console.CursorLeft = 1;
|
||||
float onechunk = 30.0f / Max;
|
||||
|
||||
int position = 1;
|
||||
|
||||
for (int i = 0; i < onechunk * progress; i++)
|
||||
{
|
||||
Console.BackgroundColor = NoColor ? ConsoleColor.Black : this.Color;
|
||||
Console.CursorLeft = position++;
|
||||
Console.Write("#");
|
||||
}
|
||||
|
||||
for (int i = position; i < BarLength; i++)
|
||||
{
|
||||
Console.BackgroundColor = NoColor ? ConsoleColor.Black : ConsoleColor.DarkGray;
|
||||
Console.CursorLeft = position++;
|
||||
Console.Write(" ");
|
||||
}
|
||||
|
||||
Console.CursorLeft = BarLength + 4;
|
||||
Console.BackgroundColor = ConsoleColor.Black;
|
||||
if (progress.CanAproximateTo(Max))
|
||||
Console.Write(progress + " % ✓");
|
||||
else
|
||||
Console.Write(MathF.Round(progress, 2) + " % ");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private static bool CanAproximateTo(this float f, float y) => (MathF.Abs(f - y) < 0.000001);
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// A way to create a table based on input data
|
||||
@@ -198,28 +41,28 @@ namespace PluginManager.Others
|
||||
{
|
||||
if (format == TableFormat.CENTER_EACH_COLUMN_BASED)
|
||||
{
|
||||
char tableLine = '-';
|
||||
char tableCross = '+';
|
||||
char tableWall = '|';
|
||||
var tableLine = '-';
|
||||
var tableCross = '+';
|
||||
var tableWall = '|';
|
||||
|
||||
int[] len = new int[data[0].Length];
|
||||
var len = new int[data[0].Length];
|
||||
foreach (var line in data)
|
||||
for (int i = 0; i < line.Length; i++)
|
||||
for (var i = 0; i < line.Length; i++)
|
||||
if (line[i].Length > len[i])
|
||||
len[i] = line[i].Length;
|
||||
|
||||
|
||||
foreach (string[] row in data)
|
||||
foreach (var row in data)
|
||||
{
|
||||
if (row[0][0] == tableLine)
|
||||
Console.Write(tableCross);
|
||||
else
|
||||
Console.Write(tableWall);
|
||||
for (int l = 0; l < row.Length; l++)
|
||||
for (var l = 0; l < row.Length; l++)
|
||||
{
|
||||
if (row[l][0] == tableLine)
|
||||
{
|
||||
for (int i = 0; i < len[l] + 4; ++i)
|
||||
for (var i = 0; i < len[l] + 4; ++i)
|
||||
Console.Write(tableLine);
|
||||
}
|
||||
else if (row[l].Length == len[l])
|
||||
@@ -230,11 +73,11 @@ namespace PluginManager.Others
|
||||
}
|
||||
else
|
||||
{
|
||||
int lenHalf = row[l].Length / 2;
|
||||
for (int i = 0; i < ((len[l] + 4) / 2 - lenHalf); ++i)
|
||||
var lenHalf = row[l].Length / 2;
|
||||
for (var i = 0; i < (len[l] + 4) / 2 - lenHalf; ++i)
|
||||
Console.Write(" ");
|
||||
Console.Write(row[l]);
|
||||
for (int i = (len[l] + 4) / 2 + lenHalf + 1; i < len[l] + 4; ++i)
|
||||
for (var i = (len[l] + 4) / 2 + lenHalf + 1; i < len[l] + 4; ++i)
|
||||
Console.Write(" ");
|
||||
if (row[l].Length % 2 == 0)
|
||||
Console.Write(" ");
|
||||
@@ -251,15 +94,15 @@ namespace PluginManager.Others
|
||||
|
||||
if (format == TableFormat.CENTER_OVERALL_LENGTH)
|
||||
{
|
||||
int maxLen = 0;
|
||||
foreach (string[] row in data)
|
||||
foreach (string s in row)
|
||||
var maxLen = 0;
|
||||
foreach (var row in data)
|
||||
foreach (var s in row)
|
||||
if (s.Length > maxLen)
|
||||
maxLen = s.Length;
|
||||
|
||||
int div = (maxLen + 4) / 2;
|
||||
var div = (maxLen + 4) / 2;
|
||||
|
||||
foreach (string[] row in data)
|
||||
foreach (var row in data)
|
||||
{
|
||||
Console.Write("\t");
|
||||
if (row[0] == "-")
|
||||
@@ -267,11 +110,11 @@ namespace PluginManager.Others
|
||||
else
|
||||
Console.Write("|");
|
||||
|
||||
foreach (string s in row)
|
||||
foreach (var s in row)
|
||||
{
|
||||
if (s == "-")
|
||||
{
|
||||
for (int i = 0; i < maxLen + 4; ++i)
|
||||
for (var i = 0; i < maxLen + 4; ++i)
|
||||
Console.Write("-");
|
||||
}
|
||||
else if (s.Length == maxLen)
|
||||
@@ -282,11 +125,11 @@ namespace PluginManager.Others
|
||||
}
|
||||
else
|
||||
{
|
||||
int lenHalf = s.Length / 2;
|
||||
for (int i = 0; i < div - lenHalf; ++i)
|
||||
var lenHalf = s.Length / 2;
|
||||
for (var i = 0; i < div - lenHalf; ++i)
|
||||
Console.Write(" ");
|
||||
Console.Write(s);
|
||||
for (int i = div + lenHalf + 1; i < maxLen + 4; ++i)
|
||||
for (var i = div + lenHalf + 1; i < maxLen + 4; ++i)
|
||||
Console.Write(" ");
|
||||
if (s.Length % 2 == 0)
|
||||
Console.Write(" ");
|
||||
@@ -306,25 +149,22 @@ namespace PluginManager.Others
|
||||
|
||||
if (format == TableFormat.DEFAULT)
|
||||
{
|
||||
int[] widths = new int[data[0].Length];
|
||||
int space_between_columns = int.Parse(Config.GetValue<Dictionary<string, string>>("TableVariables")?["DefaultSpace"]!);
|
||||
for (int i = 0; i < data.Count; i++)
|
||||
{
|
||||
for (int j = 0; j < data[i].Length; j++)
|
||||
{
|
||||
var widths = new int[data[0].Length];
|
||||
var space_between_columns =
|
||||
int.Parse(Config.GetValue<Dictionary<string, string>>("TableVariables")?["DefaultSpace"]!);
|
||||
for (var i = 0; i < data.Count; i++)
|
||||
for (var j = 0; j < data[i].Length; j++)
|
||||
if (data[i][j].Length > widths[j])
|
||||
widths[j] = data[i][j].Length;
|
||||
}
|
||||
}
|
||||
|
||||
for (int i = 0; i < data.Count; i++)
|
||||
for (var i = 0; i < data.Count; i++)
|
||||
{
|
||||
for (int j = 0; j < data[i].Length; j++)
|
||||
for (var j = 0; j < data[i].Length; j++)
|
||||
{
|
||||
if (data[i][j] == "-")
|
||||
data[i][j] = " ";
|
||||
Console.Write(data[i][j]);
|
||||
for (int k = 0; k < widths[j] - data[i][j].Length + 1 + space_between_columns; k++)
|
||||
for (var k = 0; k < widths[j] - data[i][j].Length + 1 + space_between_columns; k++)
|
||||
Console.Write(" ");
|
||||
}
|
||||
|
||||
@@ -339,17 +179,17 @@ namespace PluginManager.Others
|
||||
|
||||
public static void WriteColorText(string text, bool appendNewLineAtEnd = true)
|
||||
{
|
||||
ConsoleColor initialForeGround = Console.ForegroundColor;
|
||||
char[] input = text.ToCharArray();
|
||||
for (int i = 0; i < input.Length; i++)
|
||||
{
|
||||
var initialForeGround = Console.ForegroundColor;
|
||||
var input = text.ToCharArray();
|
||||
for (var i = 0; i < input.Length; i++)
|
||||
if (input[i] == Config.GetValue<char>("ColorPrefix"))
|
||||
{
|
||||
if (i + 1 < input.Length)
|
||||
{
|
||||
if (Config.GetValue<Dictionary<char, ConsoleColor>>("ColorDataBase")!.ContainsKey(input[i + 1]))
|
||||
{
|
||||
Console.ForegroundColor = Config.GetValue<Dictionary<char, ConsoleColor>>("ColorDataBase")![input[i + 1]];
|
||||
Console.ForegroundColor =
|
||||
Config.GetValue<Dictionary<char, ConsoleColor>>("ColorDataBase")![input[i + 1]];
|
||||
i++;
|
||||
}
|
||||
else if (input[i + 1] == 'c')
|
||||
@@ -360,6 +200,7 @@ namespace PluginManager.Others
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Console.Write(input[i]);
|
||||
}
|
||||
|
||||
@@ -367,5 +208,160 @@ namespace PluginManager.Others
|
||||
if (appendNewLineAtEnd)
|
||||
Console.WriteLine();
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Progress bar object
|
||||
/// </summary>
|
||||
public class ProgressBar
|
||||
{
|
||||
private readonly int BarLength = 32;
|
||||
|
||||
private bool isRunning;
|
||||
private int position = 1;
|
||||
private bool positive = true;
|
||||
|
||||
public ProgressBar(ProgressBarType type)
|
||||
{
|
||||
this.type = type;
|
||||
}
|
||||
|
||||
public float Max { get; init; }
|
||||
public ConsoleColor Color { get; init; }
|
||||
public bool NoColor { get; init; }
|
||||
public ProgressBarType type { get; set; }
|
||||
|
||||
public int TotalLength { get; private set; }
|
||||
|
||||
|
||||
public async void Start()
|
||||
{
|
||||
if (type != ProgressBarType.NO_END)
|
||||
throw new Exception("Only NO_END progress bar can use this method");
|
||||
if (isRunning)
|
||||
throw new Exception("This progress bar is already running");
|
||||
|
||||
isRunning = true;
|
||||
while (isRunning)
|
||||
{
|
||||
UpdateNoEnd();
|
||||
await Task.Delay(100);
|
||||
}
|
||||
}
|
||||
|
||||
public async void Start(string message)
|
||||
{
|
||||
if (type != ProgressBarType.NO_END)
|
||||
throw new Exception("Only NO_END progress bar can use this method");
|
||||
if (isRunning)
|
||||
throw new Exception("This progress bar is already running");
|
||||
|
||||
isRunning = true;
|
||||
|
||||
TotalLength = message.Length + BarLength + 5;
|
||||
while (isRunning)
|
||||
{
|
||||
UpdateNoEnd(message);
|
||||
await Task.Delay(100);
|
||||
}
|
||||
}
|
||||
|
||||
public void Stop()
|
||||
{
|
||||
if (type != ProgressBarType.NO_END)
|
||||
throw new Exception("Only NO_END progress bar can use this method");
|
||||
if (!isRunning)
|
||||
throw new Exception("Can not stop a progressbar that did not start");
|
||||
isRunning = false;
|
||||
}
|
||||
|
||||
public void Stop(string message)
|
||||
{
|
||||
Stop();
|
||||
|
||||
if (message is not null)
|
||||
{
|
||||
Console.CursorLeft = 0;
|
||||
for (var i = 0; i < BarLength + message.Length + 1; i++)
|
||||
Console.Write(" ");
|
||||
Console.CursorLeft = 0;
|
||||
Console.WriteLine(message);
|
||||
}
|
||||
}
|
||||
|
||||
public void Update(float progress)
|
||||
{
|
||||
if (type == ProgressBarType.NO_END)
|
||||
throw new Exception("This function is for progress bars with end");
|
||||
|
||||
UpdateNormal(progress);
|
||||
}
|
||||
|
||||
private void UpdateNoEnd(string message)
|
||||
{
|
||||
Console.CursorLeft = 0;
|
||||
Console.Write("[");
|
||||
for (var i = 1; i <= position; i++)
|
||||
Console.Write(" ");
|
||||
Console.Write("<==()==>");
|
||||
position += positive ? 1 : -1;
|
||||
for (var i = position; i <= BarLength - 1 - (positive ? 0 : 2); i++)
|
||||
Console.Write(" ");
|
||||
Console.Write("] " + message);
|
||||
|
||||
|
||||
if (position == BarLength - 1 || position == 1)
|
||||
positive = !positive;
|
||||
}
|
||||
|
||||
private void UpdateNoEnd()
|
||||
{
|
||||
Console.CursorLeft = 0;
|
||||
Console.Write("[");
|
||||
for (var i = 1; i <= position; i++)
|
||||
Console.Write(" ");
|
||||
Console.Write("<==()==>");
|
||||
position += positive ? 1 : -1;
|
||||
for (var i = position; i <= BarLength - 1 - (positive ? 0 : 2); i++)
|
||||
Console.Write(" ");
|
||||
Console.Write("]");
|
||||
|
||||
|
||||
if (position == BarLength - 1 || position == 1)
|
||||
positive = !positive;
|
||||
}
|
||||
|
||||
private void UpdateNormal(float progress)
|
||||
{
|
||||
Console.CursorLeft = 0;
|
||||
Console.Write("[");
|
||||
Console.CursorLeft = BarLength;
|
||||
Console.Write("]");
|
||||
Console.CursorLeft = 1;
|
||||
var onechunk = 30.0f / Max;
|
||||
|
||||
var position = 1;
|
||||
|
||||
for (var i = 0; i < onechunk * progress; i++)
|
||||
{
|
||||
Console.BackgroundColor = NoColor ? ConsoleColor.Black : Color;
|
||||
Console.CursorLeft = position++;
|
||||
Console.Write("#");
|
||||
}
|
||||
|
||||
for (var i = position; i < BarLength; i++)
|
||||
{
|
||||
Console.BackgroundColor = NoColor ? ConsoleColor.Black : ConsoleColor.DarkGray;
|
||||
Console.CursorLeft = position++;
|
||||
Console.Write(" ");
|
||||
}
|
||||
|
||||
Console.CursorLeft = BarLength + 4;
|
||||
Console.BackgroundColor = ConsoleColor.Black;
|
||||
if (progress.CanAproximateTo(Max))
|
||||
Console.Write(progress + " % ✓");
|
||||
else
|
||||
Console.Write(MathF.Round(progress, 2) + " % ");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,13 +1,14 @@
|
||||
using PluginManager.Interfaces;
|
||||
|
||||
namespace PluginManager.Others;
|
||||
namespace PluginManager.Others;
|
||||
|
||||
/// <summary>
|
||||
/// A list of operating systems
|
||||
/// </summary>
|
||||
public enum OperatingSystem
|
||||
{
|
||||
WINDOWS, LINUX, MAC_OS, UNKNOWN
|
||||
WINDOWS,
|
||||
LINUX,
|
||||
MAC_OS,
|
||||
UNKNOWN
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -15,22 +16,57 @@ public enum OperatingSystem
|
||||
/// </summary>
|
||||
public enum Error
|
||||
{
|
||||
UNKNOWN_ERROR, GUILD_NOT_FOUND, STREAM_NOT_FOUND, INVALID_USER, INVALID_CHANNEL, INVALID_PERMISSIONS
|
||||
UNKNOWN_ERROR,
|
||||
GUILD_NOT_FOUND,
|
||||
STREAM_NOT_FOUND,
|
||||
INVALID_USER,
|
||||
INVALID_CHANNEL,
|
||||
INVALID_PERMISSIONS
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// The output log type
|
||||
/// </summary>
|
||||
public enum OutputLogLevel { NONE, INFO, WARNING, ERROR, CRITICAL }
|
||||
public enum OutputLogLevel
|
||||
{
|
||||
NONE,
|
||||
INFO,
|
||||
WARNING,
|
||||
ERROR,
|
||||
CRITICAL
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Plugin Type
|
||||
/// </summary>
|
||||
public enum PluginType { Command, Event, Unknown }
|
||||
public enum PluginType
|
||||
{
|
||||
Command,
|
||||
Event,
|
||||
Unknown
|
||||
}
|
||||
|
||||
public enum UnzipProgressType { PercentageFromNumberOfFiles, PercentageFromTotalSize }
|
||||
public enum UnzipProgressType
|
||||
{
|
||||
PercentageFromNumberOfFiles,
|
||||
PercentageFromTotalSize
|
||||
}
|
||||
|
||||
public enum TableFormat { CENTER_EACH_COLUMN_BASED, CENTER_OVERALL_LENGTH, DEFAULT }
|
||||
public enum TableFormat
|
||||
{
|
||||
CENTER_EACH_COLUMN_BASED,
|
||||
CENTER_OVERALL_LENGTH,
|
||||
DEFAULT
|
||||
}
|
||||
|
||||
public enum SaveType { NORMAL, BACKUP }
|
||||
public enum ProgressBarType { NORMAL, NO_END }
|
||||
public enum SaveType
|
||||
{
|
||||
NORMAL,
|
||||
BACKUP
|
||||
}
|
||||
|
||||
public enum ProgressBarType
|
||||
{
|
||||
NORMAL,
|
||||
NO_END
|
||||
}
|
||||
@@ -1,18 +1,19 @@
|
||||
using System.IO.Compression;
|
||||
using System.IO;
|
||||
using System;
|
||||
using System.Threading.Tasks;
|
||||
using System.Linq;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.IO.Compression;
|
||||
using System.Linq;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Security.Cryptography;
|
||||
using System.Text;
|
||||
using System.Text.Json;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using Discord.WebSocket;
|
||||
using PluginManager.Items;
|
||||
using System.Threading;
|
||||
using System.Text.Json;
|
||||
using System.Text;
|
||||
|
||||
namespace PluginManager.Others
|
||||
{
|
||||
namespace PluginManager.Others;
|
||||
|
||||
/// <summary>
|
||||
/// A special class with functions
|
||||
/// </summary>
|
||||
@@ -61,12 +62,11 @@ namespace PluginManager.Others
|
||||
string textValue = null;
|
||||
using (var fs = new FileStream(archFile, FileMode.Open))
|
||||
using (var zip = new ZipArchive(fs, ZipArchiveMode.Read))
|
||||
{
|
||||
foreach (var entry in zip.Entries)
|
||||
{
|
||||
if (entry.Name == FileName || entry.FullName == FileName)
|
||||
{
|
||||
using (Stream s = entry.Open())
|
||||
using (StreamReader reader = new StreamReader(s))
|
||||
using (var s = entry.Open())
|
||||
using (var reader = new StreamReader(s))
|
||||
{
|
||||
textValue = await reader.ReadToEndAsync();
|
||||
reader.Close();
|
||||
@@ -74,7 +74,7 @@ namespace PluginManager.Others
|
||||
fs.Close();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return textValue;
|
||||
}
|
||||
catch
|
||||
@@ -82,7 +82,6 @@ namespace PluginManager.Others
|
||||
await Task.Delay(100);
|
||||
return await ReadFromPakAsync(FileName, archFile);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -92,7 +91,7 @@ namespace PluginManager.Others
|
||||
/// <param name="LogMessage">The message to be wrote</param>
|
||||
public static void WriteLogFile(string LogMessage)
|
||||
{
|
||||
string logsPath = logFolder + $"{DateTime.Today.ToShortDateString().Replace("/", "-").Replace("\\", "-")} Log.txt";
|
||||
var logsPath = logFolder + $"{DateTime.Today.ToShortDateString().Replace("/", "-").Replace("\\", "-")} Log.txt";
|
||||
Directory.CreateDirectory(logFolder);
|
||||
File.AppendAllText(logsPath, LogMessage + " \n");
|
||||
}
|
||||
@@ -103,7 +102,8 @@ namespace PluginManager.Others
|
||||
/// <param name="ErrMessage">The message to be wrote</param>
|
||||
public static void WriteErrFile(string ErrMessage)
|
||||
{
|
||||
string errPath = errFolder + $"{DateTime.Today.ToShortDateString().Replace("/", "-").Replace("\\", "-")} Error.txt";
|
||||
var errPath = errFolder +
|
||||
$"{DateTime.Today.ToShortDateString().Replace("/", "-").Replace("\\", "-")} Error.txt";
|
||||
Directory.CreateDirectory(errFolder);
|
||||
File.AppendAllText(errPath, ErrMessage + " \n");
|
||||
}
|
||||
@@ -144,15 +144,15 @@ namespace PluginManager.Others
|
||||
/// <returns>An Operating system</returns>
|
||||
public static OperatingSystem GetOperatingSystem()
|
||||
{
|
||||
if (System.Runtime.InteropServices.RuntimeInformation.IsOSPlatform(System.Runtime.InteropServices.OSPlatform.Windows)) return OperatingSystem.WINDOWS;
|
||||
if (System.Runtime.InteropServices.RuntimeInformation.IsOSPlatform(System.Runtime.InteropServices.OSPlatform.Linux)) return OperatingSystem.LINUX;
|
||||
if (System.Runtime.InteropServices.RuntimeInformation.IsOSPlatform(System.Runtime.InteropServices.OSPlatform.OSX)) return OperatingSystem.MAC_OS;
|
||||
if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) return OperatingSystem.WINDOWS;
|
||||
if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux)) return OperatingSystem.LINUX;
|
||||
if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX)) return OperatingSystem.MAC_OS;
|
||||
return OperatingSystem.UNKNOWN;
|
||||
}
|
||||
|
||||
public static List<string> GetArguments(SocketMessage message)
|
||||
{
|
||||
Command command = new Command(message);
|
||||
var command = new Command(message);
|
||||
return command.Arguments;
|
||||
}
|
||||
|
||||
@@ -168,24 +168,27 @@ namespace PluginManager.Others
|
||||
/// <exception cref="ArgumentOutOfRangeException">Triggered if <paramref name="bufferSize" /> is less then or equal to 0</exception>
|
||||
/// <exception cref="InvalidOperationException">Triggered if <paramref name="stream" /> is not readable</exception>
|
||||
/// <exception cref="ArgumentException">Triggered in <paramref name="destination" /> is not writable</exception>
|
||||
public static async Task CopyToOtherStreamAsync(this Stream stream, Stream destination, int bufferSize, IProgress<long>? progress = null, CancellationToken cancellationToken = default)
|
||||
public static async Task CopyToOtherStreamAsync(this Stream stream, Stream destination, int bufferSize,
|
||||
IProgress<long>? progress = null,
|
||||
CancellationToken cancellationToken = default)
|
||||
{
|
||||
if (stream == null) throw new ArgumentNullException(nameof(stream));
|
||||
if (destination == null) throw new ArgumentNullException(nameof(destination));
|
||||
if (bufferSize <= 0) throw new ArgumentOutOfRangeException(nameof(bufferSize));
|
||||
if (!stream.CanRead) throw new InvalidOperationException("The stream is not readable.");
|
||||
if (!destination.CanWrite) throw new ArgumentException("Destination stream is not writable", nameof(destination));
|
||||
if (!destination.CanWrite)
|
||||
throw new ArgumentException("Destination stream is not writable", nameof(destination));
|
||||
|
||||
byte[] buffer = new byte[bufferSize];
|
||||
var buffer = new byte[bufferSize];
|
||||
long totalBytesRead = 0;
|
||||
int bytesRead;
|
||||
while ((bytesRead = await stream.ReadAsync(buffer, 0, buffer.Length, cancellationToken).ConfigureAwait(false)) != 0)
|
||||
while ((bytesRead =
|
||||
await stream.ReadAsync(buffer, 0, buffer.Length, cancellationToken).ConfigureAwait(false)) != 0)
|
||||
{
|
||||
await destination.WriteAsync(buffer, 0, bytesRead, cancellationToken).ConfigureAwait(false);
|
||||
totalBytesRead += bytesRead;
|
||||
progress?.Report(totalBytesRead);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -196,16 +199,17 @@ namespace PluginManager.Others
|
||||
/// <param name="progress">The progress that is updated as a file is processed</param>
|
||||
/// <param name="type">The type of progress</param>
|
||||
/// <returns></returns>
|
||||
public static async Task ExtractArchive(string zip, string folder, IProgress<float> progress, UnzipProgressType type)
|
||||
public static async Task ExtractArchive(string zip, string folder, IProgress<float> progress,
|
||||
UnzipProgressType type)
|
||||
{
|
||||
Directory.CreateDirectory(folder);
|
||||
using (ZipArchive archive = ZipFile.OpenRead(zip))
|
||||
using (var archive = ZipFile.OpenRead(zip))
|
||||
{
|
||||
if (type == UnzipProgressType.PercentageFromNumberOfFiles)
|
||||
{
|
||||
int totalZIPFiles = archive.Entries.Count();
|
||||
int currentZIPFile = 0;
|
||||
foreach (ZipArchiveEntry entry in archive.Entries)
|
||||
var totalZIPFiles = archive.Entries.Count();
|
||||
var currentZIPFile = 0;
|
||||
foreach (var entry in archive.Entries)
|
||||
{
|
||||
if (entry.FullName.EndsWith("/")) // it is a folder
|
||||
Directory.CreateDirectory(Path.Combine(folder, entry.FullName));
|
||||
@@ -230,11 +234,11 @@ namespace PluginManager.Others
|
||||
{
|
||||
ulong zipSize = 0;
|
||||
|
||||
foreach (ZipArchiveEntry entry in archive.Entries)
|
||||
foreach (var entry in archive.Entries)
|
||||
zipSize += (ulong)entry.CompressedLength;
|
||||
|
||||
ulong currentSize = 0;
|
||||
foreach (ZipArchiveEntry entry in archive.Entries)
|
||||
foreach (var entry in archive.Entries)
|
||||
{
|
||||
if (entry.FullName.EndsWith("/"))
|
||||
{
|
||||
@@ -268,7 +272,7 @@ namespace PluginManager.Others
|
||||
/// <returns></returns>
|
||||
public static (double, string) ConvertBytes(long bytes)
|
||||
{
|
||||
List<string> units = new List<string>()
|
||||
var units = new List<string>
|
||||
{
|
||||
"B",
|
||||
"KB",
|
||||
@@ -276,7 +280,7 @@ namespace PluginManager.Others
|
||||
"GB",
|
||||
"TB"
|
||||
};
|
||||
int i = 0;
|
||||
var i = 0;
|
||||
while (bytes >= 1024)
|
||||
{
|
||||
i++;
|
||||
@@ -295,7 +299,7 @@ namespace PluginManager.Others
|
||||
/// <returns></returns>
|
||||
public static async Task SaveToJsonFile<T>(string file, T Data)
|
||||
{
|
||||
MemoryStream str = new MemoryStream();
|
||||
var str = new MemoryStream();
|
||||
await JsonSerializer.SerializeAsync(str, Data, typeof(T), new JsonSerializerOptions { WriteIndented = true });
|
||||
await File.WriteAllBytesAsync(file, str.ToArray());
|
||||
}
|
||||
@@ -323,7 +327,8 @@ namespace PluginManager.Others
|
||||
/// Check if all words from <paramref name="str" /> are in <paramref name="baseString" /><br />
|
||||
/// This function returns true if<br />
|
||||
/// 1. The <paramref name="str" /> is part of <paramref name="baseString" /><br />
|
||||
/// 2. The words (split by a space) of <paramref name="str"/> are located (separately) in <paramref name="baseString"/> <br/>
|
||||
/// 2. The words (split by a space) of <paramref name="str" /> are located (separately) in
|
||||
/// <paramref name="baseString" /> <br />
|
||||
/// <example>
|
||||
/// The following example will return <see langword="TRUE" /><br />
|
||||
/// <c>STRContains("Hello World !", "I type word Hello and then i typed word World !")</c><br />
|
||||
@@ -341,7 +346,7 @@ namespace PluginManager.Others
|
||||
public static bool STRContains(this string str, string baseString)
|
||||
{
|
||||
if (baseString.Contains(str)) return true;
|
||||
string[] array = str.Split(' ');
|
||||
var array = str.Split(' ');
|
||||
foreach (var s in array)
|
||||
if (!baseString.Contains(s))
|
||||
return false;
|
||||
@@ -365,12 +370,11 @@ namespace PluginManager.Others
|
||||
|
||||
public static string CreateMD5(string input)
|
||||
{
|
||||
using (MD5 md5 = MD5.Create())
|
||||
using (var md5 = MD5.Create())
|
||||
{
|
||||
byte[] inputBytes = Encoding.ASCII.GetBytes(input);
|
||||
byte[] hashBytes = md5.ComputeHash(inputBytes);
|
||||
var inputBytes = Encoding.ASCII.GetBytes(input);
|
||||
var hashBytes = md5.ComputeHash(inputBytes);
|
||||
return Convert.ToHexString(hashBytes);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user