@intuitionrobotics/thunderstorm
Version:
58 lines • 2.33 kB
JavaScript
import { currentTimeMillies, Minute, Module, ServerErrorSeverity, ServerErrorSeverity_Ordinal } from "@intuitionrobotics/ts-common";
import { WebClient } from "@slack/web-api";
export class SlackModule_Class extends Module {
web;
messageMap = {};
constructor() {
super("SlackModule");
}
init() {
if (!this.config.token)
return;
// throw new ImplementationMissingException('Missing config token for SlackModule. Please add it');
this.web = new WebClient(this.config.token, {
rejectRateLimitedCalls: true,
...this.config.slackConfig
});
}
async postMessage(slackMessage) {
const parameters = typeof slackMessage === 'string' ? {
text: slackMessage,
channel: this.config.defaultChannel
} : slackMessage;
const time = this.messageMap[parameters.text];
if (time && currentTimeMillies() - time < (this.config.throttlingTime || Minute))
return;
try {
return await this.postMessageImpl(parameters);
}
catch (e) {
this.logError(`Error while sending a message to channel: ${parameters.channel}`, e);
}
}
async postMessageImpl(message) {
const res = await this.web.chat.postMessage(message);
this.messageMap[message.text] = currentTimeMillies();
this.logDebug(`A message was posted to channel: ${message.channel} with message id ${res.ts} which contains the message ${message.text}`);
}
}
export const SlackModule = new SlackModule_Class();
export class Slack_ServerApiError_Class extends Module {
constructor() {
super("Slack_ServerApiError");
this.setDefaultConfig({ exclude: [], minLevel: ServerErrorSeverity.Info });
}
init() {
}
async __processApplicationError(errorLevel, message) {
if (ServerErrorSeverity_Ordinal.indexOf(errorLevel) < ServerErrorSeverity_Ordinal.indexOf(this.config.minLevel))
return;
for (const key of this.config.exclude || []) {
if (message.includes(key))
return;
}
await SlackModule.postMessage(`\`\`\`${message}\`\`\``);
}
}
export const Slack_ServerApiError = new Slack_ServerApiError_Class();
//# sourceMappingURL=SlackModule.js.map