private async void NewGame(Chat c) { if (c.Id != Admin) { return; } List <Chat> localMembers; lock (Members) { if (Members.Count > CurrentConfiguration.Sum(x => (int)x)) { Program.Bot.SendTextMessageAsync(c.Id, "Недостаточно карт. Невозможно начать новую игру."); return; } if (CurrentConfiguration.Sum(x => (int)x) - Members.Count >= CurrentConfiguration.Skip(2).Take(2).Sum(x => (int)x)) { Program.Bot.SendTextMessageAsync(c.Id, "Количество оставшихся карт больше, чем количество плохих ролей. Невозможно начать новую игру."); return; } localMembers = new List <Chat>(Members); } var localMembers2 = new List <Chat>(localMembers); var rnd = new Random(DateTime.Now.Millisecond); roles = new Dictionary <long, Role>(localMembers.Count); var leader = rnd.Next(0, localMembers.Count); roles.Add(localMembers[leader].Id, Role.Ведущий); localMembers.RemoveAt(leader); var rolesBag = new List <Role>(); for (var i = 1; i < CurrentConfiguration.Length; i++) { for (var j = 0; j < CurrentConfiguration[i]; j++) { rolesBag.Add((Role)i); } } while (localMembers.Count > 0) { var x = rnd.Next(0, rolesBag.Count); roles.Add(localMembers[0].Id, rolesBag[x]); localMembers.RemoveAt(0); rolesBag.RemoveAt(x); } remainingRoles = rolesBag; var markup = new ReplyKeyboardMarkup(new KeyboardButton[] { Strings.ShowMeRole }, true); foreach (var chat in localMembers2) { Program.Bot.SendTextMessageAsync(chat.Id, "Новая игра началась!", replyMarkup: markup); } }