335 lines
7.4 KiB
TypeScript
335 lines
7.4 KiB
TypeScript
|
/**
|
||
|
* 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<string, ThemeConfig> = {
|
||
|
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)];
|
||
|
}
|