private async Task ResetPlayer(CommandContext ctx, TimeSpan delay, CancellationToken tkn) { try { await Task.Delay(delay, tkn); KnbState = null; await ctx.RespondAsync("Прошел период ожидания второго игрока. Игровая сессия отменена."); } catch (OperationCanceledException) { } return; }
public async Task KnbMultiPlayerCommand(CommandContext ctx) { await ctx.TriggerTypingAsync(); if (KnbState == null) { KnbState = new KnbState(ctx.Member, new CancellationTokenSource()); await ctx.RespondAsync($"Player 1 = {KnbState.FirstPlayer.Mention}. Ждем второго игрока {KnbSessionWaitTime} секунд. Для присоединения напишите !knb2p."); await Task.Run(() => ResetPlayer(ctx, TimeSpan.FromSeconds(KnbSessionWaitTime), KnbState.Cts.Token)); return; } else { KnbState.Cts.Cancel(); if (KnbState.FirstPlayer.Id == ctx.Member.Id) { await ctx.RespondAsync("Необходим второй игрок! Игровая сессия отменена."); } else { var result = KnbGame.Play(); var response = FormKnbResultResponse(result, KnbState.FirstPlayer.Mention, ctx.User.Mention); try { await ctx.RespondAsync(response); } catch (Exception e) { Console.WriteLine(e.Message); } } KnbState = null; } }