pockybot
Version:
Spark bot that handles team recognition
138 lines (137 loc) • 6.52 kB
JavaScript
"use strict";
/* NOTE: Import all triggers here
to be use as factory.
This will allow responder to just import one file
and manage it all from one file.
*/
Object.defineProperty(exports, "__esModule", { value: true });
const logger_1 = require("../logger");
const results_1 = require("./results");
const winners_1 = require("./winners");
const reset_1 = require("./reset");
const peg_1 = require("./peg");
const unpeg_1 = require("./unpeg");
const status_1 = require("./status");
const update_1 = require("./update");
const finish_1 = require("./finish");
const welcome_1 = require("./welcome");
const help_1 = require("./help");
const ping_1 = require("./ping");
const keywords_1 = require("./keywords");
const rotation_1 = require("./rotation");
const numberconfig_1 = require("./numberconfig");
const stringconfig_1 = require("./stringconfig");
const roleconfig_1 = require("./roleconfig");
const locationconfig_1 = require("./locationconfig");
const userlocation_1 = require("./userlocation");
const removeuser_1 = require("./removeuser");
const locationweight_1 = require("./locationweight");
const default_1 = require("./default");
const webex = require('webex/env');
const pg_1 = require("pg");
const utilities_1 = require("../utilities");
const config_1 = require("../config");
const query_handler_1 = require("../database/query-handler");
const pocky_db_1 = require("../database/pocky-db");
const db_users_1 = require("../database/db-users");
const db_config_1 = require("../database/db-config");
const db_location_1 = require("../database/db-location");
const winners_service_1 = require("../services/winners-service");
const results_service_1 = require("../services/results-service");
const pm_results_service_1 = require("../services/pm-results-service");
const format_results_service_1 = require("../services/format-results-service");
const category_results_service_1 = require("../services/category-results-service");
const peg_service_1 = require("../services/peg-service");
const get_user_location_service_1 = require("../services/get-user-location-service");
const set_user_location_service_1 = require("../services/set-user-location-service");
const delete_user_location_service_1 = require("../services/delete-user-location-service");
// Service instantiation
const queryHandler = new query_handler_1.default(new pg_1.Client());
const dbConfig = new db_config_1.default(queryHandler);
const config = new config_1.default(dbConfig);
const utilities = new utilities_1.default(config);
const dbUsers = new db_users_1.default(webex, queryHandler);
const dbLocation = new db_location_1.default(queryHandler);
const pockyDb = new pocky_db_1.default(queryHandler, dbUsers, utilities);
const pegService = new peg_service_1.DefaultPegService(config, utilities, dbLocation);
const categoryResultsService = new category_results_service_1.DefaultCategoryResultsService();
const winnersService = new winners_service_1.DefaultWinnersService(pockyDb, config, utilities, pegService);
const formatResultsService = new format_results_service_1.DefaultFormatResultsService(config, categoryResultsService);
const resultsService = new results_service_1.DefaultResultsService(pockyDb, formatResultsService, pegService, winnersService);
const pmResultsService = new pm_results_service_1.DefaultPmResultsService(pockyDb, webex, utilities, pegService, resultsService);
const getUserLocationService = new get_user_location_service_1.DefaultGetUserLocationService(dbLocation, dbUsers);
const setUserLocationService = new set_user_location_service_1.DefaultSetUserLocationService(dbLocation, dbUsers);
const deleteUserLocationService = new delete_user_location_service_1.DefaultDeleteUserLocationService(dbLocation);
pockyDb.loadConfig(config);
config.updateAll();
// Trigger instantiation
const peg = new peg_1.default(webex, pockyDb, dbUsers, config);
const unpeg = new unpeg_1.default(webex, dbUsers, utilities);
const reset = new reset_1.default(pockyDb, config);
const winners = new winners_1.default(winnersService, config);
const results = new results_1.default(resultsService, config);
const status = new status_1.default(webex, pockyDb, config, utilities);
const update = new update_1.default(webex, dbUsers, config);
const finish = new finish_1.default(winnersService, resultsService, pmResultsService, reset, config, webex);
const welcome = new welcome_1.default(config);
const keywords = new keywords_1.default(config);
const numberConfig = new numberconfig_1.default(config);
const stringConfig = new stringconfig_1.default(config);
const roleConfig = new roleconfig_1.default(dbUsers, config);
const help = new help_1.default(config);
const ping = new ping_1.default();
const rotation = new rotation_1.default(config);
const locationConfig = new locationconfig_1.default(dbLocation, config);
const userLocation = new userlocation_1.default(config, getUserLocationService, setUserLocationService, deleteUserLocationService);
const removeUser = new removeuser_1.default(config, dbUsers, dbLocation, pockyDb);
const locationWeight = new locationweight_1.default(dbLocation, config);
const defaultTrigger = new default_1.default();
const triggers = [
peg,
welcome,
help,
ping,
results,
winners,
reset,
status,
update,
finish,
unpeg,
keywords,
rotation,
numberConfig,
stringConfig,
roleConfig,
locationConfig,
locationWeight,
userLocation,
removeUser,
defaultTrigger,
];
/**
* Returns a response Object that allows to create a message.
* @param {string} message - message from room or user.
* @param {string} room - the id of the room in which the message was received.
* @return {SparkMessage} sparkMessage - use in conjunction with messages.create
* contains text or markdown field.
*/
exports.default = async (message, room) => {
try {
const responder = triggers.find(x => x.isToTriggerOn(message));
if (responder) {
logger_1.Logger.information(`[Index.default] Found a trigger: ${responder.constructor.name}`);
return await responder.createMessage(message, room);
}
else {
logger_1.Logger.information(`[Index.default] No trigger found.`);
return null;
}
}
catch (e) {
logger_1.Logger.error(`[Index.default] Error selecting trigger: ${e.message}`);
return {
markdown: 'An error occurred in selecting the trigger.',
};
}
};