mirror of
https://github.com/Sanae6/SmoOnlineServer.git
synced 2024-11-22 03:05:16 +00:00
Implements Added Bot Reconnect Command (#1)
Add dscrestart command Update Program.cs
This commit is contained in:
parent
60249feef8
commit
b5825b537f
2 changed files with 35 additions and 4 deletions
|
@ -12,18 +12,31 @@ public class DiscordBot {
|
||||||
private string Prefix => Config.Prefix;
|
private string Prefix => Config.Prefix;
|
||||||
private readonly Logger Logger = new Logger("Discord");
|
private readonly Logger Logger = new Logger("Discord");
|
||||||
private DiscordChannel? LogChannel;
|
private DiscordChannel? LogChannel;
|
||||||
|
private bool Reconnecting;
|
||||||
|
|
||||||
public DiscordBot() {
|
public DiscordBot() {
|
||||||
Token = Config.Token;
|
Token = Config.Token;
|
||||||
Logger.AddLogHandler(Log);
|
Logger.AddLogHandler(Log);
|
||||||
|
CommandHandler.RegisterCommand("dscrestart", _ => {
|
||||||
|
// this should be async'ed but i'm lazy
|
||||||
|
Reconnecting = true;
|
||||||
|
Task.Run(Reconnect);
|
||||||
|
return "Restarting Discord bot";
|
||||||
|
});
|
||||||
if (Config.Token == null) return;
|
if (Config.Token == null) return;
|
||||||
Settings.LoadHandler += SettingsLoadHandler;
|
Settings.LoadHandler += SettingsLoadHandler;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private async Task Reconnect() {
|
||||||
|
if (DiscordClient != null) // usually null prop works, not here though...`
|
||||||
|
await DiscordClient.DisconnectAsync();
|
||||||
|
await Run();
|
||||||
|
}
|
||||||
|
|
||||||
private async void SettingsLoadHandler() {
|
private async void SettingsLoadHandler() {
|
||||||
try {
|
try {
|
||||||
if (DiscordClient == null || Token != Config.Token)
|
if (DiscordClient == null || Token != Config.Token)
|
||||||
Run();
|
await Run();
|
||||||
if (Config.LogChannel != null)
|
if (Config.LogChannel != null)
|
||||||
LogChannel = await (DiscordClient?.GetChannelAsync(ulong.Parse(Config.LogChannel)) ??
|
LogChannel = await (DiscordClient?.GetChannelAsync(ulong.Parse(Config.LogChannel)) ??
|
||||||
throw new NullReferenceException("Discord client not setup yet!"));
|
throw new NullReferenceException("Discord client not setup yet!"));
|
||||||
|
@ -41,12 +54,13 @@ public class DiscordBot {
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
// don't log again, it'll just stack overflow the server!
|
// don't log again, it'll just stack overflow the server!
|
||||||
|
if (Reconnecting) return; // skip if reconnecting
|
||||||
await Console.Error.WriteLineAsync("Exception in discord logger");
|
await Console.Error.WriteLineAsync("Exception in discord logger");
|
||||||
await Console.Error.WriteLineAsync(e.ToString());
|
await Console.Error.WriteLineAsync(e.ToString());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public async void Run() {
|
public async Task Run() {
|
||||||
Token = Config.Token;
|
Token = Config.Token;
|
||||||
DiscordClient?.Dispose();
|
DiscordClient?.Dispose();
|
||||||
if (Config.Token == null) {
|
if (Config.Token == null) {
|
||||||
|
@ -61,11 +75,19 @@ public class DiscordBot {
|
||||||
});
|
});
|
||||||
await DiscordClient.ConnectAsync(new DiscordActivity("Hide and Seek", ActivityType.Competing));
|
await DiscordClient.ConnectAsync(new DiscordActivity("Hide and Seek", ActivityType.Competing));
|
||||||
SettingsLoadHandler();
|
SettingsLoadHandler();
|
||||||
|
Logger.Info(
|
||||||
|
$"Discord bot logged in as {DiscordClient.CurrentUser.Username}#{DiscordClient.CurrentUser.Discriminator}");
|
||||||
|
Reconnecting = false;
|
||||||
string mentionPrefix = $"{DiscordClient.CurrentUser.Mention} ";
|
string mentionPrefix = $"{DiscordClient.CurrentUser.Mention} ";
|
||||||
DiscordClient.MessageCreated += async (_, args) => {
|
DiscordClient.MessageCreated += async (_, args) => {
|
||||||
|
if (args.Author.IsCurrent) return;
|
||||||
try {
|
try {
|
||||||
DiscordMessage msg = args.Message;
|
DiscordMessage msg = args.Message;
|
||||||
if (msg.Content.StartsWith(Prefix)) {
|
if (string.IsNullOrEmpty(Prefix)) {
|
||||||
|
await msg.Channel.TriggerTypingAsync();
|
||||||
|
await msg.RespondAsync(string.Join('\n',
|
||||||
|
CommandHandler.GetResult(msg.Content).ReturnStrings));
|
||||||
|
} else if (msg.Content.StartsWith(Prefix)) {
|
||||||
await msg.Channel.TriggerTypingAsync();
|
await msg.Channel.TriggerTypingAsync();
|
||||||
await msg.RespondAsync(string.Join('\n',
|
await msg.RespondAsync(string.Join('\n',
|
||||||
CommandHandler.GetResult(msg.Content[Prefix.Length..]).ReturnStrings));
|
CommandHandler.GetResult(msg.Content[Prefix.Length..]).ReturnStrings));
|
||||||
|
|
|
@ -13,7 +13,7 @@ CancellationTokenSource cts = new CancellationTokenSource();
|
||||||
Task listenTask = server.Listen(cts.Token);
|
Task listenTask = server.Listen(cts.Token);
|
||||||
Logger consoleLogger = new Logger("Console");
|
Logger consoleLogger = new Logger("Console");
|
||||||
DiscordBot bot = new DiscordBot();
|
DiscordBot bot = new DiscordBot();
|
||||||
bot.Run();
|
await bot.Run();
|
||||||
|
|
||||||
server.ClientJoined += (c, _) => {
|
server.ClientJoined += (c, _) => {
|
||||||
if (Settings.Instance.BanList.Enabled && (Settings.Instance.BanList.Players.Contains(c.Id) ||
|
if (Settings.Instance.BanList.Enabled && (Settings.Instance.BanList.Players.Contains(c.Id) ||
|
||||||
|
@ -475,6 +475,15 @@ CommandHandler.RegisterCommand("loadsettings", _ => {
|
||||||
return "Loaded settings.json";
|
return "Loaded settings.json";
|
||||||
});
|
});
|
||||||
|
|
||||||
|
async CommandHandler.RegisterCommand("reconnect", _ => {
|
||||||
|
// this should be async'ed but i'm lazy
|
||||||
|
await bot.DisconnectAsync();
|
||||||
|
Task.Delay(2500);
|
||||||
|
await bot.ConnectAsync();
|
||||||
|
Task.Delay(1000);
|
||||||
|
return "reconnected successful";
|
||||||
|
});
|
||||||
|
|
||||||
Console.CancelKeyPress += (_, e) => {
|
Console.CancelKeyPress += (_, e) => {
|
||||||
e.Cancel = true;
|
e.Cancel = true;
|
||||||
consoleLogger.Info("Received Ctrl+C");
|
consoleLogger.Info("Received Ctrl+C");
|
||||||
|
|
Loading…
Reference in a new issue