Made reload command no longer restart the discord client

This commit is contained in:
Toastie 2025-02-03 02:06:31 +13:00
parent 3442ec317d
commit e7377cdece
Signed by: toastie_t0ast
GPG key ID: 0861BE54AD481DC7
3 changed files with 51 additions and 26 deletions

View file

@ -130,6 +130,6 @@ public class AdminCommands
await LogChannel.Success(command.User.Mention + " reloaded the bot.");
Logger.Log("Reloading bot...");
await SupportChild.Reload();
SupportChild.Reload();
}
}

View file

@ -4,6 +4,7 @@ using System.IO;
using System.Reflection;
using System.Threading.Tasks;
using System.Linq;
using System.Threading;
using DSharpPlus;
using DSharpPlus.Interactivity;
using DSharpPlus.Interactivity.Enums;
@ -85,9 +86,15 @@ internal static class SupportChild
Logger.Log("Starting " + Assembly.GetEntryAssembly()?.GetName().Name + " version " + GetVersion() + "...");
try
{
if (!await Reload())
if (!Reload())
{
Logger.Fatal("Aborting startup due to a fatal error...");
Logger.Fatal("Aborting startup due to a fatal error.");
return;
}
if (!await Connect())
{
Logger.Fatal("Aborting startup due to a fatal error when trying to connect to Discord.");
return;
}
@ -97,7 +104,6 @@ internal static class SupportChild
catch (Exception e)
{
Logger.Fatal("Fatal error:\n" + e);
Console.ReadLine();
}
}
@ -111,38 +117,46 @@ internal static class SupportChild
+ " (" + ThisAssembly.Git.Commit + ")";
}
public static async Task<bool> Reload()
public static bool Reload()
{
if (client != null)
try
{
await client.DisconnectAsync();
client.Dispose();
Config.LoadConfig();
}
catch (Exception e)
{
Logger.Fatal("Unable to read the config file: \"" + commandLineArgs.configPath + "\"", e);
return false;
}
Config.LoadConfig();
// Check if token is unset
if (Config.token is "<add-token-here>" or "")
{
Logger.Fatal("You need to set your bot token in the config and start the bot again.");
throw new ArgumentException("Invalid Discord bot token");
return false;
}
// Database connection and setup
try
{
Logger.Log("Connecting to database... (" + Config.hostName + ":" + Config.port + ")");
Logger.Log("Connecting to database. (" + Config.hostName + ":" + Config.port + ")");
Database.SetConnectionString(Config.hostName, Config.port, Config.database, Config.username, Config.password);
Database.SetupTables();
}
catch (Exception e)
{
Logger.Fatal("Could not set up database tables, please confirm connection settings, status of the server and permissions of MySQL user. Error: ", e);
Logger.Fatal("Could not set up database tables, please confirm connection settings, status of the server and permissions of MySQL user.", e);
return false;
}
Logger.Log("Setting up Discord client...");
DiscordClientBuilder clientBuilder = DiscordClientBuilder.CreateDefault(Config.token, DiscordIntents.All).SetReconnectOnFatalGatewayErrors();
return true;
}
private static async Task<bool> Connect()
{
Logger.Log("Setting up Discord client.");
DiscordClientBuilder clientBuilder = DiscordClientBuilder.CreateDefault(Config.token, DiscordIntents.All)
.SetReconnectOnFatalGatewayErrors();
clientBuilder.ConfigureServices(configure =>
{
@ -204,7 +218,7 @@ internal static class SupportChild
]);
extension.AddProcessor(new SlashCommandProcessor());
extension.CommandErrored += EventHandler.OnCommandError;
}, new CommandsConfiguration()
}, new CommandsConfiguration
{
RegisterDefaultCommandProcessors = false,
UseDefaultCommandErrorHandler = false
@ -223,26 +237,37 @@ internal static class SupportChild
client = clientBuilder.Build();
Logger.Log("Connecting to Discord...");
Logger.Log("Connecting to Discord.");
EventHandler.hasLoggedGuilds = false;
await client.ConnectAsync();
try
{
await client.ConnectAsync();
}
catch (Exception e)
{
Logger.Fatal("Error occured while connecting to Discord.", e);
return false;
}
return true;
}
}
internal class ErrorHandler : IClientErrorHandler
{
public ValueTask HandleEventHandlerError(string name, Exception exception, Delegate invokedDelegate, object sender, object args)
public ValueTask HandleEventHandlerError(string name,
Exception exception,
Delegate invokedDelegate,
object sender,
object args)
{
Logger.Error("Client exception occured:\n" + exception);
switch (exception)
if (exception is BadRequestException ex)
{
case BadRequestException ex:
Logger.Error("JSON Message: " + ex.JsonMessage);
break;
default:
break;
Logger.Error("JSON Message: " + ex.JsonMessage);
}
return ValueTask.FromException(exception);
}

View file

@ -1,5 +1,5 @@
bot:
# Bot token.
# Bot token. Changing this requires a bot restart, it will not update when reloading.
token: "<add-token-here>"
# Channel where ticket logs are posted (recommended).