107 lines
3.4 KiB
JavaScript
107 lines
3.4 KiB
JavaScript
"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 room_minor_activity_exports = {};
|
|
__export(room_minor_activity_exports, {
|
|
MinorActivity: () => MinorActivity
|
|
});
|
|
module.exports = __toCommonJS(room_minor_activity_exports);
|
|
/**
|
|
* Minor activities
|
|
* Pokemon Showdown - http://pokemonshowdown.com/
|
|
*
|
|
* Minor activities are representations of non-game activities that rooms
|
|
* regularly use, such as polls and announcements. Rooms are limited to
|
|
* one minor activity at a time.
|
|
*
|
|
* Minor activities keep track of users in the form of userids and IPs.
|
|
* If a player votes for a poll under one IP, they cannot vote for the same
|
|
* poll again.
|
|
*
|
|
* The user-tracking system is not implemented at the base level: Announcements
|
|
* do not have a reason to keep track of users' IPs/IDs because they're just used
|
|
* to broadcast a message to a room.
|
|
*
|
|
* @license MIT
|
|
*/
|
|
class MinorActivity {
|
|
constructor(room) {
|
|
this.timeout = null;
|
|
this.timeoutMins = 0;
|
|
this.timerEnd = 0;
|
|
this.roomid = room.roomid;
|
|
this.room = room;
|
|
this.supportHTML = false;
|
|
}
|
|
setTimer(options) {
|
|
if (this.timeout)
|
|
clearTimeout(this.timeout);
|
|
this.timeoutMins = options.timeoutMins || 0;
|
|
if (!this.timeoutMins) {
|
|
this.timerEnd = 0;
|
|
this.timeout = null;
|
|
return;
|
|
}
|
|
const now = Date.now();
|
|
this.timerEnd = options.timerEnd || now + this.timeoutMins * 6e4;
|
|
this.timeout = setTimeout(() => {
|
|
const room = this.room;
|
|
if (!room)
|
|
return;
|
|
this.end(room);
|
|
}, this.timerEnd - now);
|
|
this.save();
|
|
}
|
|
end(room, MinorActivityClass) {
|
|
room.minorActivity?.destroy();
|
|
if (room.minorActivityQueue?.length) {
|
|
const pollData = room.minorActivityQueue.shift();
|
|
if (!room.minorActivityQueue.length)
|
|
room.clearMinorActivityQueue();
|
|
if (!room.settings.minorActivityQueue?.length) {
|
|
delete room.settings.minorActivityQueue;
|
|
room.saveSettings();
|
|
}
|
|
if (pollData.activityid !== "poll")
|
|
throw new Error(`Unexpected Minor Activity (${pollData.activityid}) in queue`);
|
|
room.add(`|c|&|/log ${room.tr`The queued poll was started.`}`).update();
|
|
room.modlog({
|
|
action: "POLL",
|
|
note: "(queued)"
|
|
});
|
|
if (!MinorActivityClass) {
|
|
if (pollData.activityid === "poll") {
|
|
const { Poll } = require("./chat-plugins/poll");
|
|
room.setMinorActivity(new Poll(room, pollData));
|
|
}
|
|
} else {
|
|
room.setMinorActivity(new MinorActivityClass(room, pollData));
|
|
}
|
|
}
|
|
}
|
|
endTimer() {
|
|
if (!this.timeout)
|
|
return false;
|
|
clearTimeout(this.timeout);
|
|
this.timeoutMins = 0;
|
|
this.timerEnd = 0;
|
|
return true;
|
|
}
|
|
}
|
|
//# sourceMappingURL=room-minor-activity.js.map
|