@pipedream/slack 0.5.1 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/actions/add-emoji-reaction/add-emoji-reaction.mjs +11 -8
- package/actions/archive-channel/archive-channel.mjs +14 -4
- package/actions/common/build-blocks.mjs +5 -4
- package/actions/common/send-message.mjs +13 -23
- package/actions/create-channel/create-channel.mjs +10 -5
- package/actions/create-reminder/create-reminder.mjs +8 -8
- package/actions/delete-file/delete-file.mjs +6 -4
- package/actions/delete-message/delete-message.mjs +10 -5
- package/actions/find-message/find-message.mjs +21 -13
- package/actions/find-user-by-email/find-user-by-email.mjs +8 -4
- package/actions/get-file/get-file.mjs +6 -11
- package/actions/invite-user-to-channel/invite-user-to-channel.mjs +6 -4
- package/actions/kick-user/kick-user.mjs +17 -4
- package/actions/list-channels/list-channels.mjs +8 -4
- package/actions/list-files/list-files.mjs +21 -13
- package/actions/{list-user-groups-users/list-user-groups-users.mjs → list-group-members/list-group-members.mjs} +12 -6
- package/actions/list-members-in-channel/list-members-in-channel.mjs +22 -4
- package/actions/list-replies/list-replies.mjs +12 -5
- package/actions/list-users/list-users.mjs +8 -4
- package/actions/reply-to-a-message/reply-to-a-message.mjs +10 -10
- package/actions/send-custom-message/send-custom-message.mjs +27 -20
- package/actions/send-large-message/send-large-message.mjs +8 -25
- package/actions/send-message/send-message.mjs +44 -0
- package/actions/set-channel-description/set-channel-description.mjs +32 -0
- package/actions/set-channel-topic/set-channel-topic.mjs +6 -4
- package/actions/set-status/set-status.mjs +44 -0
- package/actions/update-group-members/update-group-members.mjs +67 -0
- package/actions/update-message/update-message.mjs +10 -5
- package/actions/update-profile/update-profile.mjs +70 -13
- package/actions/upload-file/upload-file.mjs +6 -4
- package/actions/verify-slack-signature/verify-slack-signature.mjs +2 -2
- package/package.json +3 -2
- package/slack.app.mjs +74 -71
- package/sources/common/base.mjs +9 -0
- package/sources/new-channel-created/new-channel-created.mjs +1 -1
- package/sources/new-direct-message/new-direct-message.mjs +3 -1
- package/sources/new-direct-message/test-event.mjs +28 -0
- package/sources/new-interaction-event-received/README.md +13 -13
- package/sources/new-interaction-event-received/new-interaction-event-received.mjs +7 -8
- package/sources/new-interaction-event-received/test-event.mjs +86 -0
- package/sources/{new-mention/new-mention.mjs → new-keyword-mention/new-keyword-mention.mjs} +8 -30
- package/sources/new-keyword-mention/test-event.mjs +28 -0
- package/sources/new-message-in-channels/new-message-in-channels.mjs +1 -1
- package/sources/new-reaction-added/new-reaction-added.mjs +4 -1
- package/sources/new-reaction-added/test-event.mjs +193 -0
- package/sources/new-user-mention/new-user-mention.mjs +117 -0
- package/sources/new-user-mention/test-event.mjs +28 -0
- package/actions/add-star/add-star.mjs +0 -43
- package/actions/complete-reminder/complete-reminder.mjs +0 -23
- package/actions/delete-reminder/delete-reminder.mjs +0 -23
- package/actions/get-channel/get-channel.mjs +0 -23
- package/actions/get-reminder/get-reminder.mjs +0 -23
- package/actions/join-channel/join-channel.mjs +0 -23
- package/actions/leave-channel/leave-channel.mjs +0 -23
- package/actions/list-reminders/list-reminders.mjs +0 -24
- package/actions/remove-star/remove-star.mjs +0 -40
- package/actions/send-block-kit-message/send-block-kit-message.mjs +0 -55
- package/actions/send-direct-message/send-direct-message.mjs +0 -53
- package/actions/send-group-message/send-group-message.mjs +0 -53
- package/actions/send-message-private-channel/send-message-private-channel.mjs +0 -59
- package/actions/send-message-public-channel/send-message-public-channel.mjs +0 -59
- package/actions/set-channel-purpose/set-channel-purpose.mjs +0 -30
- package/actions/unarchive-channel/unarchive-channel.mjs +0 -23
- package/actions/update-user-groups-users/update-user-groups-users.mjs +0 -45
- package/sources/new-star-added/new-star-added.mjs +0 -45
package/slack.app.mjs
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { WebClient } from "@slack/web-api";
|
|
2
2
|
import constants from "./common/constants.mjs";
|
|
3
|
+
import { ConfigurationError } from "@pipedream/platform";
|
|
3
4
|
|
|
4
5
|
export default {
|
|
5
6
|
type: "app",
|
|
@@ -9,17 +10,26 @@ export default {
|
|
|
9
10
|
type: "string",
|
|
10
11
|
label: "User",
|
|
11
12
|
description: "Select a user",
|
|
12
|
-
async options({
|
|
13
|
+
async options({
|
|
14
|
+
prevContext, channelId,
|
|
15
|
+
}) {
|
|
13
16
|
const types = [
|
|
14
17
|
"im",
|
|
15
18
|
];
|
|
16
|
-
|
|
19
|
+
let [
|
|
17
20
|
userNames,
|
|
18
21
|
conversationsResp,
|
|
19
22
|
] = await Promise.all([
|
|
20
23
|
prevContext.userNames ?? this.userNames(),
|
|
21
24
|
this.availableConversations(types.join(), prevContext.cursor),
|
|
22
25
|
]);
|
|
26
|
+
if (channelId) {
|
|
27
|
+
const { members } = await this.sdk().conversations.members({
|
|
28
|
+
channel: channelId,
|
|
29
|
+
});
|
|
30
|
+
conversationsResp.conversations = conversationsResp.conversations
|
|
31
|
+
.filter((c) => members.includes(c.user || c.id));
|
|
32
|
+
}
|
|
23
33
|
return {
|
|
24
34
|
options: conversationsResp.conversations.map((c) => ({
|
|
25
35
|
label: `@${userNames[c.user]}`,
|
|
@@ -55,22 +65,6 @@ export default {
|
|
|
55
65
|
};
|
|
56
66
|
},
|
|
57
67
|
},
|
|
58
|
-
users: {
|
|
59
|
-
type: "string[]",
|
|
60
|
-
label: "Users",
|
|
61
|
-
description: "Select users",
|
|
62
|
-
async options() {
|
|
63
|
-
const userNames = await this.userNames();
|
|
64
|
-
const users = [];
|
|
65
|
-
for (const key of Object.keys(userNames)) {
|
|
66
|
-
users.push({
|
|
67
|
-
label: userNames[key],
|
|
68
|
-
value: key,
|
|
69
|
-
});
|
|
70
|
-
}
|
|
71
|
-
return users;
|
|
72
|
-
},
|
|
73
|
-
},
|
|
74
68
|
userGroup: {
|
|
75
69
|
type: "string",
|
|
76
70
|
label: "User Group",
|
|
@@ -99,12 +93,16 @@ export default {
|
|
|
99
93
|
type: "string",
|
|
100
94
|
label: "Channel",
|
|
101
95
|
description: "Select a public or private channel, or a user or group",
|
|
102
|
-
async options({
|
|
96
|
+
async options({
|
|
97
|
+
prevContext, types,
|
|
98
|
+
}) {
|
|
103
99
|
let {
|
|
104
|
-
types,
|
|
105
100
|
cursor,
|
|
106
101
|
userNames: userNamesOrPromise,
|
|
107
102
|
} = prevContext;
|
|
103
|
+
if (prevContext?.types) {
|
|
104
|
+
types = prevContext.types;
|
|
105
|
+
}
|
|
108
106
|
if (types == null) {
|
|
109
107
|
const { response_metadata: { scopes } } = await this.authTest();
|
|
110
108
|
types = [
|
|
@@ -128,8 +126,11 @@ export default {
|
|
|
128
126
|
userNamesOrPromise,
|
|
129
127
|
this.availableConversations(types.join(), cursor),
|
|
130
128
|
]);
|
|
129
|
+
const conversations = userNames
|
|
130
|
+
? conversationsResp.conversations
|
|
131
|
+
: conversationsResp.conversations.filter((c) => !c.is_im);
|
|
131
132
|
return {
|
|
132
|
-
options:
|
|
133
|
+
options: conversations.map((c) => {
|
|
133
134
|
if (c.is_im) {
|
|
134
135
|
return {
|
|
135
136
|
label: `Direct messaging with: @${userNames[c.user]}`,
|
|
@@ -162,7 +163,10 @@ export default {
|
|
|
162
163
|
label: "Channel ID",
|
|
163
164
|
description: "Select the channel's id.",
|
|
164
165
|
async options({
|
|
165
|
-
prevContext,
|
|
166
|
+
prevContext,
|
|
167
|
+
types = Object.values(constants.CHANNEL_TYPE),
|
|
168
|
+
channelsFilter = (channel) => channel,
|
|
169
|
+
excludeArchived = true,
|
|
166
170
|
}) {
|
|
167
171
|
const userNames = prevContext.userNames || await this.userNames();
|
|
168
172
|
const {
|
|
@@ -217,27 +221,40 @@ export default {
|
|
|
217
221
|
};
|
|
218
222
|
},
|
|
219
223
|
},
|
|
220
|
-
|
|
224
|
+
messageTs: {
|
|
221
225
|
type: "string",
|
|
222
|
-
label: "
|
|
223
|
-
description: "
|
|
224
|
-
|
|
226
|
+
label: "Message Timestamp",
|
|
227
|
+
description: "Timestamp of a message",
|
|
228
|
+
async options({
|
|
229
|
+
channel, prevContext,
|
|
230
|
+
}) {
|
|
231
|
+
if (!channel) {
|
|
232
|
+
throw new ConfigurationError("Provide a Channel ID in order to retrieve Messages.");
|
|
233
|
+
}
|
|
234
|
+
const {
|
|
235
|
+
messages, response_metadata: { next_cursor: cursor },
|
|
236
|
+
} = await this.conversationsHistory({
|
|
237
|
+
channel,
|
|
238
|
+
cursor: prevContext?.cursor,
|
|
239
|
+
});
|
|
240
|
+
return {
|
|
241
|
+
options: messages.map(({
|
|
242
|
+
ts: value, text: label,
|
|
243
|
+
}) => ({
|
|
244
|
+
value,
|
|
245
|
+
label,
|
|
246
|
+
})),
|
|
247
|
+
context: {
|
|
248
|
+
cursor,
|
|
249
|
+
},
|
|
250
|
+
};
|
|
251
|
+
},
|
|
225
252
|
},
|
|
226
253
|
text: {
|
|
227
254
|
type: "string",
|
|
228
255
|
label: "Text",
|
|
229
256
|
description: "Text of the message to send (see Slack's [formatting docs](https://api.slack.com/reference/surfaces/formatting)). This field is usually necessary, unless you're providing only attachments instead.",
|
|
230
257
|
},
|
|
231
|
-
name: {
|
|
232
|
-
type: "string",
|
|
233
|
-
label: "Name",
|
|
234
|
-
description: "Name of a single key to set.",
|
|
235
|
-
},
|
|
236
|
-
value: {
|
|
237
|
-
type: "string",
|
|
238
|
-
label: "Value",
|
|
239
|
-
description: "Value to set a single key to.",
|
|
240
|
-
},
|
|
241
258
|
topic: {
|
|
242
259
|
type: "string",
|
|
243
260
|
label: "Topic",
|
|
@@ -253,15 +270,24 @@ export default {
|
|
|
253
270
|
label: "Query",
|
|
254
271
|
description: "Search query.",
|
|
255
272
|
},
|
|
256
|
-
team_id: {
|
|
257
|
-
type: "string",
|
|
258
|
-
label: "Team ID",
|
|
259
|
-
description: "The ID of the team.",
|
|
260
|
-
},
|
|
261
273
|
file: {
|
|
262
274
|
type: "string",
|
|
263
275
|
label: "File ID",
|
|
264
276
|
description: "Specify a file by providing its ID.",
|
|
277
|
+
async options({
|
|
278
|
+
channel, page,
|
|
279
|
+
}) {
|
|
280
|
+
const { files } = await this.sdk().files.list({
|
|
281
|
+
channel,
|
|
282
|
+
page: page + 1,
|
|
283
|
+
});
|
|
284
|
+
return files?.map(({
|
|
285
|
+
id: value, name: label,
|
|
286
|
+
}) => ({
|
|
287
|
+
value,
|
|
288
|
+
label,
|
|
289
|
+
})) || [];
|
|
290
|
+
},
|
|
265
291
|
},
|
|
266
292
|
attachments: {
|
|
267
293
|
type: "string",
|
|
@@ -273,24 +299,26 @@ export default {
|
|
|
273
299
|
type: "boolean",
|
|
274
300
|
label: "Unfurl Links",
|
|
275
301
|
description: "`TRUE` by default. Pass `FALSE` to disable unfurling of links.",
|
|
302
|
+
default: true,
|
|
276
303
|
optional: true,
|
|
277
304
|
},
|
|
278
305
|
unfurl_media: {
|
|
279
306
|
type: "boolean",
|
|
280
307
|
label: "Unfurl Media",
|
|
281
308
|
description: "`TRUE` by default. Pass `FALSE` to disable unfurling of media content.",
|
|
309
|
+
default: true,
|
|
282
310
|
optional: true,
|
|
283
311
|
},
|
|
284
312
|
parse: {
|
|
285
313
|
type: "string",
|
|
286
314
|
label: "Parse",
|
|
287
|
-
description: "Change how messages are treated. Defaults to none.
|
|
315
|
+
description: "Change how messages are treated. Defaults to none. By default, URLs will be hyperlinked. Set `parse` to `none` to remove the hyperlinks. The behavior of `parse` is different for text formatted with `mrkdwn`. By default, or when `parse` is set to `none`, `mrkdwn` formatting is implemented. To ignore `mrkdwn` formatting, set `parse` to full.",
|
|
288
316
|
optional: true,
|
|
289
317
|
},
|
|
290
318
|
as_user: {
|
|
291
319
|
type: "boolean",
|
|
292
320
|
label: "Send as User",
|
|
293
|
-
description: "Optionally pass `TRUE` to post the message as the
|
|
321
|
+
description: "Optionally pass `TRUE` to post the message as the authenticated user, instead of as a bot. Defaults to `FALSE`.",
|
|
294
322
|
default: false,
|
|
295
323
|
optional: true,
|
|
296
324
|
},
|
|
@@ -303,8 +331,8 @@ export default {
|
|
|
303
331
|
},
|
|
304
332
|
post_at: {
|
|
305
333
|
label: "Schedule message",
|
|
306
|
-
description: "Messages can only be scheduled up to 120 days in advance, and cannot be scheduled for the past. The datetime
|
|
307
|
-
type: "
|
|
334
|
+
description: "Messages can only be scheduled up to 120 days in advance, and cannot be scheduled for the past. The datetime should be in ISO 8601 format. (Example: `2014-01-01T00:00:00Z`)",
|
|
335
|
+
type: "string",
|
|
308
336
|
optional: true,
|
|
309
337
|
},
|
|
310
338
|
username: {
|
|
@@ -334,7 +362,7 @@ export default {
|
|
|
334
362
|
type: "string",
|
|
335
363
|
},
|
|
336
364
|
link_names: {
|
|
337
|
-
type: "
|
|
365
|
+
type: "boolean",
|
|
338
366
|
label: "Link Names",
|
|
339
367
|
description: "Find and link channel names and usernames.",
|
|
340
368
|
optional: true,
|
|
@@ -352,18 +380,6 @@ export default {
|
|
|
352
380
|
description: "Provide the channel or conversation ID for the thread to reply to (e.g., if triggering on new Slack messages, enter `{{event.channel}}`). If the channel does not match the thread timestamp, a new message will be posted to this channel.",
|
|
353
381
|
optional: true,
|
|
354
382
|
},
|
|
355
|
-
thread_ts: {
|
|
356
|
-
label: "Thread Timestamp",
|
|
357
|
-
type: "string",
|
|
358
|
-
description: "Provide another message's `ts` value to make this message a reply (e.g., if triggering on new Slack messages, enter `{{event.ts}}`). Avoid using a reply's `ts` value; use its parent instead.",
|
|
359
|
-
optional: true,
|
|
360
|
-
},
|
|
361
|
-
timestamp: {
|
|
362
|
-
label: "Timestamp",
|
|
363
|
-
type: "string",
|
|
364
|
-
description: "Timestamp of the relevant data.",
|
|
365
|
-
optional: true,
|
|
366
|
-
},
|
|
367
383
|
icon_url: {
|
|
368
384
|
type: "string",
|
|
369
385
|
label: "Icon (image URL)",
|
|
@@ -376,12 +392,6 @@ export default {
|
|
|
376
392
|
description: "The message text introducing the file",
|
|
377
393
|
optional: true,
|
|
378
394
|
},
|
|
379
|
-
count: {
|
|
380
|
-
type: "integer",
|
|
381
|
-
label: "Count",
|
|
382
|
-
description: "Number of items to return per page.",
|
|
383
|
-
optional: true,
|
|
384
|
-
},
|
|
385
395
|
email: {
|
|
386
396
|
type: "string",
|
|
387
397
|
label: "Email",
|
|
@@ -410,13 +420,6 @@ export default {
|
|
|
410
420
|
label: "Keyword",
|
|
411
421
|
description: "Keyword to monitor",
|
|
412
422
|
},
|
|
413
|
-
isUsername: {
|
|
414
|
-
type: "boolean",
|
|
415
|
-
label: "Is Username",
|
|
416
|
-
description: "Filters out mentions of the keyword that are not a username",
|
|
417
|
-
default: false,
|
|
418
|
-
optional: true,
|
|
419
|
-
},
|
|
420
423
|
ignoreBot: {
|
|
421
424
|
type: "boolean",
|
|
422
425
|
label: "Ignore Bots",
|
package/sources/common/base.mjs
CHANGED
|
@@ -92,6 +92,15 @@ export default {
|
|
|
92
92
|
return info.user.name;
|
|
93
93
|
});
|
|
94
94
|
},
|
|
95
|
+
async getRealName(id) {
|
|
96
|
+
return this.maybeCached(`users_real_names:${id}`, async () => {
|
|
97
|
+
const info = await this.slack.sdk().users.info({
|
|
98
|
+
user: id,
|
|
99
|
+
});
|
|
100
|
+
if (!info.ok) throw new Error(info.error);
|
|
101
|
+
return info.user.real_name;
|
|
102
|
+
});
|
|
103
|
+
},
|
|
95
104
|
async getBotName(id) {
|
|
96
105
|
return this.maybeCached(`bots:${id}`, async () => {
|
|
97
106
|
const info = await this.slack.sdk().bots.info({
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import common from "../common/base.mjs";
|
|
2
|
+
import sampleEmit from "./test-event.mjs";
|
|
2
3
|
|
|
3
4
|
export default {
|
|
4
5
|
...common,
|
|
5
6
|
key: "slack-new-direct-message",
|
|
6
7
|
name: "New Direct Message (Instant)",
|
|
7
|
-
version: "1.0.
|
|
8
|
+
version: "1.0.15",
|
|
8
9
|
description: "Emit new event when a message was posted in a direct message channel",
|
|
9
10
|
type: "source",
|
|
10
11
|
dedupe: "unique",
|
|
@@ -42,4 +43,5 @@ export default {
|
|
|
42
43
|
return event;
|
|
43
44
|
},
|
|
44
45
|
},
|
|
46
|
+
sampleEmit,
|
|
45
47
|
};
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export default {
|
|
2
|
+
"user": "USLACKBOT",
|
|
3
|
+
"type": "message",
|
|
4
|
+
"ts": "1716401124.947359",
|
|
5
|
+
"text": "Feeling great!",
|
|
6
|
+
"team": "TS8319547",
|
|
7
|
+
"blocks": [
|
|
8
|
+
{
|
|
9
|
+
"type": "rich_text",
|
|
10
|
+
"block_id": "bid/",
|
|
11
|
+
"elements": [
|
|
12
|
+
{
|
|
13
|
+
"type": "rich_text_section",
|
|
14
|
+
"elements": [
|
|
15
|
+
{
|
|
16
|
+
"type": "text",
|
|
17
|
+
"text": "Feeling great!"
|
|
18
|
+
}
|
|
19
|
+
]
|
|
20
|
+
}
|
|
21
|
+
]
|
|
22
|
+
}
|
|
23
|
+
],
|
|
24
|
+
"channel": "DS676Q73J",
|
|
25
|
+
"event_ts": "1716401124.947359",
|
|
26
|
+
"channel_type": "im",
|
|
27
|
+
"pipedream_msg_id": "pd_1716401126905_tjxu6josgz"
|
|
28
|
+
}
|
|
@@ -31,21 +31,21 @@ Then select a **************Channel************** you’d like to send the messa
|
|
|
31
31
|
```jsx
|
|
32
32
|
[
|
|
33
33
|
{
|
|
34
|
-
type: "actions",
|
|
35
|
-
elements: [
|
|
34
|
+
"type": "actions",
|
|
35
|
+
"elements": [
|
|
36
36
|
{
|
|
37
|
-
type: "button",
|
|
38
|
-
text: {
|
|
39
|
-
type: "plain_text",
|
|
40
|
-
text: "Click Me",
|
|
41
|
-
emoji: true
|
|
37
|
+
"type": "button",
|
|
38
|
+
"text": {
|
|
39
|
+
"type": "plain_text",
|
|
40
|
+
"text": "Click Me",
|
|
41
|
+
"emoji": true
|
|
42
42
|
},
|
|
43
|
-
value: "click_me_123",
|
|
44
|
-
action_id: "button_click"
|
|
45
|
-
}
|
|
46
|
-
]
|
|
47
|
-
}
|
|
48
|
-
]
|
|
43
|
+
"value": "click_me_123",
|
|
44
|
+
"action_id": "button_click"
|
|
45
|
+
}
|
|
46
|
+
]
|
|
47
|
+
}
|
|
48
|
+
]
|
|
49
49
|
```
|
|
50
50
|
|
|
51
51
|
Your ******************Slack - Send Message Using Block Kit****************** should look like this:
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import common from "../common/base.mjs";
|
|
2
|
+
import sampleEmit from "./test-event.mjs";
|
|
2
3
|
|
|
3
4
|
export default {
|
|
4
|
-
name: "New Interaction Events",
|
|
5
|
-
version: "0.0.
|
|
5
|
+
name: "New Interaction Events (Instant)",
|
|
6
|
+
version: "0.0.13",
|
|
6
7
|
key: "slack-new-interaction-event-received",
|
|
7
|
-
description:
|
|
8
|
-
"Emit new events on new Slack [interactivity events](https://api.slack.com/interactivity) sourced from [Block Kit interactive elements](https://api.slack.com/interactivity/components), [Slash commands](https://api.slack.com/interactivity/slash-commands), or [Shortcuts](https://api.slack.com/interactivity/shortcuts).",
|
|
8
|
+
description: "Emit new events on new Slack [interactivity events](https://api.slack.com/interactivity) sourced from [Block Kit interactive elements](https://api.slack.com/interactivity/components), [Slash commands](https://api.slack.com/interactivity/slash-commands), or [Shortcuts](https://api.slack.com/interactivity/shortcuts).",
|
|
9
9
|
type: "source",
|
|
10
10
|
props: {
|
|
11
11
|
...common.props,
|
|
@@ -17,8 +17,7 @@ export default {
|
|
|
17
17
|
action_ids: {
|
|
18
18
|
type: "string[]",
|
|
19
19
|
label: "Action IDs",
|
|
20
|
-
description:
|
|
21
|
-
"Filter interaction events by specific `action_id`'s to subscribe for new interaction events. If none are specified, all `action_ids` created via Pipedream will emit new events.",
|
|
20
|
+
description: "Filter interaction events by specific `action_id`'s to subscribe for new interaction events. If none are specified, all `action_ids` created via Pipedream will emit new events.",
|
|
22
21
|
optional: true,
|
|
23
22
|
default: [],
|
|
24
23
|
},
|
|
@@ -29,8 +28,7 @@ export default {
|
|
|
29
28
|
],
|
|
30
29
|
type: "string[]",
|
|
31
30
|
label: "Channels",
|
|
32
|
-
description:
|
|
33
|
-
"Filter interaction events by one or more channels. If none selected, any interaction event in any channel will emit new events.",
|
|
31
|
+
description: "Filter interaction events by one or more channels. If none selected, any interaction event in any channel will emit new events.",
|
|
34
32
|
optional: true,
|
|
35
33
|
default: [],
|
|
36
34
|
},
|
|
@@ -103,4 +101,5 @@ export default {
|
|
|
103
101
|
},
|
|
104
102
|
);
|
|
105
103
|
},
|
|
104
|
+
sampleEmit,
|
|
106
105
|
};
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
export default {
|
|
2
|
+
"event": {
|
|
3
|
+
"type": "block_actions",
|
|
4
|
+
"user": {
|
|
5
|
+
"id": "US676PZLY",
|
|
6
|
+
"username": "test.user",
|
|
7
|
+
"name": "test.user",
|
|
8
|
+
"team_id": "TS8319547"
|
|
9
|
+
},
|
|
10
|
+
"api_app_id": "AN9231S6L",
|
|
11
|
+
"token": "UYc82mtyZWRhvUXQ6TXrv4wq",
|
|
12
|
+
"container": {
|
|
13
|
+
"type": "message",
|
|
14
|
+
"message_ts": "1716402983.247149",
|
|
15
|
+
"channel_id": "CS8319KD5",
|
|
16
|
+
"is_ephemeral": false
|
|
17
|
+
},
|
|
18
|
+
"trigger_id": "7161731794692.892103311143.4020ed3595908eca11e4076438354dbb",
|
|
19
|
+
"team": {
|
|
20
|
+
"id": "TS8319547",
|
|
21
|
+
"domain": "test-j1q3506"
|
|
22
|
+
},
|
|
23
|
+
"enterprise": null,
|
|
24
|
+
"is_enterprise_install": false,
|
|
25
|
+
"channel": {
|
|
26
|
+
"id": "CS8319KD5",
|
|
27
|
+
"name": "testing"
|
|
28
|
+
},
|
|
29
|
+
"message": {
|
|
30
|
+
"subtype": "bot_message",
|
|
31
|
+
"text": "Click Me button Sent via <https://pipedream.com/@/p_6lCR5Nx?o=a&a=slack|Pipedream>",
|
|
32
|
+
"username": "Pipedream",
|
|
33
|
+
"type": "message",
|
|
34
|
+
"ts": "1716402983.247149",
|
|
35
|
+
"bot_id": "BRTDL45RQ",
|
|
36
|
+
"app_id": "AN9231S6L",
|
|
37
|
+
"blocks": [
|
|
38
|
+
{
|
|
39
|
+
"type": "actions",
|
|
40
|
+
"block_id": "SJp0j",
|
|
41
|
+
"elements": [
|
|
42
|
+
{
|
|
43
|
+
"type": "button",
|
|
44
|
+
"action_id": "button_click",
|
|
45
|
+
"text": {
|
|
46
|
+
"type": "plain_text",
|
|
47
|
+
"text": "Click Me",
|
|
48
|
+
"emoji": true
|
|
49
|
+
},
|
|
50
|
+
"value": "click_me_123"
|
|
51
|
+
}
|
|
52
|
+
]
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
"type": "context",
|
|
56
|
+
"block_id": "ysmBN",
|
|
57
|
+
"elements": [
|
|
58
|
+
{
|
|
59
|
+
"type": "mrkdwn",
|
|
60
|
+
"text": "Sent via <https://pipedream.com/@/p_6lCR5Nx?o=a&a=slack|Pipedream>",
|
|
61
|
+
"verbatim": false
|
|
62
|
+
}
|
|
63
|
+
]
|
|
64
|
+
}
|
|
65
|
+
]
|
|
66
|
+
},
|
|
67
|
+
"state": {
|
|
68
|
+
"values": {}
|
|
69
|
+
},
|
|
70
|
+
"response_url": "https://hooks.slack.com/actions/TS8319547/7156351250101/J0w1NoVIXjChEwp4WQab4tcv",
|
|
71
|
+
"actions": [
|
|
72
|
+
{
|
|
73
|
+
"action_id": "button_click",
|
|
74
|
+
"block_id": "SJp0j",
|
|
75
|
+
"text": {
|
|
76
|
+
"type": "plain_text",
|
|
77
|
+
"text": "Click Me",
|
|
78
|
+
"emoji": true
|
|
79
|
+
},
|
|
80
|
+
"value": "click_me_123",
|
|
81
|
+
"type": "button",
|
|
82
|
+
"action_ts": "1716403200.549150"
|
|
83
|
+
}
|
|
84
|
+
]
|
|
85
|
+
}
|
|
86
|
+
}
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import common from "../common/base.mjs";
|
|
2
2
|
import constants from "../common/constants.mjs";
|
|
3
|
+
import sampleEmit from "./test-event.mjs";
|
|
3
4
|
|
|
4
5
|
export default {
|
|
5
6
|
...common,
|
|
6
|
-
key: "slack-new-mention",
|
|
7
|
-
name: "New Mention (Instant)",
|
|
8
|
-
version: "
|
|
9
|
-
description: "Emit new event when a
|
|
7
|
+
key: "slack-new-keyword-mention",
|
|
8
|
+
name: "New Keyword Mention (Instant)",
|
|
9
|
+
version: "0.0.1",
|
|
10
|
+
description: "Emit new event when a specific keyword is mentioned in a channel",
|
|
10
11
|
type: "source",
|
|
11
12
|
dedupe: "unique",
|
|
12
13
|
props: {
|
|
@@ -37,12 +38,6 @@ export default {
|
|
|
37
38
|
"keyword",
|
|
38
39
|
],
|
|
39
40
|
},
|
|
40
|
-
isUsername: {
|
|
41
|
-
propDefinition: [
|
|
42
|
-
common.props.slack,
|
|
43
|
-
"isUsername",
|
|
44
|
-
],
|
|
45
|
-
},
|
|
46
41
|
ignoreBot: {
|
|
47
42
|
propDefinition: [
|
|
48
43
|
common.props.slack,
|
|
@@ -90,7 +85,7 @@ export default {
|
|
|
90
85
|
}
|
|
91
86
|
},
|
|
92
87
|
getSummary() {
|
|
93
|
-
return "New mention received";
|
|
88
|
+
return "New keyword mention received";
|
|
94
89
|
},
|
|
95
90
|
async processEvent(event) {
|
|
96
91
|
const {
|
|
@@ -98,15 +93,7 @@ export default {
|
|
|
98
93
|
subtype,
|
|
99
94
|
bot_id: botId,
|
|
100
95
|
text,
|
|
101
|
-
blocks = [],
|
|
102
96
|
} = event;
|
|
103
|
-
const [
|
|
104
|
-
{
|
|
105
|
-
elements: [
|
|
106
|
-
{ elements = [] } = {},
|
|
107
|
-
] = [],
|
|
108
|
-
} = {},
|
|
109
|
-
] = blocks;
|
|
110
97
|
|
|
111
98
|
if (msgType !== "message") {
|
|
112
99
|
console.log(`Ignoring event with unexpected type "${msgType}"`);
|
|
@@ -127,17 +114,7 @@ export default {
|
|
|
127
114
|
}
|
|
128
115
|
|
|
129
116
|
let emitEvent = false;
|
|
130
|
-
if (this.
|
|
131
|
-
for (const item of elements) {
|
|
132
|
-
if (item.user_id) {
|
|
133
|
-
const username = await this.getUserName(item.user_id);
|
|
134
|
-
if (username === this.keyword) {
|
|
135
|
-
emitEvent = true;
|
|
136
|
-
break;
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
} else if (text.indexOf(this.keyword) !== -1) {
|
|
117
|
+
if (text.indexOf(this.keyword) !== -1) {
|
|
141
118
|
emitEvent = true;
|
|
142
119
|
} else if (subtype === constants.SUBTYPE.PD_HISTORY_MESSAGE) {
|
|
143
120
|
emitEvent = true;
|
|
@@ -148,4 +125,5 @@ export default {
|
|
|
148
125
|
}
|
|
149
126
|
},
|
|
150
127
|
},
|
|
128
|
+
sampleEmit,
|
|
151
129
|
};
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export default {
|
|
2
|
+
"user": "US676PZLY",
|
|
3
|
+
"type": "message",
|
|
4
|
+
"ts": "1716404766.096289",
|
|
5
|
+
"client_msg_id": "b26387fd-5afe-46a9-bf63-a7aabd6fb40f",
|
|
6
|
+
"text": "hello",
|
|
7
|
+
"team": "TS8319547",
|
|
8
|
+
"blocks": [
|
|
9
|
+
{
|
|
10
|
+
"type": "rich_text",
|
|
11
|
+
"block_id": "aY6KK",
|
|
12
|
+
"elements": [
|
|
13
|
+
{
|
|
14
|
+
"type": "rich_text_section",
|
|
15
|
+
"elements": [
|
|
16
|
+
{
|
|
17
|
+
"type": "text",
|
|
18
|
+
"text": "hello"
|
|
19
|
+
}
|
|
20
|
+
]
|
|
21
|
+
}
|
|
22
|
+
]
|
|
23
|
+
}
|
|
24
|
+
],
|
|
25
|
+
"channel": "CS8319KD5",
|
|
26
|
+
"event_ts": "1716404766.096289",
|
|
27
|
+
"channel_type": "channel"
|
|
28
|
+
}
|
|
@@ -6,7 +6,7 @@ export default {
|
|
|
6
6
|
...common,
|
|
7
7
|
key: "slack-new-message-in-channels",
|
|
8
8
|
name: "New Message In Channels (Instant)",
|
|
9
|
-
version: "1.0.
|
|
9
|
+
version: "1.0.17",
|
|
10
10
|
description: "Emit new event when a new message is posted to one or more channels",
|
|
11
11
|
type: "source",
|
|
12
12
|
dedupe: "unique",
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import common from "../common/base.mjs";
|
|
2
|
+
import sampleEmit from "./test-event.mjs";
|
|
2
3
|
|
|
3
4
|
export default {
|
|
4
5
|
...common,
|
|
5
6
|
key: "slack-new-reaction-added",
|
|
6
7
|
name: "New Reaction Added (Instant)",
|
|
7
|
-
version: "1.1.
|
|
8
|
+
version: "1.1.19",
|
|
8
9
|
description: "Emit new event when a member has added an emoji reaction to a message",
|
|
9
10
|
type: "source",
|
|
10
11
|
dedupe: "unique",
|
|
@@ -54,6 +55,7 @@ export default {
|
|
|
54
55
|
optional: true,
|
|
55
56
|
},
|
|
56
57
|
includeUserData: {
|
|
58
|
+
label: "Include User Data",
|
|
57
59
|
description: "Include user object in the response. Default `false`",
|
|
58
60
|
type: "boolean",
|
|
59
61
|
optional: true,
|
|
@@ -103,4 +105,5 @@ export default {
|
|
|
103
105
|
return event;
|
|
104
106
|
},
|
|
105
107
|
},
|
|
108
|
+
sampleEmit,
|
|
106
109
|
};
|