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 {