private async Task <Embed> GetResistanceRank(CommandMessage message, int?characterIndex = null) { User user = await UserService.GetUser(message.Author); User.Character?defaultCharacter = user.GetDefaultCharacter(); if (defaultCharacter is null) { throw new UserException("No characters linked! Use `IAm` to link a character"); } int index = 0; if (characterIndex != null) { defaultCharacter = null; foreach (User.Character character in user.Characters) { index++; if (index == characterIndex) { defaultCharacter = character; } } if (defaultCharacter is null) { throw new UserException("I couldn't find a character at index: " + characterIndex); } } CharacterInfo info = await this.GetCharacterInfo(defaultCharacter.FFXIVCharacterId); return(await info.GetResistanceRankEmbed()); }
private async Task <Embed> RecordCharacter(User user, CharacterInfo character) { EmbedBuilder embed = new EmbedBuilder(); User.Character?userCharacter = user.GetCharacter(character.Id); if (userCharacter == null) { userCharacter = new User.Character { FFXIVCharacterId = character.Id, CharacterName = character.Name, ServerName = character.Server, IsVerified = false, }; user.Characters.Add(userCharacter); await UserService.SaveUser(user); } if (userCharacter.IsVerified) { userCharacter.CharacterName = character.Name; userCharacter.ServerName = character.Server; await UserService.SaveUser(user); embed.Description = "Character linked!"; return(embed.Build()); } else { if (userCharacter.FFXIVCharacterVerification == null) { userCharacter.FFXIVCharacterVerification = Guid.NewGuid().ToString(); await UserService.SaveUser(user); } if (character.Bio?.Contains(userCharacter.FFXIVCharacterVerification) == true) { userCharacter.FFXIVCharacterId = character.Id; userCharacter.CharacterName = character.Name; userCharacter.ServerName = character.Server; userCharacter.FFXIVCharacterVerification = null; userCharacter.IsVerified = true; await UserService.SaveUser(user); embed.Description = "Character linked! (You can now remove the Verification Id from your Character Profile)"; return(embed.Build()); } else { embed.Description = "To verify character ownership, please place the following verification Id in your [lodestone profile](https://na.finalfantasyxiv.com/lodestone/my/setting/profile/): `" + userCharacter.FFXIVCharacterVerification + "`"; return(embed.Build()); } } }
public static void RemoveCharacter(this User self, string characterName, string?serverName = null) { User.Character?character = self.GetCharacter(characterName, serverName); if (character == null) { return; } self.Characters.Remove(character); }
public static void RemoveCharacter(this User self, uint characterId) { User.Character?character = self.GetCharacter(characterId); if (character == null) { return; } self.Characters.Remove(character); }
public async Task <string> IAm(CommandMessage message, string characterName, string serverName) { User user = await UserService.GetUser(message.Author); CharacterInfo character = await this.GetCharacterInfo(characterName, serverName); User.Character?userCharacter = user.GetCharacter(character.Id); if (userCharacter == null) { userCharacter = new User.Character(); userCharacter.FFXIVCharacterId = character.Id; userCharacter.CharacterName = character.Name; userCharacter.ServerName = character.Server; userCharacter.IsVerified = false; user.Characters.Add(userCharacter); await UserService.SaveUser(user); } if (userCharacter.IsVerified) { userCharacter.CharacterName = character.Name; userCharacter.ServerName = character.Server; await UserService.SaveUser(user); return("Character linked!"); } else { if (userCharacter.FFXIVCharacterVerification == null) { userCharacter.FFXIVCharacterVerification = Guid.NewGuid().ToString(); await UserService.SaveUser(user); } if (character.Bio?.Contains(userCharacter.FFXIVCharacterVerification) == true) { userCharacter.FFXIVCharacterId = character.Id; userCharacter.CharacterName = character.Name; userCharacter.ServerName = character.Server; userCharacter.FFXIVCharacterVerification = null; userCharacter.IsVerified = true; await UserService.SaveUser(user); return("Character linked! (You can now remove the Verification Id from your Character Profile)"); } else { return("To verify character ownership, please place the following verification Id in your lodestone character profile: `" + userCharacter.FFXIVCharacterVerification + "`"); } } }
private async Task <CharacterInfo> GetCharacterInfo(IGuildUser guildUser) { User user = await UserService.GetUser(guildUser); User.Character?character = user.GetDefaultCharacter(); if (character is null) { throw new UserException("No characters linked."); } return(await this.GetCharacterInfo(character.FFXIVCharacterId)); }
public async Task <Embed> ShowProfile(CommandMessage message) { EmbedBuilder embed = new EmbedBuilder(); User user = await UserService.GetUser(message.Author); embed.Title = message.Author.GetName(); embed.ThumbnailUrl = message.Author.GetAvatarUrl(); embed.Color = Color.Teal; // Default character User.Character?defaultCharacter = user.GetDefaultCharacter(); if (defaultCharacter != null && !string.IsNullOrWhiteSpace(defaultCharacter.CharacterName)) { // Character EmbedFieldBuilder character = new EmbedFieldBuilder() .WithName("Default Character") .WithValue("**" + defaultCharacter.CharacterName + "**"); embed.AddField(character); } // Nuts EmbedFieldBuilder nuts = new EmbedFieldBuilder() .WithName("Nuts") .WithValue("**" + user.TotalKupoNutsCurrent + "** (Total Held: " + user.TotalKupoNutsReceived + ")"); embed.AddField(nuts); // Level EmbedFieldBuilder level = new EmbedFieldBuilder() .WithName("Level") .WithValue("**" + user.Level + "** (Total XP: " + user.TotalXPCurrent + ")"); embed.AddField(level); // Rep EmbedFieldBuilder rep = new EmbedFieldBuilder() .WithName("Reputation") .WithValue("**" + user.Reputation + "**"); embed.AddField(rep); // Joined At EmbedFieldBuilder joined = new EmbedFieldBuilder() .WithName("Joined") .WithValue(message.Author.JoinedAt?.ToString("dd MMM yy") + " (" + (DateTime.Now.Date - (message.Author?.JoinedAt?.Date ?? DateTime.Now.Date)).TotalDays + " days ago)"); embed.AddField(joined); return(embed.Build()); }
public static void SetDefaultCharacter(this User self, string characterName, string?serverName = null) { foreach (User.Character otherCharacter in self.Characters) { otherCharacter.IsDefault = false; } User.Character?character = self.GetCharacter(characterName, serverName); if (character is null) { throw new Exception("I couldn't find that character, Have you linked them with `IAm`?"); } character.IsDefault = true; }
public async Task PostWhoIsResponse(CommandMessage message, User user, int?characterIndex = null) { // Special case to just load Kupo Nuts' portrait from disk. if (user.DiscordUserId == Program.DiscordClient.CurrentUser.Id) { await message.Channel.SendMessageAsync("Thats me!"); await message.Channel.SendFileAsync(PathUtils.Current + "/Assets/self.png"); return; } User.Character?defaultCharacter = user.GetDefaultCharacter(); if (defaultCharacter is null) { throw new UserException("No characters linked! Use `IAm` to link a character"); } if (characterIndex != null) { try { defaultCharacter = user.Characters[characterIndex.Value - 1]; } catch { throw new UserException("I couldn't find a character at index: " + characterIndex); } } // Default character CharacterInfo defaultCharacterInfo = await this.GetCharacterInfo(defaultCharacter.FFXIVCharacterId); string file = await CharacterCard.Draw(defaultCharacterInfo); await message.Channel.SendFileAsync(file, messageReference : message.MessageReference); // Get current Verification status bool oldIsVerified = defaultCharacter.IsVerified; if (!defaultCharacter.CheckVerification(defaultCharacterInfo)) { EmbedBuilder builder = new EmbedBuilder { Description = "This character has not been verified.", Color = Discord.Color.Gold, }; // If this is the requesting users character, give instructions on how to verify if (message.Author.Id == user.DiscordUserId) { builder.Title = "This character has not been verified"; builder.Description = "To verify this character, enter the following verification code in your [lodestone profile](https://na.finalfantasyxiv.com/lodestone/my/setting/profile/): " + defaultCharacter.FFXIVCharacterVerification; } await message.Channel.SendMessageAsync(null, false, builder.Build()); } if (!defaultCharacterInfo.HasMinions && !defaultCharacterInfo.HasMounts && !defaultCharacterInfo.HasAchievements) { EmbedBuilder builder = new EmbedBuilder { Description = "To show Minions, Mounts, and Achievements, please link your character at [FFXIV Collect](https://ffxivcollect.com/)", }; await message.Channel.SendMessageAsync(null, false, builder.Build()); } // While building the AKA, we can confirm if a name/server change has occured // for queried character and update DB // Initial value used to see if verification has been updated bool hasChanges = oldIsVerified != defaultCharacter.IsVerified; // AKA StringBuilder akaDescBuilder = new StringBuilder(); int index = 0; foreach (User.Character character in user.Characters) { // For the queried character, check if the name/server has changed and update if (character.FFXIVCharacterId == defaultCharacterInfo.Id && ((!string.IsNullOrWhiteSpace(defaultCharacterInfo.Name) && character.CharacterName != defaultCharacterInfo.Name) || (!string.IsNullOrWhiteSpace(defaultCharacterInfo.Server) && character.ServerName != defaultCharacterInfo.Server))) { hasChanges = true; character.CharacterName = defaultCharacterInfo.Name; character.ServerName = defaultCharacterInfo.Server; } index++; akaDescBuilder.Append(index); akaDescBuilder.Append(") "); akaDescBuilder.Append(character.CharacterName); akaDescBuilder.Append(" ("); akaDescBuilder.Append(Emotes.Home.GetString()); akaDescBuilder.Append(character.ServerName); akaDescBuilder.Append(")"); if (!await character.IsVerified(user)) { akaDescBuilder.Append(" *(Not Verified)*"); } akaDescBuilder.AppendLine(); } // Character change detected, save user information if (hasChanges) { _ = UserService.SaveUser(user); } if (index > 1) { EmbedBuilder builder = new EmbedBuilder { Description = akaDescBuilder.ToString(), Title = "Also known as:", }; await message.Channel.SendMessageAsync(null, false, builder.Build()); } }
public async Task PostWhoIsResponse(CommandMessage message, User user, int?characterIndex = null) { User.Character?defaultCharacter = user.GetDefaultCharacter(); if (defaultCharacter is null) { throw new UserException("No characters linked! Use `IAm` to link a character"); } int index = 0; if (characterIndex != null) { defaultCharacter = null; foreach (User.Character character in user.Characters) { index++; if (index == characterIndex) { defaultCharacter = character; } } if (defaultCharacter is null) { throw new UserException("I couldn't find a character at index: " + characterIndex); } } // Default character CharacterInfo defaultCharacterInfo = await this.GetCharacterInfo(defaultCharacter.FFXIVCharacterId); string file = await CharacterCard.Draw(defaultCharacterInfo); await message.Channel.SendFileAsync(file); if (!defaultCharacter.IsVerified(defaultCharacterInfo)) { EmbedBuilder builder = new EmbedBuilder(); builder.Description = "This character has not been verified."; builder.Color = Discord.Color.Gold; // If this is the requesting users character, give instructions on how to verify if (message.Author.Id == user.DiscordUserId) { builder.Title = "This character has not been verified"; builder.Description = "To verify this character, enter the following verification code in your [lodestone profile](https://na.finalfantasyxiv.com/lodestone/my/setting/profile/).\n" + defaultCharacter.FFXIVCharacterVerification; } await message.Channel.SendMessageAsync(null, false, builder.Build()); } if (!defaultCharacterInfo.HasMinions && !defaultCharacterInfo.HasMounts && !defaultCharacterInfo.HasAchievements) { EmbedBuilder builder = new EmbedBuilder(); builder.Description = "To show Minions, Mounts, and Achievements, please link your character at [FFXIV Collect](https://ffxivcollect.com/)"; await message.Channel.SendMessageAsync(null, false, builder.Build()); } // AKA StringBuilder akaDescBuilder = new StringBuilder(); index = 0; foreach (User.Character character in user.Characters) { index++; akaDescBuilder.Append(index); akaDescBuilder.Append(") "); akaDescBuilder.Append(character.CharacterName); akaDescBuilder.Append(" ("); akaDescBuilder.Append(Emotes.Home.GetString()); akaDescBuilder.Append(character.ServerName); akaDescBuilder.Append(")"); if (!await character.IsVerified(user)) { akaDescBuilder.Append(" *(Not Verified)*"); } akaDescBuilder.AppendLine(); } if (index > 1) { EmbedBuilder builder = new EmbedBuilder(); builder.Description = akaDescBuilder.ToString(); builder.Title = "Also known as:"; await message.Channel.SendMessageAsync(null, false, builder.Build()); } }