From b9ff016caa161b3b9246d0fbfe1a538cd286406e Mon Sep 17 00:00:00 2001 From: Wizzy69 Date: Sat, 7 May 2022 13:52:28 +0300 Subject: [PATCH 1/2] --- BUILDS/net6.0/MusicCommands.dll | Bin 18432 -> 18432 bytes BUILDS/net6.0/PluginManager.dll | Bin 43008 -> 48128 bytes DiscordBot.sln | 4 ++-- MusicCommands/MusicPlayer.cs | 9 +++++++++ MusicCommands/lplay.cs | 3 +-- MyCommandsLibrary/Class1.cs | 7 +++++++ MyCommandsLibrary/MyCommandsLibrary.csproj | 9 +++++++++ .../Others/Exceptions/APIException.cs | 4 ++++ PluginManager/Others/Functions.cs | 3 +++ 9 files changed, 35 insertions(+), 4 deletions(-) create mode 100644 MyCommandsLibrary/Class1.cs create mode 100644 MyCommandsLibrary/MyCommandsLibrary.csproj diff --git a/BUILDS/net6.0/MusicCommands.dll b/BUILDS/net6.0/MusicCommands.dll index f7f0d7fcfea520632d539d9c5cd3b484ddf9c855..f6ecafa45b7f2490fd16a816fc811ef79a485092 100644 GIT binary patch delta 46 zcmV+}0MY+|kO6>@0g#9U{CnB2v5egT0T#1r0%|u9&CLz$c&jQ%yH7^HqiG%Bv*bA( E4&rSTdH?_b delta 46 zcmV+}0MY+|kO6>@0g#9UPK5dBv5egT0T;7s0%|u9SWh}B$H;<1xFbBS{RY6wv*bA( E4#jR0p8x;= diff --git a/BUILDS/net6.0/PluginManager.dll b/BUILDS/net6.0/PluginManager.dll index b790e5f32037c60e9485f7913ac03c3583d7c057..20165291cdc728695ae39f80b9fb14c6a799610f 100644 GIT binary patch literal 48128 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 literal 43008 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 diff --git a/DiscordBot.sln b/DiscordBot.sln index 0960e41..0734f95 100644 --- a/DiscordBot.sln +++ b/DiscordBot.sln @@ -1,7 +1,7 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 16 -VisualStudioVersion = 16.0.31729.503 +# Visual Studio Version 17 +VisualStudioVersion = 17.1.32414.318 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DiscordBot", "DiscordBot\DiscordBot.csproj", "{087E64F4-1E1C-4899-8223-295356C9894A}" EndProject diff --git a/MusicCommands/MusicPlayer.cs b/MusicCommands/MusicPlayer.cs index ae58026..4f8b8dc 100644 --- a/MusicCommands/MusicPlayer.cs +++ b/MusicCommands/MusicPlayer.cs @@ -37,6 +37,15 @@ namespace MusicCommands public async Task StartSendAudioFromLink(string URL) { + + /* using (HttpClient client = new HttpClient()) + using (HttpResponseMessage response = await client.GetAsync(URL)) + using (var content = response.Content) + { + await (await content.ReadAsStreamAsync()).CopyToAsync(outputStream); + }*/ + + Stream ms = new MemoryStream(); int bsize = 512; new Thread(async delegate (object o) diff --git a/MusicCommands/lplay.cs b/MusicCommands/lplay.cs index dcaafde..ed006a7 100644 --- a/MusicCommands/lplay.cs +++ b/MusicCommands/lplay.cs @@ -5,7 +5,6 @@ using Discord.WebSocket; using Discord; using PluginManager.Interfaces; -using PluginManager.Others; namespace MusicCommands { @@ -19,7 +18,7 @@ namespace MusicCommands public bool canUseDM => false; - public bool canUseServer => true; + public bool canUseServer => false; public bool requireAdmin => false; diff --git a/MyCommandsLibrary/Class1.cs b/MyCommandsLibrary/Class1.cs new file mode 100644 index 0000000..2c93427 --- /dev/null +++ b/MyCommandsLibrary/Class1.cs @@ -0,0 +1,7 @@ +namespace MyCommandsLibrary +{ + public class Class1 + { + + } +} \ No newline at end of file diff --git a/MyCommandsLibrary/MyCommandsLibrary.csproj b/MyCommandsLibrary/MyCommandsLibrary.csproj new file mode 100644 index 0000000..132c02c --- /dev/null +++ b/MyCommandsLibrary/MyCommandsLibrary.csproj @@ -0,0 +1,9 @@ + + + + net6.0 + enable + enable + + + diff --git a/PluginManager/Others/Exceptions/APIException.cs b/PluginManager/Others/Exceptions/APIException.cs index 881de94..de04a8f 100644 --- a/PluginManager/Others/Exceptions/APIException.cs +++ b/PluginManager/Others/Exceptions/APIException.cs @@ -2,7 +2,11 @@ using System; namespace PluginManager.Others.Exceptions { + /// + /// Custom Exception for PluginManager + /// [Serializable] + public class APIException : Exception { /// diff --git a/PluginManager/Others/Functions.cs b/PluginManager/Others/Functions.cs index 2a09b70..7c5de71 100644 --- a/PluginManager/Others/Functions.cs +++ b/PluginManager/Others/Functions.cs @@ -10,6 +10,9 @@ using System.Threading; namespace PluginManager.Others { + /// + /// A special class with functions + /// public static class Functions { /// From 497cba65caa38c9d07961d9ed7de06795010f84b Mon Sep 17 00:00:00 2001 From: Wizzy69 Date: Sat, 7 May 2022 13:56:31 +0300 Subject: [PATCH 2/2] --- DiscordBot/Program.cs | 11 +- PluginManager/Loaders/PluginLoader.cs | 6 +- PluginManager/Online/LanguageManager.cs | 5 - PluginManager/Online/PluginsManager.cs | 2 +- PluginManager/Online/ServerCom.cs | 30 +----- PluginManager/Others/Console Utilities.cs | 2 - README.md | 125 ++++++++++++++++++++++ 7 files changed, 141 insertions(+), 40 deletions(-) create mode 100644 README.md diff --git a/DiscordBot/Program.cs b/DiscordBot/Program.cs index 92902d4..dad195a 100644 --- a/DiscordBot/Program.cs +++ b/DiscordBot/Program.cs @@ -9,11 +9,10 @@ using PluginManager.Others; using PluginManager.Loaders; using PluginManager.LanguageSystem; using PluginManager.Online; + using System.Diagnostics; using System.Collections.Generic; using System.Linq; -using System.Threading; - namespace DiscordBot { public class Program @@ -37,7 +36,7 @@ namespace DiscordBot Directory.CreateDirectory("./Data/Languages"); Directory.CreateDirectory("./Data/Plugins/Commands"); Directory.CreateDirectory("./Data/Plugins/Events"); - if (!File.Exists("./Data/Resources/DiscordBotCore.data") || Functions.readCodeFromFile("./Data/Resources/DiscordBotCore.data", "BOT_TOKEN", '=')!.Length != 59) + if (!File.Exists("./Data/Resources/DiscordBotCore.data") || (Functions.readCodeFromFile("./Data/Resources/DiscordBotCore.data", "BOT_TOKEN", '=').Length != 59 && Functions.readCodeFromFile("./Data/Resources/DiscordBotCore.data", "BOT_TOKEN", '=').Length != 70)) { File.WriteAllText("./Data/Resources/DiscordBotCore.data", "BOT_TOKEN=token\nBOT_PREFIX=!\n"); while (true) @@ -45,7 +44,7 @@ namespace DiscordBot Console.WriteLine("Please insert your token: "); Console.Write("TOKEN: "); string botToken = Console.ReadLine(); - if (botToken.Length == 59) + if (botToken.Length == 59 || botToken.Length == 70) { string prefix = Functions.readCodeFromFile("./Data/Resources/DiscordBotCore.data", "BOT_PREFIX", '='); if (prefix == string.Empty || prefix == null) @@ -96,7 +95,9 @@ namespace DiscordBot Console_Utilities.WriteColorText("&mConsole > &c", false); string[] data = Console.ReadLine().Split(' '); - if (data[0].Length < 2) continue; + if (data[0].Length < 2) + continue; // The input command is less then 2 characters long + switch (data[0]) { case "shutdown": diff --git a/PluginManager/Loaders/PluginLoader.cs b/PluginManager/Loaders/PluginLoader.cs index 3f6ed97..36a192a 100644 --- a/PluginManager/Loaders/PluginLoader.cs +++ b/PluginManager/Loaders/PluginLoader.cs @@ -61,7 +61,11 @@ namespace PluginManager.Loaders Functions.WriteLogFile("Starting plugin loader..."); if (LanguageSystem.Language.ActiveLanguage != null) - Console_Utilities.WriteColorText(LanguageSystem.Language.ActiveLanguage.FormatText(LanguageSystem.Language.ActiveLanguage.LanguageWords["PLUGIN_LOADING_START"])); + Console_Utilities.WriteColorText( + LanguageSystem.Language.ActiveLanguage.FormatText( + LanguageSystem.Language.ActiveLanguage.LanguageWords["PLUGIN_LOADING_START"] + ) + ); //Load commands CommandsLoader CMDLoader = new CommandsLoader(pluginCMDFolder, pluginCMDExtension); diff --git a/PluginManager/Online/LanguageManager.cs b/PluginManager/Online/LanguageManager.cs index 71eacdd..408315c 100644 --- a/PluginManager/Online/LanguageManager.cs +++ b/PluginManager/Online/LanguageManager.cs @@ -27,11 +27,6 @@ namespace PluginManager.Online try { - /*#pragma warning disable SYSLIB0014 - WebClient client = new WebClient(); - #pragma warning restore SYSLIB0014 - Stream data = await client.OpenReadTaskAsync(link); - string[] lines = (await new StreamReader(data).ReadToEndAsync()).Split('\n');*/ List list = await ServerCom.ReadTextFromFile(link); string[] lines = list.ToArray(); diff --git a/PluginManager/Online/PluginsManager.cs b/PluginManager/Online/PluginsManager.cs index 1de837e..344d3fd 100644 --- a/PluginManager/Online/PluginsManager.cs +++ b/PluginManager/Online/PluginsManager.cs @@ -63,7 +63,7 @@ namespace PluginManager.Online continue; } } - else if (op == PluginManager.Others.OperatingSystem.LINUX) + else if (op == Others.OperatingSystem.LINUX) { if (content[4].Contains("Linux")) { diff --git a/PluginManager/Online/ServerCom.cs b/PluginManager/Online/ServerCom.cs index d53e833..edd7e58 100644 --- a/PluginManager/Online/ServerCom.cs +++ b/PluginManager/Online/ServerCom.cs @@ -57,11 +57,8 @@ namespace PluginManager.Online bool isDownloading = true; int c_progress = 0; - long secondsPast = 0; - long m_dwBytes = 0; - double c_downloadSpeed = 0f; - string c_downloadUnit = "MB"; - + //long m_dwBytes = 0; + Others.Console_Utilities.ProgressBar pbar = new Others.Console_Utilities.ProgressBar(100, ""); IProgress progress = new Progress(percent => @@ -71,39 +68,20 @@ namespace PluginManager.Online IProgress progress_downloaded = new Progress(downloadedBytes => { - m_dwBytes = downloadedBytes; + //m_dwBytes = downloadedBytes; }); Task updateProgressBarTask = new Task(async () => { while (isDownloading) { - //pbar.Update(c_progress, c_downloadSpeed, c_downloadUnit); pbar.Update(c_progress); if (c_progress == 100) break; System.Threading.Thread.Sleep(500); } }); - - Task calculateDownloadSpeed = new Task(async () => - { - - while (isDownloading) - { - secondsPast++; - c_downloadSpeed = m_dwBytes / secondsPast; - - c_downloadSpeed /= 1024; // in KB - c_downloadSpeed /= 1024; // in MB - - c_downloadSpeed = Math.Round(c_downloadSpeed, 2, MidpointRounding.AwayFromZero); - - System.Threading.Thread.Sleep(1000); - } - }); - - // new System.Threading.Thread(calculateDownloadSpeed.Start).Start(); + new System.Threading.Thread(updateProgressBarTask.Start).Start(); await DownloadFileAsync(URL, location, progress, progress_downloaded); diff --git a/PluginManager/Others/Console Utilities.cs b/PluginManager/Others/Console Utilities.cs index 8c0f230..80e3330 100644 --- a/PluginManager/Others/Console Utilities.cs +++ b/PluginManager/Others/Console Utilities.cs @@ -96,7 +96,6 @@ namespace PluginManager.Others foreach (string[] row in data) { - //Console.Write("\t"); if (row[0][0] == tableLine) Console.Write(tableCross); else Console.Write(tableWall); for (int l = 0; l < row.Length; l++) @@ -135,7 +134,6 @@ namespace PluginManager.Others /// /// Write the text using color options( &g-green; &b-blue; &r-red; &c-clear; ) - /// /// /// The text public static void WriteColorText(string text, bool appendNewLine = true) diff --git a/README.md b/README.md new file mode 100644 index 0000000..45ad2e1 --- /dev/null +++ b/README.md @@ -0,0 +1,125 @@ +# Seth Discord Bot + +This is a Discord Bot made with C# that accepts plugins as extensions for more commands and events. All basic commands are built in already in the PluginManager class library. +This project is based on .NET 6 (C#) and [Discord.Net](https://github.com/discord-net/Discord.Net) + + +## Plugins +#### Requirements: +- [Visual Studio](https://visualstudio.microsoft.com/thank-you-downloading-visual-studio/?sku=Community&channel=Release&version=VS2022&source=VSLandingPage&cid=2030&passive=false) +- .NET 6 (downloaded with Visual Studio) + +Plugin Types: +1. Commands +2. Events + + +### How to create a plugin + +First of all, Create a new project (class library) in Visual Studio. +![Imgur Image](https://i.imgur.com/KUqzKsB.png) + +![Imgur Image](https://i.imgur.com/JzpEViR.png) + +![Imgur Image](https://i.imgur.com/vtoEepX.png) + +![Imgur Image](https://i.imgur.com/ceaVR2R.png) + +Now, let's add the PluginManager reference. It can be found inside the bot's main folder under +`DiscordBot/bin/Debug/net6.0/PluginManager.dll` or `PluginManager/bin/Debug/net6.0/PluginManager.dll` +after one successfull build. + +![Imgur Image](https://i.imgur.com/UMSitk4.png) + +![Imgur Image](https://i.imgur.com/GEjShdl.png) + +1. Commands + +Commands are loaded when all plugins are loaded into memory. When an user executes the command, only then the Execute function is called. +Commands are plugins that allow users to interact with them. +Here is an example of class that is a command class +```cs +using Discord.Commands; +using Discord.WebSocket; + +using PluginManager.Interfaces; + +namespace CMD_Utils +{ + class FlipCoin : DBCommand + { + public string Command => "flip"; + + public string Description => "Flip a coin"; + + public string Usage => "flip"; + + public bool canUseDM => true; + + public bool canUseServer => true; + + public bool requireAdmin => false; + + public async void Execute(SocketCommandContext context, SocketMessage message, DiscordSocketClient client, bool isDM) + { + System.Random random = new System.Random(); + int r = random.Next(1, 3); + if (r == 1) + await message.Channel.SendMessageAsync("Heads"); + else await message.Channel.SendMessageAsync("Tails"); + } + } +} + +``` +#### Code description: +- Command - The keyword that triggers the execution for the command. This is what players must type in order to execute your command +- Description - The description of your command. Can be anything you like +- Usage - The usage of your command. This is what `help [Command]` command will display +- canUseDM - true if you plan to let users execute this command in DM chat with bot +- canUseServer - true if you plan to let the users execute this command in a server chat +- requireAdmin - true if this command requres an user with Administrator permission in the server +- Execute () - the function of your command. + - context - the command context + - message - the message itself + - client - the discord bot client + - isDM - true if the message was sent from DM chat + +From here on, start coding. When your plugin is done, build it as any DLL project then add it to the following path +`{bot_executable}/Data/Plugins/Commands//yourDLLName.dll` +Then, reload bot and execute command `lp` in bot's console. The plugin should be loaded into memory or an error is thrown if not. If an error is thrown, then +there is something wrong in your command's code. + +2. Events + +Events are loaded when all plugins are loaded. At the moment when they are loaded, the Start function is called. +Events are used if you want the bot to do something when something happens in server. The following example shows you how to catch when a user joins the server +and send to that user a DM message with `Welcome to server !`. + +```cs +using PluginManager.Others; +using PluginManager.Interfaces; + +public class OnUserJoin : DBEvent +{ + public string name => "MyEvent"; + + public string description => "This is a demo event"; + + public async void Start(Discord.WebSocket.DiscordSocketClient client) + { + Console.WriteLine($"Hello World from {name}"); + + client.UserJoined += async (user) => { + await (await user.CreateDMChannelAsync()).SendMessageAsync("Welcome to server !"); + }; + } +} +``` + +#### Code description: +- name - The name of your event. It will appear in console when it loads +- description - The description of your event +- Start() - The main body of your event. This is executed when the bot loads all plugins + - client - the discord bot client +