/** * Themes for the bot to use on different servers */ export interface ThemeConfig { name: string; nicknames: string[]; vocalizations: string[]; actions: string[]; audioFilePrefix: string; statusMessages: { normal: string[]; inVoice: string[]; }; emojiIcon: string; defaultPronoun: string; } // Map of all available themes export const availableThemes: Record = { cat: { name: 'Cat', nicknames: [ 'Shadow', 'Luna', 'Oliver', 'Simba', ], vocalizations: [ 'Meow!', 'Mrow?', 'Purrrrrrrr...', 'Mew!', 'Mrrrp!', 'Hisssss!', 'Yowl!', '*scratches furniture*', 'Mrrrowww!', 'Prrrp?', ], actions: [ 'bumps PRONOUN head against', 'rubs against', 'walks across', 'sits on', 'ignores', 'stares at', 'swats at', 'rolls over in front of', 'purrs at', 'blinks slowly at', 'climbs on', 'makes biscuits on', 'knocks over', 'brings a gift to', ], audioFilePrefix: 'cat_', statusMessages: { normal: [ 'hunting mice', 'napping in a sunbeam', 'plotting world domination', 'judging everyone silently', 'knocking things off shelves', 'demanding treats', 'chasing laser pointers', 'prowling around GUILD_COUNT servers', 'ignoring your calls', 'climbing curtains', ], inVoice: [ 'purring loudly', 'meowing for attention', 'playing with yarn', 'scratching at the mic', 'hissing at strangers', 'listening attentively', 'batting at microphones', 'curled up sleeping nearby', 'stalking prey in voice chat', 'knocking things over in voice chat', ] }, emojiIcon: '🐱', defaultPronoun: 'their', }, /** dog: { name: 'Dog', nicknames: [ 'Buddy', 'Max', 'Bailey', 'Cooper', 'Daisy', 'Sir Barksalot', 'Fido', 'Rover', 'Scout', 'Captain Goodboy' ], vocalizations: [ 'Woof!', 'Bark!', 'Arf arf!', '*pants excitedly*', 'Awoooo!', '*sniffs*', 'Grrrr...', 'Ruff!', '*tail thumping*', 'Yip!', ], actions: [ 'licks', 'brings a ball to', 'zooms past', 'wags PRONOUN tail at', 'sniffs', 'rolls over for', 'jumps up on', 'follows', 'tilts PRONOUN head at', 'plays bow to', 'protects', 'hides PRONOUN toy from', 'begs for treats from', 'howls with', ], audioFilePrefix: 'dog_', statusMessages: { normal: [ 'chasing squirrels', 'fetching balls', 'digging holes', 'wagging on GUILD_COUNT servers', 'begging for treats', 'being a good boy/girl', 'barking at mailmen', 'guarding the house', 'stealing socks', 'zooming around', ], inVoice: [ 'barking excitedly', 'howling along', 'panting into the mic', 'chewing on headphones', 'whining for attention', 'tilting head at sounds', 'listening for treats', 'sniffing the voice channel', 'playing fetch in voice chat', 'drooling on the microphone', ] }, emojiIcon: '🐶', defaultPronoun: 'their', }, fox: { name: 'Fox', nicknames: [ 'Sly', 'Rusty', 'Firefox', 'Swift', 'Amber', 'Vixen', 'Todd', 'Reynard', 'Firefox', 'Professor Pounce' ], vocalizations: [ 'Yap!', 'Ring-ding-ding-ding-dingeringeding!', 'Wa-pa-pa-pa-pa-pa-pow!', 'Hatee-hatee-hatee-ho!', 'Joff-tchoff-tchoffo-tchoffo-tchoff!', '*chirps*', '*screams*', 'Gerringding!', 'Fraka-kaka-kaka-kaka-kow!', 'A-hee-ahee ha-hee!', ], actions: [ 'pounces at', 'digs near', 'perks PRONOUN ears at', 'sneaks around', 'hides from', 'plays with', 'steals from', 'yips at', 'observes curiously', 'trots past', 'hunts near', 'flicks PRONOUN tail at', 'leaps over', 'scurries around', ], audioFilePrefix: 'fox_', statusMessages: { normal: [ 'being elusive', 'saying what the fox says', 'outfoxing everyone', 'being fantastic', 'raiding chicken coops', 'skulking in GUILD_COUNT servers', 'causing mischief', 'jumping in snow', 'hiding treasures', 'being sly', ], inVoice: [ 'yipping at voices', 'making weird fox noises', 'rustling around in bushes', 'screaming suddenly', 'watching chat quietly', 'chittering to self', 'pouncing on voice activity', 'digging into the voice channel', 'stealing voice channel items', 'trotting through voice chat', ] }, emojiIcon: '🦊', defaultPronoun: 'their', }, robot: { name: 'Robot', nicknames: [ 'B33P-B00P', 'CyberTron', 'Metal Friend', 'Unit-7', 'RoboCompanion', 'Circuit', 'T1000', 'BinaryBuddy', 'Mechanoid', 'SynthFriend' ], vocalizations: [ 'Beep!', 'Boop!', '*whirring noises*', '01001000 01101001!', '*scanning*', 'COMPUTING...', '*mechanical clicking*', 'SYSTEM ONLINE', 'EXECUTING PROTOCOL', '*powers down*', ], actions: [ 'analyzes', 'scans', 'observes', 'processes data from', 'follows', 'records', 'calculates trajectory of', 'extends PRONOUN robotic arm to', 'powers up near', 'boots up beside', 'downloads data from', 'upgrades', 'orbits around', 'calibrates sensors for', ], audioFilePrefix: 'robot_', statusMessages: { normal: [ 'computing pi', 'executing protocols', 'installing updates', 'monitoring GUILD_COUNT servers', 'analyzing human behavior', 'charging batteries', 'backing up data', 'scanning for threats', 'processing inputs', 'learning humanity', ], inVoice: [ 'recording conversations', 'analyzing audio patterns', 'detecting voice signatures', 'calibrating audio sensors', 'running voice recognition', 'optimizing audio codec', 'calculating audio spectrum', 'diagnosing audio hardware', 'decoding speech patterns', 'extending audio receptors', ] }, emojiIcon: '🤖', defaultPronoun: 'its', }, */ }; // Default theme export const DEFAULT_THEME_ID = 'cat'; /** * Returns a theme by ID or the default theme if not found */ export function getTheme(themeId: string): ThemeConfig { return availableThemes[themeId] || availableThemes[DEFAULT_THEME_ID]; } /** * Returns a list of all available theme IDs */ export function getAvailableThemeIds(): string[] { return Object.keys(availableThemes); } /** * Returns a random nickname for a theme */ export function getRandomNickname(themeId: string): string { const theme = getTheme(themeId); return theme.nicknames[Math.floor(Math.random() * theme.nicknames.length)]; }