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}"); } } }
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(); } }
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(); } }
public RankHistory(ILoggerFactory loggerFactory, ValorantApiService valorantApiService) : base(loggerFactory) { ValorantApiService = valorantApiService; }
public GetRanks(ILoggerFactory loggerFactory, ValorantApiService valorantApiService, PlotService plotService) : base(loggerFactory) { ValorantApiService = valorantApiService; PlotService = plotService; }
public LinkingCommands(ILoggerFactory loggerFactory, ValorantApiService valorantApiService, ExternalApiService externalApiService) : base(loggerFactory) { ValorantApiService = valorantApiService; ExternalApiService = externalApiService; }
public AdminCommands(ILoggerFactory loggerFactory, ValorantApiService valorantApiService) : base(loggerFactory) { ValorantApiService = valorantApiService; }