class Observation { constructor(bot) { if (new.target === Observation) { throw new TypeError( "Cannot instantiate abstract class Observation" ); } this.bot = bot; this.name = "Observation"; } observe() { throw new TypeError("Method 'observe()' must be implemented."); } reset() {} } function inject(bot, obs_list) { bot.obsList = []; bot.cumulativeObs = []; bot.eventMemory = {}; obs_list.forEach((obs) => { bot.obsList.push(new obs(bot)); }); bot.event = function (event_name) { let result = {}; bot.obsList.forEach((obs) => { if (obs.name.startsWith("on") && obs.name !== event_name) { return; } result[obs.name] = obs.observe(); }); bot.cumulativeObs.push([event_name, result]); }; bot.observe = function () { bot.event("observe"); const result = bot.cumulativeObs; bot.cumulativeObs = []; return JSON.stringify(result); }; } module.exports = { Observation, inject };