twitch2ma
Version:
Twitch chat bot that runs commands on the MA GrandMA2 using Telnet.
109 lines • 4.04 kB
JavaScript
;
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.PermissionCollector = exports.PermissionController = exports.Reason = exports.PermissionError = void 0;
class PermissionError extends Error {
constructor(permissionCollector) {
super();
this.permissionCollector = permissionCollector;
Object.setPrototypeOf(this, PermissionError.prototype);
this.name = PermissionError.name;
}
}
exports.PermissionError = PermissionError;
class Reason {
constructor(name, viewerMessage) {
this.name = name;
this.viewerMessage = viewerMessage;
}
}
exports.Reason = Reason;
class PermissionController {
constructor() {
this.permissionInstances = [];
this.additionalRuntimeInformation = new Map();
}
withPermissionInstance(instance) {
this.permissionInstances.push(instance);
return this;
}
checkPermissions(runtimeInformation) {
return __awaiter(this, void 0, void 0, function* () {
let permissionCollector = new PermissionCollector();
for (const permissionInstance of this.permissionInstances) {
permissionInstance.check(permissionCollector, runtimeInformation, this.additionalRuntimeInformation);
}
if (permissionCollector.permissionDenied) {
throw new PermissionError(permissionCollector);
}
return permissionCollector;
});
}
setAdditionalRuntimeInformation(name, value) {
this.additionalRuntimeInformation.set(name, value);
}
start() {
let startChain = Promise.resolve();
for (const permissionInstance of this.permissionInstances) {
startChain = startChain
.then(() => permissionInstance.start());
}
return startChain;
}
stop() {
let stopChain = Promise.resolve();
for (const permissionInstance of this.permissionInstances) {
stopChain = stopChain
.then(() => permissionInstance.stop());
}
return stopChain;
}
reloadConfig(config) {
let reloadChain = Promise.resolve();
for (const permissionInstance of this.permissionInstances) {
reloadChain
.then(() => permissionInstance.reloadConfig(config));
}
return reloadChain;
}
}
exports.PermissionController = PermissionController;
class PermissionCollector {
constructor() {
this._permissionDenied = false;
this._godMode = false;
this._godModeReasons = [];
this._permissionDeniedReasons = [];
}
denyPermission(reason, message) {
this._permissionDenied = !this._godMode;
this._permissionDeniedReasons.push(new Reason(reason, message));
}
enableGodMode(reason) {
this._permissionDenied = false;
this._godMode = true;
this._godModeReasons.push(reason);
}
get permissionDenied() {
return this._permissionDenied;
}
get permissionDeniedReasons() {
return this._permissionDeniedReasons;
}
get godMode() {
return this._godMode;
}
get godModeReasons() {
return this._godModeReasons;
}
}
exports.PermissionCollector = PermissionCollector;
//# sourceMappingURL=PermissionController.js.map