{ "version": 3, "sources": ["../../../../server/chat-plugins/thecafe.tsx"], "sourcesContent": ["import {FS} from '../../lib/fs';\r\nimport {Utils} from '../../lib/utils';\r\n\r\nconst DISHES_FILE = 'config/chat-plugins/thecafe-foodfight.json';\r\nconst FOODFIGHT_COOLDOWN = 5 * 60 * 1000;\r\n\r\nconst dishes: {[k: string]: string[]} = JSON.parse(FS(DISHES_FILE).readIfExistsSync() || \"{}\");\r\n\r\nfunction saveDishes() {\r\n\tvoid FS(DISHES_FILE).write(JSON.stringify(dishes));\r\n}\r\n\r\nfunction generateTeam(generator = '') {\r\n\tlet potentialPokemon = Object.keys(Dex.data.Pokedex).filter(mon => {\r\n\t\tconst species = Dex.species.get(mon);\r\n\t\treturn species.baseSpecies === species.name;\r\n\t});\r\n\tlet speciesClause = true;\r\n\tswitch (generator) {\r\n\tcase 'ou':\r\n\t\tpotentialPokemon = potentialPokemon.filter(mon => {\r\n\t\t\tconst species = Dex.species.get(mon);\r\n\t\t\treturn species.tier === 'OU';\r\n\t\t}).concat(potentialPokemon.filter(mon => {\r\n\t\t\t// There is probably a better way to get the ratios right, oh well.\r\n\t\t\tconst species = Dex.species.get(mon);\r\n\t\t\treturn species.tier === 'OU' || species.tier === 'UU';\r\n\t\t}));\r\n\t\tbreak;\r\n\tcase 'ag':\r\n\t\tpotentialPokemon = potentialPokemon.filter(mon => {\r\n\t\t\tconst species = Dex.species.get(mon);\r\n\t\t\tconst unviable = species.tier === 'NFE' || species.tier === 'PU' ||\r\n\t\t\t\tspecies.tier === '(PU)' || species.tier.startsWith(\"LC\");\r\n\t\t\tconst illegal = species.tier === 'Unreleased' || species.tier === 'Illegal' || species.tier.startsWith(\"CAP\");\r\n\t\t\treturn !(unviable || illegal);\r\n\t\t});\r\n\t\tspeciesClause = false;\r\n\t\tbreak;\r\n\tdefault:\r\n\t\tpotentialPokemon = potentialPokemon.filter(mon => {\r\n\t\t\tconst species = Dex.species.get(mon);\r\n\t\t\tconst op = species.tier === 'AG' || species.tier === 'Uber' || species.tier.slice(1, -1) === 'Uber';\r\n\t\t\tconst unviable = species.tier === 'Illegal' || species.tier.includes(\"LC\");\r\n\t\t\treturn !(op || unviable);\r\n\t\t});\r\n\t\tpotentialPokemon.push('miltank', 'miltank', 'miltank', 'miltank'); // 5x chance for miltank for flavor purposes.\r\n\t}\r\n\r\n\tconst team: string[] = [];\r\n\r\n\twhile (team.length < 6) {\r\n\t\tconst randIndex = Math.floor(Math.random() * potentialPokemon.length);\r\n\t\tconst potentialMon = potentialPokemon[randIndex];\r\n\t\tif (team.includes(potentialMon)) continue;\r\n\t\tteam.push(potentialMon);\r\n\t\tif (speciesClause) potentialPokemon.splice(randIndex, 1);\r\n\t}\r\n\r\n\treturn team.map(mon => Dex.species.get(mon).name);\r\n}\r\n\r\nfunction generateDish(): [string, string[]] {\r\n\tconst keys = Object.keys(dishes);\r\n\tconst entry = dishes[keys[Math.floor(Math.random() * keys.length)]].slice();\r\n\tconst dish = entry.splice(0, 1)[0];\r\n\tconst ingredients = [];\r\n\twhile (ingredients.length < 6) {\r\n\t\tingredients.push(entry.splice(Math.floor(Math.random() * entry.length), 1)[0]);\r\n\t}\r\n\treturn [dish, ingredients];\r\n}\r\n\r\nexport const commands: Chat.ChatCommands = {\r\n\tfoodfight(target, room, user) {\r\n\t\troom = this.requireRoom('thecafe' as RoomID);\r\n\t\tif (!Object.keys(dishes).length) return this.errorReply(\"No dishes found. Add some dishes first.\");\r\n\r\n\t\tif (user.foodfight && user.foodfight.timestamp + FOODFIGHT_COOLDOWN > Date.now()) {\r\n\t\t\treturn this.errorReply(\"Please wait a few minutes before using this command again.\");\r\n\t\t}\r\n\r\n\t\ttarget = toID(target);\r\n\r\n\t\tlet team: string[] = [];\r\n\t\tlet importable;\r\n\t\tconst [newDish, newIngredients] = generateDish();\r\n\t\tif (!target) {\r\n\t\t\tconst bfTeam = Teams.generate('gen7bssfactory');\r\n\t\t\tfor (const [i, name] of newIngredients.entries()) bfTeam[i].name = name;\r\n\t\t\timportable = Teams.export(bfTeam);\r\n\t\t\tteam = bfTeam.map(val => val.species);\r\n\t\t} else {\r\n\t\t\tteam = generateTeam(target);\r\n\t\t}\r\n\t\tuser.foodfight = {generatedTeam: team, dish: newDish, ingredients: newIngredients, timestamp: Date.now()};\r\n\t\tconst importStr = importable ?\r\n\t\t\tUtils.html`
Importable team:
${importable}
` :\r\n\t\t\t'';\r\n\t\treturn this.sendReplyBox(`
${team.map(mon => ``).join('')}${newIngredients.map(ingredient => ``).join('')}${importStr}
Your dish is: ${newDish}
Team ${mon}
Ingredients${ingredient}
`);\r\n\t},\r\n\tcheckfoodfight(target, room, user) {\r\n\t\troom = this.requireRoom('thecafe' as RoomID);\r\n\r\n\t\tconst targetUser = this.getUserOrSelf(target);\r\n\t\tif (!targetUser) return this.errorReply(`User ${target} not found.`);\r\n\t\tconst self = targetUser === user;\r\n\t\tif (!self) this.checkCan('mute', targetUser, room);\r\n\t\tconst foodfight = targetUser.foodfight;\r\n\t\tif (!foodfight) {\r\n\t\t\treturn this.errorReply(`${self ? `You don't` : `This user doesn't`} have an active Foodfight team.`);\r\n\t\t}\r\n\t\treturn this.sendReplyBox(
\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t{foodfight.generatedTeam.map(mon => )}\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t{foodfight.ingredients.map(ingredient => )}\r\n\t\t\t\t\r\n\t\t\t
\r\n\t\t\t\t\t{self ? `Your` : `${targetUser.name}'s`} dish is: {foodfight.dish}\r\n\t\t\t\t
Team {mon}
Ingredients{ingredient}
\r\n\t\t
);\r\n\t},\r\n\taddingredients: 'adddish',\r\n\tadddish(target, room, user, connection, cmd) {\r\n\t\troom = this.requireRoom('thecafe' as RoomID);\r\n\t\tthis.checkCan('mute', null, room);\r\n\r\n\t\tlet [dish, ...ingredients] = target.split(',');\r\n\t\tdish = dish.trim();\r\n\t\tif (!dish || !ingredients.length) return this.parse('/help foodfight');\r\n\t\tconst id = toID(dish);\r\n\t\tif (id === 'constructor') return this.errorReply(\"Invalid dish name.\");\r\n\t\tingredients = ingredients.map(ingredient => ingredient.trim());\r\n\r\n\t\tif ([...ingredients.entries()].some(([index, ingredient]) => ingredients.indexOf(ingredient) !== index)) {\r\n\t\t\treturn this.errorReply(\"Please don't enter duplicate ingredients.\");\r\n\t\t}\r\n\r\n\t\tif (ingredients.some(ingredient => ingredient.length > 19)) {\r\n\t\t\treturn this.errorReply(\"Ingredients can only be 19 characters long.\");\r\n\t\t}\r\n\r\n\t\tif (cmd === 'adddish') {\r\n\t\t\tif (dishes[id]) return this.errorReply(\"This dish already exists.\");\r\n\t\t\tif (ingredients.length < 6) return this.errorReply(\"Dishes need at least 6 ingredients.\");\r\n\t\t\tdishes[id] = [dish];\r\n\t\t} else {\r\n\t\t\tif (!dishes[id]) return this.errorReply(`Dish not found: ${dish}`);\r\n\t\t\tif (ingredients.some(ingredient => dishes[id].includes(ingredient))) {\r\n\t\t\t\treturn this.errorReply(\"Please don't enter duplicate ingredients.\");\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tdishes[id] = dishes[id].concat(ingredients);\r\n\t\tsaveDishes();\r\n\t\tthis.sendReply(`${cmd.slice(3)} '${dish}: ${ingredients.join(', ')}' added successfully.`);\r\n\t},\r\n\tremovedish(target, room, user) {\r\n\t\troom = this.requireRoom('thecafe' as RoomID);\r\n\t\tthis.checkCan('mute', null, room);\r\n\r\n\t\tconst id = toID(target);\r\n\t\tif (id === 'constructor') return this.errorReply(\"Invalid dish.\");\r\n\t\tif (!dishes[id]) return this.errorReply(`Dish '${target}' not found.`);\r\n\r\n\t\tdelete dishes[id];\r\n\t\tsaveDishes();\r\n\t\tthis.sendReply(`Dish '${target}' deleted successfully.`);\r\n\t},\r\n\tviewdishes(target, room, user, connection) {\r\n\t\troom = this.requireRoom('thecafe' as RoomID);\r\n\r\n\t\treturn this.parse(`/join view-foodfight`);\r\n\t},\r\n\tfoodfighthelp: [\r\n\t\t`/foodfight - Gives you a randomly generated Foodfight dish, ingredient list and team. Generator can be either 'random', 'ou', 'ag', or left blank. If left blank, uses Battle Factory to generate an importable team.`,\r\n\t\t`/checkfoodfight - Gives you the last team and dish generated for the entered user, or your own if left blank. Anyone can check their own info, checking other people requires: % @ # &`,\r\n\t\t`/adddish , , , ... - Adds a dish to the database. Requires: % @ # &`,\r\n\t\t`/addingredients , , , ... - Adds extra ingredients to a dish in the database. Requires: % @ # &`,\r\n\t\t`/removedish - Removes a dish from the database. Requires: % @ # &`,\r\n\t\t`/viewdishes - Shows the entire database of dishes. Requires: % @ # &`,\r\n\t],\r\n};\r\n\r\nexport const pages: Chat.PageTable = {\r\n\tfoodfight(query, user, connection) {\r\n\t\tif (!user.named) return Rooms.RETRY_AFTER_LOGIN;\r\n\t\tthis.title = 'Foodfight';\r\n\t\tconst room = Rooms.get('thecafe');\r\n\t\tif (!room) return this.errorReply(`Room not found.`);\r\n\t\tthis.checkCan('mute', null, room);\r\n\t\tconst content = Object.values(dishes).map(\r\n\t\t\t([dish, ...ingredients]) => {dish}{ingredients.join(', ')}\r\n\t\t).join('');\r\n\r\n\t\treturn
\r\n\t\t\t

Foodfight Dish list

\r\n\t\t\t{content ?\r\n\t\t\t\t{content}

Dishes

Ingredients

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

There are no dishes in the database.

\r\n\t\t\t}\r\n\t\t
;\r\n\t},\r\n};\r\n"], "mappings": "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", "names": [] }