Add commas
This commit is contained in:
parent
628b68316a
commit
dc4389de4c
240
src/discord/space.rs
Normal file
240
src/discord/space.rs
Normal file
@ -0,0 +1,240 @@
|
||||
use crate::discord::Context;
|
||||
use crate::error::Error;
|
||||
use poise::serenity_prelude::MessageBuilder;
|
||||
use rust_dsn_parser::prelude::*;
|
||||
use std::collections::HashMap;
|
||||
use std::time::{SystemTime, UNIX_EPOCH};
|
||||
use structopt::lazy_static::lazy_static;
|
||||
use thousands::Separable;
|
||||
|
||||
lazy_static! {
|
||||
static ref NAME_MAP: HashMap<String, &'static str> = vec![
|
||||
("ace", "Advanced Composition Explorer"),
|
||||
("apm1", "Astrobotic Peregrine 1 Mission"),
|
||||
("agm1", "Astrobotic Griffin Lander"),
|
||||
("argo", "ArgoMoon"),
|
||||
("atot", "Advanced Tracking and Observational Techniques"),
|
||||
("bepi", "BepiColombo"),
|
||||
("bios", "BioSentinel"),
|
||||
("caps", "CAPSTONE"),
|
||||
("cas", "Cassini"),
|
||||
("cass", "Testing"),
|
||||
("ch1", "Chandrayaan"),
|
||||
("ch2", "Chandrayaan-2"),
|
||||
("ch2l", "Chandrayaan-2 Lander"),
|
||||
("ch2o", "Chandrayaan-2 Orbiter"),
|
||||
("ch3", "Chandrayaan-3"),
|
||||
("cgo", "Carruthers Geocorona Observatory"),
|
||||
("chdr", "Chandra"),
|
||||
("clu1", "Cluster 1"),
|
||||
("clu2", "Cluster 2"),
|
||||
("clu3", "Cluster 3"),
|
||||
("clu4", "Cluster 4"),
|
||||
("cue3", "CU Earth Escape Explorer"),
|
||||
("cusp", "CubeSat for Solar Particles"),
|
||||
("dart", "Double Asteroid Redirection Test"),
|
||||
("dawn", "Dawn"),
|
||||
("dif", "Deep Impact"),
|
||||
("dsco", "Deep Space Climate Observatory (DSCOVR)"),
|
||||
("dsn", "Testing"),
|
||||
("egs", "EVN and Global Services"),
|
||||
("em1", "Human Space Flight: Artemis I"),
|
||||
("em2", "Human Space Flight: Artemis II"),
|
||||
("em3", "Human Space Flight: Artemis III"),
|
||||
("emm", "Emirates Mars Mission (Hope)"),
|
||||
("em-1", "Exploration Mission-1"),
|
||||
("em-2", "Exploration Mission-2"),
|
||||
("em-3", "Exploration Mission-3"),
|
||||
("em-4", "Exploration Mission-4"),
|
||||
("em-5", "Exploration Mission-5"),
|
||||
("em-6", "Exploration Mission-6"),
|
||||
("em-7", "Exploration Mission-7"),
|
||||
("em-8", "Exploration Mission-8"),
|
||||
("em-9", "Exploration Mission-9"),
|
||||
("em-10", "Exploration Mission-10"),
|
||||
("equl", "EQUULEUS"),
|
||||
("escb", "ESCAPADE Blue"),
|
||||
("escg", "ESCAPADE Gold"),
|
||||
("eurc", "Europa Clipper"),
|
||||
("eus", "Exploration Upper Stage"),
|
||||
("gaia", "Gaia"),
|
||||
("gbra", "Ground Based Radio Astronomy"),
|
||||
("go10", "GOES 10"),
|
||||
("go11", "GOES 11"),
|
||||
("go12", "GOES 12"),
|
||||
("go13", "GOES 13"),
|
||||
("go14", "GOES 14"),
|
||||
("go15", "GOES 15"),
|
||||
("go16", "GOES 16"),
|
||||
("go17", "GOES 17"),
|
||||
("grla", "GRAIL A"),
|
||||
("grlb", "GRAIL B"),
|
||||
("gssr", "Goldstone Solar System Radar"),
|
||||
("gtl", "Geotail"),
|
||||
("gvrt", "Goldstone Apple Valley Radio Telescope"),
|
||||
("hcra", "Host Country Radio Astronomy"),
|
||||
("hmap", "LunaH-Map"),
|
||||
("hst", "Hubble Space Telescope"),
|
||||
("hyb2", "Hayabusa-2"),
|
||||
("ice", "ISEE-3 Reboot"),
|
||||
("icps", "Interim Cryogenic Propulsion Stage"),
|
||||
("imag", "IMAGE"),
|
||||
("imap", "IMAP"),
|
||||
("intg", "INTEGRAL"),
|
||||
("jno", "Juno"),
|
||||
("jnsa", "Janus A"),
|
||||
("jnsb", "Janus B"),
|
||||
("jwst", "James Webb Space Telescope"),
|
||||
("kepl", "Kepler"),
|
||||
("kplo", "Korea Pathfinder Lunar Orbiter"),
|
||||
("lade", "LADEE"),
|
||||
("ltb", "Lunar Trailblazer"),
|
||||
("lcro", "LCROSS"),
|
||||
("lfl", "Lunar Flashlight"),
|
||||
("lici", "LICIACube"),
|
||||
("lro", "Lunar Reconnaissance Orbiter"),
|
||||
("lnd1", "Lunar Node 1"),
|
||||
("ltst", "Interim Cryogenic Propulsion Stage"),
|
||||
("lucy", "Lucy"),
|
||||
("lunah-map", "Lunar Hydrogen MAPper"),
|
||||
("m01o", "Mars Odyssey"),
|
||||
("m01s", "Mars Odyssey"),
|
||||
("m20", "Mars 2020 (Perseverance)"),
|
||||
("map", "WMAP"),
|
||||
("mcoa", "MarCO A"),
|
||||
("mcob", "MarCO B"),
|
||||
("mer1", "Opportunity"),
|
||||
("mer2", "Spirit"),
|
||||
("mex", "Mars Express"),
|
||||
("mgs", "Mars Global Surveyor"),
|
||||
("mlic", "Lunar IceCube"),
|
||||
("mms1", "MMS 1"),
|
||||
("mms2", "MMS 2"),
|
||||
("mms3", "MMS 3"),
|
||||
("mms4", "MMS 4"),
|
||||
("mom", "Mars Orbiter Mission"),
|
||||
("mro", "Mars Reconnaissance Orbiter"),
|
||||
("mros", "Mars Reconnaissance Orbiter"),
|
||||
("msgr", "MESSENGER"),
|
||||
("msl", "Mars Science Laboratory (Curiosity)"),
|
||||
("musc", "Hayabusa"),
|
||||
("mvn", "MAVEN"),
|
||||
("neas", "Near Earth Asteroid Scout"),
|
||||
("nhpc", "New Horizons"),
|
||||
("no15", "NOAA 15"),
|
||||
("no16", "NOAA 16"),
|
||||
("no17", "NOAA 17"),
|
||||
("no18", "NOAA 18"),
|
||||
("nsyt", "InSight"),
|
||||
("olin", "SWARM-EX"),
|
||||
("omot", "OMOTENASHI"),
|
||||
("orx", "OSIRIS-REx"),
|
||||
("phx", "Phoenix"),
|
||||
("plc", "Akatsuki"),
|
||||
("polr", "POLAR"),
|
||||
("psyc", "Psyche"),
|
||||
("rd1", "Red Dragon 1"),
|
||||
("rfc", "Reference Frame Calibration"),
|
||||
("rose", "Rosetta"),
|
||||
("rp", "Resource Prospector"),
|
||||
("rsp", "ExoMars Rover and Surface Platform"),
|
||||
("rsts", "Resource System Time Sharing"),
|
||||
("sdu", "Stardust"),
|
||||
("sele", "Kaguya"),
|
||||
("sgp", "Space Geodesy Program"),
|
||||
("slim", "Smart Lander for Investigating Moon"),
|
||||
("soho", "SOHO"),
|
||||
("spil", "Beresheet"),
|
||||
("spp", "Parker Solar Probe"),
|
||||
("sta", "STEREO A"),
|
||||
("stab", "STEREO B"),
|
||||
("stb", "STEREO B"),
|
||||
("stf", "Spitzer Space Telescope"),
|
||||
("swfo", "Space Weather Follow On-Lagrange 1"),
|
||||
("td10", "TDRS 10"),
|
||||
("td11", "TDRS 11"),
|
||||
("td12", "TDRS 12"),
|
||||
("td13", "TDRS 13"),
|
||||
("tdr1", "TDRS 1"),
|
||||
("tdr3", "TDRS 3"),
|
||||
("tdr4", "TDRS 4"),
|
||||
("tdr5", "TDRS 5"),
|
||||
("tdr6", "TDRS 6"),
|
||||
("tdr7", "TDRS 7"),
|
||||
("tdr8", "TDRS 8"),
|
||||
("tdr9", "TDRS 9"),
|
||||
("terr", "TERRA"),
|
||||
("tess", "Transiting Exoplanet Survey Satellite"),
|
||||
("tgo", "Trace Gas Orbiter"),
|
||||
("thb", "THEMIS B"),
|
||||
("thc", "THEMIS C"),
|
||||
("tm", "Team Miles"),
|
||||
("tmm", "Team Miles"),
|
||||
("ulys", "Ulysses"),
|
||||
("vex", "Venus Express"),
|
||||
("vgr1", "Voyager 1"),
|
||||
("vgr2", "Voyager 2"),
|
||||
("vlbi", "V.L.B. Interferometry"),
|
||||
("wind", "WIND"),
|
||||
("xmm", "X-ray Multi-Mirror Mission (XMM-Newton)")
|
||||
]
|
||||
.into_iter()
|
||||
.map(|(name, fren_name)| (name.to_string(), fren_name))
|
||||
.collect();
|
||||
}
|
||||
|
||||
/// Check status of the NASA DSN
|
||||
#[poise::command(prefix_command, category = "Space")]
|
||||
pub async fn dsn(ctx: Context<'_>) -> Result<(), Error> {
|
||||
let mut params = HashMap::new();
|
||||
|
||||
let timestamp = (SystemTime::now()
|
||||
.duration_since(UNIX_EPOCH)
|
||||
.unwrap()
|
||||
.as_millis()
|
||||
/ 5000) as u64;
|
||||
|
||||
params.insert("r", timestamp);
|
||||
|
||||
let client = reqwest::Client::new();
|
||||
|
||||
let resp = client
|
||||
.get("https://eyes.nasa.gov/dsn/data/dsn.xml")
|
||||
.query(¶ms)
|
||||
.send()
|
||||
.await?
|
||||
.text()
|
||||
.await?;
|
||||
|
||||
let mut msg_builder = MessageBuilder::new();
|
||||
|
||||
msg_builder.push_line("# NASA Deep Space Network Status");
|
||||
|
||||
let dsn_stat = DsnResponse::from_xml_string(&resp).unwrap();
|
||||
|
||||
for station in &dsn_stat.stations {
|
||||
msg_builder.push_bold_line(format!("{}:", station.friendly_name));
|
||||
|
||||
for dish in &station.dishes {
|
||||
if let Some(target) = dish.target.first() {
|
||||
let name = NAME_MAP
|
||||
.get(&target.name.to_lowercase())
|
||||
.map(|s| s.to_string())
|
||||
.unwrap_or(target.name.to_string());
|
||||
|
||||
let dish_line = format!(
|
||||
"* 📡 **{}** => 🛰️ **{}** ({} km away, Round Trip Time: {}s)",
|
||||
dish.name,
|
||||
name,
|
||||
target.upleg_range.separate_with_commas(),
|
||||
target.rtlt.separate_with_commas()
|
||||
);
|
||||
msg_builder.push_line(dish_line);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ctx.reply(msg_builder.build()).await?;
|
||||
|
||||
Ok(())
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user