211 lines
6.6 KiB
Python
211 lines
6.6 KiB
Python
from bs4 import BeautifulSoup
|
|
import requests
|
|
import discord
|
|
|
|
|
|
async def get_ship(ship_name):
|
|
base_url = "https://robertspaceindustries.com"
|
|
wiki_url = "https://starcitizen.tools/"
|
|
|
|
try:
|
|
wiki_ship_name = "_".join(elem for elem in ship_name.split())
|
|
|
|
# print(wiki_ship_name)
|
|
# print("%s%s" % (wiki_url, wiki_ship_name))
|
|
|
|
headers = {
|
|
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:109.0) Gecko/20100101 Firefox/112.0"
|
|
}
|
|
response = requests.get(wiki_url + wiki_ship_name, headers=headers).text
|
|
soup = BeautifulSoup(response, "html.parser")
|
|
|
|
embed = discord.Embed(
|
|
description="-------", color=discord.Color.blue(), type="rich"
|
|
)
|
|
|
|
ship_image = (
|
|
(soup.find("a", {"class": "mw-file-description"}))
|
|
.img["src"]
|
|
.replace("400px", "1920px")
|
|
)
|
|
|
|
ship_name_on_page = (
|
|
soup.find("tr", {"class": "infobox-title"}).findNext("th").text
|
|
)
|
|
manufacturer = (
|
|
soup.find("tr", {"class": "data-manufacturer"}).findNext("a").text
|
|
)
|
|
|
|
embed.set_thumbnail(
|
|
url="https://media.robertsspaceindustries.com/t0q21kbb3zrpt/source.png"
|
|
)
|
|
|
|
embed.set_author(
|
|
name="%s %s" % (manufacturer, ship_name_on_page),
|
|
url="%s%s" % (wiki_url, wiki_ship_name),
|
|
)
|
|
|
|
ship_role = (
|
|
soup.find("tr", {"class": "data-role infobox-data infobox-col2"})
|
|
.findNext("td")
|
|
.text
|
|
)
|
|
|
|
embed.add_field(name="**Role**", value=ship_role)
|
|
|
|
ingame_price = (
|
|
soup.find("div", {"class": "data-buycost infobox-data infobox-col2"})
|
|
.find("div", {"class": "infobox-data__value"})
|
|
.text
|
|
)
|
|
|
|
## Hideous code for "where to buy" in game
|
|
# table = soup.find("span", {"id": "Buying"}).findNext(
|
|
# "table", {"class": "wikitable"}
|
|
# )
|
|
|
|
# locations = [x.text.replace("\n", "") for x in table.find_all("th")]
|
|
# prices = [x.text.replace("\n", "") for x in table.find_all("td")]
|
|
# zip_list = zip(locations, prices)
|
|
|
|
# result = list(zip_list)
|
|
# ingame_price = [x for x in result if "Unavailable" not in x]
|
|
|
|
# for x in ingame_price:
|
|
# ingame_price = " ".join(x) + " aUEC"
|
|
|
|
# if not len(ingame_price):
|
|
# ingame_price = "No in-game price available"
|
|
embed.add_field(
|
|
name="**Ingame Price**",
|
|
value="[%s](%s%s#Buying)" % (ingame_price, wiki_url, wiki_ship_name),
|
|
inline=True,
|
|
)
|
|
|
|
try:
|
|
pledge_price = (
|
|
soup.find("div", {"class": "data-pledgecost infobox-data infobox-col4"})
|
|
.find("div", {"class": "infobox-data__value"})
|
|
.text
|
|
)
|
|
except Exception:
|
|
pledge_price = "N/A"
|
|
|
|
try:
|
|
links = soup.find_all("a", {"class": "external text"})
|
|
pledge_store_link = list(filter(lambda x: "Pledge" in x.text, links))[0][
|
|
"href"
|
|
]
|
|
|
|
embed.add_field(
|
|
name="**Pledge Price**",
|
|
value="[%s](%s)" % (pledge_price, pledge_store_link),
|
|
inline=True,
|
|
)
|
|
except Exception:
|
|
embed.add_field(
|
|
name="**Pledge Price**",
|
|
value=pledge_price,
|
|
inline=True,
|
|
)
|
|
|
|
# embed.add_field(name="-------", value="", inline=False)
|
|
# embed.add_field(name="**Description**", value=ship["description"], inline=False)
|
|
embed.add_field(name="-------", value="", inline=False)
|
|
|
|
try:
|
|
stowage_capacity = (
|
|
soup.find(
|
|
"tr", {"class": "data-stowagespace infobox-data infobox-col2"}
|
|
)
|
|
.findChildren("td")[0]
|
|
.text
|
|
)
|
|
except Exception:
|
|
stowage_capacity = "N/A"
|
|
|
|
embed.add_field(
|
|
name="**Stowage Capacity**", value=stowage_capacity, inline=True
|
|
)
|
|
|
|
try:
|
|
cargo_capacity = (
|
|
soup.find(
|
|
"tr", {"class": "data-cargocapacity infobox-data infobox-col4"}
|
|
)
|
|
.findChildren("td")[0]
|
|
.text
|
|
)
|
|
except Exception:
|
|
cargo_capacity = "N/A"
|
|
|
|
embed.add_field(name="**Cargo Capacity**", value=cargo_capacity, inline=True)
|
|
|
|
try:
|
|
crew_size = (
|
|
soup.find("tr", {"class": "data-crew infobox-data infobox-col4"})
|
|
.findChildren("td")[0]
|
|
.text
|
|
)
|
|
except Exception:
|
|
crew_size = "N/A"
|
|
|
|
embed.add_field(name="**Crew Size**", value=crew_size, inline=True)
|
|
embed.add_field(name="-------", value="", inline=False)
|
|
|
|
try:
|
|
claim_time = (
|
|
soup.find("div", {"class": "data-claimtime infobox-data infobox-col4"})
|
|
.find("div", {"class": "infobox-data__value"})
|
|
.text
|
|
)
|
|
except Exception:
|
|
claim_time = "N/A"
|
|
|
|
embed.add_field(name="**Insurance claim time**", value=claim_time, inline=True)
|
|
|
|
try:
|
|
expedited_claim_time = (
|
|
soup.find(
|
|
"div", {"class": "data-expeditetime infobox-data infobox-col4"}
|
|
)
|
|
.find("div", {"class": "infobox-data__value"})
|
|
.text
|
|
)
|
|
except Exception:
|
|
expedited_claim_time = "N/A"
|
|
embed.add_field(
|
|
name="**Expedite claim time**", value=expedited_claim_time, inline=True
|
|
)
|
|
|
|
try:
|
|
expedite_fee = (
|
|
soup.find(
|
|
"div", {"class": "data-expeditecost infobox-data infobox-col2"}
|
|
)
|
|
.find("div", {"class": "infobox-data__value"})
|
|
.text
|
|
)
|
|
except Exception:
|
|
expedite_fee = "N/A"
|
|
|
|
embed.add_field(name="**Expedite Fee**", value=expedite_fee, inline=True)
|
|
|
|
embed.add_field(
|
|
name="**Link**", value="%s%s" % (wiki_url, wiki_ship_name), inline=False
|
|
)
|
|
|
|
embed.set_image(url=ship_image)
|
|
|
|
except Exception as e:
|
|
embed = discord.Embed(description="❌", color=discord.Color.red(), type="rich")
|
|
embed.add_field(
|
|
name="**Could not find that ship**",
|
|
value="You gave me %s. Did you spell it right? (Its also possible my shitty code isnt working right)"
|
|
% ship_name,
|
|
inline=True,
|
|
)
|
|
return embed
|
|
|
|
return embed
|