{ "version": 3, "sources": ["../../../../server/chat-commands/avatars.tsx"], "sourcesContent": ["/**\r\n * Avatar commands\r\n * Pokemon Showdown - http://pokemonshowdown.com/\r\n *\r\n * @license MIT\r\n * @author Zarel \r\n */\r\n\r\nimport {FS, Net} from \"../../lib\";\r\n\r\nconst AVATARS_FILE = 'config/avatars.json';\r\n\r\n/**\r\n * Avatar IDs should be in one of these formats:\r\n * - 'cynthia' - official avatars in https://play.pokemonshowdown.com/sprites/trainers/\r\n * - '#splxraiders' - hosted custom avatars in https://play.pokemonshowdown.com/sprites/trainers-custom/\r\n * - 'example.png' - side server custom avatars in config/avatars/ in your server\r\n */\r\ntype AvatarID = string;\r\nconst AVATAR_FORMATS_MESSAGE = Config.serverid === 'showdown' ?\r\n\t\"Custom avatars start with '#', like '#splxraiders'.\" :\r\n\t\"Custom avatars look like 'example.png'. Custom avatars should be put in `config/avatars/`. Your server must be registered for custom avatars to work.\";\r\n\r\ninterface AvatarEntry {\r\n\ttimeReceived?: number;\r\n\ttimeUpdated?: number;\r\n\tnotNotified?: boolean;\r\n\t/**\r\n\t * First entry is the personal avatar.\r\n\t * Will never only contain `null` - the entry should just be deleted if it does.\r\n\t */\r\n\tallowed: [AvatarID | null, ...AvatarID[]];\r\n\t/**\r\n\t * undefined = personal avatar;\r\n\t * null = no default (shouldn't occur in practice);\r\n\t * (ignored during Christmas, where the any avatar is default if it ends in `xmas`.)\r\n\t */\r\n\tdefault?: AvatarID | null;\r\n}\r\n\r\nconst customAvatars: {[userid: string]: AvatarEntry} = Object.create(null);\r\n\r\ntry {\r\n\tconst configAvatars = JSON.parse(FS(AVATARS_FILE).readSync());\r\n\tObject.assign(customAvatars, configAvatars);\r\n} catch {\r\n\tif (Config.customavatars) {\r\n\t\tfor (const userid in Config.customavatars) {\r\n\t\t\tcustomAvatars[userid] = {allowed: [Config.customavatars[userid]]};\r\n\t\t}\r\n\t}\r\n\tif (Config.allowedavatars) {\r\n\t\tfor (const avatar in Config.customavatars) {\r\n\t\t\tfor (const userid of Config.customavatars[avatar]) {\r\n\t\t\t\tif (!customAvatars[userid]) customAvatars[userid] = {allowed: [null]};\r\n\t\t\t\tcustomAvatars[userid].allowed.push(avatar);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\tFS(AVATARS_FILE).writeSync(JSON.stringify(customAvatars));\r\n}\r\nif ((Config.customavatars && Object.keys(Config.customavatars).length) || Config.allowedavatars) {\r\n\tMonitor.crashlog(\"Please remove 'customavatars' and 'allowedavatars' from Config (config/config.js). Your avatars have been migrated to the new '/addavatar' system.\");\r\n}\r\nfunction saveCustomAvatars(instant?: boolean) {\r\n\tFS(AVATARS_FILE).writeUpdate(() => JSON.stringify(customAvatars), {throttle: instant ? null : 60_000});\r\n}\r\n\r\nexport const Avatars = new class {\r\n\tavatars = customAvatars;\r\n\tuserCanUse(user: User, avatar: string): AvatarID | null {\r\n\t\tlet validatedAvatar = null;\r\n\t\tfor (const id of [user.id, ...user.previousIDs]) {\r\n\t\t\tvalidatedAvatar = Avatars.canUse(id, avatar);\r\n\t\t\tif (validatedAvatar) break;\r\n\t\t}\r\n\t\treturn validatedAvatar;\r\n\t}\r\n\tcanUse(userid: ID, avatar: string): AvatarID | null {\r\n\t\tavatar = avatar.toLowerCase().replace(/[^a-z0-9-.#]+/g, '');\r\n\t\tif (OFFICIAL_AVATARS.has(avatar)) return avatar;\r\n\r\n\t\tconst customs = customAvatars[userid]?.allowed;\r\n\t\tif (!customs) return null;\r\n\r\n\t\tif (customs.includes(avatar)) return avatar;\r\n\t\tif (customs.includes('#' + avatar)) return '#' + avatar;\r\n\t\tif (avatar.startsWith('#') && customs.includes(avatar.slice(1))) return avatar.slice(1);\r\n\t\treturn null;\r\n\t}\r\n\tsave(instant?: boolean) {\r\n\t\tsaveCustomAvatars(instant);\r\n\t}\r\n\tsrc(avatar: AvatarID) {\r\n\t\tif (avatar.includes('.')) return '';\r\n\t\tconst avatarUrl = avatar.startsWith('#') ? `trainers-custom/${avatar.slice(1)}.png` : `trainers/${avatar}.png`;\r\n\t\treturn `https://${Config.routes.client}/sprites/${avatarUrl}`;\r\n\t}\r\n\texists(avatar: string) {\r\n\t\tif (avatar.includes('.')) {\r\n\t\t\treturn FS(`config/avatars/${avatar}`).isFile();\r\n\t\t}\r\n\t\tif (!avatar.startsWith('#')) {\r\n\t\t\treturn OFFICIAL_AVATARS.has(avatar);\r\n\t\t}\r\n\t\treturn Net(Avatars.src(avatar)).get().then(() => true).catch(() => false);\r\n\t}\r\n\tconvert(avatar: string) {\r\n\t\tif (avatar.startsWith('#') && avatar.includes('.')) return avatar.slice(1);\r\n\t\treturn avatar;\r\n\t}\r\n\tasync validate(avatar: string, options?: {rejectOfficial?: boolean}) {\r\n\t\tavatar = this.convert(avatar);\r\n\t\tif (!/^#?[a-z0-9-]+$/.test(avatar) && !/^[a-z0-9.-]+$/.test(avatar)) {\r\n\t\t\tthrow new Chat.ErrorMessage(`Avatar \"${avatar}\" is not in a valid format. ${AVATAR_FORMATS_MESSAGE}`);\r\n\t\t}\r\n\t\tif (!await this.exists(avatar)) {\r\n\t\t\tthrow new Chat.ErrorMessage(`Avatar \"${avatar}\" doesn't exist. ${AVATAR_FORMATS_MESSAGE}`);\r\n\t\t}\r\n\t\tif (options?.rejectOfficial && /^[a-z0-9-]+$/.test(avatar)) {\r\n\t\t\tthrow new Chat.ErrorMessage(`Avatar \"${avatar}\" is an official avatar that all users already have access to.`);\r\n\t\t}\r\n\t\treturn avatar;\r\n\t}\r\n\timg(avatar: AvatarID, noAlt?: boolean) {\r\n\t\tconst src = Avatars.src(avatar);\r\n\t\tif (!src) return {avatar};\r\n\t\treturn ;\r\n\t}\r\n\tgetDefault(userid: ID) {\r\n\t\tconst entry = customAvatars[userid];\r\n\t\tif (!entry) return null;\r\n\t\tconst DECEMBER = 11; // famous JavaScript issue\r\n\t\tif (new Date().getMonth() === DECEMBER && entry.allowed.some(avatar => avatar?.endsWith('xmas'))) {\r\n\t\t\treturn entry.allowed.find(avatar => avatar?.endsWith('xmas'));\r\n\t\t}\r\n\t\treturn entry.default === undefined ? entry.allowed[0] : entry.default;\r\n\t}\r\n\t/** does not include validation */\r\n\tsetDefault(userid: ID, avatar: AvatarID | null) {\r\n\t\tif (avatar === this.getDefault(userid)) return;\r\n\t\tif (!customAvatars[userid]) customAvatars[userid] = {allowed: [null]};\r\n\t\tconst entry = customAvatars[userid];\r\n\r\n\t\tif (avatar === entry.allowed[0]) {\r\n\t\t\tdelete entry.default;\r\n\t\t} else {\r\n\t\t\tentry.default = avatar;\r\n\t\t}\r\n\t\tsaveCustomAvatars();\r\n\t}\r\n\taddAllowed(userid: ID, avatar: AvatarID | null) {\r\n\t\tif (!customAvatars[userid]) customAvatars[userid] = {allowed: [null]};\r\n\r\n\t\tif (customAvatars[userid].allowed.includes(avatar)) return false;\r\n\r\n\t\tcustomAvatars[userid].allowed.push(avatar);\r\n\t\tcustomAvatars[userid].notNotified = true;\r\n\t\tthis.tryNotify(Users.get(userid));\r\n\t\treturn true;\r\n\t}\r\n\tremoveAllowed(userid: ID, avatar: AvatarID | null) {\r\n\t\tconst entry = customAvatars[userid];\r\n\t\tif (!entry?.allowed.includes(avatar)) return false;\r\n\r\n\t\tif (entry.allowed[0] === avatar) {\r\n\t\t\tentry.allowed[0] = null;\r\n\t\t} else {\r\n\t\t\tentry.allowed = entry.allowed.filter(a => a !== avatar) as any;\r\n\t\t}\r\n\t\tif (!entry.allowed.some(Boolean)) delete customAvatars[userid];\r\n\t\treturn true;\r\n\t}\r\n\taddPersonal(userid: ID, avatar: AvatarID | null) {\r\n\t\tif (!customAvatars[userid]) customAvatars[userid] = {allowed: [null]};\r\n\t\tconst entry = customAvatars[userid];\r\n\r\n\t\tif (entry.allowed.includes(avatar)) return false;\r\n\r\n\t\tentry.timeReceived ||= Date.now();\r\n\t\tentry.timeUpdated = Date.now();\r\n\t\tif (!entry.allowed[0]) {\r\n\t\t\tentry.allowed[0] = avatar;\r\n\t\t} else {\r\n\t\t\tentry.allowed.unshift(avatar);\r\n\t\t}\r\n\t\tdelete entry.default;\r\n\t\tentry.notNotified = true;\r\n\t\tthis.tryNotify(Users.get(userid));\r\n\t\treturn true;\r\n\t}\r\n\thandleLogin(user: User) {\r\n\t\tconst avatar = this.getDefault(user.id);\r\n\t\tif (avatar) user.avatar = avatar;\r\n\t\tthis.tryNotify(user);\r\n\t}\r\n\ttryNotify(user?: User | null) {\r\n\t\tif (!user) return;\r\n\r\n\t\tconst entry = customAvatars[user.id];\r\n\t\tif (entry?.notNotified) {\r\n\t\t\tuser.send(\r\n\t\t\t\t`|pm|&|${user.getIdentity()}|/raw ` +\r\n\t\t\t\tChat.html`${<>\r\n\t\t\t\t\t

\r\n\t\t\t\t\t\tYou have a new custom avatar!\r\n\t\t\t\t\t

\r\n\t\t\t\t\t

\r\n\t\t\t\t\t\t{entry.allowed.map(avatar => avatar && [Avatars.img(avatar), ' '])}\r\n\t\t\t\t\t

\r\n\t\t\t\t\tUse for usage instructions.\r\n\t\t\t\t}`\r\n\t\t\t);\r\n\t\t\tdelete entry.notNotified;\r\n\t\t\tsaveCustomAvatars();\r\n\t\t}\r\n\t}\r\n};\r\n\r\nfunction listUsers(users: string[]) {\r\n\treturn users.flatMap((userid, i) => [i ? ', ' : null, {userid}]);\r\n}\r\n\r\nconst OFFICIAL_AVATARS = new Set([\r\n\t'aaron',\r\n\t'acetrainercouple-gen3', 'acetrainercouple',\r\n\t'acetrainerf-gen1', 'acetrainerf-gen1rb', 'acetrainerf-gen2', 'acetrainerf-gen3', 'acetrainerf-gen3rs', 'acetrainerf-gen4dp', 'acetrainerf-gen4', 'acetrainerf',\r\n\t'acetrainer-gen1', 'acetrainer-gen1rb', 'acetrainer-gen2', 'acetrainer-gen3jp', 'acetrainer-gen3', 'acetrainer-gen3rs', 'acetrainer-gen4dp', 'acetrainer-gen4', 'acetrainer',\r\n\t'acetrainersnowf',\r\n\t'acetrainersnow',\r\n\t'agatha-gen1', 'agatha-gen1rb', 'agatha-gen3',\r\n\t'alder',\r\n\t'anabel-gen3',\r\n\t'archer',\r\n\t'archie-gen3',\r\n\t'argenta',\r\n\t'ariana',\r\n\t'aromalady-gen3', 'aromalady-gen3rs', 'aromalady',\r\n\t'artist-gen4', 'artist',\r\n\t'ash-alola', 'ash-hoenn', 'ash-kalos', 'ash-unova', 'ash-capbackward', 'ash-johto', 'ash-sinnoh', 'ash',\r\n\t'backersf',\r\n\t'backers',\r\n\t'backpackerf',\r\n\t'backpacker',\r\n\t'baker',\r\n\t'barry',\r\n\t'battlegirl-gen3', 'battlegirl-gen4', 'battlegirl',\r\n\t'beauty-gen1', 'beauty-gen1rb', 'beauty-gen2jp', 'beauty-gen2', 'beauty-gen3', 'beauty-gen3rs', 'beauty-gen4dp', 'beauty-gen5bw2', 'beauty',\r\n\t'bellelba',\r\n\t'bellepa',\r\n\t'benga',\r\n\t'bertha',\r\n\t'bianca-pwt', 'bianca',\r\n\t'biker-gen1', 'biker-gen1rb', 'biker-gen2', 'biker-gen3', 'biker-gen4', 'biker',\r\n\t'bill-gen3',\r\n\t'birch-gen3',\r\n\t'birdkeeper-gen1', 'birdkeeper-gen1rb', 'birdkeeper-gen2', 'birdkeeper-gen3', 'birdkeeper-gen3rs', 'birdkeeper-gen4dp', 'birdkeeper',\r\n\t'blackbelt-gen1', 'blackbelt-gen1rb', 'blackbelt-gen2', 'blackbelt-gen3', 'blackbelt-gen3rs', 'blackbelt-gen4dp', 'blackbelt-gen4', 'blackbelt',\r\n\t'blaine-gen1', 'blaine-gen1rb', 'blaine-gen2', 'blaine-gen3', 'blaine',\r\n\t'blue-gen1champion', 'blue-gen1', 'blue-gen1rbchampion', 'blue-gen1rb', 'blue-gen1rbtwo', 'blue-gen1two', 'blue-gen2', 'blue-gen3champion', 'blue-gen3', 'blue-gen3two', 'blue',\r\n\t'boarder-gen2', 'boarder',\r\n\t'brandon-gen3',\r\n\t'brawly-gen3', 'brawly',\r\n\t'brendan-gen3', 'brendan-gen3rs',\r\n\t'brock-gen1', 'brock-gen1rb', 'brock-gen2', 'brock-gen3', 'brock',\r\n\t'bruno-gen1', 'bruno-gen1rb', 'bruno-gen2', 'bruno-gen3', 'bruno',\r\n\t'brycenman',\r\n\t'brycen',\r\n\t'buck',\r\n\t'bugcatcher-gen1', 'bugcatcher-gen1rb', 'bugcatcher-gen2', 'bugcatcher-gen3', 'bugcatcher-gen3rs', 'bugcatcher-gen4dp', 'bugcatcher',\r\n\t'bugmaniac-gen3',\r\n\t'bugsy-gen2', 'bugsy',\r\n\t'burgh',\r\n\t'burglar-gen1', 'burglar-gen1rb', 'burglar-gen2', 'burglar-gen3', 'burglar',\r\n\t'byron',\r\n\t'caitlin-gen4', 'caitlin',\r\n\t'cameraman',\r\n\t'camper-gen2', 'camper-gen3', 'camper-gen3rs', 'camper',\r\n\t'candice',\r\n\t'channeler-gen1', 'channeler-gen1rb', 'channeler-gen3',\r\n\t'cheren-gen5bw2', 'cheren',\r\n\t'cheryl',\r\n\t'chili',\r\n\t'chuck-gen2', 'chuck',\r\n\t'cilan',\r\n\t'clair-gen2', 'clair',\r\n\t'clay',\r\n\t'clemont',\r\n\t'clerkf',\r\n\t'clerk-boss', 'clerk',\r\n\t'clown',\r\n\t'collector-gen3', 'collector',\r\n\t'colress',\r\n\t'courtney-gen3',\r\n\t'cowgirl',\r\n\t'crasherwake',\r\n\t'cress',\r\n\t'crushgirl-gen3',\r\n\t'crushkin-gen3',\r\n\t'cueball-gen1', 'cueball-gen1rb', 'cueball-gen3',\r\n\t'cyclistf-gen4', 'cyclistf',\r\n\t'cyclist-gen4', 'cyclist',\r\n\t'cynthia-gen4', 'cynthia',\r\n\t'cyrus',\r\n\t'dahlia',\r\n\t'daisy-gen3',\r\n\t'dancer',\r\n\t'darach-caitlin', 'darach',\r\n\t'dawn-gen4pt', 'dawn',\r\n\t'depotagent',\r\n\t'doctor',\r\n\t'doubleteam',\r\n\t'dragontamer-gen3', 'dragontamer',\r\n\t'drake-gen3',\r\n\t'drayden',\r\n\t'elesa-gen5bw2', 'elesa',\r\n\t'emmet',\r\n\t'engineer-gen1', 'engineer-gen1rb', 'engineer-gen3',\r\n\t'erika-gen1', 'erika-gen1rb', 'erika-gen2', 'erika-gen3', 'erika',\r\n\t'ethan-gen2c', 'ethan-gen2', 'ethan-pokeathlon', 'ethan',\r\n\t'eusine-gen2', 'eusine',\r\n\t'expertf-gen3',\r\n\t'expert-gen3',\r\n\t'falkner-gen2',\r\n\t'falkner',\r\n\t'fantina',\r\n\t'firebreather-gen2',\r\n\t'firebreather',\r\n\t'fisherman-gen1', 'fisherman-gen1rb', 'fisherman-gen2jp', 'fisherman-gen3', 'fisherman-gen3rs', 'fisherman-gen4', 'fisherman',\r\n\t'flannery-gen3', 'flannery',\r\n\t'flint',\r\n\t'galacticgruntf',\r\n\t'galacticgrunt',\r\n\t'gambler-gen1', 'gambler-gen1rb', 'gambler',\r\n\t'gamer-gen3',\r\n\t'gardenia',\r\n\t'gentleman-gen1', 'gentleman-gen1rb', 'gentleman-gen2', 'gentleman-gen3', 'gentleman-gen3rs', 'gentleman-gen4dp', 'gentleman-gen4', 'gentleman',\r\n\t'ghetsis-gen5bw', 'ghetsis',\r\n\t'giovanni-gen1', 'giovanni-gen1rb', 'giovanni-gen3', 'giovanni',\r\n\t'glacia-gen3',\r\n\t'greta-gen3',\r\n\t'grimsley',\r\n\t'guitarist-gen2', 'guitarist-gen3', 'guitarist-gen4', 'guitarist',\r\n\t'harlequin',\r\n\t'hexmaniac-gen3jp', 'hexmaniac-gen3',\r\n\t'hiker-gen1', 'hiker-gen1rb', 'hiker-gen2', 'hiker-gen3', 'hiker-gen3rs', 'hiker-gen4', 'hiker',\r\n\t'hilbert-wonderlauncher', 'hilbert',\r\n\t'hilda-wonderlauncher', 'hilda',\r\n\t'hooligans',\r\n\t'hoopster',\r\n\t'hugh',\r\n\t'idol',\r\n\t'infielder',\r\n\t'ingo',\r\n\t'interviewers-gen3',\r\n\t'interviewers',\r\n\t'iris-gen5bw2', 'iris',\r\n\t'janine-gen2', 'janine',\r\n\t'janitor',\r\n\t'jasmine-gen2', 'jasmine',\r\n\t'jessiejames-gen1',\r\n\t'jogger',\r\n\t'jrtrainerf-gen1', 'jrtrainerf-gen1rb',\r\n\t'jrtrainer-gen1', 'jrtrainer-gen1rb',\r\n\t'juan-gen3',\r\n\t'juan',\r\n\t'juggler-gen1', 'juggler-gen1rb', 'juggler-gen2', 'juggler-gen3', 'juggler',\r\n\t'juniper',\r\n\t'jupiter',\r\n\t'karen-gen2', 'karen',\r\n\t'kimonogirl-gen2', 'kimonogirl',\r\n\t'kindler-gen3',\r\n\t'koga-gen1', 'koga-gen2', 'koga-gen1rb', 'koga-gen3', 'koga',\r\n\t'kris-gen2',\r\n\t'lady-gen3', 'lady-gen3rs', 'lady-gen4', 'lady',\r\n\t'lance-gen1', 'lance-gen1rb', 'lance-gen2', 'lance-gen3', 'lance',\r\n\t'lass-gen1', 'lass-gen1rb', 'lass-gen2', 'lass-gen3', 'lass-gen3rs', 'lass-gen4dp', 'lass-gen4', 'lass',\r\n\t'leaf-gen3',\r\n\t'lenora',\r\n\t'linebacker',\r\n\t'li',\r\n\t'liza',\r\n\t'lorelei-gen1', 'lorelei-gen1rb', 'lorelei-gen3',\r\n\t'ltsurge-gen1', 'ltsurge-gen1rb', 'ltsurge-gen2', 'ltsurge-gen3', 'ltsurge',\r\n\t'lucas-gen4pt', 'lucas',\r\n\t'lucian',\r\n\t'lucy-gen3',\r\n\t'lyra-pokeathlon', 'lyra',\r\n\t'madame-gen4dp', 'madame-gen4', 'madame',\r\n\t'maid-gen4', 'maid',\r\n\t'marley',\r\n\t'marlon',\r\n\t'marshal',\r\n\t'mars',\r\n\t'matt-gen3',\r\n\t'maxie-gen3',\r\n\t'may-gen3', 'may-gen3rs',\r\n\t'maylene',\r\n\t'medium-gen2jp', 'medium',\r\n\t'mira',\r\n\t'misty-gen1', 'misty-gen2', 'misty-gen1rb', 'misty-gen3', 'misty',\r\n\t'morty-gen2', 'morty',\r\n\t'mrfuji-gen3',\r\n\t'musician',\r\n\t'nate-wonderlauncher', 'nate',\r\n\t'ninjaboy-gen3', 'ninjaboy',\r\n\t'noland-gen3',\r\n\t'norman-gen3', 'norman',\r\n\t'n',\r\n\t'nurse',\r\n\t'nurseryaide',\r\n\t'oak-gen1', 'oak-gen1rb', 'oak-gen2', 'oak-gen3',\r\n\t'officer-gen2',\r\n\t'oldcouple-gen3',\r\n\t'painter-gen3',\r\n\t'palmer',\r\n\t'parasollady-gen3', 'parasollady-gen4', 'parasollady',\r\n\t'petrel',\r\n\t'phoebe-gen3',\r\n\t'picnicker-gen2', 'picnicker-gen3', 'picnicker-gen3rs', 'picnicker',\r\n\t'pilot',\r\n\t'plasmagruntf-gen5bw', 'plasmagruntf',\r\n\t'plasmagrunt-gen5bw', 'plasmagrunt',\r\n\t'pokefanf-gen2', 'pokefanf-gen3', 'pokefanf-gen4', 'pokefanf',\r\n\t'pokefan-gen2', 'pokefan-gen3', 'pokefan-gen4', 'pokefan',\r\n\t'pokekid',\r\n\t'pokemaniac-gen1', 'pokemaniac-gen1rb', 'pokemaniac-gen2', 'pokemaniac-gen3', 'pokemaniac-gen3rs', 'pokemaniac',\r\n\t'pokemonbreederf-gen3', 'pokemonbreederf-gen3frlg', 'pokemonbreederf-gen4', 'pokemonbreederf',\r\n\t'pokemonbreeder-gen3', 'pokemonbreeder-gen4', 'pokemonbreeder',\r\n\t'pokemonrangerf-gen3', 'pokemonrangerf-gen3rs', 'pokemonrangerf-gen4', 'pokemonrangerf',\r\n\t'pokemonranger-gen3', 'pokemonranger-gen3rs', 'pokemonranger-gen4', 'pokemonranger',\r\n\t'policeman-gen4', 'policeman',\r\n\t'preschoolerf',\r\n\t'preschooler',\r\n\t'proton',\r\n\t'pryce-gen2', 'pryce',\r\n\t'psychicf-gen3', 'psychicf-gen3rs', 'psychicf-gen4', 'psychicfjp-gen3', 'psychicf',\r\n\t'psychic-gen1', 'psychic-gen1rb', 'psychic-gen2', 'psychic-gen3', 'psychic-gen3rs', 'psychic-gen4', 'psychic',\r\n\t'rancher',\r\n\t'red-gen1main', 'red-gen1', 'red-gen1rb', 'red-gen1title', 'red-gen2', 'red-gen3', 'red',\r\n\t'reporter',\r\n\t'richboy-gen3', 'richboy-gen4', 'richboy',\r\n\t'riley',\r\n\t'roark',\r\n\t'rocker-gen1', 'rocker-gen1rb', 'rocker-gen3',\r\n\t'rocket-gen1', 'rocket-gen1rb',\r\n\t'rocketgruntf-gen2', 'rocketgruntf',\r\n\t'rocketgrunt-gen2', 'rocketgrunt',\r\n\t'rocketexecutivef-gen2',\r\n\t'rocketexecutive-gen2',\r\n\t'rood',\r\n\t'rosa-wonderlauncher', 'rosa',\r\n\t'roughneck-gen4', 'roughneck',\r\n\t'roxanne-gen3', 'roxanne',\r\n\t'roxie',\r\n\t'ruinmaniac-gen3', 'ruinmaniac-gen3rs', 'ruinmaniac',\r\n\t'sabrina-gen1', 'sabrina-gen1rb', 'sabrina-gen2', 'sabrina-gen3', 'sabrina',\r\n\t'sage-gen2', 'sage-gen2jp', 'sage',\r\n\t'sailor-gen1', 'sailor-gen1rb', 'sailor-gen2', 'sailor-gen3jp', 'sailor-gen3', 'sailor-gen3rs', 'sailor',\r\n\t'saturn',\r\n\t'schoolboy-gen2',\r\n\t'schoolkidf-gen3', 'schoolkidf-gen4', 'schoolkidf',\r\n\t'schoolkid-gen3', 'schoolkid-gen4dp', 'schoolkid-gen4', 'schoolkid',\r\n\t'scientistf',\r\n\t'scientist-gen1', 'scientist-gen1rb', 'scientist-gen2', 'scientist-gen3', 'scientist-gen4dp', 'scientist-gen4', 'scientist',\r\n\t'shadowtriad',\r\n\t'shauntal',\r\n\t'shelly-gen3',\r\n\t'sidney-gen3',\r\n\t'silver-gen2kanto', 'silver-gen2', 'silver',\r\n\t'sisandbro-gen3', 'sisandbro-gen3rs', 'sisandbro',\r\n\t'skierf-gen4dp', 'skierf',\r\n\t'skier-gen2', 'skier',\r\n\t'skyla',\r\n\t'smasher',\r\n\t'spenser-gen3',\r\n\t'srandjr-gen3',\r\n\t'steven-gen3', 'steven',\r\n\t'striker',\r\n\t'supernerd-gen1', 'supernerd-gen1rb', 'supernerd-gen2', 'supernerd-gen3', 'supernerd',\r\n\t'swimmerf-gen2', 'swimmerf-gen3', 'swimmerf-gen3rs', 'swimmerf-gen4dp', 'swimmerf-gen4', 'swimmerfjp-gen2', 'swimmerf',\r\n\t'swimmer-gen1', 'swimmer-gen1rb', 'swimmer-gen4dp', 'swimmer-gen4jp', 'swimmer-gen4', 'swimmerm-gen2', 'swimmerm-gen3', 'swimmerm-gen3rs', 'swimmer',\r\n\t'tabitha-gen3',\r\n\t'tamer-gen1', 'tamer-gen1rb', 'tamer-gen3',\r\n\t'tateandliza-gen3',\r\n\t'tate',\r\n\t'teacher-gen2', 'teacher',\r\n\t'teamaquabeta-gen3',\r\n\t'teamaquagruntf-gen3',\r\n\t'teamaquagruntm-gen3',\r\n\t'teammagmagruntf-gen3',\r\n\t'teammagmagruntm-gen3',\r\n\t'teamrocketgruntf-gen3',\r\n\t'teamrocketgruntm-gen3',\r\n\t'teamrocket',\r\n\t'thorton',\r\n\t'triathletebikerf-gen3',\r\n\t'triathletebikerm-gen3',\r\n\t'triathleterunnerf-gen3',\r\n\t'triathleterunnerm-gen3',\r\n\t'triathleteswimmerf-gen3',\r\n\t'triathleteswimmerm-gen3',\r\n\t'tuberf-gen3', 'tuberf-gen3rs', 'tuberf',\r\n\t'tuber-gen3', 'tuber',\r\n\t'tucker-gen3',\r\n\t'twins-gen2', 'twins-gen3', 'twins-gen3rs', 'twins-gen4dp', 'twins-gen4', 'twins',\r\n\t'unknownf',\r\n\t'unknown',\r\n\t'veteranf',\r\n\t'veteran-gen4', 'veteran',\r\n\t'volkner',\r\n\t'waiter-gen4dp', 'waiter-gen4', 'waiter',\r\n\t'waitress-gen4', 'waitress',\r\n\t'wallace-gen3', 'wallace-gen3rs', 'wallace',\r\n\t'wally-gen3',\r\n\t'wattson-gen3', 'wattson',\r\n\t'whitney-gen2', 'whitney',\r\n\t'will-gen2', 'will',\r\n\t'winona-gen3', 'winona',\r\n\t'worker-gen4',\r\n\t'workerice',\r\n\t'worker',\r\n\t'yellow',\r\n\t'youngcouple-gen3', 'youngcouple-gen3rs', 'youngcouple-gen4dp', 'youngcouple',\r\n\t'youngster-gen1', 'youngster-gen1rb', 'youngster-gen2', 'youngster-gen3', 'youngster-gen3rs', 'youngster-gen4', 'youngster-gen4dp', 'youngster',\r\n\t'zinzolin',\r\n]);\r\n\r\nconst OFFICIAL_AVATARS_BELIOT419 = new Set([\r\n\t'acerola', 'aetheremployee', 'aetheremployeef', 'aetherfoundation', 'aetherfoundationf', 'anabel',\r\n\t'beauty-gen7', 'blue-gen7', 'burnet', 'colress-gen7', 'dexio', 'elio', 'faba', 'gladion-stance',\r\n\t'gladion', 'grimsley-gen7', 'hapu', 'hau-stance', 'hau', 'hiker-gen7', 'ilima', 'kahili', 'kiawe',\r\n\t'kukui-stand', 'kukui', 'lana', 'lass-gen7', 'lillie-z', 'lillie', 'lusamine-nihilego', 'lusamine',\r\n\t'mallow', 'mina', 'molayne', 'nanu', 'officeworker', 'olivia', 'plumeria', 'pokemonbreeder-gen7',\r\n\t'pokemonbreederf-gen7', 'preschoolers', 'red-gen7', 'risingstar', 'risingstarf', 'ryuki',\r\n\t'samsonoak', 'selene', 'sightseerf', 'sina', 'sophocles', 'teacher-gen7', 'theroyal', 'wally',\r\n\t'wicke', 'youngathlete', 'youngathletef', 'youngster-gen7',\r\n]);\r\n\r\nconst OFFICIAL_AVATARS_GNOMOWLADNY = new Set([\r\n\t'az', 'brawly-gen6', 'bryony', 'drasna', 'evelyn', 'furisodegirl-black', 'furisodegirl-pink', 'guzma',\r\n\t'hala', 'korrina', 'malva', 'nita', 'olympia', 'ramos', 'shelly', 'sidney', 'siebold', 'tierno',\r\n\t'valerie', 'viola', 'wallace-gen6', 'wikstrom', 'winona-gen6', 'wulfric', 'xerosic', 'youngn', 'zinnia',\r\n]);\r\n\r\nconst OFFICIAL_AVATARS_BRUMIRAGE = new Set([\r\n\t'adaman', 'agatha-lgpe', 'akari', 'allister', 'archie-gen6', 'arezu', 'avery', 'ballguy', 'bea', 'bede',\r\n\t'bede-leader', 'brendan-contest', 'burnet-radar', 'calaba', 'calem', 'chase', 'cogita', 'cynthia-gen7',\r\n\t'cynthia-masters', 'diantha', 'doctor-gen8', 'elaine', 'gloria', 'gordie', 'hilda-masters2', 'hop',\r\n\t'irida', 'kabu', 'klara', 'koga-lgpe', 'leon', 'leon-tower', 'lian', 'lisia', 'lorelei-lgpe', 'magnolia',\r\n\t'mai', 'marnie', 'may-contest', 'melony', 'milo', 'mina-lgpe', 'mustard', 'mustard-master', 'nessa',\r\n\t'oleana', 'opal', 'peony', 'pesselle', 'phoebe-gen6', 'piers', 'raihan', 'rei', 'rose', 'sabi', 'sada-ai',\r\n\t'sanqua', 'shielbert', 'sonia', 'sonia-professor', 'sordward', 'sordward-shielbert', 'tateandliza-gen6',\r\n\t'turo-ai', 'victor', 'victor-dojo', 'volo', 'yellgrunt', 'yellgruntf', 'zisu',\r\n]);\r\n\r\nconst OFFICIAL_AVATARS_ZACWEAVILE = new Set([\r\n\t'alain', 'charm', 'coin', 'courtney', 'dulse', 'elio-usum', 'emma', 'essentia', 'gloria-dojo',\r\n\t'magmagrunt', 'magmagruntf', 'marnie-league', 'morgan', 'phyco', 'selene-usum', 'shauna', 'skullgrunt',\r\n\t'skullgruntf', 'soliera', 'zossie', 'arven-v', 'dexio-gen6', 'flannery-gen6', 'green', 'grusha', 'mela',\r\n\t'norman-gen6', 'penny', 'sina-gen6', 'steven-gen6', 'atticus', 'eri', 'giacomo', 'ortega',\r\n\t'ginchiyo-conquest', 'hanbei-conquest', 'hero-conquest', 'hero2-conquest', 'heroine-conquest',\r\n\t'heroine2-conquest', 'kunoichi-conquest', 'kunoichi2-conquest', 'masamune-conquest', 'nobunaga-conquest',\r\n\t'oichi-conquest', 'ranmaru-conquest', 'serena-anime',\r\n]);\r\n\r\nconst OFFICIAL_AVATARS_KYLEDOVE = new Set([\r\n\t'acetrainerf-gen6', 'acetrainerf-gen6xy', 'acetrainer-gen6', 'acetrainer-gen6xy', 'aquagrunt', 'aquagruntf',\r\n\t'aromalady-gen6', 'artistf-gen6', 'artist-gen6', 'artist-gen8', 'backpacker-gen6', 'backpacker-gen8',\r\n\t'battlegirl-gen6', 'battlegirl-gen6xy', 'beauty-gen6', 'beauty-gen6xy', 'beauty-gen8', 'birdkeeper-gen6',\r\n\t'blackbelt-gen6', 'blackbelt-gen8', 'bugcatcher-gen6', 'bugmaniac-gen6', 'butler', 'cabbie', 'cafemaster',\r\n\t'cameraman-gen6', 'cameraman-gen8', 'camper-gen6', 'chef', 'clerkf-gen8', 'clerk-gen8', 'collector-gen6',\r\n\t'cook', 'dancer-gen8', 'delinquent', 'doctorf-gen8', 'dragontamer-gen6', 'expertf-gen6', 'expert-gen6',\r\n\t'fairytalegirl', 'fisher-gen8', 'fisherman-gen6', 'fisherman-gen6xy', 'freediver', 'furisodegirl-blue',\r\n\t'furisodegirl-white', 'garcon', 'gardener', 'gentleman-gen6', 'gentleman-gen6xy', 'gentleman-gen8',\r\n\t'guitarist-gen6', 'hexmaniac-gen6', 'hiker-gen6', 'hiker-gen8', 'interviewers-gen6', 'kindler-gen6', 'lady-gen6',\r\n\t'lady-gen6oras', 'lass-gen6', 'lass-gen6oras', 'lass-gen8', 'leaguestaff', 'leaguestafff', 'madame-gen6',\r\n\t'madame-gen8', 'maid-gen6', 'model-gen8', 'musician-gen8', 'ninjaboy-gen6', 'owner', 'parasollady-gen6',\r\n\t'picnicker-gen6', 'pokefanf-gen6', 'pokefanf-gen6xy', 'pokefan-gen6', 'pokefan-gen6xy', 'pokekidf-gen8',\r\n\t'pokekid-gen8', 'pokemaniac-gen6', 'pokemonbreederf-gen6', 'pokemonbreederf-gen6xy', 'pokemonbreederf-gen8',\r\n\t'pokemonbreeder-gen6', 'pokemonbreeder-gen6xy', 'pokemonbreeder-gen8', 'pokemonrangerf-gen6', 'pokemonrangerf-gen6xy',\r\n\t'pokemonranger-gen6', 'pokemonranger-gen6xy', 'policeman-gen8', 'postman', 'preschoolerf-gen6', 'preschooler-gen6',\r\n\t'psychic-gen6', 'punkgirl', 'punkguy', 'railstaff', 'reporter-gen6', 'reporter-gen8', 'richboy-gen6', 'richboy-gen6xy',\r\n\t'risingstarf-gen6', 'risingstar-gen6', 'rollerskater', 'rollerskaterf', 'ruinmaniac-gen6', 'sailor-gen6', 'schoolboy',\r\n\t'schoolgirl', 'schoolkidf-gen6', 'schoolkidf-gen8', 'schoolkid-gen6', 'schoolkid-gen8', 'scientistf-gen6',\r\n\t'scientist-gen6', 'scubadiver', 'skytrainer', 'skytrainerf', 'streetthug', 'swimmerf2-gen6', 'swimmerf-gen6',\r\n\t'swimmerf-gen8', 'swimmer-gen6', 'swimmer-gen8', 'teammates', 'tourist', 'touristf', 'touristf2',\r\n\t'triathletebiker-gen6', 'triathleterunner-gen6', 'triathleteswimmer-gen6', 'tuberf-gen6', 'tuber-gen6', 'twins-gen6',\r\n\t'veteranf-gen6', 'veteran-gen6', 'waitress-gen6', 'worker2-gen6', 'workerf-gen8', 'worker-gen6', 'worker-gen8',\r\n\t'youngcouple-gen6', 'youngster-gen6', 'youngster-gen6xy', 'youngster-gen8',\r\n\t'acetrainer-gen7', 'acetrainerf-gen7', 'bellhop', 'blackbelt-gen7', 'collector-gen7', 'cook-gen7', 'dancer-gen7',\r\n\t'firefighter', 'fisherman-gen7', 'gentleman-gen7', 'golfer', 'janitor-gen7', 'madame-gen7', 'officeworkerf',\r\n\t'pokemoncenterlady', 'policeman-gen7', 'preschooler-gen7', 'preschoolerf-gen7', 'punkgirl-gen7', 'punkguy-gen7',\r\n\t'scientist-gen7', 'sightseer', 'surfer', 'swimmer-gen7', 'swimmerf-gen7', 'swimmerf2-gen7', 'trialguide', 'trialguidef',\r\n\t'ultraforestkartenvoy', 'veteran-gen7', 'veteranf-gen7', 'worker-gen7',\r\n\t'anthea', 'beni', 'beni-ninja', 'birch', 'blaine-lgpe', 'blue-lgpe', 'brigette', 'brock-lgpe', 'caraliss', 'cedricjuniper',\r\n\t'celio', 'charon', 'clover', 'colza', 'concordia', 'cyllene', 'dawn-contest', 'elm', 'erika-lgpe', 'fennel', 'gaeric',\r\n\t'ginter', 'giovanni-lgpe', 'grant', 'ingo-hisui', 'iscan', 'kamado', 'kamado-armor', 'kurt', 'lance-lgpe', 'lanette',\r\n\t'laventon', 'lucas-contest', 'lucy', 'lysandre', 'melli', 'misty-lgpe', 'noland', 'palina', 'plumeria-league', 'rowan',\r\n\t'roxanne-gen6', 'rye', 'sabrina-lgpe', 'scott', 'securitycorps', 'securitycorpsf', 'serena', 'sycamore', 'taohua', 'vessa',\r\n\t'anthe', 'anvin', 'burglar-lgpe', 'channeler-lgpe', 'choy', 'cynthia-anime', 'dagero', 'gentleman-lgpe', 'grace',\r\n\t'hayley', 'jasmine-contest', 'johanna-contest', 'johanna', 'mom-alola', 'mom-hoenn', 'mom-johto', 'mom-unova2', 'oak',\r\n\t'piers-league', 'psychic-lgpe', 'rosa-pokestar', 'tuli', 'worker-lgpe',\r\n\t'acerola-masters', 'bea-masters', 'blue-masters', 'brendan-masters', 'brock-masters', 'burgh-masters', 'caitlin-masters',\r\n\t'cynthia-masters2', 'cyrus-masters', 'dawn-masters', 'dawn-masters2', 'diantha-masters', 'elesa-masters', 'emmet-masters',\r\n\t'erika-masters', 'erika-masters2', 'ethan-masters', 'giovanni-masters', 'gloria-masters', 'grimsley-masters',\r\n\t'guzma-masters', 'hilbert-masters', 'hilda-masters', 'ingo-masters', 'jasmine-masters', 'korrina-masters', 'kris-masters',\r\n\t'lance-masters', 'leaf-masters', 'leon-masters', 'leon-masters2', 'lillie-masters', 'lillie-masters2', 'lillie-masters3',\r\n\t'lusamine-masters', 'lyra-masters', 'lyra-masters2', 'marnie-masters', 'marnie-masters2', 'may-masters', 'may-masters2',\r\n\t'may-masters3', 'misty-masters', 'morty-masters', 'morty-masters2', 'n-masters', 'n-masters2', 'nessa-masters',\r\n\t'raihan-masters', 'red-masters', 'rosa-masters', 'sabrina-masters', 'serena-masters', 'serena-masters2',\r\n\t'siebold-masters', 'skyla-masters', 'sonia-masters', 'steven-masters', 'steven-masters2', 'volkner-masters', 'bellis',\r\n\t'beauty-masters', 'collector-masters', 'punkgirl-masters', 'streetthug-masters', 'swimmer-masters', 'youngster-masters',\r\n\t'akari-isekai', 'allister-masters', 'arven-s', 'brassius', 'clavell-s', 'cynthia-anime2', 'cynthia-masters3', 'florian-s',\r\n\t'geeta', 'hassel', 'hilda-masters3', 'iono', 'iris-masters', 'jacq', 'juliana-s', 'katy', 'kofu', 'larry', 'miriam',\r\n\t'nemona-v', 'poppy', 'red-masters2', 'rei-isekai', 'rika', 'rosa-masters2', 'ryme', 'sada', 'stargrunt-s', 'stargrunt-v',\r\n\t'stargruntf-s', 'stargruntf-v', 'steven-masters3', 'tulip', 'turo', 'tyme', 'wally-masters', 'amelia-shuffle',\r\n\t'beauty-gen9', 'bede-masters', 'calem-masters', 'clerk-unite', 'dawn-masters3', 'dendra', 'diantha-masters2',\r\n\t'erbie-unite', 'hilbert-masters2', 'hop-masters', 'jasmine-masters2', 'lisia-masters', 'marnie-masters3', 'matt',\r\n\t'n-masters3', 'paulo-masters', 'phorus-unite', 'pokemaniac-gen9', 'serena-masters3', 'tabitha', 'tina-masters', 'trevor',\r\n\t'whitney-masters', 'youngster-gen9', 'zirco-unite',\r\n]);\r\n\r\nconst OFFICIAL_AVATARS_HYOOPPA = new Set([\r\n\t'brendan', 'maxie-gen6', 'may',\r\n]);\r\n\r\nconst OFFICIAL_AVATARS_GRAPO = new Set([\r\n\t'glacia', 'peonia', 'skyla-masters2', 'volo-ginkgo',\r\n]);\r\n\r\nconst OFFICIAL_AVATARS_FIFTY = new Set([\r\n\t'rose-zerosuit',\r\n]);\r\n\r\nfor (const avatar of OFFICIAL_AVATARS_BELIOT419) OFFICIAL_AVATARS.add(avatar);\r\nfor (const avatar of OFFICIAL_AVATARS_GNOMOWLADNY) OFFICIAL_AVATARS.add(avatar);\r\nfor (const avatar of OFFICIAL_AVATARS_BRUMIRAGE) OFFICIAL_AVATARS.add(avatar);\r\nfor (const avatar of OFFICIAL_AVATARS_ZACWEAVILE) OFFICIAL_AVATARS.add(avatar);\r\nfor (const avatar of OFFICIAL_AVATARS_KYLEDOVE) OFFICIAL_AVATARS.add(avatar);\r\nfor (const avatar of OFFICIAL_AVATARS_HYOOPPA) OFFICIAL_AVATARS.add(avatar);\r\nfor (const avatar of OFFICIAL_AVATARS_GRAPO) OFFICIAL_AVATARS.add(avatar);\r\nfor (const avatar of OFFICIAL_AVATARS_FIFTY) OFFICIAL_AVATARS.add(avatar);\r\n\r\nexport const commands: Chat.ChatCommands = {\r\n\tavatar(target, room, user) {\r\n\t\tif (!target) return this.parse(`${this.cmdToken}avatars`);\r\n\t\tconst [maybeAvatar, silent] = target.split(',');\r\n\t\tconst avatar = Avatars.userCanUse(user, maybeAvatar);\r\n\r\n\t\tif (!avatar) {\r\n\t\t\tif (silent) return false;\r\n\t\t\tthis.errorReply(\"Unrecognized avatar - make sure you're on the right account?\");\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tuser.avatar = avatar;\r\n\t\tif (user.id in customAvatars && !avatar.endsWith('xmas')) {\r\n\t\t\tAvatars.setDefault(user.id, avatar);\r\n\t\t}\r\n\t\tif (!silent) {\r\n\t\t\tthis.sendReply(\r\n\t\t\t\t`${this.tr`Avatar changed to:`}\\n` +\r\n\t\t\t\tChat.html`|raw|${Avatars.img(avatar)}`\r\n\t\t\t);\r\n\t\t\tif (OFFICIAL_AVATARS_BELIOT419.has(avatar)) {\r\n\t\t\t\tthis.sendReply(`|raw|(${this.tr`Artist: `}Beliot419)`);\r\n\t\t\t}\r\n\t\t\tif (OFFICIAL_AVATARS_GNOMOWLADNY.has(avatar)) {\r\n\t\t\t\tthis.sendReply(`|raw|(${this.tr`Artist: `}Gnomowladny)`);\r\n\t\t\t}\r\n\t\t\tif (OFFICIAL_AVATARS_BRUMIRAGE.has(avatar)) {\r\n\t\t\t\tthis.sendReply(`|raw|(${this.tr`Artist: `}Brumirage)`);\r\n\t\t\t}\r\n\t\t\tif (OFFICIAL_AVATARS_ZACWEAVILE.has(avatar)) {\r\n\t\t\t\tthis.sendReply(`|raw|(${this.tr`Artist: `}ZacWeavile)`);\r\n\t\t\t}\r\n\t\t\tif (OFFICIAL_AVATARS_KYLEDOVE.has(avatar)) {\r\n\t\t\t\tthis.sendReply(`|raw|(${this.tr`Artist: `}Kyledove)`);\r\n\t\t\t}\r\n\t\t\tif (OFFICIAL_AVATARS_HYOOPPA.has(avatar)) {\r\n\t\t\t\tthis.sendReply(`|raw|(${this.tr`Artist: `}hyo-oppa)`);\r\n\t\t\t}\r\n\t\t\tif (OFFICIAL_AVATARS_GRAPO.has(avatar)) {\r\n\t\t\t\tthis.sendReply(`|raw|(${this.tr`Artist: `}Grapo)`);\r\n\t\t\t}\r\n\t\t\tif (OFFICIAL_AVATARS_FIFTY.has(avatar)) {\r\n\t\t\t\tthis.sendReply(`|raw|(${this.tr`Artist: `}Fifty Shades of Rez)`);\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\tavatarhelp: [`/avatar [avatar name or number] - Change your trainer sprite.`],\r\n\r\n\tavatars(target, room, user) {\r\n\t\tthis.runBroadcast();\r\n\r\n\t\tif (target.startsWith('#')) return this.parse(`/avatarusers ${target}`);\r\n\r\n\t\tconst targetUser = this.broadcasting && !target ? null : this.getUserOrSelf(target);\r\n\t\tconst targetUserids = targetUser ? new Set([targetUser.id, ...targetUser.previousIDs]) :\r\n\t\t\ttarget ? new Set([toID(target)]) : null;\r\n\t\tif (targetUserids && targetUser !== user && !user.can('alts')) {\r\n\t\t\tthrow new Chat.ErrorMessage(\"You don't have permission to look at another user's avatars!\");\r\n\t\t}\r\n\r\n\t\tconst out = [];\r\n\t\tif (targetUserids) {\r\n\t\t\tconst hasButton = !this.broadcasting && targetUser === user;\r\n\t\t\tfor (const id of targetUserids) {\r\n\t\t\t\tconst allowed = customAvatars[id]?.allowed;\r\n\t\t\t\tif (allowed) {\r\n\t\t\t\t\tout.push(\r\n\t\t\t\t\t\t

Custom avatars from account {id}:

,\r\n\t\t\t\t\t\tallowed.filter(Boolean).map(avatar => (\r\n\t\t\t\t\t\t\t

\r\n\t\t\t\t\t\t\t\t{hasButton ?\r\n\t\t\t\t\t\t\t\t\t :\r\n\t\t\t\t\t\t\t\t\tAvatars.img(avatar!)\r\n\t\t\t\t\t\t\t\t} {}\r\n\t\t\t\t\t\t\t\t/avatar {avatar!.replace('#', '')}\r\n\t\t\t\t\t\t\t

\r\n\t\t\t\t\t\t))\r\n\t\t\t\t\t);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (!out.length && target) {\r\n\t\t\t\tout.push(

User {toID(target)} doesn't have any custom avatars.

);\r\n\t\t\t}\r\n\t\t}\r\n\t\tif (!out.length) {\r\n\t\t\tout.push(

Custom avatars require you to be a contributor/staff or win a tournament prize.

);\r\n\t\t}\r\n\r\n\t\tthis.sendReplyBox(<>\r\n\t\t\t{!target && [

\r\n\t\t\t\tYou can by clicking on it in the {}\r\n\t\t\t\t menu in the upper {}\r\n\t\t\t\tright.\r\n\t\t\t

,

\r\n\t\t\t\tAvatars from generations other than 4-5 are hidden. You can find them in this {}\r\n\t\t\t\tfull list of avatars. {}\r\n\t\t\t\tYou can use them by typing /avatar [avatar's name] into any chat. For example, {}\r\n\t\t\t\t/avatar erika-gen2.\r\n\t\t\t

]}\r\n\t\t\t{out}\r\n\t\t);\r\n\t},\r\n\tavatarshelp: [\r\n\t\t`/avatars - Explains how to change avatars.`,\r\n\t\t`/avatars [username] - Shows custom avatars available to a user.`,\r\n\t\t`!avatars - Show everyone that information. Requires: + % @ # &`,\r\n\t],\r\n\r\n\taddavatar() {\r\n\t\tthis.sendReply(\"Is this a personal avatar or a group avatar?\");\r\n\t\treturn this.parse(`/help addavatar`);\r\n\t},\r\n\taddavatarhelp: [\r\n\t\t`/personalavatar [username], [avatar] - Gives a user a default (personal) avatar.`,\r\n\t\t`/groupavatar [username], [avatar] - Gives a user an allowed (group) avatar.`,\r\n\t\t`/removeavatar [username], [avatar] - Removes access to an avatar from a user.`,\r\n\t\t`/removeavatar [username] - Removes access to all custom avatars from a user.`,\r\n\t\tAVATAR_FORMATS_MESSAGE,\r\n\t],\r\n\r\n\tpersonalavatar: 'defaultavatar',\r\n\tasync defaultavatar(target, room, user) {\r\n\t\tthis.checkCan('bypassall');\r\n\t\tif (!target) return this.parse(`/help defaultavatar`);\r\n\t\tconst [inputUsername, inputAvatar] = this.splitOne(target);\r\n\t\tif (!Users.isUsername(inputUsername)) {\r\n\t\t\tthrow new Chat.ErrorMessage(`\"${inputUsername}\" is not a valid username.`);\r\n\t\t}\r\n\t\tconst userid = toID(inputUsername);\r\n\t\tconst avatar = await Avatars.validate(inputAvatar, {rejectOfficial: true});\r\n\r\n\t\tif (!Avatars.addPersonal(userid, avatar)) {\r\n\t\t\tthrow new Chat.ErrorMessage(`User \"${inputUsername}\" can already use avatar \"${avatar}\".`);\r\n\t\t}\r\n\t\tthis.globalModlog('PERSONAL AVATAR', userid, avatar);\r\n\t\tthis.sendReplyBox(
\r\n\t\t\t{Avatars.img(avatar)}
\r\n\t\t\tAdded to {inputUsername}\r\n\t\t
);\r\n\t},\r\n\tdefaultavatarhelp: 'addavatarhelp',\r\n\r\n\tallowedavatar: 'allowavatar',\r\n\tgroupavatar: 'allowavatar',\r\n\tasync allowavatar(target, room, user) {\r\n\t\tthis.checkCan('bypassall');\r\n\t\tif (!target) return this.parse(`/help defaultavatar`);\r\n\t\tconst [inputUsername, inputAvatar] = this.splitOne(target);\r\n\t\tif (!Users.isUsername(inputUsername)) {\r\n\t\t\tthrow new Chat.ErrorMessage(`\"${inputUsername}\" is not a valid username.`);\r\n\t\t}\r\n\t\tconst userid = toID(inputUsername);\r\n\t\tconst avatar = await Avatars.validate(inputAvatar, {rejectOfficial: true});\r\n\r\n\t\tif (!Avatars.addAllowed(userid, avatar)) {\r\n\t\t\tthrow new Chat.ErrorMessage(`User \"${inputUsername}\" can already use avatar \"${avatar}\".`);\r\n\t\t}\r\n\t\tthis.globalModlog('GROUP AVATAR', userid, avatar);\r\n\t\tthis.sendReplyBox(
\r\n\t\t\t{Avatars.img(avatar)}
\r\n\t\t\tAdded to {inputUsername}\r\n\t\t
);\r\n\t},\r\n\tallowavatarhelp: 'addavatarhelp',\r\n\r\n\tdenyavatar: 'removeavatar',\r\n\tdisallowavatar: 'removeavatar',\r\n\tremoveavatars: 'removeavatar',\r\n\tremoveavatar(target, room, user) {\r\n\t\tthis.checkCan('bypassall');\r\n\t\tif (!target) return this.parse(`/help defaultavatar`);\r\n\t\tconst [inputUsername, inputAvatar] = this.splitOne(target);\r\n\t\tif (!Users.isUsername(inputUsername)) {\r\n\t\t\tthrow new Chat.ErrorMessage(`\"${inputUsername}\" is not a valid username.`);\r\n\t\t}\r\n\t\tconst userid = toID(inputUsername);\r\n\t\tconst avatar = Avatars.convert(inputAvatar);\r\n\r\n\t\tconst allowed = customAvatars[userid]?.allowed.filter(Boolean);\r\n\t\tif (!allowed) {\r\n\t\t\tthrow new Chat.ErrorMessage(`${inputUsername} doesn't have any custom avatars.`);\r\n\t\t}\r\n\t\tif (avatar) {\r\n\t\t\tif (!Avatars.removeAllowed(userid, avatar)) {\r\n\t\t\t\tthrow new Chat.ErrorMessage(`${inputUsername} doesn't have access to avatar \"${avatar}\"`);\r\n\t\t\t}\r\n\t\t\tthis.globalModlog('REMOVE AVATAR', userid, avatar);\r\n\t\t\tthis.sendReplyBox(
\r\n\t\t\t\t{Avatars.img(avatar)}
\r\n\t\t\t\tRemoved from {inputUsername}\r\n\t\t\t
);\r\n\t\t} else {\r\n\t\t\t// delete all\r\n\t\t\tdelete customAvatars[userid];\r\n\t\t\tAvatars.save();\r\n\t\t\tthis.globalModlog('REMOVE AVATARS', userid, allowed.join(','));\r\n\t\t\tthis.sendReplyBox(
\r\n\t\t\t\t{allowed.map(curAvatar => [Avatars.img(curAvatar!), ' '])}
\r\n\t\t\t\tRemoved from {inputUsername}\r\n\t\t\t
);\r\n\t\t}\r\n\t},\r\n\tremoveavatarhelp: 'addavatarhelp',\r\n\r\n\tasync avatarusers(target, room, user) {\r\n\t\ttarget = '#' + toID(target);\r\n\t\tif (!Avatars.userCanUse(user, target) && !user.can('alts')) {\r\n\t\t\tthrow new Chat.ErrorMessage(`You don't have access to avatar \"${target}\"`);\r\n\t\t}\r\n\r\n\t\tthis.runBroadcast();\r\n\r\n\t\tconst users = [];\r\n\t\tfor (const userid in customAvatars) {\r\n\t\t\tif (customAvatars[userid].allowed.includes(target)) {\r\n\t\t\t\tusers.push(userid);\r\n\t\t\t}\r\n\t\t}\r\n\t\tusers.sort();\r\n\r\n\t\tif (!users.length && !await Avatars.exists(target)) {\r\n\t\t\tthrow new Chat.ErrorMessage(`Unrecognized avatar \"${target}\"`);\r\n\t\t}\r\n\r\n\t\tthis.sendReplyBox(<>\r\n\t\t\t

{Avatars.img(target, true)}

\r\n\t\t\t

\r\n\t\t\t\t{target}
\r\n\t\t\t\t{users ? listUsers(users) :

No users currently allowed to use this avatar

}\r\n\t\t\t

\r\n\t\t);\r\n\t},\r\n\r\n\tmoveavatars(target, room, user) {\r\n\t\tthis.checkCan('bypassall');\r\n\t\tconst [from, to] = target.split(',').map(toID);\r\n\t\tif (!from || !to) {\r\n\t\t\treturn this.parse(`/help moveavatars`);\r\n\t\t}\r\n\t\tif (!customAvatars[from]?.allowed.length) {\r\n\t\t\treturn this.errorReply(`That user has no avatars.`);\r\n\t\t}\r\n\t\tconst existing = customAvatars[to]?.allowed.filter(Boolean);\r\n\t\tcustomAvatars[to] = {...customAvatars[from]};\r\n\t\tdelete customAvatars[from];\r\n\t\tif (existing) {\r\n\t\t\tfor (const avatar of existing) {\r\n\t\t\t\tif (!customAvatars[to].allowed.includes(avatar)) {\r\n\t\t\t\t\tcustomAvatars[to].allowed.push(avatar);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\tAvatars.save(true);\r\n\t\tthis.sendReply(`Moved ${from}'s avatars to '${to}'.`);\r\n\t\tthis.globalModlog(`MOVEAVATARS`, to, `from ${from}`);\r\n\t\tAvatars.tryNotify(Users.get(to));\r\n\t},\r\n\tmoveavatarshelp: [\r\n\t\t`/moveavatars [from user], [to user] - Move all of the custom avatars from [from user] to [to user]. Requires: &`,\r\n\t],\r\n\r\n\tasync masspavatar(target, room, user) {\r\n\t\tthis.checkCan('bypassall');\r\n\r\n\t\tconst usernames = target.trim().split(/\\s*\\n|,\\s*/)\r\n\t\t\t.map(username => username.endsWith('.png') ? username.slice(0, -4) : username);\r\n\t\tfor (const username of usernames) {\r\n\t\t\tif (!Users.isUsername(username)) {\r\n\t\t\t\tthrow new Chat.ErrorMessage(`Invalid username \"${username}\"`);\r\n\t\t\t}\r\n\t\t\tawait Avatars.validate('#' + toID(username));\r\n\t\t}\r\n\r\n\t\tconst userids = usernames.map(toID);\r\n\t\tfor (const userid of userids) {\r\n\t\t\tconst avatar = '#' + userid;\r\n\t\t\tAvatars.addPersonal(userid, avatar);\r\n\t\t\tthis.globalModlog('PERSONAL AVATAR', userid, avatar);\r\n\t\t}\r\n\t\tthis.sendReplyBox(
\r\n\t\t\t{userids.map(userid => Avatars.img('#' + userid))}
\r\n\t\t\tAdded {userids.length} avatars\r\n\t\t
);\r\n\t},\r\n\tasync massxmasavatar(target, room, user) {\r\n\t\tthis.checkCan('bypassall');\r\n\r\n\t\tconst usernames = target.trim().split(/\\s*\\n|,\\s*/)\r\n\t\t\t.map(username => username.endsWith('.png') ? username.slice(0, -4) : username)\r\n\t\t\t.map(username => username.endsWith('xmas') ? username.slice(0, -4) : username);\r\n\t\tfor (const username of usernames) {\r\n\t\t\tif (!Users.isUsername(username)) {\r\n\t\t\t\tthrow new Chat.ErrorMessage(`Invalid username \"${username}\"`);\r\n\t\t\t}\r\n\t\t\tawait Avatars.validate(`#${toID(username)}xmas`);\r\n\t\t}\r\n\r\n\t\tconst userids = usernames.map(toID);\r\n\t\tfor (const userid of userids) {\r\n\t\t\tconst avatar = `#${userid}xmas`;\r\n\t\t\tAvatars.addAllowed(userid, avatar);\r\n\t\t\tthis.globalModlog('GROUP AVATAR', userid, avatar);\r\n\t\t}\r\n\t\tthis.sendReplyBox(
\r\n\t\t\t{userids.map(userid => Avatars.img(`#${userid}xmas`))}
\r\n\t\t\tAdded {userids.length} avatars\r\n\t\t
);\r\n\t},\r\n\tasync massgavatar(target, room, user) {\r\n\t\tthis.checkCan('bypassall');\r\n\r\n\t\tconst args = target.trim().split(/\\s*\\n|,\\s*/);\r\n\t\tlet curAvatar = '';\r\n\t\tconst toUpdate: Record> = Object.create(null);\r\n\t\tfor (const arg of args) {\r\n\t\t\tif (arg.startsWith('#')) {\r\n\t\t\t\tcurAvatar = await Avatars.validate(arg);\r\n\t\t\t} else {\r\n\t\t\t\tif (!curAvatar) return this.parse(`/help massgavatar`);\r\n\t\t\t\tif (!/[A-Za-z0-9]/.test(arg.charAt(0)) || !/[A-Za-z]/.test(arg)) {\r\n\t\t\t\t\tthrow new Chat.ErrorMessage(`Invalid username \"${arg}\"`);\r\n\t\t\t\t}\r\n\t\t\t\tif (!toUpdate[curAvatar]) toUpdate[curAvatar] = new Set();\r\n\t\t\t\ttoUpdate[curAvatar].add(toID(arg));\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tconst out = [];\r\n\r\n\t\tfor (const avatar in toUpdate) {\r\n\t\t\tconst newUsers = toUpdate[avatar];\r\n\t\t\tconst oldUsers = new Set();\r\n\t\t\tfor (const userid in customAvatars) {\r\n\t\t\t\tif (customAvatars[userid].allowed.includes(avatar)) {\r\n\t\t\t\t\toldUsers.add(userid as ID);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tconst added: ID[] = [];\r\n\t\t\tfor (const newUser of newUsers) {\r\n\t\t\t\tif (!oldUsers.has(newUser)) {\r\n\t\t\t\t\tAvatars.addAllowed(newUser, avatar);\r\n\t\t\t\t\tadded.push(newUser);\r\n\t\t\t\t\tthis.globalModlog('GROUP AVATAR', newUser, avatar);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tconst removed: ID[] = [];\r\n\t\t\tfor (const oldUser of oldUsers) {\r\n\t\t\t\tif (!newUsers.has(oldUser)) {\r\n\t\t\t\t\tAvatars.removeAllowed(oldUser, avatar);\r\n\t\t\t\t\tremoved.push(oldUser);\r\n\t\t\t\t\tthis.globalModlog('REMOVE AVATAR', oldUser, avatar);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tout.push(

{Avatars.img(avatar, true)}

);\r\n\t\t\tout.push(
{avatar}
);\r\n\t\t\tif (added.length) out.push(
{oldUsers.size ? 'Added' : 'New'}: {listUsers(added)}
);\r\n\t\t\tif (removed.length) out.push(
Removed: {listUsers(removed)}
);\r\n\t\t\tif (!added.length && !removed.length) out.push(
No change
);\r\n\t\t}\r\n\r\n\t\tthis.sendReplyBox(<>{out});\r\n\t\tAvatars.save(true);\r\n\t},\r\n};\r\n\r\nUsers.Avatars = Avatars;\r\n\r\nChat.multiLinePattern.register(\r\n\t'/massgavatar', '/masspavatar', '/massxmasavatar',\r\n);\r\n"], "mappings": "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", "names": [] }