Example #1
0
        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());
            }
        }
Example #2
0
        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());
            }
        }
Example #3
0
        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());
        }
Example #4
0
        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());
        }
Example #5
0
        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);
        }
Example #6
0
        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());
            }
        }
Example #7
0
        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());
        }