using System; using System.Collections.Generic; using System.Linq; using ChaosBot.Lodestone; namespace ChaosBot.Services { public static class LodestoneManager { private static readonly Dictionary EndpointPaths = new Dictionary { {Endpoints.CHARACTER_SEARCH_BY_ID, "character/{0}"}, {Endpoints.CHARACTER_SEARCH, "character/search"}, {Endpoints.FREECOMPANY_SEARCH_BY_ID, "freecompany/{0}"}, {Endpoints.FREECOMPANY_SEARCH, "freecompany/search"}, }; public static readonly Dictionary> Classes = new Dictionary> { { "Marauder", new Tuple("MRD", ClassType.Tank) }, { "Warrior", new Tuple("WAR", ClassType.Tank) }, { "Gladiator", new Tuple("GLA", ClassType.Tank) }, { "Paladin", new Tuple("PLD", ClassType.Tank) }, { "Lancer", new Tuple("LNC", ClassType.Dps) }, { "Dragoon", new Tuple("DRG", ClassType.Dps) }, { "Pugilist", new Tuple("PGL", ClassType.Dps) }, { "Monk", new Tuple("MNK", ClassType.Dps) }, { "Rogue", new Tuple("ROG", ClassType.Dps) }, { "Ninja", new Tuple("NIN", ClassType.Dps) }, { "Archer", new Tuple("ARC", ClassType.Dps) }, { "Bard", new Tuple("BRD", ClassType.Dps) }, { "Thaumaturge", new Tuple("THM", ClassType.Dps) }, { "Black Mage", new Tuple("BLM", ClassType.Dps) }, { "Arcanist", new Tuple("ACN", ClassType.Dps) }, { "Summoner", new Tuple("SMN", ClassType.Dps) }, { "Scholar", new Tuple("SCH", ClassType.Healer) }, { "Conjurer", new Tuple("CNJ", ClassType.Healer) }, { "White Mage", new Tuple("WHM", ClassType.Healer) }, { "Blue Mage (Limited Job)", new Tuple("BLU", ClassType.Dps) }, { "Dark Knight", new Tuple("DRK", ClassType.Tank) }, { "Astrologian", new Tuple("AST", ClassType.Healer) }, { "Machinist", new Tuple("MCH", ClassType.Dps) }, { "Samurai", new Tuple("SAM", ClassType.Dps) }, { "Red Mage", new Tuple("RDM", ClassType.Dps) }, { "Gunbreaker", new Tuple("GNB", ClassType.Tank) }, { "Dancer", new Tuple("DNC", ClassType.Dps) }, { "Miner", new Tuple("MIN", ClassType.Gathering) }, { "Botanist", new Tuple("BTN", ClassType.Gathering) }, { "Fisher", new Tuple("FSH", ClassType.Gathering) }, { "Alchemist", new Tuple("ALC", ClassType.Gathering) }, { "Armorer", new Tuple("ARM", ClassType.Crafting) }, { "Blacksmith", new Tuple("BSM", ClassType.Crafting) }, { "Carpenter", new Tuple("CRP", ClassType.Crafting) }, { "Culinarian", new Tuple("CUL", ClassType.Crafting) }, { "Goldsmith", new Tuple("GSM", ClassType.Crafting) }, { "Leatherworker", new Tuple("LTW", ClassType.Crafting) }, { "Weaver", new Tuple("WVR", ClassType.Crafting) } }; public static string GetEndpointPaths(Endpoints endpoint, params object[] parameters) { return string.Format(EndpointPaths.GetValueOrDefault(endpoint, string.Empty)!, parameters); } public static CharacterDetailed GetCharacter(string server, string name) { Dictionary parameters = new Dictionary {{"name", name}, {"server", server}}; PaginationWrapper characterWrapper = LodestoneHttpProxy.Fetch>(GetEndpointPaths(Endpoints.CHARACTER_SEARCH), parameters); return GetCharacter(characterWrapper.Results.First().ID); } public static CharacterDetailed GetCharacter(long id) { Dictionary parameters = new Dictionary {{"data", "CJ"}}; CharacterDetailed character = LodestoneHttpProxy.Fetch(GetEndpointPaths(Endpoints.CHARACTER_SEARCH_BY_ID, id.ToString()), parameters); return character; } public static FreeCompanyDetailed GetFreeCompany(string server, string name) { Dictionary parameters = new Dictionary {{"name", name}, {"server", server}}; PaginationWrapper freeCompanyWrapper = LodestoneHttpProxy.Fetch>(GetEndpointPaths(Endpoints.FREECOMPANY_SEARCH), parameters); return GetFreeCompanyById(freeCompanyWrapper.Results.First().ID); } public static FreeCompanyDetailed GetFreeCompanyById(string id) { Dictionary parameters = new Dictionary {{"data", "FCM"}}; FreeCompanyDetailed freeCompany = LodestoneHttpProxy.Fetch(GetEndpointPaths(Endpoints.FREECOMPANY_SEARCH_BY_ID, id), parameters); return freeCompany; } } public enum Endpoints { CHARACTER_SEARCH_BY_ID, CHARACTER_SEARCH, FREECOMPANY_SEARCH_BY_ID, FREECOMPANY_SEARCH } public enum ClassType { Tank, Dps, Healer, Gathering, Crafting } }