Ejemplo n.º 1
0
        public async Task GuildProfile(EventContext e)
        {
            using (MikiContext context = new MikiContext())
            {
                GuildUser g = await context.GuildUsers.FindAsync(e.Guild.Id.ToDbLong());

                int rank = await g.GetGlobalRankAsync(context);

                int level = g.CalculateLevel(g.Experience);

                EmojiBarSet onBarSet  = new EmojiBarSet("<:mbarlefton:391971424442646534>", "<:mbarmidon:391971424920797185>", "<:mbarrighton:391971424488783875>");
                EmojiBarSet offBarSet = new EmojiBarSet("<:mbarleftoff:391971424824459265>", "<:mbarmidoff:391971424824197123>", "<:mbarrightoff:391971424862208000>");

                EmojiBar expBar = new EmojiBar(g.CalculateMaxExperience(g.Experience), onBarSet, offBarSet, 6);

                EmbedBuilder embed = new EmbedBuilder()
                                     .SetAuthor(g.Name, e.Guild.IconUrl, "https://miki.veld.one")
                                     .SetColor(0.1f, 0.6f, 1)
                                     .AddInlineField(e.Locale.GetString("miki_terms_level"), level.ToFormattedString());

                if ((e.Guild.IconUrl ?? "") != "")
                {
                    embed.SetThumbnail("http://veld.one/assets/img/transparentfuckingimage.png");
                }

                string expBarString = await expBar.Print(g.Experience, e.Guild, e.Channel as IDiscordGuildChannel);

                if (string.IsNullOrWhiteSpace(expBarString))
                {
                    embed.AddInlineField(e.Locale.GetString("miki_terms_experience"), "[" + g.Experience.ToFormattedString() + " / " + g.CalculateMaxExperience(g.Experience).ToFormattedString() + "]");
                }
                else
                {
                    embed.AddInlineField(e.Locale.GetString("miki_terms_experience") + $" [{g.Experience.ToFormattedString()} / {g.CalculateMaxExperience(g.Experience).ToFormattedString()}]", expBarString);
                }

                embed.AddInlineField(
                    e.Locale.GetString("miki_terms_rank"),
                    "#" + ((rank <= 10) ? $"**{rank.ToFormattedString()}**" : rank.ToFormattedString())
                    ).AddInlineField(
                    e.Locale.GetString("miki_module_general_guildinfo_users"),
                    g.UserCount.ToString()
                    );

                GuildUser rival = await g.GetRivalOrDefaultAsync(context);

                if (rival != null)
                {
                    embed.AddInlineField(e.Locale.GetString("miki_terms_rival"), $"{rival.Name} [{rival.Experience.ToFormattedString()}]");
                }

                embed.ToEmbed().QueueToChannel(e.Channel);
            }
        }
Ejemplo n.º 2
0
        public async Task GuildProfile(EventContext context)
        {
            using (MikiContext database = new MikiContext())
            {
                GuildUser g = await database.GuildUsers.FindAsync(context.Guild.Id.ToDbLong());

                if (g == null)
                {
                    await GuildUser.Create(context.Guild);

                    g = await database.GuildUsers.FindAsync(context.Guild.Id.ToDbLong());
                }

                int rank  = g.GetGlobalRank();
                int level = g.CalculateLevel(g.Experience);

                EmojiBarSet onBarSet  = new EmojiBarSet("<:mbaronright:334479818924228608>", "<:mbaronmid:334479818848468992>", "<:mbaronleft:334479819003789312>");
                EmojiBarSet offBarSet = new EmojiBarSet("<:mbaroffright:334479818714513430>", "<:mbaroffmid:334479818504536066>", "<:mbaroffleft:334479818949394442>");

                EmojiBar expBar = new EmojiBar(g.CalculateMaxExperience(g.Experience), onBarSet, offBarSet, 6);

                IDiscordEmbed embed = Utils.Embed
                                      .SetAuthor(g.Name, context.Guild.AvatarUrl, "https://miki.veld.one")
                                      .SetColor(0.1f, 0.6f, 1)
                                      .SetThumbnailUrl("http://veld.one/assets/img/transparentfuckingimage.png")
                                      .AddInlineField(context.GetResource("miki_terms_level"), level.ToString());

                string expBarString = await expBar.Print(g.Experience, context.Channel);

                if (string.IsNullOrWhiteSpace(expBarString))
                {
                    embed.AddInlineField(context.GetResource("miki_terms_experience"), "[" + g.Experience + " / " + g.CalculateMaxExperience(g.Experience) + "]");
                }
                else
                {
                    embed.AddInlineField(context.GetResource("miki_terms_experience") + $" [{g.Experience} / {g.CalculateMaxExperience(g.Experience)}]", expBarString);
                }

                embed.AddInlineField(context.GetResource("miki_terms_rank"), "#" + ((rank <= 10) ? $"**{rank}**" : rank.ToString()))
                .AddInlineField(context.GetResource("miki_module_general_guildinfo_users"), g.UserCount.ToString());

                if (g.RivalId != 0)
                {
                    GuildUser rival = await g.GetRival();

                    embed.AddInlineField(context.GetResource("miki_terms_rival"), $"{rival.Name} [{rival.Experience}]");
                }

                await embed.SendToChannel(context.Channel);
            }
        }
