Updated documentation

This commit is contained in:
2022-05-03 21:58:44 +03:00
parent f3d0ea426e
commit f5f1827540
26 changed files with 520 additions and 180 deletions

View File

@@ -11,19 +11,48 @@ using System.Collections.Generic;
namespace DiscordBot.Discord.Commands
{
/// <summary>
/// The help command
/// </summary>
internal class Help : DBCommand
{
/// <summary>
/// Command name
/// </summary>
public string Command => "help";
/// <summary>
/// Command Description
/// </summary>
public string Description => "This command allows you to check all loadded commands";
/// <summary>
/// Command usage
/// </summary>
public string Usage => "help";
/// <summary>
/// Check if the command can be used <inheritdoca DM <see cref="IChannel"/>/>
/// </summary>
public bool canUseDM => true;
/// <summary>
/// Check if the command can be used in a server
/// </summary>
public bool canUseServer => true;
/// <summary>
/// Check if the command require administrator to be executed
/// </summary>
public bool requireAdmin => false;
/// <summary>
/// The main body of the command
/// </summary>
/// <param name="context">The command context</param>
/// <param name="message">The command message</param>
/// <param name="client">The discord bot client</param>
/// <param name="isDM">True if the message was sent from a DM channel, false otherwise</param>
public void Execute(SocketCommandContext context, SocketMessage message, DiscordSocketClient client, bool isDM)
{
List<string> args = Functions.GetArguments(message);

View File

@@ -14,26 +14,49 @@ using ds = Discord;
using PluginManager.Interfaces;
using PluginManager.Others.Permissions;
using PluginManager.Online;
using PluginManager.Others;
namespace DiscordBot.Discord.Commands
{
class Restart : DBCommand
internal class Restart : DBCommand
{
string DBCommand.Command => "restart";
/// <summary>
/// Command name
/// </summary>
public string Command => "restart";
string DBCommand.Description => "Restart the bot";
/// <summary>
/// Command Description
/// </summary>
public string Description => "Restart the bot";
string DBCommand.Usage => "restart [-option]";
/// <summary>
/// Command usage
/// </summary>
public string Usage => "restart [-p | -c | -args | -cmd] <args>";
bool DBCommand.canUseDM => false;
/// <summary>
/// Check if the command can be used <inheritdoca DM <see cref="IChannel"/>/>
/// </summary>
public bool canUseDM => false;
bool DBCommand.canUseServer => true;
/// <summary>
/// Check if the command can be used in a server
/// </summary>
public bool canUseServer => true;
bool DBCommand.requireAdmin => true;
void DBCommand.Execute(dsc.SocketCommandContext context, SocketMessage message, DiscordSocketClient client, bool isDM)
/// <summary>
/// Check if the command require administrator to be executed
/// </summary>
public bool requireAdmin => false;
/// <summary>
/// The main body of the command
/// </summary>
/// <param name="context">The command context</param>
/// <param name="message">The command message</param>
/// <param name="client">The discord bot client</param>
/// <param name="isDM">True if the message was sent from a DM channel, false otherwise</param>
public async void Execute(dsc.SocketCommandContext context, SocketMessage message, DiscordSocketClient client, bool isDM)
{
if (!DiscordPermissions.hasPermission(message.Author as SocketGuildUser, ds.GuildPermission.Administrator)) return;
var args = Functions.GetArguments(message);
@@ -79,6 +102,9 @@ namespace DiscordBot.Discord.Commands
}
Environment.Exit(0);
break;
default:
await context.Channel.SendMessageAsync("Invalid argument. Use `help restart` to see the usage.");
break;
}

View File

@@ -17,16 +17,44 @@ namespace DiscordBot.Discord.Commands
{
class Settings : DBCommand
{
/// <summary>
/// Command name
/// </summary>
public string Command => "set";
/// <summary>
/// Command Description
/// </summary>
public string Description => "This command allows you change all settings. Use \"set help\" to show details";
/// <summary>
/// Command usage
/// </summary>
public string Usage => "set [keyword] [new Value]";
/// <summary>
/// Check if the command can be used <inheritdoca DM <see cref="IChannel"/>/>
/// </summary>
public bool canUseDM => true;
/// <summary>
/// Check if the command can be used in a server
/// </summary>
public bool canUseServer => true;
/// <summary>
/// Check if the command require administrator to be executed
/// </summary>
public bool requireAdmin => true;
/// <summary>
/// The main body of the command
/// </summary>
/// <param name="context">The command context</param>
/// <param name="message">The command message</param>
/// <param name="client">The discord bot client</param>
/// <param name="isDM">True if the message was sent from a DM channel, false otherwise</param>
public async void Execute(SocketCommandContext context, SocketMessage message, DiscordSocketClient client, bool isDM)
{
var channel = message.Channel;

View File

@@ -11,21 +11,53 @@ namespace PluginManager.Core
{
internal class Boot
{
/// <summary>
/// The bot prefix
/// </summary>
public readonly string botPrefix;
/// <summary>
/// The bot token
/// </summary>
public readonly string botToken;
private bool isReady = false;
/// <summary>
/// Checks if the bot is ready
/// </summary>
/// <value> true if the bot is ready, othwerwise false </value>
public bool isReady { get; private set; } = false;
/// <summary>
/// The bot client
/// </summary>
public DiscordSocketClient client;
/// <summary>
/// The bot command handler
/// </summary>
private CommandHandler commandServiceHandler;
/// <summary>
/// The command service
/// </summary>
private CommandService service;
/// <summary>
/// The main Boot constructor
/// </summary>
/// <param name="botToken">The bot token</param>
/// <param name="botPrefix">The bot prefix</param>
public Boot(string botToken, string botPrefix)
{
this.botPrefix = botPrefix;
this.botToken = botToken;
}
/// <summary>
/// The start method for the bot. This method is used to load the bot
/// </summary>
/// <returns>Task</returns>
public async Task Awake()
{
client = new DiscordSocketClient();
@@ -39,10 +71,15 @@ namespace PluginManager.Core
commandServiceHandler = new CommandHandler(client, service, botPrefix);
await commandServiceHandler.InstallCommandsAsync();
//wait for isReady to become true
while (!isReady) ;
}
/// <summary>
/// The method that stops the bot from running
/// </summary>
/// <returns></returns>
public async Task ShutDown()
{
if (client == null) return;

View File

@@ -21,6 +21,12 @@ namespace PluginManager.Core
private readonly CommandService commandService;
private readonly string botPrefix;
/// <summary>
/// Command handler constructor
/// </summary>
/// <param name="client">The discord bot client</param>
/// <param name="commandService">The discord bot command service</param>
/// <param name="botPrefix">The prefix to watch for</param>
public CommandHandler(DiscordSocketClient client, CommandService commandService, string botPrefix)
{
this.client = client;
@@ -28,12 +34,21 @@ namespace PluginManager.Core
this.botPrefix = botPrefix;
}
/// <summary>
/// The method to initialize all commands
/// </summary>
/// <returns></returns>
public async Task InstallCommandsAsync()
{
client.MessageReceived += MessageHandler;
await commandService.AddModulesAsync(assembly: Assembly.GetEntryAssembly(), services: null);
}
/// <summary>
/// The message handler for the bot
/// </summary>
/// <param name="Message">The message got from the user in discord chat</param>
/// <returns></returns>
private async Task MessageHandler(SocketMessage Message)
{
try
@@ -45,6 +60,8 @@ namespace PluginManager.Core
if (message == null) return;
if (!message.Content.StartsWith(botPrefix)) return;
int argPos = 0;
if (message.HasMentionPrefix(client.CurrentUser, ref argPos))

View File

@@ -83,6 +83,10 @@ namespace DiscordBot
await manager.ListAvailablePlugins();
if (listLanguagAtStartup)
await languageManager.ListAllLanguages();
IProgress<float> progress = null;
while (true)
{
Console.ForegroundColor = ConsoleColor.White;
@@ -131,7 +135,7 @@ namespace DiscordBot
}
string path = "./Data/Plugins/" + info[0] + "s/" + name + ".dll";
IProgress<float> progress = new Progress<float>(percent =>
progress = new Progress<float>(percent =>
{
Console.Title = $"Downloading {info[0]}: {name} ({MathF.Round(percent, 2)}%)";
});
@@ -145,11 +149,16 @@ namespace DiscordBot
//
List<string> lines = await ServerCom.ReadTextFromFile(info[2]);
int i = 1;
foreach (var line in lines)
{
string[] split = line.Split(',');
Console.WriteLine($"Downloading item: {split[1]}");
await ServerCom.DownloadFileAsync(split[0], "./" + split[1], i, lines.Count);
progress = new Progress<float>(bytes =>
{
Console.Title = $"Downloading {MathF.Round(bytes, 2)}% ({i}/{lines.Count})";
});
await ServerCom.DownloadFileAsync(split[0], "./" + split[1], progress);
Console_Utilities.WriteColorText($"Downloaded item {split[1]}");
i++;
}