private async Task LinkAccount(CommandContext ctx, DiscordUser discordUser, string subject)
        {
            using (var db = new DatabaseDbContext())
            {
                var guild      = db.GuildConfigs.FirstOrDefault(g => g.Guild == ctx.Guild.Id);
                var playerRank = await ValorantApiService.GetPlayerRank(guild.Region, subject);

                if (playerRank == null)
                {
                    await ctx.Channel.SendMessageAsync("Could not retrieve Player rank for selected id");

                    Logger.LogError($"Could not retrieve Player rank for {subject}");
                    return;
                }



                var playerIDs = await ValorantApiService.GetPlayerIds(guild.Region, subject);

                if (playerIDs == null)
                {
                    await ctx.Channel.SendMessageAsync("Could not retrieve Player IDs for selected id");

                    Logger.LogError($"Could not retrieve Player IDs for {subject}");
                    return;
                }

                var newValorantAccount = new ValorantAccount
                {
                    Subject      = subject,
                    Rank         = playerRank.RankInt,
                    RankName     = playerRank.RankString,
                    RankProgress = playerRank.Progress,
                    DisplayName  = $"{playerIDs.Name}#{playerIDs.Tag}"
                };

                var valorantDbService = new ValorantDbService();
                var accountLinked     = await valorantDbService.LinkAccountToDiscordUser(newValorantAccount, discordUser);

                await valorantDbService.AsignAccountToGuild(newValorantAccount, ctx.Guild.Id);

                var playerRankHistoty =
                    await ValorantApiService.GetPlayerRankHistory(guild.Region, newValorantAccount, DateTime.Today.AddDays(-50));

                await valorantDbService.AddLastAccountMatch(newValorantAccount, playerRankHistoty);

                if (accountLinked)
                {
                    await ctx.Channel.SendMessageAsync(
                        $"Account {newValorantAccount.DisplayName} ( {newValorantAccount.RankName} )  lined to user {discordUser.Username}");
                }
                else
                {
                    await ctx.Channel.SendMessageAsync(
                        $"Account {newValorantAccount.DisplayName} ( {newValorantAccount.RankName} ) already linked to user {discordUser.Username}");
                }
            }
        }
Exemplo n.º 2
0
 public async Task AddLastAccountMatch(ValorantAccount account, List <RankInfo> history)
 {
     using (var db = new DatabaseDbContext())
     {
         foreach (var rankInfo in history)
         {
             if (account.RankInfos.Any(info => info.DateTime == rankInfo.DateTime) == false)
             {
                 account.RankInfos.Add(rankInfo);
             }
         }
         db.Update(account);
         await db.SaveChangesAsync();
     }
 }
Exemplo n.º 3
0
 public async Task AsignAccountToGuild(ValorantAccount accountToAssign, ulong guildId)
 {
     using (var db = new DatabaseDbContext())
     {
         var guild = accountToAssign.RegisteredGuilds.FirstOrDefault(g => g.GuildID == guildId);
         if (guild == null)
         {
             accountToAssign.RegisteredGuilds.Add(new RegisteredGuild()
             {
                 GuildID         = guildId,
                 ValorantAccount = accountToAssign
             });
             db.Update(accountToAssign);
             await db.SaveChangesAsync();
         }
     }
 }
Exemplo n.º 4
0
        public Stream GetHistoryPlot(ValorantAccount account)
        {
            if (account.RankInfos.Count == 0)
            {
                return(null);
            }

            var plt = new Plot(600, 400);

            plt.Style(ColorTranslator.FromHtml("#111111"), ColorTranslator.FromHtml("#111111"),
                      ColorTranslator.FromHtml("#22F9F9F9"), ColorTranslator.FromHtml("#FF4654"),
                      ColorTranslator.FromHtml("#FF4654"), ColorTranslator.FromHtml("#F9F9F9"));


            var values = account.RankInfos.OrderBy(r => r.DateTime)
                         .Select(info => (double)info.RankInt * 100 + info.Progress).ToArray();
            var minValue = (double)((int)values.Min() / 100 - 1) * 100;
            var maxValue = (double)((int)values.Max() / 100 + 1) * 100;

            var dates = account.RankInfos.OrderBy(r => r.DateTime).Select(r => r.DateTime.ToOADate()).ToArray();

            plt.PlotScatter(dates, values, ColorTranslator.FromHtml("#FF4654"));
            plt.Legend();

            plt.Axis(y1: minValue, y2: maxValue);
            plt.Title(account.DisplayName);
            plt.XLabel("Date");
            plt.YLabel("Rank");

            var positions = _rank_map.Select((s, i) => (double)i * 100).ToArray();

            plt.YTicks(positions, _rank_map);
            plt.Ticks(dateTimeX: true);

            var stream = new MemoryStream();

            plt.GetBitmap().Save(stream, ImageFormat.Png);
            stream.Seek(0, SeekOrigin.Begin);
            return(stream);
        }
Exemplo n.º 5
0
        public async Task <bool> LinkAccountToDiscordUser(ValorantAccount accountToAdd, DiscordUser user)
        {
            bool result = true;

            using (var db = new DatabaseDbContext())
            {
                var dbUser = db.DiscordUsers.Include(u => u.ValorantAccounts).SingleOrDefault(u => u.ID == user.Id);
                if (dbUser == null)
                {
                    dbUser = new DbDiscordUser()
                    {
                        ID   = user.Id,
                        Name = user.Username
                    };
                    await db.DiscordUsers.AddAsync(dbUser);

                    await db.SaveChangesAsync();
                }

                var valorantAccount = dbUser.ValorantAccounts.FirstOrDefault(a => a.Subject == accountToAdd.Subject);
                if (valorantAccount == null)
                {
                    dbUser.ValorantAccounts.Add(accountToAdd);
                    db.Update(dbUser);
                }
                else
                {
                    accountToAdd.ID = valorantAccount.ID;
                    result          = false;
                    db.Update(accountToAdd);
                }

                await db.SaveChangesAsync();
            }
            return(result);
        }