Spaces:
Running
Running
{ | |
"version": 3, | |
"sources": ["../../../server/chat-plugins/announcements.ts"], | |
"sourcesContent": ["/*\n * Announcements chat plugin\n * By Spandamn\n */\n\nexport interface AnnouncementOptions {\n\tactivityNumber?: number;\n\tsource: string;\n\ttimeoutMins?: number;\n\ttimerEnd?: number;\n}\n\nexport interface AnnouncementData extends AnnouncementOptions {\n\treadonly activityid: 'announcement';\n}\n\nexport class Announcement extends Rooms.MinorActivity {\n\treadonly activityid = 'announcement' as ID;\n\tname = 'Announcement';\n\tactivityNumber: number;\n\tsource: string;\n\tconstructor(room: Room, options: AnnouncementOptions) {\n\t\tsuper(room);\n\t\tthis.activityNumber = options.activityNumber || room.nextGameNumber();\n\t\tthis.source = options.source;\n\t\tthis.setTimer(options);\n\t}\n\n\tgenerateAnnouncement() {\n\t\treturn `<div class=\"broadcast-blue\"><p style=\"margin: 2px 0 5px 0\"><strong style=\"font-size:11pt\">${this.source}</strong></p></div>`;\n\t}\n\n\tdisplayTo(user: User, connection: Connection | null = null) {\n\t\tconst recipient = connection || user;\n\t\trecipient.sendTo(this.room, `|uhtml|announcement${this.activityNumber}|${this.generateAnnouncement()}`);\n\t}\n\n\tdisplay() {\n\t\tconst announcement = this.generateAnnouncement();\n\t\tfor (const id in this.room.users) {\n\t\t\tconst thisUser = this.room.users[id];\n\t\t\tthisUser.sendTo(this.room, `|uhtml|announcement${this.activityNumber}|${announcement}`);\n\t\t}\n\t}\n\n\tonConnect(user: User, connection: Connection | null = null) {\n\t\tthis.displayTo(user, connection);\n\t}\n\n\tdestroy() {\n\t\tthis.room.send(`|uhtmlchange|announcement${this.activityNumber}|<div class=\"infobox\">(${this.room.tr`The announcement has ended.`})</div>`);\n\t\tthis.room.setMinorActivity(null);\n\t}\n\n\ttoJSON(): AnnouncementData {\n\t\treturn {\n\t\t\tsource: this.source,\n\t\t\tactivityNumber: this.activityNumber,\n\t\t\ttimeoutMins: this.timeoutMins,\n\t\t\ttimerEnd: this.timerEnd,\n\t\t\tactivityid: 'announcement',\n\t\t};\n\t}\n\n\tsave() {\n\t\tthis.room.settings.minorActivity = this.toJSON();\n\t\tthis.room.saveSettings();\n\t}\n}\n\nexport const commands: Chat.ChatCommands = {\n\tannouncement: {\n\t\thtmlcreate: 'new',\n\t\tcreate: 'new',\n\t\tnew(target, room, user, connection, cmd, message) {\n\t\t\troom = this.requireRoom();\n\t\t\tif (!target) return this.parse('/help announcement new');\n\t\t\ttarget = target.trim();\n\t\t\tif (room.battle) return this.errorReply(this.tr`Battles do not support announcements.`);\n\n\t\t\tconst text = this.filter(target);\n\t\t\tif (target !== text) return this.errorReply(this.tr`You are not allowed to use filtered words in announcements.`);\n\n\t\t\tconst supportHTML = cmd === 'htmlcreate';\n\n\t\t\tthis.checkCan('minigame', null, room);\n\t\t\tif (supportHTML) this.checkCan('declare', null, room);\n\t\t\tthis.checkChat();\n\t\t\tif (room.minorActivity) {\n\t\t\t\treturn this.errorReply(this.tr`There is already a poll or announcement in progress in this room.`);\n\t\t\t}\n\n\t\t\tconst source = supportHTML ? this.checkHTML(Chat.collapseLineBreaksHTML(target)) : Chat.formatText(target, true);\n\n\t\t\troom.setMinorActivity(new Announcement(room, { source }));\n\n\t\t\tthis.roomlog(`${user.name} used ${message}`);\n\t\t\tthis.modlog('ANNOUNCEMENT');\n\t\t\treturn this.privateModAction(room.tr`An announcement was started by ${user.name}.`);\n\t\t},\n\t\tnewhelp: [`/announcement create [announcement] - Creates an announcement. Requires: % @ # ~`],\n\n\t\thtmledit: 'edit',\n\t\tedit(target, room, user, connection, cmd, message) {\n\t\t\troom = this.requireRoom();\n\t\t\tconst announcement = this.requireMinorActivity(Announcement);\n\n\t\t\tif (!target) return this.parse('/help announcement edit');\n\t\t\ttarget = target.trim();\n\t\t\tconst text = this.filter(target);\n\t\t\tif (target !== text) return this.errorReply(this.tr`You are not allowed to use filtered words in announcements.`);\n\n\t\t\tconst supportHTML = cmd === 'htmledit';\n\n\t\t\tthis.checkCan('minigame', null, room);\n\t\t\tif (supportHTML) this.checkCan('declare', null, room);\n\t\t\tthis.checkChat();\n\n\t\t\tconst source = supportHTML ? this.checkHTML(Chat.collapseLineBreaksHTML(target)) : Chat.formatText(target, true);\n\t\t\tannouncement.source = source;\n\t\t\tannouncement.save();\n\n\t\t\tthis.roomlog(`${user.name} used ${message}`);\n\t\t\tthis.modlog('ANNOUNCEMENT EDIT');\n\t\t\tthis.privateModAction(room.tr`The announcement was edited by ${user.name}.`);\n\t\t\tthis.parse('/announcement display');\n\t\t},\n\t\tedithelp: [`/announcement edit [announcement] - Edits the announcement. Requires: % @ # ~`],\n\n\t\ttimer(target, room, user) {\n\t\t\troom = this.requireRoom();\n\t\t\tconst announcement = this.requireMinorActivity(Announcement);\n\n\t\t\tif (target) {\n\t\t\t\tthis.checkCan('minigame', null, room);\n\t\t\t\tif (target === 'clear') {\n\t\t\t\t\tif (!announcement.endTimer()) return this.errorReply(this.tr`There is no timer to clear.`);\n\t\t\t\t\treturn this.add(this.tr`The announcement timer was turned off.`);\n\t\t\t\t}\n\t\t\t\tconst timeoutMins = parseFloat(target);\n\t\t\t\tif (isNaN(timeoutMins) || timeoutMins <= 0 || timeoutMins > 7 * 24 * 60) {\n\t\t\t\t\treturn this.errorReply(this.tr`Time should be a number of minutes less than one week.`);\n\t\t\t\t}\n\t\t\t\tannouncement.setTimer({ timeoutMins });\n\t\t\t\troom.add(`The announcement timer was turned on: the announcement will end in ${timeoutMins} minute${Chat.plural(timeoutMins)}.`);\n\t\t\t\tthis.modlog('ANNOUNCEMENT TIMER', null, `${timeoutMins} minutes`);\n\t\t\t\treturn this.privateModAction(`The announcement timer was set to ${timeoutMins} minute${Chat.plural(timeoutMins)} by ${user.name}.`);\n\t\t\t} else {\n\t\t\t\tif (!this.runBroadcast()) return;\n\t\t\t\tif (announcement.timeout) {\n\t\t\t\t\treturn this.sendReply(`The announcement timer is on and will end in ${announcement.timeoutMins} minute${Chat.plural(announcement.timeoutMins)}.`);\n\t\t\t\t} else {\n\t\t\t\t\treturn this.sendReply(this.tr`The announcement timer is off.`);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\ttimerhelp: [\n\t\t\t`/announcement timer [minutes] - Sets the announcement to automatically end after [minutes] minutes. Requires: % @ # ~`,\n\t\t\t`/announcement timer clear - Clears the announcement's timer. Requires: % @ # ~`,\n\t\t],\n\n\t\tclose: 'end',\n\t\tstop: 'end',\n\t\tend(target, room, user) {\n\t\t\troom = this.requireRoom();\n\t\t\tthis.checkCan('minigame', null, room);\n\t\t\tthis.checkChat();\n\t\t\tconst announcement = this.requireMinorActivity(Announcement);\n\t\t\tannouncement.end(room);\n\t\t\tthis.modlog('ANNOUNCEMENT END');\n\t\t\tthis.privateModAction(room.tr`The announcement was ended by ${user.name}.`);\n\t\t},\n\t\tendhelp: [`/announcement end - Ends a announcement and displays the results. Requires: % @ # ~`],\n\n\t\tshow: '',\n\t\tdisplay: '',\n\t\t''(target, room, user, connection) {\n\t\t\troom = this.requireRoom();\n\t\t\tconst announcement = this.requireMinorActivity(Announcement);\n\t\t\tif (!this.runBroadcast()) return;\n\t\t\troom.update();\n\n\t\t\tif (this.broadcasting) {\n\t\t\t\tannouncement.display();\n\t\t\t} else {\n\t\t\t\tannouncement.displayTo(user, connection);\n\t\t\t}\n\t\t},\n\t\tdisplayhelp: [`/announcement display - Displays the announcement`],\n\t},\n\tannouncementhelp: [\n\t\t`/announcement allows rooms to run their own announcements. These announcements are limited to one announcement at a time per room.`,\n\t\t`Accepts the following commands:`,\n\t\t`/announcement create [announcement] - Creates a announcement. Requires: % @ # ~`,\n\t\t`/announcement htmlcreate [announcement] - Creates a announcement, with HTML allowed. Requires: # ~`,\n\t\t`/announcement edit [announcement] - Edits the announcement. Requires: % @ # ~`,\n\t\t`/announcement htmledit [announcement] - Edits the announcement, with HTML allowed. Requires: # ~`,\n\t\t`/announcement timer [minutes] - Sets the announcement to automatically end after [minutes]. Requires: % @ # ~`,\n\t\t`/announcement display - Displays the announcement`,\n\t\t`/announcement end - Ends a announcement. Requires: % @ # ~`,\n\t],\n};\n\nprocess.nextTick(() => {\n\tChat.multiLinePattern.register('/announcement (new|create|htmlcreate|edit|htmledit) ');\n});\n\n// should handle restarts and also hotpatches\nfor (const room of Rooms.rooms.values()) {\n\tif (room.settings.minorActivity?.activityid === 'announcement') {\n\t\troom.setMinorActivity(new Announcement(room, room.settings.minorActivity), true);\n\t}\n}\n"], | |
"mappings": "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", | |
"names": [] | |
} | |