public async Task Execute(SocketUserMessage userMessage, int argsPos) { var context = userMessage.GetMessageContext(_client); var stat = await _rouletteStore.GetGuildStats(context.Guild.Id, 10); var countArg = argsPos >= userMessage.Content.Length ? "" : userMessage.Content.Substring(argsPos + 1); if (string.IsNullOrWhiteSpace(countArg)) { countArg = "5"; } string message = null; if (!int.TryParse(countArg, out var count)) { await userMessage.DeleteAsync(); return; } count = Math.Max(5, count); if (stat.Count > 0) { var z = stat .Where(s => s.Value.Wins + s.Value.Loses >= 3) .Select(s => (s.Value, context.Guild.GetUser(s.Key))) .Where(s => s.Item2 != null) .OrderByDescending(s => Math.Round((double)s.Value.Wins / (s.Value.Wins + s.Value.Loses), 1)) .ThenByDescending(s => s.Value.Wins + s.Value.Loses) .ThenByDescending(s => s.Value.Wins) .ThenBy(s => s.Item2.Id) .Take(count) .Select(s => { var((wins, loses), user) = s; var c = wins + loses; return($"**{user.GetUserDisplayName()}** застрелился {wins} {wins.ToTimesString()}! ({100.0 * wins / c:f1}% от {c})"); }); message = string.Join(Environment.NewLine, z); } if (string.IsNullOrWhiteSpace(message)) { message = $"Пусто... сыграйте \"{_client.CurrentUser.Mention} рулетка!\""; } var reply = await userMessage.Channel.SendMessageAsync(message); await MessageUtilities.DeleteMessagesAsync(15, userMessage, reply); }