Ejemplo n.º 3
0
        public async Task GuildProfile(IContext e)
        {
            var context = e.GetService <MikiDbContext>();

            var       locale = e.GetLocale();
            GuildUser g      = await context.GuildUsers.FindAsync(e.GetGuild().Id.ToDbLong());

            int rank = await g.GetGlobalRankAsync(context);

            int level = g.CalculateLevel(g.Experience);

            EmojiBarSet onBarSet  = new EmojiBarSet("<:mbarlefton:391971424442646534>", "<:mbarmidon:391971424920797185>", "<:mbarrighton:391971424488783875>");
            EmojiBarSet offBarSet = new EmojiBarSet("<:mbarleftoff:391971424824459265>", "<:mbarmidoff:391971424824197123>", "<:mbarrightoff:391971424862208000>");

            EmojiBar expBar = new EmojiBar(g.CalculateMaxExperience(g.Experience), onBarSet, offBarSet, 6);

            EmbedBuilder embed = new EmbedBuilder()
                                 .SetAuthor(g.Name, e.GetGuild().IconUrl, "https://miki.veld.one")
                                 .SetColor(0.1f, 0.6f, 1)
                                 .AddInlineField(locale.GetString("miki_terms_level"), level.ToString("N0"));

            if ((e.GetGuild().IconUrl ?? "") != "")
            {
                embed.SetThumbnail("http://veld.one/assets/img/transparentfuckingimage.png");
            }

            string expBarString = expBar.Print(g.Experience);

            embed.AddInlineField(e.GetLocale().GetString("miki_terms_experience"),
                                 $"[{g.Experience:N0} / {g.CalculateMaxExperience(g.Experience):N0}]\n"
                                 + (expBarString ?? ""));

            embed.AddInlineField(
                e.GetLocale().GetString("miki_terms_rank"),
                "#" + (rank <= 10 ? $"**{rank:N0}**" : rank.ToString("N0"))
                ).AddInlineField(
                e.GetLocale().GetString("miki_module_general_guildinfo_users"),
                g.UserCount.ToString()
                );

            GuildUser rival = await g.GetRivalOrDefaultAsync(context);

            if (rival != null)
            {
                embed.AddInlineField(e.GetLocale().GetString("miki_terms_rival"), $"{rival.Name} [{rival.Experience:N0}]");
            }

            await embed.ToEmbed()
            .QueueAsync(e, e.GetChannel());
        }
Ejemplo n.º 4
0
        public async Task GuildProfile(EventContext e)
        {
            using (MikiContext context = new MikiContext())
            {
                GuildUser g = await GuildUser.GetAsync(context, e.Guild);

                int rank  = g.GetGlobalRank();
                int level = g.CalculateLevel(g.Experience);

                EmojiBarSet onBarSet  = new EmojiBarSet("<:mbarlefton:391971424442646534>", "<:mbarmidon:391971424920797185>", "<:mbarrighton:391971424488783875>");
                EmojiBarSet offBarSet = new EmojiBarSet("<:mbarleftoff:391971424824459265>", "<:mbarmidoff:391971424824197123>", "<:mbarrightoff:391971424862208000>");

                EmojiBar expBar = new EmojiBar(g.CalculateMaxExperience(g.Experience), onBarSet, offBarSet, 6);

                IDiscordEmbed embed = Utils.Embed
                                      .SetAuthor(g.Name, e.Guild.AvatarUrl, "https://miki.veld.one")
                                      .SetColor(0.1f, 0.6f, 1)
                                      .SetThumbnailUrl("http://veld.one/assets/img/transparentfuckingimage.png")
                                      .AddInlineField(e.GetResource("miki_terms_level"), level.ToString());

                string expBarString = await expBar.Print(g.Experience, e.Channel);

                if (string.IsNullOrWhiteSpace(expBarString))
                {
                    embed.AddInlineField(e.GetResource("miki_terms_experience"), "[" + g.Experience + " / " + g.CalculateMaxExperience(g.Experience) + "]");
                }
                else
                {
                    embed.AddInlineField(e.GetResource("miki_terms_experience") + $" [{g.Experience} / {g.CalculateMaxExperience(g.Experience)}]", expBarString);
                }

                embed.AddInlineField(e.GetResource("miki_terms_rank"), "#" + ((rank <= 10) ? $"**{rank}**" : rank.ToString()))
                .AddInlineField(e.GetResource("miki_module_general_guildinfo_users"), g.UserCount.ToString());

                if (g.RivalId != 0)
                {
                    GuildUser rival = await g.GetRival();

                    embed.AddInlineField(e.GetResource("miki_terms_rival"), $"{rival.Name} [{rival.Experience}]");
                }

                await embed.QueueToChannel(e.Channel);
            }
        }
