1
0
Fork 1
mirror of https://github.com/TeamOctolings/Octobot.git synced 2025-04-30 19:19:54 +03:00

Log exceptions thrown during "fire-and-forget" async method calls

This commit is contained in:
Octol1ttle 2022-11-16 23:27:10 +05:00
parent 14ebcb1f1c
commit 29c2332ad9
Signed by: Octol1ttle
GPG key ID: B77C34313AEE1FFF
3 changed files with 44 additions and 28 deletions

View file

@ -47,13 +47,15 @@ public sealed class CommandProcessor {
var list = Context.Message.Content.Split("\n");
var cleanList = Context.Message.CleanContent.Split("\n");
for (var i = 0; i < list.Length; i++) {
RunCommandOnLine(list[i], cleanList[i], config["Prefix"]);
for (var i = 0; i < list.Length; i++)
_tasks.Add(RunCommandOnLine(list[i], cleanList[i], config["Prefix"]));
if (_stackedReplyMessage.Length > 0) _ = Context.Channel.TriggerTypingAsync();
try { Task.WaitAll(_tasks.ToArray()); } catch (AggregateException e) {
foreach (var ex in e.InnerExceptions)
await Boyfriend.Log(new LogMessage(LogSeverity.Error, nameof(CommandProcessor),
"Exception while executing commands", ex));
}
await Task.WhenAll(_tasks);
_tasks.Clear();
if (ConfigWriteScheduled) await Boyfriend.WriteGuildConfigAsync(guild.Id);
@ -61,7 +63,7 @@ public sealed class CommandProcessor {
SendFeedbacks();
}
private void RunCommandOnLine(string line, string cleanLine, string prefix) {
private async Task RunCommandOnLine(string line, string cleanLine, string prefix) {
var prefixed = line.StartsWith(prefix);
if (!prefixed && !line.StartsWith(Mention)) return;
foreach (var command in Commands) {
@ -70,7 +72,8 @@ public sealed class CommandProcessor {
var args = lineNoMention.Trim().Split().Skip(1).ToArray();
var cleanArgs = cleanLine.Split().Skip(lineNoMention.StartsWith(" ") ? 2 : 1).ToArray();
_tasks.Add(command.RunAsync(this, args, cleanArgs));
await command.RunAsync(this, args, cleanArgs);
if (_stackedReplyMessage.Length > 0) _ = Context.Channel.TriggerTypingAsync();
return;
}
}