telebot
Version:
The easy way to write Telegram bots.
53 lines (52 loc) • 1.74 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const utils_1 = require("../utils");
class TeleBotEvents {
constructor() {
this.events = new Map();
}
on(event, processor) {
const events = utils_1.convertToArray(event);
events.forEach((key) => {
const eventHandler = this.events.get(key);
if (eventHandler) {
eventHandler.processors.add(processor);
}
else {
this.events.set(key, {
processors: new Set([processor])
});
}
});
return processor;
}
dispatch(event, data) {
return this._dispatch("", event, data);
}
off(processor) {
return undefined;
}
_dispatch(storageId, events, data, context) {
const storage = this.events;
const promises = [];
events = utils_1.convertToArray(events);
events.forEach((name) => {
const handler = storage.get(name);
if (handler) {
for (const processor of handler.processors) {
promises.push(new Promise((resolve, reject) => {
const result = processor.call(this, data, Object.assign({ unsubscribe: this.off.bind(this, processor) }, context));
if (result instanceof Promise) {
result.then(resolve).catch(reject);
}
else {
resolve(result);
}
}));
}
}
});
return Promise.all(promises);
}
}
exports.TeleBotEvents = TeleBotEvents;