Ejemplo n.º 5
0
        public async Task ProfileAsync(EventContext e)
        {
            Stopwatch sw = new Stopwatch();

            sw.Start();

            using (var context = new MikiContext())
            {
                long  id  = 0;
                ulong uid = 0;

                var arg = e.Arguments.FirstOrDefault();

                if (arg != null)
                {
                    uid = (await arg.GetUserAsync(e.Guild)).Id;
                    id  = uid.ToDbLong();
                }
                else
                {
                    uid = e.message.Author.Id;
                    id  = uid.ToDbLong();
                }

                IDiscordGuildUser discordUser = await e.Guild.GetUserAsync(uid);

                User account = await User.GetAsync(context, discordUser);

                string icon = "";

                if (await account.IsDonatorAsync(context))
                {
                    icon = "https://cdn.discordapp.com/emojis/421969679561785354.png";
                }

                if (account != null)
                {
                    EmbedBuilder embed = Utils.Embed
                                         .SetDescription(account.Title)
                                         .SetAuthor(e.GetResource("miki_global_profile_user_header", account.Name), icon, "https://patreon.com/mikibot")
                                         .SetThumbnail(discordUser.GetAvatarUrl());

                    long serverid = e.Guild.Id.ToDbLong();

                    LocalExperience localExp = await LocalExperience.GetAsync(context, e.Guild.Id.ToDbLong(), discordUser);

                    if (localExp == null)
                    {
                        localExp = await LocalExperience.CreateAsync(context, serverid, discordUser);
                    }

                    int rank = await localExp.GetRank(context);

                    int localLevel  = User.CalculateLevel(localExp.Experience);
                    int maxLocalExp = User.CalculateLevelExperience(localLevel);
                    int minLocalExp = User.CalculateLevelExperience(localLevel - 1);

                    EmojiBar expBar = new EmojiBar(maxLocalExp - minLocalExp, onBarSet, offBarSet, 6);

                    string infoValue = new MessageBuilder()
                                       .AppendText(e.GetResource("miki_module_accounts_information_level", localLevel, localExp.Experience, maxLocalExp))
                                       .AppendText(await expBar.Print(localExp.Experience - minLocalExp, (IDiscordGuildChannel)e.Channel))
                                       .AppendText(e.GetResource("miki_module_accounts_information_rank", rank))
                                       .AppendText("Reputation: " + account.Reputation, MessageFormatting.Plain, false)
                                       .Build();

                    embed.AddInlineField(e.GetResource("miki_generic_information"), infoValue);

                    int globalLevel  = User.CalculateLevel(account.Total_Experience);
                    int maxGlobalExp = User.CalculateLevelExperience(globalLevel);
                    int minGlobalExp = User.CalculateLevelExperience(globalLevel - 1);

                    int globalRank = await account.GetGlobalRankAsync();

                    EmojiBar globalExpBar = new EmojiBar(maxGlobalExp - minGlobalExp, onBarSet, offBarSet, 6);

                    string globalInfoValue = new MessageBuilder()
                                             .AppendText(e.GetResource("miki_module_accounts_information_level", globalLevel, account.Total_Experience, maxGlobalExp))
                                             .AppendText(
                        await globalExpBar.Print(account.Total_Experience - minGlobalExp, e.Channel as IDiscordGuildChannel)
                        )
                                             .AppendText(e.GetResource("miki_module_accounts_information_rank", globalRank), MessageFormatting.Plain, false)
                                             .Build();

                    embed.AddInlineField(e.GetResource("miki_generic_global_information"), globalInfoValue);
                    embed.AddInlineField(e.GetResource("miki_generic_mekos"), account.Currency + "<:mekos:421972155484471296>");

                    List <UserMarriedTo> Marriages = await Marriage.GetMarriagesAsync(context, id);

                    Marriages.RemoveAll(x => x.Marriage.IsProposing);

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

                    int maxCount = Marriages?.Count ?? 0;

                    for (int i = 0; i < maxCount; i++)
                    {
                        users.Add(await User.GetNameAsync(context, Marriages[i].GetOther(id)));
                    }

                    if (Marriages?.Count > 0)
                    {
                        List <string> MarriageStrings = new List <string>();

                        for (int i = 0; i < maxCount; i++)
                        {
                            if (Marriages[i].GetOther(id) != 0)
                            {
                                MarriageStrings.Add($"💕 {users[i]} (_{Marriages[i].Marriage.TimeOfMarriage.ToShortDateString()}_)");
                            }
                        }

                        string marriageText = string.Join("\n", MarriageStrings);
                        if (string.IsNullOrEmpty(marriageText))
                        {
                            marriageText = e.GetResource("miki_placeholder_null");
                        }

                        embed.AddInlineField(
                            e.GetResource("miki_module_accounts_profile_marriedto"),
                            marriageText);
                    }

                    Random r = new Random((int)id - 3);
                    Color  c = new Color((float)r.NextDouble(), (float)r.NextDouble(), (float)r.NextDouble());

                    embed.SetColor(c);

                    CommandUsage favouriteCommand = await context.CommandUsages
                                                    .OrderByDescending(x => x.Amount)
                                                    .FirstOrDefaultAsync(x => x.UserId == id);

                    string favCommand = $"{favouriteCommand?.Name ?? e.GetResource("miki_placeholder_null")} ({ favouriteCommand?.Amount ?? 0 })";

                    embed.AddInlineField(e.GetResource("miki_module_accounts_profile_favourite_command"),
                                         favCommand);

                    List <Achievement> allAchievements = await context.Achievements.Where(x => x.Id == id).ToListAsync();

                    string achievements = e.GetResource("miki_placeholder_null");

                    if (allAchievements != null)
                    {
                        if (allAchievements.Count > 0)
                        {
                            achievements = AchievementManager.Instance.PrintAchievements(allAchievements);
                        }
                    }

                    embed.AddInlineField(
                        e.GetResource("miki_generic_achievements"),
                        achievements);

                    embed.SetFooter(
                        e.GetResource("miki_module_accounts_profile_footer", account.DateCreated.ToShortDateString(),
                                      sw.ElapsedMilliseconds), "");

                    sw.Stop();

                    embed.ToEmbed().QueueToChannel(e.Channel);
                }
                else
                {
                    e.ErrorEmbed(e.GetResource("error_account_null"))
                    .ToEmbed().QueueToChannel(e.Channel);
                }
            }
        }
