This commit is contained in:
@@ -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":
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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<string> list = await ServerCom.ReadTextFromFile(link);
|
||||
string[] lines = list.ToArray();
|
||||
|
||||
|
||||
@@ -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"))
|
||||
{
|
||||
|
||||
@@ -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<float> progress = new Progress<float>(percent =>
|
||||
@@ -71,39 +68,20 @@ namespace PluginManager.Online
|
||||
|
||||
IProgress<long> progress_downloaded = new Progress<long>(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);
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
/// <summary>
|
||||
/// Write the text using color options( &g-green; &b-blue; &r-red; &c-clear; )
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="text">The text</param>
|
||||
public static void WriteColorText(string text, bool appendNewLine = true)
|
||||
|
||||
125
README.md
Normal file
125
README.md
Normal file
@@ -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.
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
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.
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
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/<optional subfolder>/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
|
||||
|
||||
Reference in New Issue
Block a user