public async Task CreateChanel(CommandContext ctx, string name) { var overwrites = new DiscordOverwriteBuilder[] { new DiscordOverwriteBuilder() { Allowed = Permissions.All }.For(ctx.Member) }; var channel = await ctx.Guild.CreateChannelAsync(name, ChannelType.Voice, overwrites : overwrites, parent : BotInitSettings.GetVoiceChannelCategory(ctx.Guild)).ThrowTaskException(); await ctx.Message.DeleteAsync(); var msg = await ctx.Channel.SendMessageAsync("Канал " + name + " создан!").ThrowTaskException(); await Task.Delay(10000); await msg.DeleteAsync(); while (channel.Users.Any()) { Thread.Sleep(1); } await channel.DeleteAsync(); }
public async Task CreateTeamGame(CommandContext ctx, string gameName, int targetMemberCount, string description) { var channel = BotInitSettings.GetTeamFindingChannel(ctx.Guild); var msg = await channel.SendMessageAsync(ctx.Member.Mention + " ищет напарника(ов) для игры в " + gameName + "\n" + "Доп. иформация: " + description + (targetMemberCount == -1 ? "" : ("\n\n" + "Для игры нужно " + targetMemberCount + " человек(а)"))); await msg.CreateReactionAsync(DiscordEmoji.FromName(ctx.Client, ":ok_hand:")); if (targetMemberCount == -1) { await msg.CreateReactionAsync(DiscordEmoji.FromName(ctx.Client, ":arrow_forward:")); } await ctx.Message.DeleteAsync(); var interact = ctx.Client.GetInteractivity(); var dm = await ctx.Member.CreateDmChannelAsync(); List <DiscordUser> userList; if (targetMemberCount != -1) { while (true) { Func <MessageReactionAddEventArgs, bool> predecate = (s) => s.Message == msg && s.Emoji == DiscordEmoji.FromName(ctx.Client, ":ok_hand:"); await interact.WaitForReactionAsync(predecate); var users = await msg.GetReactionsAsync(DiscordEmoji.FromName(ctx.Client, ":ok_hand:")); if (users.Count - 1 >= targetMemberCount) { userList = users.Where((s, i) => 0 <= i && i <= targetMemberCount - 1).ToList(); //Bot reaction ignore await dm.SendMessageAsync("Ваша игра готова к старту! Зайдите в канал и одобрите старт!"); await msg.CreateReactionAsync(DiscordEmoji.FromName(ctx.Client, ":arrow_forward:")); var retry = true; while (retry) { retry = (await interact.WaitForReactionAsync (s => s.Message == msg && s.User == ctx.User && s.Emoji == DiscordEmoji.FromName(ctx.Client, ":arrow_forward:"))).TimedOut; } break; } } } else { Func <MessageReactionAddEventArgs, bool> predecate = (s) => s.Message == msg && s.Emoji == DiscordEmoji.FromName(ctx.Client, ":arrow_forward:"); var retry = true; while (retry) { retry = (await interact.WaitForReactionAsync (s => s.Message == msg && s.Emoji == DiscordEmoji.FromName(ctx.Client, ":arrow_forward:"), new TimeSpan(0, 10, 0))).TimedOut; await dm.SendMessageAsync("Незабывайте про созданую игру. Возможно уже пора начинать!"); } var users = await msg.GetReactionsAsync(DiscordEmoji.FromName(ctx.Client, ":ok_hand:")); userList = users.Where((s, i) => 0 <= i && i <= targetMemberCount - 1).ToList(); //Bot reaction ignore } var msg2 = await channel.SendMessageAsync("Игра в " + gameName + " запущена!" + "\n\n" + "Участники: " + string.Join(", ", userList.Select(s => s.Mention))); var name = "Играем в " + gameName; var overwrites = new DiscordOverwriteBuilder[] { new DiscordOverwriteBuilder() { Allowed = Permissions.All }.For(ctx.Member) }; var voiceChannel = await ctx.Guild.CreateChannelAsync(name, ChannelType.Voice, overwrites : overwrites, parent : BotInitSettings.GetVoiceChannelCategory(ctx.Guild)).ThrowTaskException(); var deleteTask = Task.Run(() => { Thread.Sleep(10000); while (voiceChannel.Users.Any()) { Thread.Sleep(1); } voiceChannel.DeleteAsync(); }); await Task.Delay(3000); await msg.DeleteAsync(); await Task.Delay(120000); await msg2.DeleteAsync(); await deleteTask; }