Ejemplo n.º 6
0
            public async Task ProfileAsync(IContext e)
            {
                var args   = e.GetArgumentPack();
                var locale = e.GetLocale();

                var context             = e.GetService <MikiDbContext>();
                var userService         = e.GetService <IUserService>();
                var leaderboardsService = e.GetService <LeaderboardsService>();

                var guild = e.GetGuild();
                IDiscordGuildUser self = null;

                if (guild != null)
                {
                    self = await guild.GetSelfAsync();
                }

                var discordUser = args.Take(out string arg)
                    ? await e.GetGuild().FindUserAsync(arg)
                    : e.GetAuthor();

                var account = await userService.GetOrCreateUserAsync(discordUser);

                var embed = new EmbedBuilder()
                            .SetDescription(account.Title)
                            .SetAuthor(
                    locale.GetString("miki_global_profile_user_header", discordUser.Username),
                    await GetProfileIconAsync(userService, (long)discordUser.Id),
                    "https://patreon.com/mikibot")
                            .SetThumbnail(discordUser.GetAvatarUrl());

                var infoValueBuilder = new MessageBuilder();

                if (e.GetGuild() != null)
                {
                    var localExp = await LocalExperience.GetAsync(
                        context,
                        e.GetGuild().Id,
                        discordUser.Id);

                    if (localExp == null)
                    {
                        localExp = await LocalExperience.CreateAsync(
                            context,
                            e.GetGuild().Id,
                            discordUser.Id,
                            discordUser.Username);
                    }

                    var rank = await leaderboardsService.GetLocalRankAsync(
                        (long)e.GetGuild().Id, x => x.Experience > localExp.Experience);

                    var localLevel  = User.CalculateLevel(localExp.Experience);
                    var maxLocalExp = User.CalculateLevelExperience(localLevel);
                    var minLocalExp = User.CalculateLevelExperience(localLevel - 1);

                    var expBar = new EmojiBar(maxLocalExp - minLocalExp, onBarSet, offBarSet, 6);
                    infoValueBuilder.AppendText(e.GetLocale().GetString(
                                                    "miki_module_accounts_information_level",
                                                    localLevel,
                                                    localExp.Experience.ToString("N0"),
                                                    maxLocalExp.ToString("N0")));

                    if (self == null ||
                        await self.HasPermissionsAsync(GuildPermission.UseExternalEmojis))
                    {
                        infoValueBuilder.AppendText(
                            expBar.Print(localExp.Experience - minLocalExp));
                    }

                    infoValueBuilder.AppendText(locale.GetString(
                                                    "miki_module_accounts_information_rank",
                                                    rank.ToString("N0")));
                }

                infoValueBuilder.AppendText(
                    $"Reputation: {account.Reputation:N0}",
                    newLine: false);

                embed.AddInlineField(locale.GetString("miki_generic_information"),
                                     infoValueBuilder.Build());

                var globalLevel  = User.CalculateLevel(account.Total_Experience);
                var maxGlobalExp = User.CalculateLevelExperience(globalLevel);
                var minGlobalExp = User.CalculateLevelExperience(globalLevel - 1);

                var globalRank = await leaderboardsService.GetGlobalRankAsync((long)discordUser.Id);

                var globalExpBar = new EmojiBar(
                    maxGlobalExp - minGlobalExp, onBarSet, offBarSet, 6);

                var globalInfoBuilder = new MessageBuilder()
                                        .AppendText(locale.GetString(
                                                        "miki_module_accounts_information_level",
                                                        globalLevel.ToString("N0"),
                                                        account.Total_Experience.ToString("N0"),
                                                        maxGlobalExp.ToString("N0")));

                if (self == null || await self.HasPermissionsAsync(GuildPermission.UseExternalEmojis))
                {
                    globalInfoBuilder.AppendText(
                        globalExpBar.Print(maxGlobalExp - minGlobalExp));
                }

                var globalInfo = globalInfoBuilder
                                 .AppendText(
                    locale.GetString(
                        "miki_module_accounts_information_rank",
                        globalRank?.ToString("N0") ?? "We haven't calculated your rank yet!"),
                    MessageFormatting.Plain,
                    false)
                                 .Build();

                embed.AddInlineField(
                    locale.GetString("miki_generic_global_information"),
                    globalInfo);

                embed.AddInlineField(
                    locale.GetString("miki_generic_mekos"),
                    $"{account.Currency:N0} {AppProps.Emoji.Mekos}");

                var repository = e.GetService <MarriageService>();
                var marriages  =
                    (await repository.GetMarriagesAsync((long)discordUser.Id))
                    .Where(x => !x.Marriage.IsProposing)
                    .ToList();

                var users = new List <string>();

                var maxCount = marriages.Count;

                for (var i = 0; i < maxCount; i++)
                {
                    users.Add((await e.GetService <IDiscordClient>()
                               .GetUserAsync(marriages[i].GetOther(discordUser.Id))).Username);
                }

                if (marriages.Count > 0)
                {
                    List <string> marriageStrings = new List <string>();

                    for (int i = 0; i < maxCount; i++)
                    {
                        if (marriages[i].GetOther((long)discordUser.Id) == 0)
                        {
                            continue;
                        }

                        marriageStrings.Add(
                            $"💕 {users[i]} (_{marriages[i].Marriage.TimeOfMarriage.ToShortDateString()}_)");
                    }

                    string marriageText = string.Join("\n", marriageStrings);
                    if (string.IsNullOrEmpty(marriageText))
                    {
                        marriageText = locale.GetString("miki_placeholder_null");
                    }

                    embed.AddInlineField(
                        locale.GetString("miki_module_accounts_profile_marriedto"),
                        marriageText);
                }

                var random = new Random((int)(discordUser.Id - 3));

                embed.SetColor(
                    (float)random.NextDouble(),
                    (float)random.NextDouble(),
                    (float)random.NextDouble());

                List <Achievement> allAchievements = await context.Achievements
                                                     .Where(x => x.UserId == (long)discordUser.Id)
                                                     .ToListAsync();

                var achievementService = e.GetService <AchievementService>();
                var achievements       = allAchievements?.Any() ?? false
                    ? achievementService.PrintAchievements(allAchievements)
                    : locale.GetString("miki_placeholder_null");

                embed.AddInlineField(
                    locale.GetString("miki_generic_achievements"), achievements);

                await embed.ToEmbed()
                .QueueAsync(e, e.GetChannel());
            }
