From ce60e60209d2a4db6a8a86ae41b3ae5091cf17e5 Mon Sep 17 00:00:00 2001 From: Luke Robles Date: Mon, 1 Jan 2024 17:13:29 -0800 Subject: [PATCH] Rewrite of the /rsifind command. Much faseter and not relying on the shitty API anymore --- app/star_citizen.py | 133 ++++++++++++++++++++++++++++++++------------ 1 file changed, 98 insertions(+), 35 deletions(-) diff --git a/app/star_citizen.py b/app/star_citizen.py index 00e0223a..b9239d59 100755 --- a/app/star_citizen.py +++ b/app/star_citizen.py @@ -52,14 +52,12 @@ def write_incident_file(file_path, url, details): async def rsi_find(player): - player_url = "https://api.starcitizen-api.com/%s/v1/live/user/%s" % ( - os.getenv("star_citizen_token").replace('"', ""), - player, - ) - response = requests.get(player_url).json() - print(response) + base_url = "https://robertsspaceindustries.com" - if not response["data"]: + profile_url = "%s/citizens/%s" % (base_url, player) + response = requests.get(profile_url).text + + if "NAVIGATING UNCHARTED TERRITORY" in response: embed = discord.Embed( description="❌❌❌", color=discord.Color.red(), @@ -68,70 +66,135 @@ async def rsi_find(player): ) return embed + soup = BeautifulSoup(response, "html.parser") + + profile_photo = soup.find("div", class_="thumb").findNext("img")["src"] + if "avatar_default_big" not in profile_photo: + profile_photo = base_url + profile_photo + + handle = ( + soup.find("span", class_="label", string="Handle name") + .findNext("strong", class_="value") + .text + ) + + citizen_number = ( + soup.find("span", class_="label", string="UEE Citizen Record") + .findNext("strong", class_="value") + .text + ) + + enlisted = ( + soup.find("span", class_="label", string="Enlisted") + .findNext("strong", class_="value") + .text + ) + + badge_url = ( + soup.find("p", class_="entry") + .findNext("span", class_="icon") + .findNext("img")["src"] + ) + + badge_text = ( + soup.find("p", class_="entry") + .findNext("span", class_="icon") + .findNext("span", class_="value") + .text + ) + embed = discord.Embed( description="-------", color=discord.Color.blue(), type="rich", - title="%s's Star citizen information" % response["data"]["profile"]["handle"], + title="%s's Star citizen information" % player, ) embed.add_field( name="Link to profile", - value=response["data"]["profile"]["page"]["url"], + value=profile_url, inline=False, ) embed.add_field( name="Player ID", - value=response["data"]["profile"]["id"], + value=citizen_number, inline=True, ) embed.add_field( name="Enlisted", - value=response["data"]["profile"]["enlisted"].split("T")[0], + value=enlisted, inline=True, ) embed.set_author( - name=response["data"]["profile"]["badge"], - icon_url=response["data"]["profile"]["badge_image"], - url=response["data"]["profile"]["page"]["url"], + name=badge_text, + icon_url=badge_url, + url=profile_url, ) - embed.set_thumbnail(url=response["data"]["profile"]["image"]) - - embed.add_field(name="-------", value="", inline=False) - if "sid" in response["data"]["organization"]: - org_url = "https://api.starcitizen-api.com/%s/v1/live/organization/%s" % ( - os.getenv("star_citizen_token").replace('"', ""), - response["data"]["organization"]["sid"], - ) - org_response = requests.get(org_url).json() + embed.set_thumbnail(url=profile_photo) + # Org info + if "NO MAIN ORG FOUND IN PUBLIC RECORDS" in response: embed.add_field( name="Org Info", - value="[%s](%s)" - % (org_response["data"]["sid"], org_response["data"]["url"]), + value="Player is not in an org", + inline=False, + ) + return embed + + if soup.find("div", class_="main-org right-col visibility-R"): + embed.add_field( + name="Org Info", + value="Player has hidden their org from their profile", + inline=False, + ) + else: + org_div = soup.find("div", class_="main-org right-col visibility-V") + + org_div = soup.find("div", class_="main-org right-col visibility-V") + org_url = base_url + org_div.findNext("a")["href"] + + org_response = requests.get(org_url).text + org_soup = BeautifulSoup(org_response, "html.parser") + org_name = ( + org_div.find("span", string="Spectrum Identification (SID)") + .findNext("strong") + .text + ) + + org_rank = ( + org_div.find("span", string="Organization rank").findNext("strong").text + ) + + org_logo = ( + base_url + + org_soup.find("div", class_="logo noshadow").findNext("img")["src"] + ) + org_member_count = ( + org_soup.find("div", class_="logo noshadow") + .findNext("span", class_="count") + .text + ) + + embed.add_field(name="-------", value="", inline=False) + embed.add_field( + name="Org Info", + value="[%s](%s)" % (org_name, org_url), inline=True, ) embed.add_field( name="Rank", - value=response["data"]["organization"]["rank"], + value=org_rank, inline=True, ) embed.add_field( name="Number of members", - value=org_response["data"]["members"], + value=org_member_count, inline=False, ) - embed.set_image(url=org_response["data"]["logo"]) - else: - embed.add_field( - name="Org Info", - value="Player is not in an org or it is hidden", - inline=False, - ) - + embed.set_image(url=org_logo) return embed