import requests import os import discord if os.getenv("ffxiv_token"): token = f"&private_key={os.getenv('ffxiv_token')}" else: token = "" def make_request(name, server): player_search = ( f"https://xivapi.com/character/search?name={name}&server={server}{token}" ) player_id = list( filter( lambda x: server.lower() in x["Server"].lower(), requests.get(player_search).json()["Results"], ) )[0]["ID"] # if adding extended=1 to the query, you'll see some image files, eg. /cj/1/blackmage.png # prepend these with https://xivapi.com/ to get a useable url # https://xivapi.com//cj/1/blackmage.png request_url = ( f"https://xivapi.com/character/{player_id}?extended=1&data=CJ,FC{token}" ) player_blob = requests.get(request_url).json() character = player_blob["Character"] current_class = character["ActiveClassJob"] current_class_name = current_class["Job"]["Name"] current_class_level = character["ActiveClassJob"]["Level"] xp_to_level_up = current_class["ExpLevelTogo"] job_icon = "https://xivapi.com/%s" % current_class["Job"]["Icon"] if character["GrandCompany"]["Company"]: grand_company = character["GrandCompany"] if player_blob["FreeCompany"]: free_company = player_blob["FreeCompany"] fc_member_count = free_company["ActiveMemberCount"] fc_name = free_company["Name"] # fc_slogan = free_company["Slogan"] fc_tag = free_company["Tag"] fc_rank = free_company["Rank"] fc_estate = free_company["Estate"] fc_plot = fc_estate["Plot"] embed = discord.Embed(description=character["Name"], color=0x428BCA, type="rich") embed.set_author( name="FFXIV API bullshit for %s\nPlayer ID: %s" % (character["Name"], character["ID"]), icon_url="http://na.lodestonenews.com/images/thumbnail.png", ) embed.set_thumbnail(url=job_icon) embed.add_field( name="Current Class", value="%s - Lvl: %s" % (current_class_name, current_class_level), inline=True, ) embed.add_field(name="XP to level up", value=xp_to_level_up, inline=True) embed.add_field(name="Race", value=character["Race"]["Name"], inline=True) if character["GrandCompany"]["Company"]: embed.add_field( name="Grand Company", value="%s of the %s" % (grand_company["Rank"]["Name"], grand_company["Company"]["Name"]), inline=False, ) else: embed.add_field( name="Grand Company", value="Not in a Grand Company", inline=False ) if player_blob["FreeCompany"]: embed.add_field( name="Free Company: %s (%s)" % (fc_name, fc_tag), value="\nActive Members: %s\nFC Rank: %s\nFC Estate: %s" % (fc_member_count, fc_rank, fc_plot), inline=False, ) else: embed.add_field( name="Free Company", value="Not in a Free Company", inline=False ) embed.set_image(url=character["Portrait"]) embed.add_field(name="All other classes", value="-----", inline=False) all_classes = character["ClassJobs"] for job in all_classes: job_icon = "https://xivapi.com%s" % job["Job"]["Icon"] embed.add_field( name=job["Job"]["Abbreviation"], value=job["Level"], inline=True ) return embed