#![feature(generic_const_exprs)] #[macro_export] #[rustfmt::skip] macro_rules! the_crate { {} => { #[allow(dead_code)] mod emoji { pub mod to_mindustry { pub mod named { include!{concat!(env!("OUT_DIR"), "/to_mindustry_named")} } } /// get discord emojis by name pub mod named { include!{concat!(env!("OUT_DIR"), "/to_discord_named")} } /// map mindustry emojis pub mod mindustry { use super::named; /// mindustry liquid, i.e gallium, water, oil pub use mindus::fluid::Type as Fluid; /// mindustry item, i.e copper, lead, silicon, phase fabric pub use mindus::item::Type as Item; include!{concat!(env!("OUT_DIR"), "/to_discord")} /// Returns the emoji of a [`Fluid`] pub const fn fluid(f: Fluid) -> &'static str { match f { Fluid::Arkycite => named::ARKYCITE, Fluid::Cryofluid => named::CRYOFLUID, Fluid::Cyanogen => named::CYANOGEN, Fluid::Gallium => named::GALLIUM, Fluid::Hydrogen => named::HYDROGEN, Fluid::Neoplasm => named::NEOPLASM, Fluid::Nitrogen => named::NITROGEN, Fluid::Oil => named::OIL, Fluid::Ozone => named::OZONE, Fluid::Slag => named::SLAG, Fluid::Water => named::WATER, } } /// Returns the emoji of a [`Item`] pub const fn item(i: Item) -> &'static str { match i { Item::Beryllium => named::BERYLLIUM, Item::BlastCompound => named::BLASTCOMPOUND, Item::Carbide => named::CARBIDE, Item::Coal => named::COAL, Item::Copper => named::COPPER, Item::DormantCyst => named::DORMANTCYST, Item::FissileMatter => named::FISSILEMATTER, Item::Graphite => named::GRAPHITE, Item::Lead => named::LEAD, Item::Metaglass => named::METAGLASS, Item::Oxide => named::OXIDE, Item::PhaseFabric => named::PHASEFABRIC, Item::Plastanium => named::PLASTANIUM, Item::Pyratite => named::PYRATITE, Item::Sand => named::SAND, Item::Scrap => named::SCRAP, Item::Silicon => named::SILICON, Item::SporePod => named::SPOREPOD, Item::SurgeAlloy => named::SURGEALLOY, Item::Thorium => named::THORIUM, Item::Titanium => named::TITANIUM, Item::Tungsten => named::TUNGSTEN, } } /// "fixes" mindustry emojis with discord emojis /// ``` /// assert_eq!( /// emoji::mindustry::to_discord("the  will output many /s"), /// "the <:spore_press:1164832597411647508> will output many <:sporepod:1144220601205149777>/s" /// ); /// ``` pub fn to_discord(s: &str) -> String { let mut o = String::with_capacity(s.len()); for ch in s.chars() { if let Some(mtch) = TO_DISCORD.get(&ch) { o.push_str(mtch); } else { o.push(ch); } } o } }}}; } #[cfg(feature = "build")] mod build { use std::{collections::HashMap, fs::File, path::PathBuf, sync::Arc}; use serenity::{ all::{prelude::EventHandler, Context}, model::event::FullEvent, }; pub fn load() { tokio::runtime::Builder::new_current_thread() .enable_all() .build() .unwrap() .block_on(_load()) } struct H {} impl EventHandler for H { fn dispatch<'life0, 'life1, 'life2, 'async_trait>( &'life0 self, c: &'life1 Context, _event: &'life2 FullEvent, ) -> ::core::pin::Pin< Box + ::core::marker::Send + 'async_trait>, > where 'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait, Self: 'async_trait, { Box::pin(async move { match _event { FullEvent::Ready { .. } => { build_files(c).await; c.shutdown_all(); } _ => {} } }) } } async fn _load() { let tok = std::env::var("TOKEN") .unwrap_or_else(|_| std::fs::read_to_string("token").expect("wher token")); let mut c = serenity::Client::builder( tok.parse().unwrap(), serenity::all::GatewayIntents::non_privileged(), ) .event_handler(Arc::new(H {})) .await .unwrap(); c.start().await.unwrap() } async fn build_files(c: &Context) { use std::io::Write; let emojis = c.get_application_emojis().await.unwrap(); let of = |f| File::create(PathBuf::from(std::env::var("OUT_DIR").unwrap()).join(f)).unwrap(); let mut f = of("to_discord"); _ = write!( f, r#" /// to discord emojis pub static TO_DISCORD: phf::Map = phf::phf_map! {{"# ); let to_mindustry = LIST.iter().copied().collect::>(); for (str, char) in emojis .iter() .filter_map(|e| to_mindustry.get(&*e.name).map(|x| (e.to_string(), x))) { _ = write!(f, r#"'{char}' => "{str}","#); } _ = write!(f, "}};"); let mut f = of("to_mindustry_named"); for (str, char) in emojis .iter() .filter_map(|e| to_mindustry.get(&*e.name).map(|x| (&e.name, x))) { let str = str.to_owned().to_uppercase(); _ = write!( f, r#"#[doc = "{str} => {char}"] pub const {str}: &str = "{char}";"# ); } let mut f = of("to_discord_named"); for (k, v) in emojis.iter().map(|e| (e.name.to_string(), e.to_string())) { let k = k.to_owned().to_uppercase(); _ = write!(f, r#"#[doc = "{v}"] pub const {k}: &str = "{v}";"#); } } #[rustfmt::skip] const LIST: &[(&str, char)] = &[("ship_assembler",''),("tungsten_wall",''),("blast_door",''),("ship_refabricator",''),("reinforced_liquid_container",''),("tank_assembler",''),("tank_fabricator",''),("tank_refabricator",''),("prime_refabricator",''),("malign",''),("mech_refabricator",''),("lustre",''),("reinforced_liquid_junction",''),("reinforced_bridge_conduit",''),("titan",''),("reinforced_liquid_tank",''),("reinforced_surge_wall_large",''),("reinforced_conduit",''),("smite",''),("reinforced_surge_wall",''),("basic_assembler_module",''),("tungsten_wall_large",''),("reinforced_pump",''),("shielded_wall",''),("ship_fabricator",''),("beryllium_wall_large",''),("carbide_wall_large",''),("breach",''),("sublimate",''),("beryllium_wall",''),("mech_fabricator",''),("reinforced_liquid_router",''),("mech_assembler",''),("afflict",''),("disperse",''),("scathe",''),("carbide_wall",''),("cleroi",''),("locus",''),("omura",''),("risso",''),("manifold",''),("collaris",''),("emanate",''),("anthicus",''),("spiroct",''),("tecta",''),("quell",''),("mace",''),("incite",''),("latum",''),("anthicus_missile",''),("oxynoe",''),("obviate",''),("alpha",''),("disrupt_missile",''),("renale",''),("assembly_drone",''),("vanquish",''),("avert",''),("precept",''),("scathe_missile",''),("quell_missile",''),("beta",''),("merui",''),("evoke",''),("aegires",''),("stell",''),("disrupt",''),("elude",''),("navanax",''),("conquer",''),("large_payload_mass_driver",''),("deconstructor",''),("reinforced_payload_conveyor",''),("constructor",''),("small_deconstructor",''),("reinforced_payload_router",''),("large_constructor",''),("ductbridge",''),("turbine_condenser",''),("core_citadel",''),("slag_heater",''),("shockwave_tower",''),("beam_link",''),("reinforced_vault",''),("phase_synthesizer",''),("cliff_crusher",''),("heat_source",''),("electric_heater",''),("beam_tower",''),("unit_cargo_loader",''),("slag_incinerator",''),("unit_repair_tower",''),("beam_node",''),("heat_router",''),("reinforced_container",''),("atmospheric_concentrator",''),("carbide_crucible",''),("chemical_combustion_chamber",''),("build_tower",''),("impact_drill",''),("pyrolysis_generator",''),("core_bastion",''),("eruption_drill",''),("large_plasma_bore",''),("plasma_bore",''),("neoplasia_reactor",''),("core_acropolis",''),("silicon_arcfurnace",''),("large_shield_projector",''),("flux_reactor",''),("regen_projector",''),("heat_redirector",''),("electrolyzer",''),("cyanogen_synthesizer",''),("surge_crucible",''),("oxidation_chamber",''),("radar",''),("phase_heater",''),("vent_condenser",''),("additive_reconstructor",''),("air_factory",''),("antumbra",''),("arc",''),("arkyid",''),("armored_conveyor",''),("armored_duct",''),("atrax",''),("battery",''),("battery_large",''),("blast_drill",''),("blast_mixer",''),("bridge_conduit",''),("bridge_conveyor",''),("bryde",''),("canvas",''),("coal_centrifuge",''),("combustion_generator",''),("conduit",''),("container",''),("conveyor",''),("copper_wall",''),("copper_wall_large",''),("core_foundation",''),("core_nucleus",''),("core_shard",''),("corvus",''),("crawler",''),("cryofluid_mixer",''),("cultivator",''),("cyclone",''),("cyerce",''),("dagger",''),("differential_generator",''),("diode",''),("disassembler",''),("distributor",''),("door",''),("door_large",''),("duct",''),("duo",''),("eclipse",''),("exponential_reconstructor",''),("flare",''),("force_projector",''),("foreshadow",''),("fortress",''),("fuse",''),("gamma",''),("graphite_press",''),("ground_factory",''),("hail",''),("horizon",''),("hyper_processor",''),("illuminator",''),("impact_reactor",''),("impulse_pump",''),("incinerator",''),("interplanetary_accelerator",''),("inverted_sorter",''),("item_source",''),("item_void",''),("junction",''),("kiln",''),("lancer",''),("large_logic_display",''),("laser_drill",''),("launch_pad",''),("liquid_container",''),("liquid_junction",''),("liquid_router",''),("liquid_source",''),("liquid_tank",''),("liquid_void",''),("logic_display",''),("logic_processor",''),("mass_driver",''),("mechanical_drill",''),("mechanical_pump",''),("mega",''),("meltdown",''),("melter",''),("memory_bank",''),("memory_cell",''),("mender",''),("mend_projector",''),("message",''),("micro_processor",''),("minke",''),("mono",''),("multiplicative_reconstructor",''),("multi_press",''),("naval_factory",''),("nova",''),("oct",''),("oil_extractor",''),("overdrive_dome",''),("overdrive_projector",''),("overflow_gate",''),("parallax",''),("payload_conveyor",''),("payload_loader",''),("payload_mass_driver",''),("payload_router",''),("payload_source",''),("payload_unloader",''),("payload_void",''),("phase_conduit",''),("phase_conveyor",''),("phase_wall",''),("phase_wall_large",''),("phase_weaver",''),("plastanium_compressor",''),("plastanium_conveyor",''),("plastanium_wall",''),("plastanium_wall_large",''),("plated_conduit",''),("pneumatic_drill",''),("poly",''),("power_node",''),("power_node_large",''),("pulsar",''),("pulse_conduit",''),("pulverizer",''),("pyratite_mixer",''),("quad",''),("quasar",''),("reign",''),("retusa",''),("ripple",''),("rotary_pump",''),("router",''),("rtg_generator",''),("salvo",''),("scatter",''),("scepter",''),("scorch",''),("scrap_wall",''),("scrap_wall_gigantic",''),("scrap_wall_huge",''),("scrap_wall_large",''),("segment",''),("sei",''),("separator",''),("shield_projector",''),("silicon_crucible",''),("silicon_smelter",''),("solar_panel",''),("solar_panel_large",''),("sorter",''),("spectre",''),("spore_press",''),("steam_generator",''),("surge_conveyor",''),("surge_smelter",''),("surge_tower",''),("surge_wall",''),("surge_wall_large",''),("swarmer",''),("switch",''),("tetrative_reconstructor",''),("thermal_generator",''),("thorium_reactor",''),("thorium_wall",''),("thorium_wall_large",''),("thruster",''),("titanium_conveyor",''),("titanium_wall",''),("titanium_wall_large",''),("toxopid",''),("tsunami",''),("underflow_gate",''),("unloader",''),("vault",''),("vela",''),("water_extractor",''),("wave",''),("world_cell",''),("world_message",''),("world_processor",''),("zenith",''),("add",''),("admin",''),("android",''),("attack",''),("book",''),("book_open",''),("box",''),("cancel",''),("chart_bar",''),("chat",''),("command_attack",''),("command_rally",''),("copy",''),("crafting",''),("defense",''),("diagonal",''),("discord",''),("distribution",''),("download",''),("down_open",''),("edit",''),("editor",''),("editor",''),("effect",''),("eraser",''),("exit",''),("export",''),("eye",''),("eye_off",''),("file",''),("file_image",''),("file_text",''),("file_text",''),("fill",''),("filter",''),("filters",''),("flip_x",''),("flip_y",''),("folder",''),("github",''),("github_square",''),("google_play",''),("grid",''),("hammer",''),("home",''),("host",''),("down",''),("image",''),("info",''),("info_circle",''),("itchio",''),("layers",''),("left",''),("left_open",''),("line",''),("link",''),("liquid",''),("list",''),("lock",''),("lock_open",''),("logic",''),("map",''),("move",''),("none",''),("ok",''),("paste",''),("pause",''),("pencil",''),("pick",''),("plane",''),("planet",''),("play",''),("players",''),("power",''),("power",''),("production",''),("pvp",''),("reddit",''),("redo",''),("refresh",''),("resize",''),("right",''),("right_open",''),("right_open",''),("rotate",''),("save",''),("settings",''),("spray",''),("star",''),("steam",''),("survival",''),("terminal",''),("trash",''),("tree",''),("trello",''),("turret",''),("undo",''),("units",''),("up",''),("upload",''),("up_open",''),("warning",'⚠'),("waves",''),("wrench",''),("zoom",''),("arkycite",''),("cryofluid",''),("cyanogen",''),("gallium",''),("hydrogen",''),("neoplasm",''),("nitrogen",''),("oil",''),("ozone",''),("slag",''),("water",''),("beryllium",''),("blastcompound",''),("carbide",''),("coal",''),("copper",''),("dormantcyst",''),("fissilematter",''),("graphite",''),("lead",''),("metaglass",''),("oxide",''),("phasefabric",''),("plastanium",''),("pyratite",''),("sand",''),("scrap",''),("silicon",''),("sporepod",''),("surgealloy",''),("thorium",''),("titanium",''),("tungsten",''),("advanced_launch_pad",''),("landing_pad", '')]; } #[cfg(feature = "build")] pub use build::load;