async Task <SocketMessage> ResponseWaitAync(VInteractive <SocketMessage> interactive, TimeSpan?timeout = null) { timeout = timeout ?? TimeSpan.FromSeconds(15); var trigger = new TaskCompletionSource <SocketMessage>(); async Task InteractiveHandlerAsync(SocketMessage message) { var result = await interactive.JudgeAsync(Context, message).ConfigureAwait(false); if (result) { trigger.SetResult(message); } } (Context.Client as DiscordSocketClient).MessageReceived += InteractiveHandlerAsync; var personalTask = await Task.WhenAny(trigger.Task, Task.Delay(timeout.Value)).ConfigureAwait(false); (Context.Client as DiscordSocketClient).MessageReceived -= InteractiveHandlerAsync; if (personalTask == trigger.Task) { return(await trigger.Task.ConfigureAwait(false)); } else { return(null); } }
public Interactive <T> AddInteractive(VInteractive <T> interactive) { interactiveList.Add(interactive); return(this); }