parent
9ddb1696ac
commit
59c22dcc3a
@ -0,0 +1,5 @@
|
||||
from .launchlib import LaunchLib
|
||||
|
||||
|
||||
def setup(bot):
|
||||
bot.add_cog(LaunchLib(bot))
|
@ -0,0 +1,254 @@
|
||||
countryISOMapping = {
|
||||
"AFG": "AF",
|
||||
"ALA": "AX",
|
||||
"ALB": "AL",
|
||||
"DZA": "DZ",
|
||||
"ASM": "AS",
|
||||
"AND": "AD",
|
||||
"AGO": "AO",
|
||||
"AIA": "AI",
|
||||
"ATA": "AQ",
|
||||
"ATG": "AG",
|
||||
"ARG": "AR",
|
||||
"ARM": "AM",
|
||||
"ABW": "AW",
|
||||
"AUS": "AU",
|
||||
"AUT": "AT",
|
||||
"AZE": "AZ",
|
||||
"BHS": "BS",
|
||||
"BHR": "BH",
|
||||
"BGD": "BD",
|
||||
"BRB": "BB",
|
||||
"BLR": "BY",
|
||||
"BEL": "BE",
|
||||
"BLZ": "BZ",
|
||||
"BEN": "BJ",
|
||||
"BMU": "BM",
|
||||
"BTN": "BT",
|
||||
"BOL": "BO",
|
||||
"BIH": "BA",
|
||||
"BWA": "BW",
|
||||
"BVT": "BV",
|
||||
"BRA": "BR",
|
||||
"VGB": "VG",
|
||||
"IOT": "IO",
|
||||
"BRN": "BN",
|
||||
"BGR": "BG",
|
||||
"BFA": "BF",
|
||||
"BDI": "BI",
|
||||
"KHM": "KH",
|
||||
"CMR": "CM",
|
||||
"CAN": "CA",
|
||||
"CPV": "CV",
|
||||
"CYM": "KY",
|
||||
"CAF": "CF",
|
||||
"TCD": "TD",
|
||||
"CHL": "CL",
|
||||
"CHN": "CN",
|
||||
"HKG": "HK",
|
||||
"MAC": "MO",
|
||||
"CXR": "CX",
|
||||
"CCK": "CC",
|
||||
"COL": "CO",
|
||||
"COM": "KM",
|
||||
"COG": "CG",
|
||||
"COD": "CD",
|
||||
"COK": "CK",
|
||||
"CRI": "CR",
|
||||
"CIV": "CI",
|
||||
"HRV": "HR",
|
||||
"CUB": "CU",
|
||||
"CYP": "CY",
|
||||
"CZE": "CZ",
|
||||
"DNK": "DK",
|
||||
"DJI": "DJ",
|
||||
"DMA": "DM",
|
||||
"DOM": "DO",
|
||||
"ECU": "EC",
|
||||
"EGY": "EG",
|
||||
"SLV": "SV",
|
||||
"GNQ": "GQ",
|
||||
"ERI": "ER",
|
||||
"EST": "EE",
|
||||
"ETH": "ET",
|
||||
"FLK": "FK",
|
||||
"FRO": "FO",
|
||||
"FJI": "FJ",
|
||||
"FIN": "FI",
|
||||
"FRA": "FR",
|
||||
"GUF": "GF",
|
||||
"PYF": "PF",
|
||||
"ATF": "TF",
|
||||
"GAB": "GA",
|
||||
"GMB": "GM",
|
||||
"GEO": "GE",
|
||||
"DEU": "DE",
|
||||
"GHA": "GH",
|
||||
"GIB": "GI",
|
||||
"GRC": "GR",
|
||||
"GRL": "GL",
|
||||
"GRD": "GD",
|
||||
"GLP": "GP",
|
||||
"GUM": "GU",
|
||||
"GTM": "GT",
|
||||
"GGY": "GG",
|
||||
"GIN": "GN",
|
||||
"GNB": "GW",
|
||||
"GUY": "GY",
|
||||
"HTI": "HT",
|
||||
"HMD": "HM",
|
||||
"VAT": "VA",
|
||||
"HND": "HN",
|
||||
"HUN": "HU",
|
||||
"ISL": "IS",
|
||||
"IND": "IN",
|
||||
"IDN": "ID",
|
||||
"IRN": "IR",
|
||||
"IRQ": "IQ",
|
||||
"IRL": "IE",
|
||||
"IMN": "IM",
|
||||
"ISR": "IL",
|
||||
"ITA": "IT",
|
||||
"JAM": "JM",
|
||||
"JPN": "JP",
|
||||
"JEY": "JE",
|
||||
"JOR": "JO",
|
||||
"KAZ": "KZ",
|
||||
"KEN": "KE",
|
||||
"KIR": "KI",
|
||||
"PRK": "KP",
|
||||
"KOR": "KR",
|
||||
"KWT": "KW",
|
||||
"KGZ": "KG",
|
||||
"LAO": "LA",
|
||||
"LVA": "LV",
|
||||
"LBN": "LB",
|
||||
"LSO": "LS",
|
||||
"LBR": "LR",
|
||||
"LBY": "LY",
|
||||
"LIE": "LI",
|
||||
"LTU": "LT",
|
||||
"LUX": "LU",
|
||||
"MKD": "MK",
|
||||
"MDG": "MG",
|
||||
"MWI": "MW",
|
||||
"MYS": "MY",
|
||||
"MDV": "MV",
|
||||
"MLI": "ML",
|
||||
"MLT": "MT",
|
||||
"MHL": "MH",
|
||||
"MTQ": "MQ",
|
||||
"MRT": "MR",
|
||||
"MUS": "MU",
|
||||
"MYT": "YT",
|
||||
"MEX": "MX",
|
||||
"FSM": "FM",
|
||||
"MDA": "MD",
|
||||
"MCO": "MC",
|
||||
"MNG": "MN",
|
||||
"MNE": "ME",
|
||||
"MSR": "MS",
|
||||
"MAR": "MA",
|
||||
"MOZ": "MZ",
|
||||
"MMR": "MM",
|
||||
"NAM": "NA",
|
||||
"NRU": "NR",
|
||||
"NPL": "NP",
|
||||
"NLD": "NL",
|
||||
"ANT": "AN",
|
||||
"NCL": "NC",
|
||||
"NZL": "NZ",
|
||||
"NIC": "NI",
|
||||
"NER": "NE",
|
||||
"NGA": "NG",
|
||||
"NIU": "NU",
|
||||
"NFK": "NF",
|
||||
"MNP": "MP",
|
||||
"NOR": "NO",
|
||||
"OMN": "OM",
|
||||
"PAK": "PK",
|
||||
"PLW": "PW",
|
||||
"PSE": "PS",
|
||||
"PAN": "PA",
|
||||
"PNG": "PG",
|
||||
"PRY": "PY",
|
||||
"PER": "PE",
|
||||
"PHL": "PH",
|
||||
"PCN": "PN",
|
||||
"POL": "PL",
|
||||
"PRT": "PT",
|
||||
"PRI": "PR",
|
||||
"QAT": "QA",
|
||||
"REU": "RE",
|
||||
"ROU": "RO",
|
||||
"RUS": "RU",
|
||||
"RWA": "RW",
|
||||
"BLM": "BL",
|
||||
"SHN": "SH",
|
||||
"KNA": "KN",
|
||||
"LCA": "LC",
|
||||
"MAF": "MF",
|
||||
"SPM": "PM",
|
||||
"VCT": "VC",
|
||||
"WSM": "WS",
|
||||
"SMR": "SM",
|
||||
"STP": "ST",
|
||||
"SAU": "SA",
|
||||
"SEN": "SN",
|
||||
"SRB": "RS",
|
||||
"SYC": "SC",
|
||||
"SLE": "SL",
|
||||
"SGP": "SG",
|
||||
"SVK": "SK",
|
||||
"SVN": "SI",
|
||||
"SLB": "SB",
|
||||
"SOM": "SO",
|
||||
"ZAF": "ZA",
|
||||
"SGS": "GS",
|
||||
"SSD": "SS",
|
||||
"ESP": "ES",
|
||||
"LKA": "LK",
|
||||
"SDN": "SD",
|
||||
"SUR": "SR",
|
||||
"SJM": "SJ",
|
||||
"SWZ": "SZ",
|
||||
"SWE": "SE",
|
||||
"CHE": "CH",
|
||||
"SYR": "SY",
|
||||
"TWN": "TW",
|
||||
"TJK": "TJ",
|
||||
"TZA": "TZ",
|
||||
"THA": "TH",
|
||||
"TLS": "TL",
|
||||
"TGO": "TG",
|
||||
"TKL": "TK",
|
||||
"TON": "TO",
|
||||
"TTO": "TT",
|
||||
"TUN": "TN",
|
||||
"TUR": "TR",
|
||||
"TKM": "TM",
|
||||
"TCA": "TC",
|
||||
"TUV": "TV",
|
||||
"UGA": "UG",
|
||||
"UKR": "UA",
|
||||
"ARE": "AE",
|
||||
"GBR": "GB",
|
||||
"USA": "US",
|
||||
"UMI": "UM",
|
||||
"URY": "UY",
|
||||
"UZB": "UZ",
|
||||
"VUT": "VU",
|
||||
"VEN": "VE",
|
||||
"VNM": "VN",
|
||||
"VIR": "VI",
|
||||
"WLF": "WF",
|
||||
"ESH": "EH",
|
||||
"YEM": "YE",
|
||||
"ZMB": "ZM",
|
||||
"ZWE": "ZW",
|
||||
"XKX": "XK",
|
||||
}
|
||||
|
||||
|
||||
def country_mapping(countrycode):
|
||||
return countryISOMapping[countrycode]
|
@ -0,0 +1,20 @@
|
||||
{
|
||||
"author": [
|
||||
"Bobloy"
|
||||
],
|
||||
"min_bot_version": "3.4.0",
|
||||
"description": "Pull information from the Launch Library API for space flights",
|
||||
"hidden": false,
|
||||
"install_msg": "Thank you for installing LaunchLib. Get started with `[p]load launchlib`, then `[p]help LaunchLib`",
|
||||
"short": "Access launch data for space flights",
|
||||
"end_user_data_statement": "This cog does not store any End User Data",
|
||||
"requirements": ["python-launch-library"],
|
||||
"tags": [
|
||||
"bobloy",
|
||||
"utils",
|
||||
"launch",
|
||||
"space",
|
||||
"api",
|
||||
"library"
|
||||
]
|
||||
}
|
@ -0,0 +1,130 @@
|
||||
import asyncio
|
||||
import functools
|
||||
import logging
|
||||
|
||||
import discord
|
||||
import launchlibrary as ll
|
||||
from redbot.core import Config, commands
|
||||
from redbot.core.bot import Red
|
||||
|
||||
from launchlib.countrymapper import country_mapping
|
||||
|
||||
log = logging.getLogger("red.fox_v3.launchlib")
|
||||
|
||||
|
||||
class LaunchLib(commands.Cog):
|
||||
"""
|
||||
Cog Description
|
||||
|
||||
Less important information about the cog
|
||||
"""
|
||||
|
||||
def __init__(self, bot: Red):
|
||||
super().__init__()
|
||||
self.bot = bot
|
||||
self.config = Config.get_conf(self, identifier=0, force_registration=True)
|
||||
|
||||
default_guild = {}
|
||||
|
||||
self.config.register_guild(**default_guild)
|
||||
|
||||
self.api = ll.Api()
|
||||
|
||||
async def red_delete_data_for_user(self, **kwargs):
|
||||
"""Nothing to delete"""
|
||||
return
|
||||
|
||||
async def _embed_launch_data(self, launch: ll.Launch):
|
||||
status: ll.LaunchStatus = launch.get_status()
|
||||
|
||||
rocket: ll.Rocket = launch.rocket
|
||||
|
||||
title = launch.name
|
||||
description = status.description
|
||||
|
||||
urls = launch.vid_urls + launch.info_urls
|
||||
if not urls and rocket:
|
||||
urls = rocket.info_urls + [rocket.wiki_url]
|
||||
if urls:
|
||||
url = urls[0]
|
||||
else:
|
||||
url = None
|
||||
|
||||
color = discord.Color.green() if status.id in [1, 3] else discord.Color.red()
|
||||
|
||||
em = discord.Embed(title=title, description=description, url=url, color=color)
|
||||
|
||||
if rocket and rocket.image_url and rocket.image_url != "Array":
|
||||
em.set_image(url=rocket.image_url)
|
||||
|
||||
agency = getattr(launch, "agency", None)
|
||||
if agency is not None:
|
||||
em.set_author(
|
||||
name=agency.name,
|
||||
url=agency.wiki_url,
|
||||
icon_url=f"https://www.countryflags.io/{country_mapping(agency.country_code)}/flat/64.png",
|
||||
)
|
||||
|
||||
field_options = [
|
||||
("failreason", "Fail Reason"),
|
||||
("holdreason", "Hold Reason"),
|
||||
("id", "ID"),
|
||||
("hashtag", "Hashtag"),
|
||||
]
|
||||
for f in field_options:
|
||||
data = getattr(launch, f[0], None)
|
||||
if data is not None and data:
|
||||
em.add_field(name=f[1], value=data)
|
||||
|
||||
if launch.missions:
|
||||
field_options = [
|
||||
("description", "Mission Description"),
|
||||
("typeName", "Mission Type"),
|
||||
("name", "Mission Name"),
|
||||
]
|
||||
for mission in launch.missions:
|
||||
for f in field_options:
|
||||
data = mission.get(f[0], None)
|
||||
if data is not None and data:
|
||||
em.add_field(name=f[1], value=data)
|
||||
|
||||
if rocket and rocket.family:
|
||||
em.add_field(name="Rocket Family", value=rocket.family)
|
||||
|
||||
em.timestamp = launch.windowstart
|
||||
|
||||
em.set_footer()
|
||||
|
||||
return em
|
||||
|
||||
@commands.group()
|
||||
async def launchlib(self, ctx: commands.Context):
|
||||
if ctx.invoked_subcommand is None:
|
||||
pass
|
||||
|
||||
@launchlib.command()
|
||||
async def next(self, ctx: commands.Context, num_launches: int = 1):
|
||||
# launches = await api.async_next_launches(num_launches)
|
||||
loop = asyncio.get_running_loop()
|
||||
|
||||
launches = await loop.run_in_executor(
|
||||
None, functools.partial(self.api.fetch_launch, num=num_launches)
|
||||
)
|
||||
|
||||
# launches = self.api.fetch_launch(num=num_launches)
|
||||
|
||||
print(len(launches))
|
||||
|
||||
async with ctx.typing():
|
||||
for x, launch in enumerate(launches):
|
||||
if x >= num_launches:
|
||||
return
|
||||
|
||||
em = await self._embed_launch_data(launch)
|
||||
if em is not None:
|
||||
try:
|
||||
await ctx.send(embed=em)
|
||||
except discord.HTTPException:
|
||||
await ctx.send(str(launch))
|
||||
log.exception("Failed to send embed")
|
||||
await asyncio.sleep(2)
|
Loading…
Reference in new issue