{ "version": 3, "sources": ["../../../../server/chat-plugins/usersearch.tsx"], "sourcesContent": ["import {Utils, FS} from '../../lib';\r\n\r\nexport const nameList = new Set(JSON.parse(\r\n\tFS('config/chat-plugins/usersearch.json').readIfExistsSync() || \"[]\"\r\n));\r\n\r\nconst ONLINE_SYMBOL = ` \\u25C9 `;\r\nconst OFFLINE_SYMBOL = ` \\u25CC `;\r\n\r\nclass PunishmentHTML extends Chat.JSX.Component<{userid: ID, target: string}> {\r\n\trender() {\r\n\t\tconst {userid, target} = {...this.props};\r\n\t\tconst buf = [];\r\n\t\tfor (const cmdName of ['Forcerename', 'Namelock', 'Weeknamelock']) {\r\n\t\t\t// We have to use dangerouslySetInnerHTML here because otherwise the `value`\r\n\t\t\t// property of the button tag is auto escaped, making into &#10;\r\n\t\t\tbuf.push(${cmdName}`,\r\n\t\t\t\t}\r\n\t\t\t} />);\r\n\t\t}\r\n\t\treturn buf;\r\n\t}\r\n}\r\n\r\nclass SearchUsernames extends Chat.JSX.Component<{target: string, page?: boolean}> {\r\n\trender() {\r\n\t\tconst {target, page} = {...this.props};\r\n\t\tconst results: {offline: string[], online: string[]} = {\r\n\t\t\toffline: [],\r\n\t\t\tonline: [],\r\n\t\t};\r\n\t\tfor (const curUser of Users.users.values()) {\r\n\t\t\tif (!curUser.id.includes(target) || curUser.id.startsWith('guest')) continue;\r\n\t\t\tif (Punishments.isGlobalBanned(curUser)) continue;\r\n\t\t\tif (curUser.connected) {\r\n\t\t\t\tresults.online.push(`${!page ? ONLINE_SYMBOL : ''} ${curUser.name}`);\r\n\t\t\t} else {\r\n\t\t\t\tresults.offline.push(`${!page ? OFFLINE_SYMBOL : ''} ${curUser.name}`);\r\n\t\t\t}\r\n\t\t}\r\n\t\tfor (const k in results) {\r\n\t\t\tUtils.sortBy(results[k as keyof typeof results], result => toID(result));\r\n\t\t}\r\n\t\tif (!page) {\r\n\t\t\treturn <>\r\n\t\t\t\tUsers with a name matching '{target}':
\r\n\t\t\t\t{!results.offline.length && !results.online.length ?\r\n\t\t\t\t\t<>No users found. : <>\r\n\t\t\t\t\t\t{results.online.join('; ')}\r\n\t\t\t\t\t\t{!!results.offline.length &&\r\n\t\t\t\t\t\t\t<>{!!results.online.length && <>

}{results.offline.join('; ')}}\r\n\t\t\t\t\t\r\n\t\t\t\t}\r\n\t\t\t;\r\n\t\t}\r\n\t\treturn
\r\n\t\t\t

Usernames containing \"{target}\"

\r\n\t\t\t{!results.online.length && !results.offline.length ?\r\n\t\t\t\t

No results found.

:\r\n\t\t\t\t<>{!!results.online.length &&
\r\n\t\t\t\t\t

Online users

\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t{(() => {\r\n\t\t\t\t\t\t\tconst online = [];\r\n\t\t\t\t\t\t\tfor (const username of results.online) {\r\n\t\t\t\t\t\t\t\tonline.push(\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\treturn online;\r\n\t\t\t\t\t\t})()}\r\n\t\t\t\t\t
UsernamePunish
{username}
\r\n\t\t\t\t
}\r\n\t\t\t\t{!!(results.online.length && results.offline.length) &&
}\r\n\t\t\t\t{!!results.offline.length &&
\r\n\t\t\t\t\t

Offline users

\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t{(() => {\r\n\t\t\t\t\t\t\tconst offline = [];\r\n\t\t\t\t\t\t\tfor (const username of results.offline) {\r\n\t\t\t\t\t\t\t\toffline.push(\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\treturn offline;\r\n\t\t\t\t\t\t})()}\r\n\t\t\t\t\t
UsernamePunish
{username}
\r\n\t\t\t\t
}\r\n\t\t\t}\r\n\t\t
;\r\n\t}\r\n}\r\n\r\nfunction saveNames() {\r\n\tFS('config/chat-plugins/usersearch.json').writeUpdate(() => JSON.stringify([...nameList]));\r\n}\r\n\r\nexport const commands: Chat.ChatCommands = {\r\n\tus: 'usersearch',\r\n\tuspage: 'usersearch',\r\n\tusersearchpage: 'usersearch',\r\n\tusersearch(target, room, user, connection, cmd) {\r\n\t\tthis.checkCan('lock');\r\n\t\ttarget = toID(target);\r\n\t\tif (!target) { // just join directly if it's the page cmd, they're likely looking for the full list\r\n\t\t\tif (cmd.includes('page')) return this.parse(`/j view-usersearch`);\r\n\t\t\treturn this.parse(`/help usersearch`);\r\n\t\t}\r\n\t\tif (target.length < 3) {\r\n\t\t\tthrow new Chat.ErrorMessage(`That's too short of a term to search for.`);\r\n\t\t}\r\n\t\tconst showPage = cmd.includes('page');\r\n\t\tif (showPage) {\r\n\t\t\tthis.parse(`/j view-usersearch-${target}`);\r\n\t\t\treturn;\r\n\t\t}\r\n\t\treturn this.sendReplyBox();\r\n\t},\r\n\tusersearchhelp: [\r\n\t\t`/usersearch [pattern]: Looks for all names matching the [pattern]. Requires: % @ &`,\r\n\t\t`Adding \"page\" to the end of the command, i.e. /usersearchpage OR /uspage will bring up a page.`,\r\n\t\t`See also /usnames for a staff-curated list of the most commonly searched terms.`,\r\n\t],\r\n\tusnames: 'usersearchnames',\r\n\tusersearchnames: {\r\n\t\t'': 'list',\r\n\t\tlist() {\r\n\t\t\tthis.parse(`/join view-usersearch`);\r\n\t\t},\r\n\t\tadd(target, room, user) {\r\n\t\t\tthis.checkCan('lock');\r\n\t\t\tconst targets = target.split(',').map(toID).filter(Boolean);\r\n\t\t\tif (!targets.length) {\r\n\t\t\t\treturn this.errorReply(`Specify at least one term.`);\r\n\t\t\t}\r\n\t\t\tfor (const [i, arg] of targets.entries()) {\r\n\t\t\t\tif (nameList.has(arg)) {\r\n\t\t\t\t\ttargets.splice(i, 1);\r\n\t\t\t\t\tthis.errorReply(`Term ${arg} is already on the usersearch term list.`);\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (arg.length < 3) {\r\n\t\t\t\t\ttargets.splice(i, 1);\r\n\t\t\t\t\tthis.errorReply(`Term ${arg} is too short for the usersearch term list. Must be more than 3 characters.`);\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tnameList.add(arg);\r\n\t\t\t}\r\n\t\t\tif (!targets.length) {\r\n\t\t\t\t// fuck you too, \"mia added 0 term to the usersearch name list\"\r\n\t\t\t\treturn this.errorReply(`No terms could be added.`);\r\n\t\t\t}\r\n\t\t\tconst count = Chat.count(targets, 'terms');\r\n\t\t\tRooms.get('staff')?.addByUser(\r\n\t\t\t\tuser, `${user.name} added the ${count} \"${targets.join(', ')}\" to the usersearch name list.`\r\n\t\t\t);\r\n\t\t\tthis.globalModlog(`USERSEARCH ADD`, null, targets.join(', '));\r\n\t\t\tif (!room || room.roomid !== 'staff') {\r\n\t\t\t\tthis.sendReply(`You added the ${count} \"${targets.join(', ')}\" to the usersearch name list.`);\r\n\t\t\t}\r\n\t\t\tsaveNames();\r\n\t\t},\r\n\t\tremove(target, room, user) {\r\n\t\t\tthis.checkCan('lock');\r\n\t\t\tconst targets = target.split(',').map(toID).filter(Boolean);\r\n\t\t\tif (!targets.length) {\r\n\t\t\t\treturn this.errorReply(`Specify at least one term.`);\r\n\t\t\t}\r\n\t\t\tfor (const [i, arg] of targets.entries()) {\r\n\t\t\t\tif (!nameList.has(arg)) {\r\n\t\t\t\t\ttargets.splice(i, 1);\r\n\t\t\t\t\tthis.errorReply(`${arg} is not in the usersearch name list, and has been skipped.`);\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tnameList.delete(arg);\r\n\t\t\t}\r\n\t\t\tif (!targets.length) {\r\n\t\t\t\treturn this.errorReply(`No terms could be removed.`);\r\n\t\t\t}\r\n\t\t\tconst count = Chat.count(targets, 'terms');\r\n\t\t\tRooms.get('staff')?.addByUser(\r\n\t\t\t\tuser, `${user.name} removed the ${count} \"${targets.join(', ')}\" from the usersearch name list.`\r\n\t\t\t);\r\n\t\t\tthis.globalModlog(`USERSEARCH REMOVE`, null, targets.join(', '));\r\n\t\t\tif (!room || room.roomid !== 'staff') {\r\n\t\t\t\tthis.sendReply(`You removed the ${count} \"${targets.join(', ')}\"\" from the usersearch name list.`);\r\n\t\t\t}\r\n\t\t\tsaveNames();\r\n\t\t},\r\n\t},\r\n\tusnameshelp: [\r\n\t\t`/usnames add [...terms]: Adds the given [terms] to the usersearch name list. Requires: % @ &`,\r\n\t\t`/usnames remove [...terms]: Removes the given [terms] from the usersearch name list. Requires: % @ &`,\r\n\t\t`/usnames OR /usnames list: Shows the usersearch name list.`,\r\n\t],\r\n};\r\n\r\nexport const pages: Chat.PageTable = {\r\n\tusersearch(query, user) {\r\n\t\tthis.checkCan('lock');\r\n\t\tconst target = toID(query.shift());\r\n\t\tif (!target) {\r\n\t\t\tthis.title = `[Usersearch Terms]`;\r\n\t\t\tconst sorted: {[k: string]: number} = {};\r\n\t\t\tfor (const curUser of Users.users.values()) {\r\n\t\t\t\tfor (const term of nameList) {\r\n\t\t\t\t\tif (curUser.id.includes(term)) {\r\n\t\t\t\t\t\tif (!(term in sorted)) sorted[term] = 0;\r\n\t\t\t\t\t\tsorted[term]++;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn
\r\n\t\t\t\tUsersearch term list\r\n\t\t\t\t\r\n\t\t\t\t
\r\n\t\t\t\t{!nameList.size ?\r\n\t\t\t\t\t

None found.

:\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t{(() => {\r\n\t\t\t\t\t\t\t\tconst buf = [];\r\n\t\t\t\t\t\t\t\tfor (const k of Utils.sortBy(Object.keys(sorted), v => -sorted[v])) {\r\n\t\t\t\t\t\t\t\t\tbuf.push(\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\tif (!buf.length) return ;\r\n\t\t\t\t\t\t\t\treturn buf;\r\n\t\t\t\t\t\t\t})()}\r\n\t\t\t\t\t\t
TermCurrent Matches
{k}{sorted[k]}
No names found.
\r\n\t\t\t\t\t
\r\n\t\t\t\t}\r\n\t\t\t
;\r\n\t\t}\r\n\t\tthis.title = `[Usersearch] ${target}`;\r\n\t\treturn ;\r\n\t},\r\n};\r\n"], "mappings": "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", "names": [] }