Beispiel #1
0
 public LeaderboardsOptions(LeaderboardsType type = LeaderboardsType.EXP, int pageNumber = 0, ulong mentionedUserId = 0, ulong guildId = 0, string commandSpecified = "")
 {
     this.type             = type;
     this.pageNumber       = pageNumber;
     this.mentionedUserId  = mentionedUserId;
     this.guildId          = guildId;
     this.commandSpecified = commandSpecified;
 }
Beispiel #2
0
        public async Task ShowLeaderboardsAsync(IDiscordMessage e, LeaderboardsType t = LeaderboardsType.Experience)
        {
            using (var context = new MikiContext())
            {
                IDiscordEmbed embed  = Utils.Embed;
                Locale        locale = Locale.GetEntity(e.Channel.Id.ToDbLong());

                switch (t)
                {
                case LeaderboardsType.Commands:
                {
                    embed.Title = locale.GetString("miki_module_accounts_leaderboards_commands_header");
                    embed.Color = new IA.SDK.Color(0.4f, 1.0f, 0.6f);
                    List <User> output = context.Users.OrderByDescending(x => x.Total_Commands)
                                         .Take(12)
                                         .ToList();
                    int i = 1;
                    foreach (User user in output)
                    {
                        embed.AddInlineField($"#{i}: {string.Join("", user.Name.Take(16))}", $"{user.Total_Commands} commands used!");
                        i++;
                    }
                    await embed.SendToChannel(e.Channel);
                }
                break;

                case LeaderboardsType.Currency:
                {
                    embed.Title = locale.GetString("miki_module_accounts_leaderboards_mekos_header");
                    embed.Color = new IA.SDK.Color(1.0f, 0.6f, 0.4f);
                    List <User> output = context.Users.OrderByDescending(x => x.Currency)
                                         .Take(12)
                                         .ToList();
                    int i = 1;
                    foreach (User user in output)
                    {
                        embed.AddInlineField($"#{i}: {string.Join("", user.Name.Take(16))}", $"{user.Currency} mekos!");
                        i++;
                    }
                    await embed.SendToChannel(e.Channel);
                }
                break;

                case LeaderboardsType.LocalExperience:
                {
                    embed.Title = locale.GetString("miki_module_accounts_leaderboards_local_header");
                    embed.Color = new IA.SDK.Color(1.0f, 0.6f, 0.4f);
                    long guildId = e.Guild.Id.ToDbLong();
                    List <LocalExperience> output = context.Experience.Where(x => x.ServerId == guildId).OrderByDescending(x => x.Experience).ToList();
                    List <User>            users  = context.Users.Where(x => output.Any(y => y.UserId == x.Id)).ToList();

                    int i = 1;
                    foreach (User user in users)
                    {
                        embed.AddInlineField($"#{i}: {string.Join("", user.Name.Take(16))}", $"{output.Find(x => x.UserId == user.Id).Experience} experience!");
                        i++;
                    }
                    await embed.SendToChannel(e.Channel);
                }
                break;

                case LeaderboardsType.Experience:
                {
                    embed.Title = locale.GetString("miki_module_accounts_leaderboards_header");
                    embed.Color = new IA.SDK.Color(1.0f, 0.6f, 0.4f);
                    List <User> output = context.Users.OrderByDescending(x => x.Total_Experience)
                                         .Take(12)
                                         .ToList();
                    int i = 1;
                    foreach (User user in output)
                    {
                        embed.AddInlineField($"#{i}: {string.Join("", user.Name.Take(16))}", $"{user.Total_Experience} experience!");
                        i++;
                    }
                    await embed.SendToChannel(e.Channel);
                }
                break;
                }
            }
        }