Ejemplo n.º 7
0
        public async Task ProfileAsync(EventContext e)
        {
            Stopwatch sw = new Stopwatch();

            sw.Start();

            using (var context = new MikiContext())
            {
                long  id  = 0;
                ulong uid = 0;

                if (e.message.MentionedUserIds.Count() > 0)
                {
                    uid = e.message.MentionedUserIds.First();
                    id  = uid.ToDbLong();
                }
                else
                {
                    uid = e.message.Author.Id;
                    id  = uid.ToDbLong();
                }

                User account = await context.Users.FindAsync(id);

                Locale       locale      = Locale.GetEntity(e.Channel.Id.ToDbLong());
                IDiscordUser discordUser = await e.Guild.GetUserAsync(uid);

                if (account != null)
                {
                    IDiscordEmbed embed = Utils.Embed
                                          .SetDescription(account.Title)
                                          .SetAuthor(locale.GetString("miki_global_profile_user_header", account.Name), "http://veld.one/assets/profile-icon.png", "https://patreon.com/mikibot")
                                          .SetThumbnailUrl(discordUser.AvatarUrl);

                    long serverid = e.Guild.Id.ToDbLong();

                    LocalExperience localExp = await context.Experience.FindAsync(serverid, id);

                    int globalExp = account.Total_Experience;

                    int rank = await account.GetLocalRank(e.Guild.Id);

                    EmojiBarSet onBarSet  = new EmojiBarSet("<:mbaronright:334479818924228608>", "<:mbaronmid:334479818848468992>", "<:mbaronleft:334479819003789312>");
                    EmojiBarSet offBarSet = new EmojiBarSet("<:mbaroffright:334479818714513430>", "<:mbaroffmid:334479818504536066>", "<:mbaroffleft:334479818949394442>");

                    EmojiBar expBar = new EmojiBar(account.CalculateMaxExperience(localExp.Experience), onBarSet, offBarSet, 6);

                    string infoValue = new MessageBuilder()
                                       .AppendText(locale.GetString("miki_module_accounts_information_level", account.CalculateLevel(localExp.Experience), localExp.Experience, account.CalculateMaxExperience(localExp.Experience)))
                                       .AppendText(await expBar.Print(localExp.Experience, e.Channel))
                                       .AppendText(locale.GetString("miki_module_accounts_information_rank", rank))
                                       .AppendText("Reputation: " + account.Reputation, MessageFormatting.PLAIN, false)
                                       .Build();

                    embed.AddInlineField(locale.GetString("miki_generic_information"), infoValue);

                    int globalLevel = account.CalculateLevel(account.Total_Experience);
                    int globalRank  = account.CalculateMaxExperience(account.Total_Experience);

                    EmojiBar globalExpBar = new EmojiBar(account.CalculateMaxExperience(account.Total_Experience), onBarSet, offBarSet, 6);

                    string globalInfoValue = new MessageBuilder()
                                             .AppendText(locale.GetString("miki_module_accounts_information_level", globalLevel, account.Total_Experience, globalRank))
                                             .AppendText(await globalExpBar.Print(account.Total_Experience, e.Channel))
                                             .AppendText(locale.GetString("miki_module_accounts_information_rank", account.GetGlobalRank()), MessageFormatting.PLAIN, false)
                                             .Build();

                    embed.AddInlineField(locale.GetString("miki_generic_global_information"), globalInfoValue);

                    embed.AddInlineField(locale.GetString("miki_generic_mekos"), account.Currency + "🔸");

                    List <Marriage> marriages = Marriage.GetMarriages(context, id);

                    marriages = marriages.OrderBy(mar => mar.TimeOfMarriage).ToList();

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

                    int maxCount = marriages.Count;

                    for (int i = 0; i < maxCount; i++)
                    {
                        users.Add(await context.Users.FindAsync(marriages[i].GetOther(id)));
                    }

                    if (marriages.Count > 0)
                    {
                        List <string> marriageStrings = new List <string>();

                        for (int i = 0; i < maxCount; i++)
                        {
                            if (marriages[i].GetOther(id) != 0 && marriages[i].TimeOfMarriage != null)
                            {
                                marriageStrings.Add("💕 " + users[i].Name + " (_" + marriages[i].TimeOfMarriage.ToShortDateString() + "_)");
                            }
                        }

                        embed.AddInlineField(
                            locale.GetString("miki_module_accounts_profile_marriedto"),
                            string.Join("\n", marriageStrings));
                    }

                    Random r = new Random((int)id - 3);

                    embed.Color = new IA.SDK.Color((float)r.NextDouble(), (float)r.NextDouble(), (float)r.NextDouble());

                    List <CommandUsage> List = context.CommandUsages.Where(c => c.UserId == id).OrderByDescending(c => c.Amount).ToList();
                    string favCommand        = (List.Count > 0) ? List[0].Name + " (" + List[0].Amount + ")" : "none (yet!)";

                    embed.AddInlineField(locale.GetString("miki_module_accounts_profile_favourite_command"), favCommand);

                    string achievements = AchievementManager.Instance.PrintAchievements(context, account.Id.FromDbLong());

                    embed.AddInlineField(
                        locale.GetString("miki_generic_achievements"),
                        achievements != "" ? achievements : locale.GetString("miki_placeholder_null"));

                    embed.AddInlineField(locale.GetString("miki_module_accounts_profile_url"), "http://miki.veld.one/profile/" + account.Id);

                    embed.SetFooter(locale.GetString("miki_module_accounts_profile_footer", account.DateCreated.ToShortDateString(), sw.ElapsedMilliseconds), "");

                    sw.Stop();

                    await embed.SendToChannel(e.Channel);
                }
                else
                {
                    await Utils.ErrorEmbed(locale, locale.GetString("miki_module_accounts_error_null")).SendToChannel(e.Channel);
                }
            }
        }
