Пример #1
0
        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);
            }
        }
Пример #2
0
 public Interactive <T> AddInteractive(VInteractive <T> interactive)
 {
     interactiveList.Add(interactive);
     return(this);
 }