public virtual async Task ShowLobbyLeaderboardAsync(ISocketMessageChannel channel = null) { if (channel == null) { channel = Context.Channel; } if (!PremiumService.IsPremium(Context.Guild.Id)) { await SimpleEmbedAsync($"This is a premium only command. " + $"In order to get premium must become an ELO premium subscriber at {PremiumService.PremiumConfig.AltLink} join the server " + $"{PremiumService.PremiumConfig.ServerInvite} to recieve your role and then run the `claimpremium` command in your server."); return; } using (var db = new Database()) { var lobby = db.GetLobby(channel); if (lobby == null) { await SimpleEmbedAndDeleteAsync("Channel is not a lobby.", Color.Red); return; } var updates = db.ScoreUpdates.AsNoTracking().Where(x => x.ChannelId == channel.Id).ToArray().GroupBy(x => x.UserId); var infos = new Dictionary <ulong, int>(); foreach (var group in updates) { infos[group.Key] = group.Sum(x => x.ModifyAmount); } var groups = infos.OrderByDescending(x => x.Value).SplitList(20).ToArray(); int index = 1; var pages = new List <ReactivePage>(); foreach (var group in groups) { var playerGroup = group.ToArray(); var lines = group.Select(x => $"{index++}: {MentionUtils.MentionUser(x.Key)} - `{x.Value}`").ToArray(); //index += lines.Length; var page = new ReactivePage(); page.Color = Color.Blue; page.Title = $"{channel.Name} - Leaderboard"; page.Description = string.Join("\n", lines); pages.Add(page); } await PagedReplyAsync(new ReactivePager { Pages = pages }.ToCallBack().WithDefaultPagerCallbacks().WithJump()); } }
public virtual async Task Bans() { using (var db = new Database()) { var bans = db.Bans.Where(x => x.GuildId == Context.Guild.Id).ToList(); if (bans.Count == 0) { await SimpleEmbedAsync("There aren't any banned players.", Color.Blue); return; } //Show bans in order of which is soonest to expire var pages2 = bans.Where(x => x.IsExpired == false).OrderBy(x => x.RemainingTime).SplitList(5).Select(x => { var page = new ReactivePage(); page.Fields = x.Select(p => { var user = db.Players.Find(Context.Guild.Id, p.UserId); var field = new EmbedFieldBuilder { Name = user?.GetDisplayNameSafe() ?? p.UserId.ToString(), Value = $"**User:** {MentionUtils.MentionUser(p.UserId)}\n" + $"**Banned at:** {p.ExpiryTime.ToString("dd MMM yyyy")}\n" + $"**Ban Length:** {p.Length.GetReadableLength()}\n" + $"**Expires in:** {p.RemainingTime.GetReadableLength()}\n" + $"**Banned by:** {MentionUtils.MentionUser(p.Moderator)}\n" + $"**Reason:** {p.Comment ?? "N/A"}" }; return(field); }).ToList(); return(page); }); if (!pages2.Any()) { await SimpleEmbedAsync("There are no players currently banned. Use the `Allbans` command to lookup all player bans."); return; } var pager2 = new ReactivePager(pages2); await PagedReplyAsync(pager2.ToCallBack().WithDefaultPagerCallbacks()); } }
public async Task ShowLeaderboard() { var users = LevelService.Database.Query <LevelUser>(x => x.GuildId == Context.Guild.Id).OrderByDescending(x => x.UserXP).ToList(); if (!users.Any()) { await ReplyAsync("There are no users with levelling in this server."); return; } await Context.Guild.DownloadUsersAsync(); var pages = new List <ReactivePage>(); int position = 0; foreach (var userGroup in users.SplitList(15)) { var page = new ReactivePage(); var userText = userGroup.Select(x => { var user = Context.Guild.GetUser(x.UserId); if (user == null) { return(null); } position++; return($"#{position} | {user.Mention} XP:{x.UserXP} LV:{x.UserLevel}"); }).Where(x => x != null); page.Description = string.Join("\n", userText); pages.Add(page); } var pager = new ReactivePager { Title = "Leaderboard", Pages = pages, Color = Color.Blue }; await PagedReplyAsync(pager.ToCallBack().WithDefaultPagerCallbacks()); }
public async Task Bans() { var players = Service.GetPlayers(x => x.GuildId == Context.Guild.Id && x.IsBanned); if (players.Length == 0) { await SimpleEmbedAsync("There aren't any banned players.", Color.Blue); return; } var pages = players.OrderBy(x => x.CurrentBan.RemainingTime).SplitList(20).Select(x => { var page = new ReactivePage(); page.Description = string.Join("\n", x.Select(p => $"{MentionUtils.MentionUser(p.UserId)} - {p.CurrentBan.ExpiryTime.ToString("dd MMM yyyy")} {p.CurrentBan.ExpiryTime.ToShortTimeString()} in {p.CurrentBan.RemainingTime.GetReadableLength()}")); return(page); }); var pager = new ReactivePager(pages); await PagedReplyAsync(pager.ToCallBack().WithDefaultPagerCallbacks()); }
public List <ReactivePage> GetPages(IEnumerable <Player>[] groups) { //Start the index at 1 because we are ranking players here ie. first place. int index = 1; var pages = new List <ReactivePage>(groups.Length); foreach (var group in groups) { var playerGroup = group.ToArray(); var lines = GetPlayerLines(playerGroup, index); index = lines.Item1; var page = new ReactivePage(); page.Color = Color.Blue; page.Title = $"{Context.Guild.Name} - Leaderboard"; page.Description = lines.Item2; pages.Add(page); } return(pages); }
public virtual async Task AllBans() { using (var db = new Database()) { var bans = db.Bans.Where(x => x.GuildId == Context.Guild.Id).ToList(); if (bans.Count == 0) { await SimpleEmbedAsync("There aren't any banned players.", Color.Blue); return; } var pages2 = bans.OrderBy(x => x.RemainingTime).SplitList(5).Select(x => { var page = new ReactivePage(); page.Fields = x.Select(p => { var user = db.Players.Find(Context.Guild.Id, p.UserId); var field = new EmbedFieldBuilder { Name = user?.DisplayName ?? p.UserId.ToString(), Value = $"**User:** {MentionUtils.MentionUser(p.UserId)}\n" + $"**Banned at:** {p.ExpiryTime.ToString("dd MMM yyyy")}\n" + $"**Ban Length:** {p.Length.GetReadableLength()}\n" + $"**Banned By:** {MentionUtils.MentionUser(p.Moderator)}\n" + $"**Manually Disabled:** {p.ManuallyDisabled}\n" + $"**Reason:** {p.Comment ?? "N/A"}\n" + $"**Expired:** {p.IsExpired}" }; return(field); }).ToList(); return(page); }); var pager2 = new ReactivePager(pages2); await PagedReplyAsync(pager2.ToCallBack().WithDefaultPagerCallbacks()); } }
public async Task RemindersListAsync() { var reminders = ReminderHandler.Database.Query <Reminder>(x => x.UserId == Context.User.Id).ToArray(); if (reminders.Length == 0) { await ReplyAsync("There are no reminders in queue for you."); return; } var currentServer = reminders.Where(x => x.GuildId == Context.Guild.Id).ToArray(); var currentChannel = currentServer.Where(x => x.ChannelId == Context.Channel.Id).ToArray(); var pager = new ReactivePager(); var p1 = new ReactivePage { Title = "Overview", Description = $"**Total Reminders:** {reminders.Length}\n" + $"**Total Reminders in this Server:** {currentServer.Length}\n" + $"**Total Reminders in this Channel:** {currentChannel.Length}\n" }; var pages = new List <ReactivePage> { p1 }; var fields = reminders.Select(x => { var dueAt = (x.TimeStamp + x.Length); var guild = Context.Client.GetGuild(x.GuildId); var channel = guild?.GetTextChannel(x.ChannelId); return(new EmbedFieldBuilder { Name = $"Reminder: {x.ReminderNumber}", Value = $"**At:** {dueAt.ToLongDateString()} {dueAt.ToLongTimeString()}\n" + $"**Due In:** {(dueAt - DateTime.UtcNow).GetReadableLength()}\n" + $"**Server:** {guild?.Name ?? "N/A"}\n" + $"**Channel:** {channel?.Name ?? "N/A"}\n**Message:**\n" + $"{x.ReminderMessage}" }); }).SplitList(5).ToList(); if (fields.Count > 1) { p1.Fields = fields.First().ToList(); foreach (var grp in fields.Skip(1)) { pages.Add(new ReactivePage { Fields = grp.ToList() }); } } else if (fields.Count == 1) { p1.Fields = fields.First().ToList(); } pager.Pages = pages; await PagedReplyAsync(pager.ToCallBack().WithDefaultPagerCallbacks()); }