Ejemplo n.º 8
0
        public async Task ProfileAsync(CommandContext e)
        {
            Stopwatch sw = new Stopwatch();

            sw.Start();

            var   context = e.GetService <MikiDbContext>();
            long  id      = 0;
            ulong uid     = 0;

            IDiscordGuildUser discordUser = null;

            MarriageRepository repository = new MarriageRepository(context);

            if (e.Arguments.Take(out string arg))
            {
                discordUser = await DiscordExtensions.GetUserAsync(arg, e.Guild);

                if (discordUser == null)
                {
                    throw new UserNullException();
                }

                uid = discordUser.Id;
                id  = uid.ToDbLong();
            }
            else
            {
                uid         = e.Message.Author.Id;
                discordUser = await e.Guild.GetMemberAsync(uid);

                id = uid.ToDbLong();
            }

            User account = await User.GetAsync(context, discordUser.Id.ToDbLong(), discordUser.Username);

            string icon = "";

            if (await account.IsDonatorAsync(context))
            {
                icon = "https://cdn.discordapp.com/emojis/421969679561785354.png";
            }

            if (account != null)
            {
                EmbedBuilder embed = new EmbedBuilder()
                                     .SetDescription(account.Title)
                                     .SetAuthor(e.Locale.GetString("miki_global_profile_user_header", discordUser.Username), icon, "https://patreon.com/mikibot")
                                     .SetThumbnail(discordUser.GetAvatarUrl());

                long serverid = e.Guild.Id.ToDbLong();

                LocalExperience localExp = await LocalExperience.GetAsync(context, e.Guild.Id.ToDbLong(), (long)discordUser.Id, discordUser.Username);

                int rank = await localExp.GetRankAsync(context);

                int localLevel  = User.CalculateLevel(localExp.Experience);
                int maxLocalExp = User.CalculateLevelExperience(localLevel);
                int minLocalExp = User.CalculateLevelExperience(localLevel - 1);

                EmojiBar expBar = new EmojiBar(maxLocalExp - minLocalExp, onBarSet, offBarSet, 6);

                string infoValue = new MessageBuilder()
                                   .AppendText(e.Locale.GetString("miki_module_accounts_information_level", localLevel, localExp.Experience.ToFormattedString(), maxLocalExp.ToFormattedString()))
                                   .AppendText(await expBar.Print(localExp.Experience - minLocalExp, e.Guild, (IDiscordGuildChannel)e.Channel))
                                   .AppendText(e.Locale.GetString("miki_module_accounts_information_rank", rank.ToFormattedString()))
                                   .AppendText("Reputation: " + account.Reputation.ToFormattedString(), MessageFormatting.Plain, false)
                                   .Build();

                embed.AddInlineField(e.Locale.GetString("miki_generic_information"), infoValue);

                int globalLevel  = User.CalculateLevel(account.Total_Experience);
                int maxGlobalExp = User.CalculateLevelExperience(globalLevel);
                int minGlobalExp = User.CalculateLevelExperience(globalLevel - 1);

                int?globalRank = await account.GetGlobalRankAsync(context);

                EmojiBar globalExpBar = new EmojiBar(maxGlobalExp - minGlobalExp, onBarSet, offBarSet, 6);

                string globalInfoValue = new MessageBuilder()
                                         .AppendText(e.Locale.GetString("miki_module_accounts_information_level", globalLevel.ToFormattedString(), account.Total_Experience.ToFormattedString(), maxGlobalExp.ToFormattedString()))
                                         .AppendText(
                    await globalExpBar.Print(account.Total_Experience - minGlobalExp, e.Guild, e.Channel as IDiscordGuildChannel)
                    )
                                         .AppendText(e.Locale.GetString("miki_module_accounts_information_rank", globalRank?.ToFormattedString() ?? "We haven't calculated your rank yet!"), MessageFormatting.Plain, false)
                                         .Build();

                embed.AddInlineField(e.Locale.GetString("miki_generic_global_information"), globalInfoValue);
                embed.AddInlineField(e.Locale.GetString("miki_generic_mekos"), account.Currency.ToFormattedString() + "<:mekos:421972155484471296>");

                List <UserMarriedTo> Marriages = await repository.GetMarriagesAsync(id);

                Marriages.RemoveAll(x => x.Marriage.IsProposing);

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

                int maxCount = Marriages?.Count ?? 0;

                for (int i = 0; i < maxCount; i++)
                {
                    users.Add((await MikiApp.Instance.Discord.GetUserAsync(Marriages[i].GetOther(id).FromDbLong())).Username);
                }

                if (Marriages?.Count > 0)
                {
                    List <string> MarriageStrings = new List <string>();

                    for (int i = 0; i < maxCount; i++)
                    {
                        if (Marriages[i].GetOther(id) != 0)
                        {
                            MarriageStrings.Add($"💕 {users[i]} (_{Marriages[i].Marriage.TimeOfMarriage.ToShortDateString()}_)");
                        }
                    }

                    string marriageText = string.Join("\n", MarriageStrings);
                    if (string.IsNullOrEmpty(marriageText))
                    {
                        marriageText = e.Locale.GetString("miki_placeholder_null");
                    }

                    embed.AddInlineField(
                        e.Locale.GetString("miki_module_accounts_profile_marriedto"),
                        marriageText);
                }

                Random r = new Random((int)id - 3);
                Color  c = new Color((float)r.NextDouble(), (float)r.NextDouble(), (float)r.NextDouble());

                embed.SetColor(c);

                List <Achievement> allAchievements = await context.Achievements.Where(x => x.UserId == id)
                                                     .ToListAsync();

                string achievements = e.Locale.GetString("miki_placeholder_null");

                if (allAchievements != null)
                {
                    if (allAchievements.Count > 0)
                    {
                        achievements = AchievementManager.Instance.PrintAchievements(allAchievements);
                    }
                }

                embed.AddInlineField(
                    e.Locale.GetString("miki_generic_achievements"),
                    achievements);

                embed.SetFooter(
                    e.Locale.GetString(
                        "miki_module_accounts_profile_footer",
                        account.DateCreated.ToShortDateString(),
                        sw.ElapsedMilliseconds),
                    "");

                sw.Stop();

                await embed.ToEmbed().QueueToChannelAsync(e.Channel);
            }
            else
            {
                await e.ErrorEmbed(e.Locale.GetString("error_account_null"))
                .ToEmbed().QueueToChannelAsync(e.Channel);
            }
        }
