1 | ;
|
2 | var __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 | };
|
10 | Object.defineProperty(exports, "__esModule", { value: true });
|
11 | const uuid = require("uuid");
|
12 | const _ = require("lodash");
|
13 | const core_1 = require("@xene/core");
|
14 | const dispatcher_1 = require("./dispatcher");
|
15 | const middleware_1 = require("./middleware");
|
16 | const is_mentioned_1 = require("./helpers/is-mentioned");
|
17 | const channel_type_1 = require("./helpers/channel-type");
|
18 | const api_1 = require("./api");
|
19 | class 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
|
96 | Slackbot.dispatcher = new dispatcher_1.SlackbotDispatcher();
|
97 | Slackbot.middleware = middleware_1.middleware;
|
98 | Slackbot.oauthAccess = api_1.Auth.access;
|
99 | exports.Slackbot = Slackbot;
|
100 | //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xhY2tib3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvc2xhY2tib3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUFBLDZCQUE0QjtBQUM1Qiw0QkFBMkI7QUFDM0IscUNBQWdDO0FBRWhDLDZDQUFpRDtBQUNqRCw2Q0FBeUM7QUFDekMseURBQW9EO0FBRXBELHlEQUF5RDtBQUd6RCwrQkFBdUU7QUFFdkUsY0FBc0IsU0FBUSxVQUFxQjtJQW9CakQsWUFBWSxPQUtYO1FBQ0MsS0FBSyxFQUFFLENBQUE7UUFDUCxJQUFJLENBQUMsRUFBRSxHQUFHLE9BQU8sQ0FBQyxFQUFFLElBQUksSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFBO1FBRWpDLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxVQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFBO1FBQ3RDLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxTQUFHLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFBO1FBQ3BDLHVEQUF1RDtRQUN2RCxxRUFBcUU7UUFDckUsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLFVBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxJQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUMxRCxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksV0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFBO1FBQzVELElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxZQUFNLENBQUMsT0FBTyxDQUFDLFFBQVEsSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUE7UUFDOUQsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLGNBQVEsQ0FBQyxPQUFPLENBQUMsUUFBUSxJQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUNsRSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksV0FBSyxDQUFDLE9BQU8sQ0FB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 |
\ | No newline at end of file |