UNPKG

9.02 kBJavaScriptView Raw
1"use strict";
2var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3 return new (P || (P = Promise))(function (resolve, reject) {
4 function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5 function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6 function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
7 step((generator = generator.apply(thisArg, _arguments || [])).next());
8 });
9};
10Object.defineProperty(exports, "__esModule", { value: true });
11const uuid = require("uuid");
12const _ = require("lodash");
13const core_1 = require("@xene/core");
14const dispatcher_1 = require("./dispatcher");
15const middleware_1 = require("./middleware");
16const is_mentioned_1 = require("./helpers/is-mentioned");
17const channel_type_1 = require("./helpers/channel-type");
18const api_1 = require("./api");
19class Slackbot extends core_1.Bot {
20 constructor(options) {
21 super();
22 this.id = options.id || uuid.v4();
23 this.chat = new api_1.Chat(options.botToken);
24 this.rtm = new api_1.RTM(options.botToken);
25 // Some of these API scopes' methods require additional
26 // scopes which are defined only for apps and app tokens respectively
27 this.auth = new api_1.Auth(options.appToken || options.botToken);
28 this.users = new api_1.Users(options.appToken || options.botToken);
29 this.groups = new api_1.Groups(options.appToken || options.botToken);
30 this.channels = new api_1.Channels(options.appToken || options.botToken);
31 this.files = new api_1.Files(options.appToken || options.botToken);
32 if (options.dispatcher)
33 options.dispatcher.add(this.id, this);
34 else
35 Slackbot.dispatcher.add(this.id, this);
36 }
37 say(channel, message) {
38 return __awaiter(this, void 0, void 0, function* () {
39 const init = { text: '', attachments: [] };
40 message = _.isString(message) ? Object.assign({}, init, { text: message }) : Object.assign({}, init, message);
41 message.attachments.forEach(a => a.callbackId = a.callbackId || this.id);
42 return this.chat.postMessage(channel, message);
43 });
44 }
45 listen() {
46 this.rtm.on('message', this.onRtmMessage.bind(this));
47 this.rtm.connect().then(i => this.bot = i.self);
48 return this;
49 }
50 /**
51 * Process incoming interactive messages
52 * like button actions from slack
53 * Called from Dispatcher
54 */
55 onInteractiveMessage(payload) {
56 return __awaiter(this, void 0, void 0, function* () {
57 const selected = payload.actions[0];
58 const text = payload.originalMessage.text;
59 let attachments = payload.originalMessage.attachments;
60 attachments = attachments.map(this.markActionSelected.bind(this, selected));
61 this.onMessage({
62 channel: payload.channel.id,
63 user: payload.user.id,
64 text: selected.value,
65 id: payload.ts
66 });
67 return { text, attachments };
68 });
69 }
70 /**
71 * Process new incoming RTM messages
72 */
73 onRtmMessage(payload) {
74 const { user, ts, text, channel } = payload;
75 if (this.bot.id === user)
76 return;
77 const isBotMentioned = is_mentioned_1.isMentioned(this.bot.id, text);
78 const isPrivate = channel_type_1.isPrivateChannel(channel);
79 if (!isPrivate && !isBotMentioned)
80 return;
81 this.onMessage({ id: ts, text, user, channel });
82 }
83 markActionSelected(action, attachment) {
84 const selectedReplacer = ':white_check_mark: ' + action.text;
85 if (_.find(attachment.actions, ['value', action.value])) {
86 const title = attachment.title;
87 delete attachment.actions;
88 attachment.title = title ? (title + '\n' + selectedReplacer) : selectedReplacer;
89 }
90 return attachment;
91 }
92}
93// Default dispatcher, used when user didn't provide
94// custom dispatcher. This is mostly used when user has
95// one type of bot, which is a common case
96Slackbot.dispatcher = new dispatcher_1.SlackbotDispatcher();
97Slackbot.middleware = middleware_1.middleware;
98Slackbot.oauthAccess = api_1.Auth.access;
99exports.Slackbot = Slackbot;
100//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xhY2tib3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvc2xhY2tib3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUFBLDZCQUE0QjtBQUM1Qiw0QkFBMkI7QUFDM0IscUNBQWdDO0FBRWhDLDZDQUFpRDtBQUNqRCw2Q0FBeUM7QUFDekMseURBQW9EO0FBRXBELHlEQUF5RDtBQUd6RCwrQkFBdUU7QUFFdkUsY0FBc0IsU0FBUSxVQUFxQjtJQW9CakQsWUFBWSxPQUtYO1FBQ0MsS0FBSyxFQUFFLENBQUE7UUFDUCxJQUFJLENBQUMsRUFBRSxHQUFHLE9BQU8sQ0FBQyxFQUFFLElBQUksSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFBO1FBRWpDLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxVQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFBO1FBQ3RDLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxTQUFHLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFBO1FBQ3BDLHVEQUF1RDtRQUN2RCxxRUFBcUU7UUFDckUsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLFVBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxJQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUMxRCxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksV0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFBO1FBQzVELElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxZQUFNLENBQUMsT0FBTyxDQUFDLFFBQVEsSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUE7UUFDOUQsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLGNBQVEsQ0FBQyxPQUFPLENBQUMsUUFBUSxJQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUNsRSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksV0FBSyxDQUFDLE9BQU8sQ0FB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
\No newline at end of file