pockybot
Version:
Spark bot that handles team recognition
74 lines (73 loc) • 2.94 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const trigger_1 = require("../../models/trigger");
const constants_1 = require("../../constants");
const logger_1 = require("../logger");
const database_1 = require("../../models/database");
const command_1 = require("../../models/command");
const xmlMessageParser_1 = require("../parsers/xmlMessageParser");
class Update extends trigger_1.default {
constructor(webexService, databaseService, config) {
super();
this.webex = webexService;
this.database = databaseService;
this.config = config;
}
isToTriggerOn(message) {
if (!(this.config.checkRole(message.personId, database_1.Role.Admin) || this.config.checkRole(message.personId, database_1.Role.Update))) {
return false;
}
let parsedMessage = xmlMessageParser_1.default.parseNonPegMessage(message);
return parsedMessage.botId === constants_1.default.botId && parsedMessage.command.toLowerCase() === command_1.Command.Update;
}
async createMessage() {
let users;
try {
users = await this.database.getUsers();
}
catch (error) {
logger_1.Logger.error(`[Update.createMessage] Error in getting users: ${error.message}`);
return {
markdown: `Error occurred, some or all users may not have been updated.`
};
}
try {
let usersUpdated = await Promise.all(users.map(async (user) => {
let username = await this.getUsername(user.userid);
let response = await this.database.updateUser(username, user.userid);
if (response === 0) {
return 0;
}
else {
logger_1.Logger.error(`[Update.createMessage] User ${username}, ${user.userid} failed to update`);
return 1;
}
}));
if (usersUpdated.includes(1)) {
return {
markdown: 'Error occurred, some or all users may not have been updated'
};
}
return {
markdown: `Users successfully updated.`
};
}
catch (error) {
logger_1.Logger.error(`[Update.createMessage] Error mapping users into usernames: ${error.message}`);
return {
markdown: `Error occurred, some or all users may not have been updated.`
};
}
}
async getUsername(personId) {
try {
const data = await this.webex.people.get(personId);
return data.displayName;
}
catch (error) {
logger_1.Logger.error(`[Update.getUsername] Error getting username for ${personId}: ${error.message}`);
throw new Error('Error getting username');
}
}
}
exports.default = Update;