Beispiel #3
0
        public async Task ShowLeaderboardsAsync(IDiscordMessage mContext, LeaderboardsType leaderboardType = LeaderboardsType.Experience, int page = 1)
        {
            using (var context = new MikiContext())
            {
                Locale locale = Locale.GetEntity(mContext.Channel.Id.ToDbLong());

                int p = Math.Max(page - 1, 0);

                IDiscordEmbed embed = Utils.Embed
                                      .SetColor(1.0f, 0.6f, 0.4f)
                                      .SetFooter(locale.GetString("page_index", p + 1, Math.Ceiling(context.Users.Count() / 12f)), "");

                switch (leaderboardType)
                {
                case LeaderboardsType.Commands:
                {
                    embed.Title = locale.GetString("miki_module_accounts_leaderboards_commands_header");
                    List <User> output = await context.Users
                                         .OrderByDescending(x => x.Total_Commands)
                                         .Skip(12 * p)
                                         .Take(12)
                                         .ToListAsync();

                    for (int i = 0; i < output.Count; i++)
                    {
                        embed.AddInlineField($"#{i + (12 * p) + 1}: {string.Join("", output[i].Name.Take(16))}", $"{output[i].Total_Commands} commands used!");
                    }

                    await embed.SendToChannel(mContext.Channel);
                }
                break;

                case LeaderboardsType.Currency:
                {
                    embed.Title = locale.GetString("miki_module_accounts_leaderboards_mekos_header");
                    List <User> output = await context.Users
                                         .OrderByDescending(x => x.Currency)
                                         .Skip(12 * p)
                                         .Take(12)
                                         .ToListAsync();

                    for (int i = 0; i < output.Count; i++)
                    {
                        embed.AddInlineField($"#{i + (12 * p) + 1}: {string.Join("", output[i].Name.Take(16))}",
                                             $"{output[i].Currency} mekos!");
                    }
                    await embed.SendToChannel(mContext.Channel);
                }
                break;

                case LeaderboardsType.LocalExperience:
                {
                    embed.Title = locale.GetString("miki_module_accounts_leaderboards_local_header");
                    long guildId = mContext.Guild.Id.ToDbLong();
                    List <LocalExperience> output = await context.Experience
                                                    .Where(x => x.ServerId == guildId)
                                                    .OrderByDescending(x => x.Experience)
                                                    .Skip(12 * p)
                                                    .Take(12)
                                                    .ToListAsync();

                    int amountOfUsers = await context.Experience.Where(x => x.ServerId == guildId).CountAsync();

                    List <User> users = new List <User>();

                    for (int i = 0; i < output.Count; i++)
                    {
                        users.Add(await context.Users.FindAsync(output[i].UserId));
                    }

                    for (int i = 0; i < users.Count; i++)
                    {
                        embed.AddInlineField($"#{i + (12 * p) + 1} : {string.Join("", users[i].Name.Take(16))}",
                                             $"{output[i].Experience} experience!");
                    }

                    await embed.SendToChannel(mContext.Channel);
                }
                break;

                case LeaderboardsType.Experience:
                {
                    embed.Title = locale.GetString("miki_module_accounts_leaderboards_header");
                    List <User> output = await context.Users
                                         .OrderByDescending(x => x.Total_Experience)
                                         .Skip(12 * p)
                                         .Take(12)
                                         .ToListAsync();

                    for (int i = 0; i < output.Count; i++)
                    {
                        embed.AddInlineField($"#{i + (12 * p) + 1}: {string.Join("", output[i].Name.Take(16))}",
                                             $"{output[i].Total_Experience} experience!");
                    }
                    await embed.SendToChannel(mContext.Channel);
                }
                break;

                case LeaderboardsType.Reputation:
                {
                    embed.Title = locale.GetString("miki_module_accounts_leaderboards_reputation_header");
                    List <User> output = await context.Users
                                         .OrderByDescending(x => x.Reputation)
                                         .Skip(12 * p)
                                         .Take(12)
                                         .ToListAsync();

                    for (int i = 0; i < output.Count; i++)
                    {
                        embed.AddInlineField($"#{i + (12 * p) + 1}: {string.Join("", output[i].Name.Take(16))}",
                                             $"{output[i].Reputation} reputation!");
                    }
                    await embed.SendToChannel(mContext.Channel);
                }
                break;
                }
            }
        }