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}");
                }
            }
        }
Пример #2
0
        public async Task RankCommand(CommandContext ctx, DiscordUser discordUser = null)
        {
            LogCommandExecuted(ctx);
            discordUser ??= ctx.User;

            using (var db = new DatabaseDbContext())
            {
                var user = await db.DiscordUsers.Include(user => user.ValorantAccounts)
                           .FirstOrDefaultAsync(user => user.ID == discordUser.Id);

                if (user == null || user.ValorantAccounts.Count == 0)
                {
                    await ctx.Channel.SendMessageAsync("You have no connected accounts");

                    Logger.LogInformation($"User {discordUser.Username} has no ValorantAccounts connected");
                    return;
                }

                var embed = new DiscordEmbedBuilder().WithTitle($"List of {user.Name} accounts");
                foreach (var valorantAccount in user.ValorantAccounts.OrderByDescending(val => val.Rank)
                         .ThenByDescending(val => val.RankProgress))
                {
                    var playerRank = await ValorantApiService.GetPlayerRank(valorantAccount.Region.ToString(), valorantAccount.Subject);

                    valorantAccount.UpdateRank(playerRank);

                    var playerIDs = await ValorantApiService.GetPlayerIds(valorantAccount.Region.ToString(), valorantAccount.Subject);

                    if (playerIDs != null)
                    {
                        valorantAccount.DisplayName = $"{playerIDs.Name}#{playerIDs.Tag}";
                    }

                    var guildEmote = ctx.Guild.Emojis.FirstOrDefault(emote =>
                                                                     emote.Value.Name == valorantAccount.RankName.Replace(" ", ""));
                    embed.AddField("Name", valorantAccount.DisplayName, true);
                    embed.AddField("Rank", $"{guildEmote.Value}{valorantAccount.RankName}", true); //todo: add emoji
                    embed.AddField("Progress", $"{valorantAccount.RankProgress} / 100", true);


                    db.Update(valorantAccount);
                }

                await ctx.Channel.SendMessageAsync(embed : embed.Build());

                await db.SaveChangesAsync();
            }
        }
Пример #3
0
        public async Task RankCommand(CommandContext ctx, [RemainingText] string account)
        {
            LogCommandExecuted(ctx);

            using (var db = new DatabaseDbContext())
            {
                var acc = db.ValorantAccount.FirstOrDefault(acc => acc.DisplayName == account);

                if (acc == null)
                {
                    await ctx.Channel.SendMessageAsync($"Cannot find account {account}");

                    Logger.LogInformation($"Account {account} not found");
                    return;
                }

                var embed = new DiscordEmbedBuilder().WithTitle($"Rank of {account}");

                var playerRank = await ValorantApiService.GetPlayerRank(acc.Region.ToString(), acc.Subject);

                acc.UpdateRank(playerRank);

                var playerIDs = await ValorantApiService.GetPlayerIds(acc.Region.ToString(), acc.Subject);

                if (playerIDs != null)
                {
                    acc.DisplayName = $"{playerIDs.Name}#{playerIDs.Tag}";
                }

                var guildEmote = ctx.Guild.Emojis.FirstOrDefault(emote =>
                                                                 emote.Value.Name == acc.RankName.Replace(" ", ""));
                embed.AddField("Name", acc.DisplayName, true);
                embed.AddField("Rank", $"{guildEmote.Value}{acc.RankName}", true); //todo: add emoji
                embed.AddField("Progress", $"{acc.RankProgress} / 100", true);


                db.Update(acc);

                await ctx.Channel.SendMessageAsync(embed : embed.Build());

                await db.SaveChangesAsync();
            }
        }