"""Custom Discord emoji registry, keyed by symbolic name and resolved per BOT_PROFILE. Emojis are uploaded as application emojis via the Discord Developer Portal and are scoped to a single bot application. Dev and production are separate applications, so the same logical emoji has a different ID in each — hence two dicts below, selected by BOT_PROFILE. To add a new emoji: upload it to both applications in the dev portal, grab the two IDs, and add one line to each dict. """ from __future__ import annotations from config import BOT_PROFILE _DEV: dict[str, str] = { "TipiCOIN": "<:TipiCOIN:1483000209188589628>", "TipiFIRE": "<:TipiFIRE:1483431381668335687>", "TipiHIIR": "<:TipiHIIR:1483004306012504128>", "TipiMATT": "<:TipiMATT:1483387697132208128>", "TipiKLAPID": "<:TipiKLAPID:1483387694083084349>", "TipiPILET": "<:TipiPILET:1483004308353060904>", "TipiBULL": "<:TipiBULL:1483004310924300409>", "TipiLAP": "<:TipiLAP:1483004307161874566>", "TipiVAC": "<:TipiVAC:1483004309510819860>", "TipiLAUD": "<:TipiLAUD:1483387695576125440>", "TipiSERVER": "<:TipiSERVER:1483387701032910969>", "TipiMIC": "<:TipiMIC:1483387698499551313>", "TipiKLAVA": "<:TipiKLAVA:1483014339228078140>", "TipiMONITOR": "<:TipiMONITOR:1483014340327243908>", "TipiCAT": "<:TipiCAT:1483014337663602718>", "TipiMONITOR2": "<:TipiMONITOR2:1483387699514839162>", "TipiKARIKAS": "<:TipiKARIKAS:1483014841148112977>", "TipiTOOL": "<:TipiTOOL:1483014341648187613>", "TipiHEART": "<:TipiHEART:1483431377561976853>", "TipiTROLL": "<:TipiTROLL:1483431380166774895>", "TipICRY": "<:TipICRY:1483431288852709387>", "TipiSKULL": "<:TipiSKULL:1483431378929451028>", "TipiDICE": "<:TipiDICE:1485923107108556950>", "TipiYKS": "<:TipiYKS:1483103190491856916>", "TipiKAKS": "<:TipiKAKS:1483103215841972404>", "TipiKOLM": "<:TipiKOLM:1483103217846980781>", "TipiNELI": "<:TipiNELI:1483103237585240114>", "TipiVIIS": "<:TipiVIIS:1483103239036469289>", "TipiKUUS": "<:TipiKUUS:1483103253163020348>", "TipiSLOTS": "", } # Production application emoji IDs (from the TipiBOT application's dev-portal # Emojis tab). The display name in <:name:id> is cosmetic — Discord resolves # by ID — so we keep the same logical names as _DEV even when the prod portal # uses a different upload name (e.g. prod's "TipiFIVE" → key "TipiVIIS"). _ECONOMY: dict[str, str] = { "TipiCOIN": "<:TipiCOIN:1511754551747940485>", "TipiFIRE": "<:TipiFIRE:1511754615761272862>", "TipiHIIR": "<:TipiHIIR:1511754556105822218>", "TipiMATT": "<:TipiMATT:1511754595448131665>", "TipiKLAPID": "<:TipiKLAPID:1511754589798666433>", "TipiPILET": "<:TipiPILET:1511754560593727652>", "TipiBULL": "<:TipiBULL:1511754564179595264>", "TipiLAP": "<:TipiLAP:1511754558970269907>", "TipiVAC": "<:TipiVAC:1511754562413924442>", "TipiLAUD": "<:TipiLAUD:1511754592759713985>", "TipiSERVER": "<:TipiSERVER:1511754601186066534>", "TipiMIC": "<:TipiMIC:1511754597016801310>", "TipiKLAVA": "<:TipiKLAVA:1511754567648542780>", "TipiMONITOR": "<:TipiMONITOR:1511754570722971868>", "TipiCAT": "<:TipiCAT:1511754566092193853>", "TipiMONITOR2": "<:TipiMONITOR2:1511754598732402689>", "TipiKARIKAS": "<:TipiKARIKAS:1511754574405435502>", "TipiTOOL": "<:TipiTOOL:1511754572522061874>", "TipiHEART": "<:TipiHEART:1511754608299737139>", "TipiTROLL": "<:TipiTROLL:1511754612775063832>", "TipICRY": "<:TipICRY:1511754603308515368>", "TipiSKULL": "<:TipiSKULL:1511754610195566622>", "TipiDICE": "<:TipiDICE:1511753607119376504>", "TipiYKS": "<:TipiYKS:1511754576368373951>", "TipiKAKS": "<:TipiKAKS:1511754577928523997>", "TipiKOLM": "<:TipiKOLM:1511754581078442005>", "TipiNELI": "<:TipiNELI:1511754582571880509>", "TipiVIIS": "<:TipiVIIS:1511754584182227005>", "TipiKUUS": "<:TipiKUUS:1511754586262736977>", "TipiSLOTS": "", } _EMOJI_SETS = { "dev": _DEV, "economy": _ECONOMY, } EMOJI: dict[str, str] = _EMOJI_SETS[BOT_PROFILE] _missing = set(_DEV) - set(EMOJI) if _missing: raise RuntimeError(f"Emoji set {BOT_PROFILE!r} missing keys: {sorted(_missing)}")