dragon-bot/app/ffxiv.py
Luke Robles e6c6bd5627
All checks were successful
Build and push / changes (push) Successful in 2s
Build and push / Lint-Python (push) Successful in 1s
Build and push / Build-and-Push-Docker (push) Successful in 13s
Build and push / sync-argocd-app (push) Successful in 2s
Build and push / post-failure-to-discord (push) Has been skipped
Build and push / post-success-to-discord (push) Successful in 2s
more fstrings
2025-05-07 15:39:50 -07:00

94 lines
3.3 KiB
Python
Executable File

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 = f"https://xivapi.com/{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=f"FFXIV API bullshit for {character['Name']}\nPlayer ID: {character['ID']}",
icon_url="http://na.lodestonenews.com/images/thumbnail.png",
)
embed.set_thumbnail(url=job_icon)
embed.add_field(
name="Current Class",
value=f"{current_class_name} - Lvl: {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=f"{grand_company['Rank']['Name']} of the {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=f"Free Company: {fc_name} ({fc_tag})",
value=f"\nActive Members: {fc_member_count}\nFC Rank: {fc_rank}\nFC Estate: {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 = f"https://xivapi.com{job['Job']['Icon']}"
embed.add_field(
name=job["Job"]["Abbreviation"], value=job["Level"], inline=True
)
return embed