Ejemplo n.º 9
0
        public async Task ProfileAsync(EventContext e)
        {
            Stopwatch sw = new Stopwatch();

            sw.Start();

            using (var context = new MikiContext())
            {
                long  id  = 0;
                ulong uid = 0;

                if (e.message.MentionedUserIds.Any())
                {
                    uid = e.message.MentionedUserIds.First();
                    id  = uid.ToDbLong();
                }
                else
                {
                    uid = e.message.Author.Id;
                    id  = uid.ToDbLong();
                }

                Locale       locale      = new Locale(e.Channel.Id.ToDbLong());
                IDiscordUser discordUser = await e.Guild.GetUserAsync(uid);

                User account = await User.GetAsync(context, discordUser);

                EmojiBarSet onBarSet = new EmojiBarSet(
                    "<:mbarlefton:391971424442646534>",
                    "<:mbarmidon:391971424920797185>",
                    "<:mbarrighton:391971424488783875>");

                EmojiBarSet offBarSet = new EmojiBarSet(
                    "<:mbarleftoff:391971424824459265>",
                    "<:mbarmidoff:391971424824197123>",
                    "<:mbarrightoff:391971424862208000>");

                if (account != null)
                {
                    IDiscordEmbed embed = Utils.Embed
                                          .SetDescription(account.Title)
                                          .SetAuthor(locale.GetString("miki_global_profile_user_header", account.Name), "", "https://patreon.com/mikibot")
                                          .SetThumbnailUrl(discordUser.AvatarUrl);

                    long serverid = e.Guild.Id.ToDbLong();

                    LocalExperience localExp = account.LocalExperience.FirstOrDefault(x => x.ServerId == e.Guild.Id.ToDbLong());
                    if (localExp == null)
                    {
                        localExp = await LocalExperience.CreateAsync(context, serverid, id);
                    }

                    int rank = await localExp.GetRank(context);

                    int      localLevel  = User.CalculateLevel(localExp.Experience);
                    int      maxLocalExp = User.CalculateLevelExperience(localLevel);
                    int      minLocalExp = User.CalculateLevelExperience(localLevel - 1);
                    EmojiBar expBar      = new EmojiBar(maxLocalExp - minLocalExp, onBarSet, offBarSet, 6);

                    string infoValue = new MessageBuilder()
                                       .AppendText(locale.GetString("miki_module_accounts_information_level", localLevel, localExp.Experience, maxLocalExp))
                                       .AppendText(await expBar.Print(localExp.Experience - minLocalExp, e.Channel))
                                       .AppendText(locale.GetString("miki_module_accounts_information_rank", rank))
                                       .AppendText("Reputation: " + account.Reputation, MessageFormatting.Plain, false)
                                       .Build();
                    embed.AddInlineField(locale.GetString("miki_generic_information"), infoValue);

                    int globalLevel  = User.CalculateLevel(account.Total_Experience);
                    int maxGlobalExp = User.CalculateLevelExperience(globalLevel);
                    int minGlobalExp = User.CalculateLevelExperience(globalLevel - 1);

                    int globalRank = await account.GetGlobalRankAsync();

                    EmojiBar globalExpBar = new EmojiBar(maxGlobalExp - minGlobalExp, onBarSet, offBarSet, 6);

                    string globalInfoValue = new MessageBuilder()
                                             .AppendText(locale.GetString("miki_module_accounts_information_level", globalLevel, account.Total_Experience, maxGlobalExp))
                                             .AppendText(await globalExpBar.Print(account.Total_Experience - minGlobalExp, e.Channel))
                                             .AppendText(locale.GetString("miki_module_accounts_information_rank", globalRank), MessageFormatting.Plain, false)
                                             .Build();

                    embed.AddInlineField(locale.GetString("miki_generic_global_information"), globalInfoValue);
                    embed.AddInlineField(locale.GetString("miki_generic_mekos"), account.Currency + "🔸");

                    List <Marriage> Marriages = account.Marriages?
                                                .Select(x => x.Marriage)
                                                .Where(x => !x.IsProposing)
                                                .OrderBy(mar => mar.TimeOfMarriage)
                                                .ToList();

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

                    int maxCount = Marriages?.Count ?? 0;

                    for (int i = 0; i < maxCount; i++)
                    {
                        users.Add(await context.Users.FindAsync(Marriages[i].GetOther(id)));
                    }

                    if (Marriages?.Count > 0)
                    {
                        List <string> MarriageStrings = new List <string>();

                        for (int i = 0; i < maxCount; i++)
                        {
                            if (Marriages[i].GetOther(id) != 0)
                            {
                                MarriageStrings.Add($"💕 {users[i].Name} (_{Marriages[i].TimeOfMarriage.ToShortDateString()}_)");
                            }
                        }

                        embed.AddInlineField(
                            locale.GetString("miki_module_accounts_profile_marriedto"),
                            string.Join("\n", MarriageStrings));
                    }

                    Random r = new Random((int)id - 3);

                    embed.Color = new Miki.Common.Color((float)r.NextDouble(), (float)r.NextDouble(),
                                                        (float)r.NextDouble());

                    CommandUsage favouriteCommand = account.CommandsUsed?
                                                    .OrderByDescending(c => c.Amount)
                                                    .FirstOrDefault();

                    string favCommand = $"{favouriteCommand?.Name ?? locale.GetString("miki_placeholder_null")} ({ favouriteCommand?.Amount ?? 0 })";

                    embed.AddInlineField(locale.GetString("miki_module_accounts_profile_favourite_command"),
                                         favCommand);

                    if (account.Achievements != null)
                    {
                        string achievements = AchievementManager.Instance.PrintAchievements(account.Achievements);

                        embed.AddInlineField(
                            locale.GetString("miki_generic_achievements"),
                            achievements != "" ? achievements : locale.GetString("miki_placeholder_null"));
                    }

                    embed.SetFooter(
                        locale.GetString("miki_module_accounts_profile_footer", account.DateCreated.ToShortDateString(),
                                         sw.ElapsedMilliseconds), "");

                    sw.Stop();

                    embed.QueueToChannel(e.Channel);
                }
                else
                {
                    e.ErrorEmbed(locale.GetString("error_account_null"))
                    .QueueToChannel(e.Channel);
                }
            }
        }
Ejemplo n.º 10
0
 protected override void Initialize()
 {
     base.Initialize();
     emojiBar = GameManager.instance.CreateEmojiBar(this);
 }