`;\r\n\t\t}\r\n\r\n\t\tbuf += ``;\r\n\t\treturn this.linkify(buf);\r\n\t}\r\n\r\n\tasync battle(tier: string, number: number, context: Chat.PageContext) {\r\n\t\tif (number > Rooms.global.lastBattle) {\r\n\t\t\tthrow new Chat.ErrorMessage(`That battle cannot exist, as the number has not been used.`);\r\n\t\t}\r\n\t\tconst roomid = `battle-${tier}-${number}` as RoomID;\r\n\t\tcontext.setHTML(`
Locating battle logs for the battle ${tier}-${number}...
`);\r\n\t\tconst log = await PM.query({\r\n\t\t\tqueryType: 'battlesearch', roomid: toID(tier), search: number,\r\n\t\t});\r\n\t\tif (!log) return context.setHTML(this.error(\"Logs not found.\"));\r\n\t\tconst {connection} = context;\r\n\t\tcontext.close();\r\n\t\tconnection.sendTo(\r\n\t\t\troomid, `|init|battle\\n|title|[Battle Log] ${tier}-${number}\\n${log.join('\\n')}`\r\n\t\t);\r\n\t\tconnection.sendTo(roomid, `|expire|This is a battle log.`);\r\n\t}\r\n\r\n\tparseChatLine(line: string, day: string) {\r\n\t\tconst [timestamp, type, ...rest] = line.split('|');\r\n\t\tif (type === 'c:') {\r\n\t\t\tconst [time, username, ...message] = rest;\r\n\t\t\treturn {time: new Date(time), username, message: message.join('|')};\r\n\t\t}\r\n\t\treturn {time: new Date(timestamp + day), username: rest[0], message: rest.join('|')};\r\n\t}\r\n\r\n\trenderLine(fullLine: string, opts?: string, data?: {roomid: RoomID, date: string}) {\r\n\t\tif (!fullLine) return ``;\r\n\t\tlet timestamp = fullLine.slice(0, 8);\r\n\t\tlet line;\r\n\t\tif (/^[0-9:]+$/.test(timestamp)) {\r\n\t\t\tline = fullLine.charAt(9) === '|' ? fullLine.slice(10) : '|' + fullLine.slice(9);\r\n\t\t} else {\r\n\t\t\ttimestamp = '';\r\n\t\t\tline = '!NT|';\r\n\t\t}\r\n\t\tif (opts !== 'all' && (\r\n\t\t\tline.startsWith(`userstats|`) ||\r\n\t\t\tline.startsWith('J|') || line.startsWith('L|') || line.startsWith('N|')\r\n\t\t)) return ``;\r\n\r\n\t\tconst getClass = (name: string) => {\r\n\t\t\t// we use the raw numbers because links don't support colons\r\n\t\t\t// so you'd need to put chatlog-roomid--day--time-200000 instead of\r\n\t\t\t// chatlog-roomid--day--time-20:00:00\r\n\t\t\tconst stampNums = toID(timestamp);\r\n\t\t\tif (toID(opts) === stampNums) name += ` highlighted`;\r\n\t\t\treturn `class=\"${name}\" data-server=\"${stampNums}\"`;\r\n\t\t};\r\n\t\tif (opts === 'txt') return Utils.html`
`;\r\n\t\treturn LogViewer.linkify(buf);\r\n\t}\r\n\tasync runSearch(\r\n\t\tcontext: Chat.PageContext, search: string, roomid: RoomID, date: string | null, limit: number | null\r\n\t) {\r\n\t\tcontext.title = `[Search] [${roomid}] ${search}`;\r\n\t\tif (!['ripgrep', 'fs'].includes(Config.chatlogreader)) {\r\n\t\t\tthrow new Error(`Config.chatlogreader must be 'fs' or 'ripgrep'.`);\r\n\t\t}\r\n\t\tcontext.setHTML(\r\n\t\t\t`
Running a chatlog search for \"${search}\" on room ${roomid}` +\r\n\t\t\t(date ? date !== 'all' ? `, on the date \"${date}\"` : ', on all dates' : '') +\r\n\t\t\t`.
Searching linecounts on room ${roomid}${user ? ` for the user ${user}` : ''}.
`\r\n\t\t);\r\n\t\tconst results = await PM.query({roomid, date: month, search: user, queryType: 'linecount'});\r\n\t\tcontext.setHTML(results);\r\n\t}\r\n\tasync sharedBattles(userids: string[]) {\r\n\t\tlet buf = `Logged shared battles between the users ${userids.join(', ')}`;\r\n\t\tconst results: string[] = await PM.query({\r\n\t\t\tqueryType: 'sharedsearch', search: userids,\r\n\t\t});\r\n\t\tif (!results.length) {\r\n\t\t\tbuf += `: None found.`;\r\n\t\t\treturn buf;\r\n\t\t}\r\n\t\tbuf += ` (${results.length}): `;\r\n\t\tbuf += results.map(id => `${id}`).join(', ');\r\n\t\treturn buf;\r\n\t}\r\n\t// this would normally be abstract, but it's very difficult with ripgrep\r\n\t// so it's easier to just do it the same way for both.\r\n\tasync roomStats(room: RoomID, month: string) {\r\n\t\tif (!FS(`logs/chat/${room}`).existsSync()) {\r\n\t\t\treturn LogViewer.error(Utils.html`Room ${room} not found.`);\r\n\t\t}\r\n\t\tif (!FS(`logs/chat/${room}/${month}`).existsSync()) {\r\n\t\t\treturn LogViewer.error(Utils.html`Room ${room} does not have logs for the month ${month}.`);\r\n\t\t}\r\n\t\tconst stats = await PM.query({\r\n\t\t\tqueryType: 'roomstats', search: month, roomid: room,\r\n\t\t});\r\n\t\tlet buf = `
`;\r\n\t\t}\r\n\t\tbuf += '';\r\n\t\treturn LogViewer.linkify(buf);\r\n\t}\r\n\tvisualizeStats(stats: RoomStats) {\r\n\t\tconst titles: {[k: string]: string} = {\r\n\t\t\tdeadTime: 'Average time between lines',\r\n\t\t\tdeadPercent: 'Average % of the day spent more than 5 minutes inactive',\r\n\t\t\tlinesPerUser: 'Average lines per user',\r\n\t\t\taveragePresent: 'Average users present',\r\n\t\t\ttotalLines: 'Average lines per day',\r\n\t\t};\r\n\t\tlet buf = `
`;\r\n\t\tbuf += Object.values(titles).join('
');\r\n\t\tbuf += `
`;\r\n\t\tfor (const k in titles) {\r\n\t\t\tbuf += `
`;\r\n\t\t\tswitch (k) {\r\n\t\t\tcase 'deadTime':\r\n\t\t\t\tbuf += Chat.toDurationString(stats.deadTime, {precision: 2});\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 'linesPerUser': case 'totalLines': case 'averagePresent': case 'deadPercent':\r\n\t\t\t\tbuf += (stats[k] || 0).toFixed(2);\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t\tbuf += `
`;\r\n\t\t}\r\n\t\tbuf += `
`;\r\n\t\treturn buf;\r\n\t}\r\n\tasync activityStats(room: RoomID, month: string) {\r\n\t\tconst days = (await FS(`logs/chat/${room}/${month}`).readdir()).map(f => f.slice(0, -4));\r\n\t\tconst stats: RoomStats[] = [];\r\n\t\tfor (const day of days) {\r\n\t\t\tconst curStats = await this.dayStats(room, day);\r\n\t\t\tif (!curStats) continue;\r\n\t\t\tstats.push(curStats);\r\n\t\t}\r\n\t\t// now, having collected the stats for each day, we need to merge them together\r\n\t\tconst collected: RoomStats = {\r\n\t\t\tdeadTime: 0,\r\n\t\t\tdeadPercent: 0,\r\n\t\t\tlines: {},\r\n\t\t\tusers: {},\r\n\t\t\tdays: days.length,\r\n\t\t\tlinesPerUser: 0,\r\n\t\t\ttotalLines: 0,\r\n\t\t\taveragePresent: 0,\r\n\t\t};\r\n\r\n\t\t// merge\r\n\t\tfor (const entry of stats) {\r\n\t\t\tfor (const k of ['deadTime', 'deadPercent', 'linesPerUser', 'totalLines', 'averagePresent'] as const) {\r\n\t\t\t\tcollected[k] += entry[k];\r\n\t\t\t}\r\n\t\t\tfor (const type of ['lines'] as const) {\r\n\t\t\t\tfor (const k in entry[type]) {\r\n\t\t\t\t\tif (!collected[type][k]) collected[type][k] = 0;\r\n\t\t\t\t\tcollected[type][k] += entry[type][k];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// average\r\n\t\tfor (const k of ['deadTime', 'deadPercent', 'linesPerUser', 'totalLines', 'averagePresent'] as const) {\r\n\t\t\tcollected[k] /= stats.length;\r\n\t\t}\r\n\r\n\t\treturn {average: collected, days: stats};\r\n\t}\r\n\tasync dayStats(room: RoomID, day: string) {\r\n\t\tconst cached = this.roomstatsCache.get(day);\r\n\t\tif (cached) return cached;\r\n\t\tconst results: RoomStats & {day: string} = {\r\n\t\t\tdeadTime: 0,\r\n\t\t\tdeadPercent: 0,\r\n\t\t\tlines: {},\r\n\t\t\tusers: {},\r\n\t\t\tdays: 1, // irrelevant\r\n\t\t\tlinesPerUser: 0,\r\n\t\t\ttotalLines: 0,\r\n\t\t\taveragePresent: 0,\r\n\t\t\tday,\r\n\t\t};\r\n\t\tconst path = FS(`logs/chat/${room}/${LogReader.getMonth(day)}/${day}.txt`);\r\n\t\tif (!path.existsSync()) return false;\r\n\t\tconst stream = path.createReadStream();\r\n\t\tlet lastTime = new Date(day).getTime(); // start at beginning of day to be sure\r\n\t\tlet userstatCount = 0;\r\n\t\tconst waitIncrements = [];\r\n\t\tfor await (const line of stream.byLine()) {\r\n\t\t\tconst [, type, ...rest] = line.split('|');\r\n\t\t\tswitch (type) {\r\n\t\t\t// the actual info in this is unused, but it may be useful in the future (we use the keys later)\r\n\t\t\tcase 'J': case 'j': {\r\n\t\t\t\tif (rest[0]?.startsWith('*')) continue; // ignore bots\r\n\t\t\t\tconst userid = toID(rest[0]);\r\n\t\t\t\tif (!results.users[userid]) {\r\n\t\t\t\t\tresults.users[userid] = 0;\r\n\t\t\t\t}\r\n\t\t\t\tresults.users[userid]++;\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t\tcase 'c:': case 'c': {\r\n\t\t\t\tconst {time, username} = LogViewer.parseChatLine(line, day);\r\n\t\t\t\tconst curTime = time.getTime();\r\n\t\t\t\tif (curTime - lastTime > 5 * 60 * 1000) { // more than 5 minutes\r\n\t\t\t\t\twaitIncrements.push(curTime - lastTime);\r\n\t\t\t\t\tlastTime = curTime;\r\n\t\t\t\t}\r\n\t\t\t\tconst userid = toID(username);\r\n\t\t\t\tif (!results.lines[userid]) results.lines[userid] = 0;\r\n\t\t\t\tresults.lines[userid]++;\r\n\t\t\t\tresults.totalLines++;\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t\tcase 'userstats': {\r\n\t\t\t\tconst [rawTotal] = rest;\r\n\t\t\t\tconst total = parseInt(rawTotal.split(':')[1]);\r\n\t\t\t\tresults.averagePresent += total;\r\n\t\t\t\tuserstatCount++;\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\tresults.deadTime = waitIncrements.length ? this.calculateDead(waitIncrements) : 0;\r\n\t\tresults.deadPercent = !results.totalLines ? 100 : (waitIncrements.length / results.totalLines) * 100;\r\n\t\tresults.linesPerUser = (results.totalLines / Object.keys(results.users).length) || 0;\r\n\t\tresults.averagePresent = results.averagePresent / userstatCount;\r\n\r\n\t\t// we don't cache the current day's stats because that could be inaccurate, whereas old days will always be the same\r\n\t\tif (day !== LogReader.today()) {\r\n\t\t\tthis.roomstatsCache.set(day, results);\r\n\t\t}\r\n\t\treturn results;\r\n\t}\r\n\tprivate calculateDead(waitIncrements: number[]) {\r\n\t\tlet num = 0;\r\n\t\tfor (const k of waitIncrements) {\r\n\t\t\tnum += k;\r\n\t\t}\r\n\t\treturn num / waitIncrements.length;\r\n\t}\r\n}\r\n\r\nexport class FSLogSearcher extends Searcher {\r\n\tresults: number;\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.results = 0;\r\n\t}\r\n\tasync searchLinecounts(roomid: RoomID, month: string, user?: ID) {\r\n\t\tconst directory = FS(`logs/chat/${roomid}/${month}`);\r\n\t\tif (!directory.existsSync()) {\r\n\t\t\treturn this.renderLinecountResults(null, roomid, month, user);\r\n\t\t}\r\n\t\tconst files = await directory.readdir();\r\n\t\tconst results: {[date: string]: {[userid: string]: number}} = {};\r\n\t\tfor (const file of files) {\r\n\t\t\tconst day = file.slice(0, -4);\r\n\t\t\tconst stream = FS(`logs/chat/${roomid}/${month}/${file}`).createReadStream();\r\n\t\t\tfor await (const line of stream.byLine()) {\r\n\t\t\t\tconst parts = line.split('|').map(toID);\r\n\t\t\t\tconst id = parts[2];\r\n\t\t\t\tif (!id) continue;\r\n\t\t\t\tif (parts[1] === 'c') {\r\n\t\t\t\t\tif (user && id !== user) continue;\r\n\t\t\t\t\tif (!results[day]) results[day] = {};\r\n\t\t\t\t\tif (!results[day][id]) results[day][id] = 0;\r\n\t\t\t\t\tresults[day][id]++;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn this.renderLinecountResults(results, roomid, month, user);\r\n\t}\r\n\tsearchLogs(roomid: RoomID, search: string, limit?: number | null, date?: string | null) {\r\n\t\tif (!date) date = Chat.toTimestamp(new Date()).split(' ')[0].slice(0, -3);\r\n\t\tconst isAll = (date === 'all');\r\n\t\tconst isYear = (date.length === 4);\r\n\t\tconst isMonth = (date.length === 7);\r\n\t\tif (!limit || limit > MAX_RESULTS) limit = MAX_RESULTS;\r\n\t\tif (isAll) {\r\n\t\t\treturn this.runYearSearch(roomid, null, search, limit);\r\n\t\t} else if (isYear) {\r\n\t\t\tdate = date.substr(0, 4);\r\n\t\t\treturn this.runYearSearch(roomid, date, search, limit);\r\n\t\t} else if (isMonth) {\r\n\t\t\tdate = date.substr(0, 7);\r\n\t\t\treturn this.runMonthSearch(roomid, date, search, limit);\r\n\t\t} else {\r\n\t\t\treturn Promise.resolve(LogViewer.error(\"Invalid date.\"));\r\n\t\t}\r\n\t}\r\n\r\n\tasync fsSearchDay(roomid: RoomID, day: string, search: string, limit?: number | null) {\r\n\t\tif (!limit || limit > MAX_RESULTS) limit = MAX_RESULTS;\r\n\t\tconst text = await LogReader.read(roomid, day, limit);\r\n\t\tif (!text) return [];\r\n\t\tconst lines = text.split('\\n');\r\n\t\tconst matches: SearchMatch[] = [];\r\n\r\n\t\tconst searchTerms = search.split('+').filter(Boolean);\r\n\t\tconst searchTermRegexes: RegExp[] = [];\r\n\t\tfor (const searchTerm of searchTerms) {\r\n\t\t\tif (searchTerm.startsWith('user-')) {\r\n\t\t\t\tconst id = toID(searchTerm.slice(5));\r\n\t\t\t\tsearchTermRegexes.push(new RegExp(`\\\\|c\\\\|${this.constructUserRegex(id)}\\\\|`, 'i'));\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\t\t\tsearchTermRegexes.push(new RegExp(searchTerm, 'i'));\r\n\t\t}\r\n\t\tfunction matchLine(line: string) {\r\n\t\t\treturn searchTermRegexes.every(term => term.test(line));\r\n\t\t}\r\n\r\n\t\tfor (const [i, line] of lines.entries()) {\r\n\t\t\tif (matchLine(line)) {\r\n\t\t\t\tmatches.push([\r\n\t\t\t\t\tlines[i - 2],\r\n\t\t\t\t\tlines[i - 1],\r\n\t\t\t\t\tline,\r\n\t\t\t\t\tlines[i + 1],\r\n\t\t\t\t\tlines[i + 2],\r\n\t\t\t\t]);\r\n\t\t\t\tif (matches.length > limit) break;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn matches;\r\n\t}\r\n\r\n\trenderDayResults(results: {[day: string]: SearchMatch[]}, roomid: RoomID) {\r\n\t\tconst renderResult = (match: SearchMatch) => {\r\n\t\t\tthis.results++;\r\n\t\t\treturn (\r\n\t\t\t\tLogViewer.renderLine(match[0]) +\r\n\t\t\t\tLogViewer.renderLine(match[1]) +\r\n\t\t\t\t`
Searching all logs: `;\r\n\t\t}\r\n\t\tbuf += this.renderDayResults(results, roomid);\r\n\t\tif (total > limit) {\r\n\t\t\t// cap is met\r\n\t\t\tbuf += ` Max results reached, capped at ${limit}`;\r\n\t\t\tbuf += `
`;\r\n\t\t\t}\r\n\t\t}\r\n\t\tthis.results = 0;\r\n\t\treturn buf;\r\n\t}\r\n\tasync runMonthSearch(roomid: RoomID, month: string, search: string, limit: number, year = false) {\r\n\t\tconst {results, total} = await this.fsSearchMonth({room: roomid, date: month, search, limit});\r\n\t\tif (!total) {\r\n\t\t\treturn LogViewer.error(`No matches found for ${search} on ${roomid}.`);\r\n\t\t}\r\n\r\n\t\tlet buf = (\r\n\t\t\t`
Searching for \"${search}\" in ${roomid} (${month}):`\r\n\t\t);\r\n\t\tbuf += this.renderDayResults(results, roomid);\r\n\t\tif (total > limit) {\r\n\t\t\t// cap is met & is not being used in a year read\r\n\t\t\tbuf += ` Max results reached, capped at ${limit}`;\r\n\t\t\tbuf += `
`);\r\n\t\treturn LogSearcher.roomStats(roomid, date);\r\n\t},\r\n};\r\n\r\nexport const commands: Chat.ChatCommands = {\r\n\tchatlogs: 'chatlog',\r\n\tcl: 'chatlog',\r\n\tchatlog(target, room, user) {\r\n\t\tconst [tarRoom, ...opts] = target.split(',');\r\n\t\tconst targetRoom = tarRoom ? Rooms.search(tarRoom) : room;\r\n\t\tconst roomid = targetRoom ? targetRoom.roomid : target;\r\n\t\treturn this.parse(`/join view-chatlog-${roomid}--today${opts ? `--${opts.join('--')}` : ''}`);\r\n\t},\r\n\r\n\tchatloghelp() {\r\n\t\tconst strings = [\r\n\t\t\t`/chatlog [optional room], [opts] - View chatlogs from the given room. `,\r\n\t\t\t`If none is specified, shows logs from the room you're in. Requires: % @ * # &`,\r\n\t\t\t`Supported options:`,\r\n\t\t\t`txt - Do not render logs.`,\r\n\t\t\t`txt-onlychat - Show only chat lines, untransformed.`,\r\n\t\t\t`onlychat - Show only chat lines.`,\r\n\t\t\t`all - Show all lines, including userstats and join/leave messages.`,\r\n\t\t];\r\n\t\tthis.runBroadcast();\r\n\t\treturn this.sendReplyBox(strings.join(' '));\r\n\t},\r\n\r\n\tsl: 'searchlogs',\r\n\tlogsearch: 'searchlogs',\r\n\tsearchlog: 'searchlogs',\r\n\tsearchlogs(target, room) {\r\n\t\ttarget = target.trim();\r\n\t\tconst args = target.split(',').map(item => item.trim());\r\n\t\tif (!target) return this.parse('/help searchlogs');\r\n\t\tlet date = 'all';\r\n\t\tconst searches: string[] = [];\r\n\t\tlet limit = '500';\r\n\t\tlet targetRoom: RoomID | undefined = room?.roomid;\r\n\t\tfor (const arg of args) {\r\n\t\t\tif (arg.startsWith('room=')) {\r\n\t\t\t\ttargetRoom = arg.slice(5).trim().toLowerCase() as RoomID;\r\n\t\t\t} else if (arg.startsWith('limit=')) {\r\n\t\t\t\tlimit = arg.slice(6);\r\n\t\t\t} else if (arg.startsWith('date=')) {\r\n\t\t\t\tdate = arg.slice(5);\r\n\t\t\t} else if (arg.startsWith('user=')) {\r\n\t\t\t\targs.push(`user-${toID(arg.slice(5))}`);\r\n\t\t\t} else {\r\n\t\t\t\tsearches.push(arg);\r\n\t\t\t}\r\n\t\t}\r\n\t\tif (!targetRoom) {\r\n\t\t\treturn this.parse(`/help searchlogs`);\r\n\t\t}\r\n\t\treturn this.parse(\r\n\t\t\t`/join view-chatlog-${targetRoom}--${date}--search-` +\r\n\t\t\t`${Dashycode.encode(searches.join('+'))}--limit-${limit}`\r\n\t\t);\r\n\t},\r\n\tsearchlogshelp() {\r\n\t\tconst buffer = `/searchlogs [arguments]: ` +\r\n\t\t\t`searches logs in the current room using the [arguments].` +\r\n\t\t\t`A room can be specified using the argument room=[roomid]. Defaults to the room it is used in. ` +\r\n\t\t\t`A limit can be specified using the argument limit=[number less than or equal to 3000]. Defaults to 500. ` +\r\n\t\t\t`A date can be specified in ISO (YYYY-MM-DD) format using the argument date=[month] (for example, date: 2020-05). Defaults to searching all logs. ` +\r\n\t\t\t`If you provide a user argument in the form user=username, it will search for messages (that match the other arguments) only from that user. ` +\r\n\t\t\t`All other arguments will be considered part of the search ` +\r\n\t\t\t`(if more than one argument is specified, it searches for lines containing all terms). ` +\r\n\t\t\t\"Requires: % @ # &
\";\r\n\t\treturn this.sendReplyBox(buffer);\r\n\t},\r\n\ttopusers: 'linecount',\r\n\troomstats: 'linecount',\r\n\tlinecount(target, room, user) {\r\n\t\tconst params = target.split(',').map(f => f.trim());\r\n\t\tconst search: Partial<{roomid: RoomID, date: string, user: string}> = {};\r\n\t\tfor (const [i, param] of params.entries()) {\r\n\t\t\tlet [key, val] = param.split('=');\r\n\t\t\tif (!val) {\r\n\t\t\t\t// backwards compatibility\r\n\t\t\t\tswitch (i) {\r\n\t\t\t\tcase 0:\r\n\t\t\t\t\tval = key;\r\n\t\t\t\t\tkey = 'room';\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 1:\r\n\t\t\t\t\tval = key;\r\n\t\t\t\t\tkey = 'date';\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 2:\r\n\t\t\t\t\tval = key;\r\n\t\t\t\t\tkey = 'user';\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn this.parse(`/help linecount`);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (!toID(val)) continue; // unset, continue and allow defaults to apply\r\n\r\n\t\t\tkey = key.toLowerCase().replace(/ /g, '');\r\n\t\t\tswitch (key) {\r\n\t\t\tcase 'room': case 'roomid':\r\n\t\t\t\tconst tarRoom = Rooms.search(val);\r\n\t\t\t\tif (!tarRoom) {\r\n\t\t\t\t\treturn this.errorReply(`Room '${val}' not found.`);\r\n\t\t\t\t}\r\n\t\t\t\tsearch.roomid = tarRoom.roomid;\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'user': case 'id': case 'userid':\r\n\t\t\t\tsearch.user = toID(val);\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'date': case 'month': case 'time':\r\n\t\t\t\tif (!LogReader.isMonth(val)) {\r\n\t\t\t\t\treturn this.errorReply(`Invalid date.`);\r\n\t\t\t\t}\r\n\t\t\t\tsearch.date = val;\r\n\t\t\t}\r\n\t\t}\r\n\t\tif (!search.roomid) {\r\n\t\t\tif (!room) {\r\n\t\t\t\treturn this.errorReply(`If you're not specifying a room, you must use this command in a room.`);\r\n\t\t\t}\r\n\t\t\tsearch.roomid = room.roomid;\r\n\t\t}\r\n\t\tif (!search.date) {\r\n\t\t\tsearch.date = LogReader.getMonth();\r\n\t\t}\r\n\t\treturn this.parse(`/join view-roomstats-${search.roomid}--${search.date}${search.user ? `--${search.user}` : ''}`);\r\n\t},\r\n\tlinecounthelp() {\r\n\t\treturn this.sendReplyBox(\r\n\t\t\t`/linecount OR /roomstats OR /topusers [key=value formatted parameters] - ` +\r\n\t\t\t`Searches linecounts with the given parameters. ` +\r\n\t\t\t`Parameters:` +\r\n\t\t\t`- room (aliases: roomid) - Select a room to search. If no room is given, defaults to current room. ` +\r\n\t\t\t`- date (aliases: month, time) - ` +\r\n\t\t\t`Select a month to search linecounts on (requires YYYY-MM format). Defaults to current month. ` +\r\n\t\t\t`- user (aliases: id, userid) - ` +\r\n\t\t\t`Searches for linecounts only from a given user. ` +\r\n\t\t\t`If this is not provided, /linecount instead shows line counts for all users from that month.` +\r\n\t\t\t`Parameters may also be specified without a [key]. When using this, arguments are provided in the format ` +\r\n\t\t\t`/linecount [room], [month], [user].. This does not use any defaults. `\r\n\t\t);\r\n\t},\r\n\tslb: 'sharedloggedbattles',\r\n\tasync sharedloggedbattles(target, room, user) {\r\n\t\tthis.checkCan('lock');\r\n\t\tif (Config.nobattlesearch) return this.errorReply(`/${this.cmd} has been temporarily disabled due to load issues.`);\r\n\t\tconst targets = target.split(',').map(toID).filter(Boolean);\r\n\t\tif (targets.length < 2 || targets.length > 2) {\r\n\t\t\treturn this.errorReply(`Specify two users.`);\r\n\t\t}\r\n\t\tconst results = await LogSearcher.sharedBattles(targets);\r\n\t\tif (room?.settings.staffRoom || this.pmTarget?.isStaff) {\r\n\t\t\tthis.runBroadcast();\r\n\t\t}\r\n\t\treturn this.sendReplyBox(results);\r\n\t},\r\n\tsharedloggedbattleshelp: [\r\n\t\t`/sharedloggedbattles OR /slb [user1, user2] - View shared battle logs between user1 and user2`,\r\n\t],\r\n\tbattlelog(target, room, user) {\r\n\t\tthis.checkCan('lock');\r\n\t\ttarget = target.trim();\r\n\t\tif (!target) return this.errorReply(`Specify a battle.`);\r\n\t\tif (target.startsWith('http://')) target = target.slice(7);\r\n\t\tif (target.startsWith('https://')) target = target.slice(8);\r\n\t\tif (target.startsWith(`${Config.routes.client}/`)) target = target.slice(Config.routes.client.length + 1);\r\n\t\tif (target.startsWith(`${Config.routes.replays}/`)) target = `battle-${target.slice(Config.routes.replays.length + 1)}`;\r\n\t\tif (target.startsWith('psim.us/')) target = target.slice(8);\r\n\t\treturn this.parse(`/join view-battlelog-${target}`);\r\n\t},\r\n\tbattleloghelp: [\r\n\t\t`/battlelog [battle link] - View the log of the given [battle link], even if the replay was not saved.`,\r\n\t\t`Requires: % @ &`,\r\n\t],\r\n\r\n\r\n\tgbc: 'getbattlechat',\r\n\tasync getbattlechat(target, room, user) {\r\n\t\tthis.checkCan('lock');\r\n\t\tlet [roomName, userName] = Utils.splitFirst(target, ',').map(f => f.trim());\r\n\t\tif (!roomName) {\r\n\t\t\tif (!room) {\r\n\t\t\t\treturn this.errorReply(`If you are not specifying a room, use this command in a room.`);\r\n\t\t\t}\r\n\t\t\troomName = room.roomid;\r\n\t\t}\r\n\t\tif (roomName.startsWith('http://')) roomName = roomName.slice(7);\r\n\t\tif (roomName.startsWith('https://')) roomName = roomName.slice(8);\r\n\t\tif (roomName.startsWith(`${Config.routes.client}/`)) {\r\n\t\t\troomName = roomName.slice(Config.routes.client.length + 1);\r\n\t\t}\r\n\t\tif (roomName.startsWith(`${Config.routes.replays}/`)) {\r\n\t\t\troomName = `battle-${roomName.slice(Config.routes.replays.length + 1)}`;\r\n\t\t}\r\n\t\tif (roomName.startsWith('psim.us/')) roomName = roomName.slice(8);\r\n\t\tconst roomid = roomName.toLowerCase().replace(/[^a-z0-9-]+/g, '') as RoomID;\r\n\t\tif (!roomid) return this.parse('/help getbattlechat');\r\n\t\tconst userid = toID(userName);\r\n\t\tif (userName && !userid) return this.errorReply(`Invalid username.`);\r\n\t\tif (!roomid.startsWith('battle-')) return this.errorReply(`You must specify a battle.`);\r\n\t\tconst tarRoom = Rooms.get(roomid);\r\n\r\n\t\tlet log: string[];\r\n\t\tif (tarRoom) {\r\n\t\t\tlog = tarRoom.log.log;\r\n\t\t} else {\r\n\t\t\ttry {\r\n\t\t\t\tconst raw = await Net(`https://${Config.routes.replays}/${roomid.slice('battle-'.length)}.json`).get();\r\n\t\t\t\tconst data = JSON.parse(raw);\r\n\t\t\t\tlog = data.log ? data.log.split('\\n') : [];\r\n\t\t\t} catch {\r\n\t\t\t\treturn this.errorReply(`No room or replay found for that battle.`);\r\n\t\t\t}\r\n\t\t}\r\n\t\tlog = log.filter(l => l.startsWith('|c|'));\r\n\r\n\t\tlet buf = '';\r\n\t\tlet atLeastOne = false;\r\n\t\tlet i = 0;\r\n\t\tfor (const line of log) {\r\n\t\t\tconst [,, username, message] = Utils.splitFirst(line, '|', 3);\r\n\t\t\tif (userid && toID(username) !== userid) continue;\r\n\t\t\ti++;\r\n\t\t\tbuf += Utils.html`
${username}: ${message}
`;\r\n\t\t\tatLeastOne = true;\r\n\t\t}\r\n\t\tif (i > 20) buf = `${buf}`;\r\n\t\tif (!atLeastOne) buf = ` None found.`;\r\n\r\n\t\tthis.runBroadcast();\r\n\r\n\t\treturn this.sendReplyBox(\r\n\t\t\tUtils.html`Chat messages in the battle '${roomid}'` +\r\n\t\t\t(userid ? `from the user '${userid}'` : \"\") + `` +\r\n\t\t\tbuf\r\n\t\t);\r\n\t},\r\n\tgetbattlechathelp: [\r\n\t\t`/getbattlechat [battle link][, username] - Gets all battle chat logs from the given [battle link].`,\r\n\t\t`If a [username] is given, searches only chat messages from the given username.`,\r\n\t\t`Requires: % @ &`,\r\n\t],\r\n\r\n\tlogsaccess(target, room, user) {\r\n\t\tthis.checkCan('rangeban');\r\n\t\tconst [type, userid] = target.split(',').map(toID);\r\n\t\treturn this.parse(`/j view-logsaccess-${type || 'all'}${userid ? `-${userid}` : ''}`);\r\n\t},\r\n\tlogsaccesshelp: [\r\n\t\t`/logsaccess [type], [user] - View chatlog access logs for the given [type] and [user].`,\r\n\t\t`If no arguments are given, shows the entire access log.`,\r\n\t\t`Requires: &`,\r\n\t],\r\n\r\n\r\n\tgcsearch: 'groupchatsearch',\r\n\tasync groupchatsearch(target, room, user) {\r\n\t\tthis.checkCan('lock');\r\n\t\ttarget = target.toLowerCase().replace(/[^a-z0-9-]+/g, '');\r\n\t\tif (!target) return this.parse(`/help groupchatsearch`);\r\n\t\tif (target.length < 3) {\r\n\t\t\treturn this.errorReply(`Too short of a search term.`);\r\n\t\t}\r\n\t\tconst files = await FS(`logs/chat`).readdir();\r\n\t\tconst buffer = [];\r\n\t\tfor (const roomid of files) {\r\n\t\t\tif (roomid.startsWith('groupchat-') && roomid.includes(target)) {\r\n\t\t\t\tbuffer.push(roomid);\r\n\t\t\t}\r\n\t\t}\r\n\t\tUtils.sortBy(buffer, roomid => !!Rooms.get(roomid));\r\n\t\treturn this.sendReplyBox(\r\n\t\t\t`Groupchats with a roomid matching '${target}': ` +\r\n\t\t\t(buffer.length ? buffer.map(id => `${id}`).join('; ') : 'None found.')\r\n\t\t);\r\n\t},\r\n\tgroupchatsearchhelp: [\r\n\t\t`/groupchatsearch [target] - Searches for logs of groupchats with names containing the [target]. Requires: % @ &`,\r\n\t],\r\n\r\n\troomact: 'roomactivity',\r\n\troomactivity(target, room, user) {\r\n\t\tthis.checkCan('bypassall');\r\n\t\tconst [id, date] = target.split(',').map(i => i.trim());\r\n\t\tif (id) room = Rooms.search(toID(id)) as Room | null;\r\n\t\tif (!room) return this.errorReply(`Either use this command in the target room or specify a room.`);\r\n\t\treturn this.parse(`/join view-roominfo-${room}${date ? `--${date}` : ''}`);\r\n\t},\r\n\troomactivityhelp: [\r\n\t\t`/roomactibity [room][, date] - View room activity logs for the given room.`,\r\n\t\t`If a date is provided, it searches for logs from that date. Otherwise, it searches the current month.`,\r\n\t\t`Requires: &`,\r\n\t],\r\n};\r\n"],
"mappings": "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",
"names": ["cmd"]
}