From c639d877f8ede7fdf1f00210955011e55b9bcddf Mon Sep 17 00:00:00 2001 From: alyssa Date: Sat, 19 Oct 2024 07:30:03 +0900 Subject: [PATCH] fix(bot): try fixing unhandled exceptions from interactive prompts --- PluralKit.Bot/Interactive/YesNoPrompt.cs | 20 ++++++++++++++++---- PluralKit.Core/Utils/HandlerQueue.cs | 2 +- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/PluralKit.Bot/Interactive/YesNoPrompt.cs b/PluralKit.Bot/Interactive/YesNoPrompt.cs index a32d7bba..110e4bb9 100644 --- a/PluralKit.Bot/Interactive/YesNoPrompt.cs +++ b/PluralKit.Bot/Interactive/YesNoPrompt.cs @@ -84,20 +84,32 @@ public class YesNoPrompt: BaseInteractive var queue = _ctx.Services.Resolve>(); - var messageDispatch = queue.WaitFor(MessagePredicate, Timeout, cts.Token); + async Task WaitForMessage() + { + try + { + await queue.WaitFor(MessagePredicate, Timeout, cts.Token); + } + catch (TimeoutException e) + { + if (e.Message != "HandlerQueue#WaitFor timed out") + throw; + } + } await Start(); - cts.Token.Register(() => _tcs.TrySetException(new TimeoutException("Action timed out"))); + var messageDispatch = WaitForMessage(); + + cts.Token.Register(() => _tcs.TrySetException(new TimeoutException("YesNoPrompt timed out"))); try { var doneTask = await Task.WhenAny(_tcs.Task, messageDispatch); - if (doneTask == messageDispatch) - await Finish(); } finally { + await Finish(); Cleanup(); } } diff --git a/PluralKit.Core/Utils/HandlerQueue.cs b/PluralKit.Core/Utils/HandlerQueue.cs index 076937cd..e91392fe 100644 --- a/PluralKit.Core/Utils/HandlerQueue.cs +++ b/PluralKit.Core/Utils/HandlerQueue.cs @@ -29,7 +29,7 @@ public class HandlerQueue { var theTask = await Task.WhenAny(timeoutTask, tcs.Task); if (theTask == timeoutTask) - throw new TimeoutException(); + throw new TimeoutException("HandlerQueue#WaitFor timed out"); } finally {