"use strict"; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __hasOwnProp = Object.prototype.hasOwnProperty; var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); var announcements_exports = {}; __export(announcements_exports, { Announcement: () => Announcement, commands: () => commands }); module.exports = __toCommonJS(announcements_exports); class Announcement extends Rooms.MinorActivity { constructor(room, options) { super(room); this.activityid = "announcement"; this.name = "Announcement"; this.activityNumber = options.activityNumber || room.nextGameNumber(); this.source = options.source; this.setTimer(options); } generateAnnouncement() { return `

${this.source}

`; } displayTo(user, connection = null) { const recipient = connection || user; recipient.sendTo(this.room, `|uhtml|announcement${this.activityNumber}|${this.generateAnnouncement()}`); } display() { const announcement = this.generateAnnouncement(); for (const id in this.room.users) { const thisUser = this.room.users[id]; thisUser.sendTo(this.room, `|uhtml|announcement${this.activityNumber}|${announcement}`); } } onConnect(user, connection = null) { this.displayTo(user, connection); } destroy() { this.room.send(`|uhtmlchange|announcement${this.activityNumber}|
(${this.room.tr`The announcement has ended.`})
`); this.room.setMinorActivity(null); } toJSON() { return { source: this.source, activityNumber: this.activityNumber, timeoutMins: this.timeoutMins, timerEnd: this.timerEnd, activityid: "announcement" }; } save() { this.room.settings.minorActivity = this.toJSON(); this.room.saveSettings(); } } const commands = { announcement: { htmlcreate: "new", create: "new", new(target, room, user, connection, cmd, message) { room = this.requireRoom(); if (!target) return this.parse("/help announcement new"); target = target.trim(); if (room.battle) return this.errorReply(this.tr`Battles do not support announcements.`); const text = this.filter(target); if (target !== text) return this.errorReply(this.tr`You are not allowed to use filtered words in announcements.`); const supportHTML = cmd === "htmlcreate"; this.checkCan("minigame", null, room); if (supportHTML) this.checkCan("declare", null, room); this.checkChat(); if (room.minorActivity) { return this.errorReply(this.tr`There is already a poll or announcement in progress in this room.`); } const source = supportHTML ? this.checkHTML(Chat.collapseLineBreaksHTML(target)) : Chat.formatText(target, true); room.setMinorActivity(new Announcement(room, { source })); this.roomlog(`${user.name} used ${message}`); this.modlog("ANNOUNCEMENT"); return this.privateModAction(room.tr`An announcement was started by ${user.name}.`); }, newhelp: [`/announcement create [announcement] - Creates an announcement. Requires: % @ # ~`], htmledit: "edit", edit(target, room, user, connection, cmd, message) { room = this.requireRoom(); const announcement = this.requireMinorActivity(Announcement); if (!target) return this.parse("/help announcement edit"); target = target.trim(); const text = this.filter(target); if (target !== text) return this.errorReply(this.tr`You are not allowed to use filtered words in announcements.`); const supportHTML = cmd === "htmledit"; this.checkCan("minigame", null, room); if (supportHTML) this.checkCan("declare", null, room); this.checkChat(); const source = supportHTML ? this.checkHTML(Chat.collapseLineBreaksHTML(target)) : Chat.formatText(target, true); announcement.source = source; announcement.save(); this.roomlog(`${user.name} used ${message}`); this.modlog("ANNOUNCEMENT EDIT"); this.privateModAction(room.tr`The announcement was edited by ${user.name}.`); this.parse("/announcement display"); }, edithelp: [`/announcement edit [announcement] - Edits the announcement. Requires: % @ # ~`], timer(target, room, user) { room = this.requireRoom(); const announcement = this.requireMinorActivity(Announcement); if (target) { this.checkCan("minigame", null, room); if (target === "clear") { if (!announcement.endTimer()) return this.errorReply(this.tr`There is no timer to clear.`); return this.add(this.tr`The announcement timer was turned off.`); } const timeoutMins = parseFloat(target); if (isNaN(timeoutMins) || timeoutMins <= 0 || timeoutMins > 7 * 24 * 60) { return this.errorReply(this.tr`Time should be a number of minutes less than one week.`); } announcement.setTimer({ timeoutMins }); room.add(`The announcement timer was turned on: the announcement will end in ${timeoutMins} minute${Chat.plural(timeoutMins)}.`); this.modlog("ANNOUNCEMENT TIMER", null, `${timeoutMins} minutes`); return this.privateModAction(`The announcement timer was set to ${timeoutMins} minute${Chat.plural(timeoutMins)} by ${user.name}.`); } else { if (!this.runBroadcast()) return; if (announcement.timeout) { return this.sendReply(`The announcement timer is on and will end in ${announcement.timeoutMins} minute${Chat.plural(announcement.timeoutMins)}.`); } else { return this.sendReply(this.tr`The announcement timer is off.`); } } }, timerhelp: [ `/announcement timer [minutes] - Sets the announcement to automatically end after [minutes] minutes. Requires: % @ # ~`, `/announcement timer clear - Clears the announcement's timer. Requires: % @ # ~` ], close: "end", stop: "end", end(target, room, user) { room = this.requireRoom(); this.checkCan("minigame", null, room); this.checkChat(); const announcement = this.requireMinorActivity(Announcement); announcement.end(room); this.modlog("ANNOUNCEMENT END"); this.privateModAction(room.tr`The announcement was ended by ${user.name}.`); }, endhelp: [`/announcement end - Ends a announcement and displays the results. Requires: % @ # ~`], show: "", display: "", ""(target, room, user, connection) { room = this.requireRoom(); const announcement = this.requireMinorActivity(Announcement); if (!this.runBroadcast()) return; room.update(); if (this.broadcasting) { announcement.display(); } else { announcement.displayTo(user, connection); } }, displayhelp: [`/announcement display - Displays the announcement`] }, announcementhelp: [ `/announcement allows rooms to run their own announcements. These announcements are limited to one announcement at a time per room.`, `Accepts the following commands:`, `/announcement create [announcement] - Creates a announcement. Requires: % @ # ~`, `/announcement htmlcreate [announcement] - Creates a announcement, with HTML allowed. Requires: # ~`, `/announcement edit [announcement] - Edits the announcement. Requires: % @ # ~`, `/announcement htmledit [announcement] - Edits the announcement, with HTML allowed. Requires: # ~`, `/announcement timer [minutes] - Sets the announcement to automatically end after [minutes]. Requires: % @ # ~`, `/announcement display - Displays the announcement`, `/announcement end - Ends a announcement. Requires: % @ # ~` ] }; process.nextTick(() => { Chat.multiLinePattern.register("/announcement (new|create|htmlcreate|edit|htmledit) "); }); for (const room of Rooms.rooms.values()) { if (room.settings.minorActivity?.activityid === "announcement") { room.setMinorActivity(new Announcement(room, room.settings.minorActivity), true); } } //# sourceMappingURL=announcements.js.map