@activepieces/piece-slack 0.7.13 → 0.7.15
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/package.json +5 -5
- package/src/index.js +6 -1
- package/src/index.js.map +1 -1
- package/src/lib/actions/get-file.d.ts +3 -0
- package/src/lib/actions/get-file.js +46 -0
- package/src/lib/actions/get-file.js.map +1 -0
- package/src/lib/actions/retrieve-thread-messages.d.ts +4 -0
- package/src/lib/actions/retrieve-thread-messages.js +37 -0
- package/src/lib/actions/retrieve-thread-messages.js.map +1 -0
- package/src/lib/triggers/new-command.d.ts +20 -0
- package/src/lib/triggers/new-command.js +205 -0
- package/src/lib/triggers/new-command.js.map +1 -0
package/package.json
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@activepieces/piece-slack",
|
|
3
|
-
"version": "0.7.
|
|
3
|
+
"version": "0.7.15",
|
|
4
4
|
"dependencies": {
|
|
5
5
|
"@anthropic-ai/sdk": "0.33.1",
|
|
6
6
|
"@sinclair/typebox": "0.34.11",
|
|
7
7
|
"@slack/web-api": "7.0.4",
|
|
8
|
-
"axios": "1.
|
|
8
|
+
"axios": "1.8.2",
|
|
9
9
|
"axios-retry": "4.4.1",
|
|
10
10
|
"deepmerge-ts": "7.1.0",
|
|
11
11
|
"mime-types": "2.1.35",
|
|
@@ -15,9 +15,9 @@
|
|
|
15
15
|
"semver": "7.6.0",
|
|
16
16
|
"slackify-markdown": "4.4.0",
|
|
17
17
|
"zod": "3.23.8",
|
|
18
|
-
"@activepieces/pieces-common": "0.4.
|
|
19
|
-
"@activepieces/pieces-framework": "0.7.
|
|
20
|
-
"@activepieces/shared": "0.10.
|
|
18
|
+
"@activepieces/pieces-common": "0.4.3",
|
|
19
|
+
"@activepieces/pieces-framework": "0.7.45",
|
|
20
|
+
"@activepieces/shared": "0.10.156",
|
|
21
21
|
"tslib": "1.14.1"
|
|
22
22
|
},
|
|
23
23
|
"overrides": {
|
package/src/index.js
CHANGED
|
@@ -27,6 +27,9 @@ const find_user_by_handle_1 = require("./lib/actions/find-user-by-handle");
|
|
|
27
27
|
const set_user_status_1 = require("./lib/actions/set-user-status");
|
|
28
28
|
const new_mention_1 = require("./lib/triggers/new-mention");
|
|
29
29
|
const markdown_to_slack_format_1 = require("./lib/actions/markdown-to-slack-format");
|
|
30
|
+
const new_command_1 = require("./lib/triggers/new-command");
|
|
31
|
+
const get_file_1 = require("./lib/actions/get-file");
|
|
32
|
+
const retrieve_thread_messages_1 = require("./lib/actions/retrieve-thread-messages");
|
|
30
33
|
exports.slackAuth = pieces_framework_1.PieceAuth.OAuth2({
|
|
31
34
|
description: '',
|
|
32
35
|
authUrl: 'https://slack.com/oauth/v2/authorize?user_scope=search:read,users.profile:write,reactions:read',
|
|
@@ -109,6 +112,7 @@ exports.slack = (0, pieces_framework_1.createPiece)({
|
|
|
109
112
|
request_action_direct_message_1.requestActionDirectMessageAction,
|
|
110
113
|
request_action_message_1.requestActionMessageAction,
|
|
111
114
|
upload_file_1.uploadFile,
|
|
115
|
+
get_file_1.getFileAction,
|
|
112
116
|
search_messages_1.searchMessages,
|
|
113
117
|
find_user_by_email_1.findUserByEmailAction,
|
|
114
118
|
find_user_by_handle_1.findUserByHandleAction,
|
|
@@ -118,6 +122,7 @@ exports.slack = (0, pieces_framework_1.createPiece)({
|
|
|
118
122
|
get_channel_history_1.getChannelHistory,
|
|
119
123
|
set_user_status_1.setUserStatusAction,
|
|
120
124
|
markdown_to_slack_format_1.markdownToSlackFormat,
|
|
125
|
+
retrieve_thread_messages_1.retrieveThreadMessages,
|
|
121
126
|
(0, pieces_common_1.createCustomApiCallAction)({
|
|
122
127
|
baseUrl: () => {
|
|
123
128
|
return 'https://slack.com/api';
|
|
@@ -146,6 +151,6 @@ exports.slack = (0, pieces_framework_1.createPiece)({
|
|
|
146
151
|
},
|
|
147
152
|
}),
|
|
148
153
|
],
|
|
149
|
-
triggers: [new_message_1.newMessage, new_mention_1.newMention, new_reaction_added_1.newReactionAdded, new_channel_1.channelCreated],
|
|
154
|
+
triggers: [new_message_1.newMessage, new_mention_1.newMention, new_reaction_added_1.newReactionAdded, new_channel_1.channelCreated, new_command_1.newCommand],
|
|
150
155
|
});
|
|
151
156
|
//# sourceMappingURL=index.js.map
|
package/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../packages/pieces/community/slack/src/index.ts"],"names":[],"mappings":";;;;AAAA,+DAAwE;AACxE,qEAKwC;AACxC,iDAAqD;AACrD,sEAAiC;AACjC,+FAA+F;AAC/F,iFAAkF;AAClF,mGAAmG;AACnG,qFAA0F;AAC1F,yFAAwF;AACxF,2EAA2E;AAC3E,4DAAwD;AACxD,0EAAqE;AACrE,2DAAuD;AACvD,mEAA+D;AAC/D,iEAA6D;AAC7D,yEAAyE;AACzE,iEAAmE;AACnE,iEAAmE;AACnE,4DAA4D;AAC5D,mFAAkF;AAClF,2EAAsE;AACtE,2EAA2E;AAC3E,mEAAoE;AACpE,4DAAwD;AACxD,qFAA+E;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../packages/pieces/community/slack/src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export declare const getFileAction: import("@activepieces/pieces-framework").IAction<import("@activepieces/pieces-framework").OAuth2Property<import("@activepieces/pieces-framework").OAuth2Props>, {
|
|
2
|
+
fileId: import("@activepieces/pieces-framework").ShortTextProperty<true>;
|
|
3
|
+
}>;
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getFileAction = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const index_1 = require("../../index");
|
|
6
|
+
const pieces_common_1 = require("@activepieces/pieces-common");
|
|
7
|
+
const pieces_framework_1 = require("@activepieces/pieces-framework");
|
|
8
|
+
const web_api_1 = require("@slack/web-api");
|
|
9
|
+
exports.getFileAction = (0, pieces_framework_1.createAction)({
|
|
10
|
+
auth: index_1.slackAuth,
|
|
11
|
+
name: 'get-file',
|
|
12
|
+
displayName: 'Get File',
|
|
13
|
+
description: 'Return information about a given file ID.',
|
|
14
|
+
props: {
|
|
15
|
+
fileId: pieces_framework_1.Property.ShortText({
|
|
16
|
+
displayName: 'File ID',
|
|
17
|
+
required: true,
|
|
18
|
+
description: 'You can pass the file ID from the New Message Trigger payload.',
|
|
19
|
+
}),
|
|
20
|
+
},
|
|
21
|
+
run(context) {
|
|
22
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
23
|
+
var _a, _b;
|
|
24
|
+
const client = new web_api_1.WebClient(context.auth.access_token);
|
|
25
|
+
const fileData = yield client.files.info({ file: context.propsValue.fileId });
|
|
26
|
+
const fileDownloadUrl = (_a = fileData.file) === null || _a === void 0 ? void 0 : _a.url_private_download;
|
|
27
|
+
if (!fileDownloadUrl) {
|
|
28
|
+
throw new Error('Unable to find the download URL.');
|
|
29
|
+
}
|
|
30
|
+
const response = yield pieces_common_1.httpClient.sendRequest({
|
|
31
|
+
method: pieces_common_1.HttpMethod.GET,
|
|
32
|
+
url: fileDownloadUrl,
|
|
33
|
+
authentication: {
|
|
34
|
+
type: pieces_common_1.AuthenticationType.BEARER_TOKEN,
|
|
35
|
+
token: context.auth.access_token,
|
|
36
|
+
},
|
|
37
|
+
responseType: 'arraybuffer',
|
|
38
|
+
});
|
|
39
|
+
return Object.assign(Object.assign({}, fileData.file), { data: yield context.files.write({
|
|
40
|
+
fileName: ((_b = fileData.file) === null || _b === void 0 ? void 0 : _b.name) || `file`,
|
|
41
|
+
data: Buffer.from(response.body),
|
|
42
|
+
}) });
|
|
43
|
+
});
|
|
44
|
+
},
|
|
45
|
+
});
|
|
46
|
+
//# sourceMappingURL=get-file.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-file.js","sourceRoot":"","sources":["../../../../../../../../packages/pieces/community/slack/src/lib/actions/get-file.ts"],"names":[],"mappings":";;;;AAAA,uCAAwC;AACxC,+DAAyF;AACzF,qEAAwE;AACxE,4CAA2C;AAE9B,QAAA,aAAa,GAAG,IAAA,+BAAY,EAAC;IACzC,IAAI,EAAE,iBAAS;IACf,IAAI,EAAE,UAAU;IAChB,WAAW,EAAE,UAAU;IACvB,WAAW,EAAE,2CAA2C;IACxD,KAAK,EAAE;QACN,MAAM,EAAE,2BAAQ,CAAC,SAAS,CAAC;YAC1B,WAAW,EAAE,SAAS;YACtB,QAAQ,EAAE,IAAI;YACd,WAAW,EAAE,gEAAgE;SAC7E,CAAC;KACF;IACK,GAAG,CAAC,OAAO;;;YAChB,MAAM,MAAM,GAAG,IAAI,mBAAS,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAExD,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;YAE9E,MAAM,eAAe,GAAG,MAAA,QAAQ,CAAC,IAAI,0CAAE,oBAAoB,CAAC;YAE5D,IAAI,CAAC,eAAe,EAAE,CAAC;gBACtB,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;YACrD,CAAC;YAED,MAAM,QAAQ,GAAG,MAAM,0BAAU,CAAC,WAAW,CAAC;gBAC7C,MAAM,EAAE,0BAAU,CAAC,GAAG;gBACtB,GAAG,EAAE,eAAe;gBACpB,cAAc,EAAE;oBACf,IAAI,EAAE,kCAAkB,CAAC,YAAY;oBACrC,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,YAAY;iBAChC;gBACD,YAAY,EAAE,aAAa;aAC3B,CAAC,CAAC;YAEH,uCACI,QAAQ,CAAC,IAAI,KAChB,IAAI,EAAE,MAAM,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC;oBAC/B,QAAQ,EAAE,CAAA,MAAA,QAAQ,CAAC,IAAI,0CAAE,IAAI,KAAI,MAAM;oBACvC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;iBAChC,CAAC,IACD;QACH,CAAC;KAAA;CACD,CAAC,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export declare const retrieveThreadMessages: import("@activepieces/pieces-framework").IAction<import("@activepieces/pieces-framework").OAuth2Property<import("@activepieces/pieces-framework").OAuth2Props>, {
|
|
2
|
+
channel: import("@activepieces/pieces-framework").DropdownProperty<string, true>;
|
|
3
|
+
threadTs: import("@activepieces/pieces-framework").ShortTextProperty<true>;
|
|
4
|
+
}>;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.retrieveThreadMessages = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const pieces_framework_1 = require("@activepieces/pieces-framework");
|
|
6
|
+
const __1 = require("../..");
|
|
7
|
+
const web_api_1 = require("@slack/web-api");
|
|
8
|
+
const props_1 = require("../common/props");
|
|
9
|
+
const utils_1 = require("../common/utils");
|
|
10
|
+
exports.retrieveThreadMessages = (0, pieces_framework_1.createAction)({
|
|
11
|
+
name: 'retrieveThreadMessages',
|
|
12
|
+
displayName: 'Retrieve Thread Messages',
|
|
13
|
+
description: 'Retrieves thread messages by channel and thread timestamp.',
|
|
14
|
+
auth: __1.slackAuth,
|
|
15
|
+
props: {
|
|
16
|
+
channel: (0, props_1.slackChannel)(true),
|
|
17
|
+
threadTs: pieces_framework_1.Property.ShortText({
|
|
18
|
+
displayName: 'Thread ts',
|
|
19
|
+
description: 'Provide the ts (timestamp) value of the **parent** message to retrieve replies of this message. Do not use the ts value of the reply itself; use its parent instead. For example `1710304378.475129`.Alternatively, you can easily obtain the message link by clicking on the three dots next to the parent message and selecting the `Copy link` option.',
|
|
20
|
+
required: true,
|
|
21
|
+
}),
|
|
22
|
+
},
|
|
23
|
+
run(_a) {
|
|
24
|
+
return tslib_1.__awaiter(this, arguments, void 0, function* ({ auth, propsValue }) {
|
|
25
|
+
const client = new web_api_1.WebClient(auth.access_token);
|
|
26
|
+
const messageTimestamp = (0, utils_1.processMessageTimestamp)(propsValue.threadTs);
|
|
27
|
+
if (!messageTimestamp) {
|
|
28
|
+
throw new Error('Invalid Timestamp Value.');
|
|
29
|
+
}
|
|
30
|
+
return yield client.conversations.replies({
|
|
31
|
+
channel: propsValue.channel,
|
|
32
|
+
ts: messageTimestamp,
|
|
33
|
+
});
|
|
34
|
+
});
|
|
35
|
+
},
|
|
36
|
+
});
|
|
37
|
+
//# sourceMappingURL=retrieve-thread-messages.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"retrieve-thread-messages.js","sourceRoot":"","sources":["../../../../../../../../packages/pieces/community/slack/src/lib/actions/retrieve-thread-messages.ts"],"names":[],"mappings":";;;;AAAA,qEAAwE;AACxE,6BAAkC;AAClC,4CAA2C;AAC3C,2CAA+C;AAC/C,2CAA0D;AAE7C,QAAA,sBAAsB,GAAG,IAAA,+BAAY,EAAC;IACjD,IAAI,EAAE,wBAAwB;IAC9B,WAAW,EAAE,0BAA0B;IACvC,WAAW,EAAE,4DAA4D;IACzE,IAAI,EAAE,aAAS;IACf,KAAK,EAAE;QACL,OAAO,EAAE,IAAA,oBAAY,EAAC,IAAI,CAAC;QAC3B,QAAQ,EAAE,2BAAQ,CAAC,SAAS,CAAC;YAC3B,WAAW,EAAE,WAAW;YACxB,WAAW,EACT,2VAA2V;YAC7V,QAAQ,EAAE,IAAI;SACf,CAAC;KACH;IACK,GAAG;qEAAC,EAAE,IAAI,EAAE,UAAU,EAAE;YAC5B,MAAM,MAAM,GAAG,IAAI,mBAAS,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAC9C,MAAM,gBAAgB,GAAG,IAAA,+BAAuB,EAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;YACpE,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBACtB,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;YAC9C,CAAC;YACL,OAAO,MAAM,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC;gBACxC,OAAO,EAAE,UAAU,CAAC,OAAO;gBAC3B,EAAE,EAAE,gBAAgB;aACrB,CAAC,CAAC;QACL,CAAC;KAAA;CACF,CAAC,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { TriggerStrategy } from '@activepieces/pieces-framework';
|
|
2
|
+
export declare const newCommand: import("@activepieces/pieces-framework").ITrigger<TriggerStrategy.WEBHOOK, import("@activepieces/pieces-framework").OAuth2Property<import("@activepieces/pieces-framework").OAuth2Props>, {
|
|
3
|
+
info: import("dist/packages/pieces/community/framework/src/lib/property/input/markdown-property").MarkDownProperty;
|
|
4
|
+
user: import("@activepieces/pieces-framework").DropdownProperty<string, false> | import("@activepieces/pieces-framework").DropdownProperty<string, true>;
|
|
5
|
+
commands: import("@activepieces/pieces-framework").ArrayProperty<true>;
|
|
6
|
+
channels: import("@activepieces/pieces-framework").MultiSelectDropdownProperty<string, false>;
|
|
7
|
+
ignoreBots: import("@activepieces/pieces-framework").CheckboxProperty<true>;
|
|
8
|
+
}> | import("@activepieces/pieces-framework").ITrigger<TriggerStrategy.POLLING, import("@activepieces/pieces-framework").OAuth2Property<import("@activepieces/pieces-framework").OAuth2Props>, {
|
|
9
|
+
info: import("dist/packages/pieces/community/framework/src/lib/property/input/markdown-property").MarkDownProperty;
|
|
10
|
+
user: import("@activepieces/pieces-framework").DropdownProperty<string, false> | import("@activepieces/pieces-framework").DropdownProperty<string, true>;
|
|
11
|
+
commands: import("@activepieces/pieces-framework").ArrayProperty<true>;
|
|
12
|
+
channels: import("@activepieces/pieces-framework").MultiSelectDropdownProperty<string, false>;
|
|
13
|
+
ignoreBots: import("@activepieces/pieces-framework").CheckboxProperty<true>;
|
|
14
|
+
}> | import("@activepieces/pieces-framework").ITrigger<TriggerStrategy.APP_WEBHOOK, import("@activepieces/pieces-framework").OAuth2Property<import("@activepieces/pieces-framework").OAuth2Props>, {
|
|
15
|
+
info: import("dist/packages/pieces/community/framework/src/lib/property/input/markdown-property").MarkDownProperty;
|
|
16
|
+
user: import("@activepieces/pieces-framework").DropdownProperty<string, false> | import("@activepieces/pieces-framework").DropdownProperty<string, true>;
|
|
17
|
+
commands: import("@activepieces/pieces-framework").ArrayProperty<true>;
|
|
18
|
+
channels: import("@activepieces/pieces-framework").MultiSelectDropdownProperty<string, false>;
|
|
19
|
+
ignoreBots: import("@activepieces/pieces-framework").CheckboxProperty<true>;
|
|
20
|
+
}>;
|
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.newCommand = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const pieces_framework_1 = require("@activepieces/pieces-framework");
|
|
6
|
+
const props_1 = require("../common/props");
|
|
7
|
+
const __1 = require("../../");
|
|
8
|
+
const web_api_1 = require("@slack/web-api");
|
|
9
|
+
const shared_1 = require("@activepieces/shared");
|
|
10
|
+
const utils_1 = require("../common/utils");
|
|
11
|
+
const sampleData = {
|
|
12
|
+
client_msg_id: '2767cf34-0651-44e0-b9c8-1b167ce9b7a9',
|
|
13
|
+
type: 'message',
|
|
14
|
+
text: '<@U07BN652T52> help argument1 argument2',
|
|
15
|
+
user: 'U037UG6FKPU',
|
|
16
|
+
ts: '1678231735.586539',
|
|
17
|
+
blocks: [
|
|
18
|
+
{
|
|
19
|
+
type: 'rich_text',
|
|
20
|
+
block_id: 'jCFSh',
|
|
21
|
+
elements: [
|
|
22
|
+
{
|
|
23
|
+
type: 'rich_text_section',
|
|
24
|
+
elements: [
|
|
25
|
+
{
|
|
26
|
+
type: 'user',
|
|
27
|
+
user_id: 'U07BN652T52',
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
type: 'text',
|
|
31
|
+
text: ' help argument1 argument2',
|
|
32
|
+
},
|
|
33
|
+
],
|
|
34
|
+
},
|
|
35
|
+
],
|
|
36
|
+
},
|
|
37
|
+
],
|
|
38
|
+
team: 'T037MS4FGDC',
|
|
39
|
+
channel: 'C037RTX2ZDM',
|
|
40
|
+
event_ts: '1678231735.586539',
|
|
41
|
+
channel_type: 'channel',
|
|
42
|
+
parsed_command: {
|
|
43
|
+
command: 'help',
|
|
44
|
+
args: ['argument1', 'argument2'],
|
|
45
|
+
},
|
|
46
|
+
};
|
|
47
|
+
exports.newCommand = (0, pieces_framework_1.createTrigger)({
|
|
48
|
+
auth: __1.slackAuth,
|
|
49
|
+
name: 'new_command',
|
|
50
|
+
displayName: 'New Command',
|
|
51
|
+
description: 'Triggers when a specific command is sent to the bot (e.g., @bot command arg1 arg2)',
|
|
52
|
+
props: {
|
|
53
|
+
info: props_1.multiSelectChannelInfo,
|
|
54
|
+
user: props_1.userId,
|
|
55
|
+
commands: pieces_framework_1.Property.Array({
|
|
56
|
+
displayName: 'Commands',
|
|
57
|
+
description: 'List of valid commands that the bot should respond to (e.g., help, ocr, remind)',
|
|
58
|
+
required: true,
|
|
59
|
+
defaultValue: ['help'],
|
|
60
|
+
}),
|
|
61
|
+
channels: pieces_framework_1.Property.MultiSelectDropdown({
|
|
62
|
+
displayName: 'Channels',
|
|
63
|
+
description: 'If no channel is selected, the flow will be triggered for commands in all channels',
|
|
64
|
+
required: false,
|
|
65
|
+
refreshers: [],
|
|
66
|
+
options(_a) {
|
|
67
|
+
return tslib_1.__awaiter(this, arguments, void 0, function* ({ auth }) {
|
|
68
|
+
if (!auth) {
|
|
69
|
+
return {
|
|
70
|
+
disabled: true,
|
|
71
|
+
placeholder: 'connect slack account',
|
|
72
|
+
options: [],
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
const authentication = auth;
|
|
76
|
+
const accessToken = authentication['access_token'];
|
|
77
|
+
const channels = yield (0, props_1.getChannels)(accessToken);
|
|
78
|
+
return {
|
|
79
|
+
disabled: false,
|
|
80
|
+
placeholder: 'Select channel',
|
|
81
|
+
options: channels,
|
|
82
|
+
};
|
|
83
|
+
});
|
|
84
|
+
},
|
|
85
|
+
}),
|
|
86
|
+
ignoreBots: pieces_framework_1.Property.Checkbox({
|
|
87
|
+
displayName: 'Ignore Bot Messages ?',
|
|
88
|
+
required: true,
|
|
89
|
+
defaultValue: true,
|
|
90
|
+
}),
|
|
91
|
+
},
|
|
92
|
+
type: pieces_framework_1.TriggerStrategy.APP_WEBHOOK,
|
|
93
|
+
sampleData: sampleData,
|
|
94
|
+
onEnable: (context) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
|
|
95
|
+
var _a;
|
|
96
|
+
// Older OAuth2 has team_id, newer has team.id
|
|
97
|
+
const teamId = (_a = context.auth.data['team_id']) !== null && _a !== void 0 ? _a : context.auth.data['team']['id'];
|
|
98
|
+
context.app.createListeners({
|
|
99
|
+
events: ['message'],
|
|
100
|
+
identifierValue: teamId,
|
|
101
|
+
});
|
|
102
|
+
}),
|
|
103
|
+
onDisable: (context) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
|
|
104
|
+
// Ignored
|
|
105
|
+
}),
|
|
106
|
+
test: (context) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
|
|
107
|
+
const channels = context.propsValue.channels;
|
|
108
|
+
const commands = context.propsValue.commands;
|
|
109
|
+
const user = context.propsValue.user;
|
|
110
|
+
if (!channels || (Array.isArray(channels) && channels.length === 0)) {
|
|
111
|
+
return [
|
|
112
|
+
Object.assign(Object.assign({}, sampleData), { parsed_command: {
|
|
113
|
+
command: commands.length > 0 ? commands[0] : 'help',
|
|
114
|
+
args: ['argument1', 'argument2'],
|
|
115
|
+
} }),
|
|
116
|
+
];
|
|
117
|
+
}
|
|
118
|
+
const client = new web_api_1.WebClient(context.auth.access_token);
|
|
119
|
+
const response = yield client.conversations.history({
|
|
120
|
+
channel: channels[0],
|
|
121
|
+
limit: 100,
|
|
122
|
+
});
|
|
123
|
+
if (!response.messages) {
|
|
124
|
+
return [];
|
|
125
|
+
}
|
|
126
|
+
// Filter and process messages with bot mention + command
|
|
127
|
+
const processedMessages = response.messages
|
|
128
|
+
.filter((message) => !(0, shared_1.isNil)(message.ts))
|
|
129
|
+
.filter((message) => {
|
|
130
|
+
// Ignore bot messages if configured to do so
|
|
131
|
+
if (context.propsValue.ignoreBots && message.bot_id) {
|
|
132
|
+
return false;
|
|
133
|
+
}
|
|
134
|
+
// Look for mentions of the bot user
|
|
135
|
+
return message.text && message.text.includes(`<@${user}>`);
|
|
136
|
+
})
|
|
137
|
+
.map((message) => {
|
|
138
|
+
// Parse the command
|
|
139
|
+
const parsedCommand = parseCommand(message.text || '', user, commands);
|
|
140
|
+
// Only include messages with valid commands
|
|
141
|
+
if (parsedCommand && commands.includes(parsedCommand.command)) {
|
|
142
|
+
return Object.assign(Object.assign({}, message), { channel: channels[0], event_ts: '1678231735.586539', channel_type: 'channel', parsed_command: parsedCommand });
|
|
143
|
+
}
|
|
144
|
+
return null;
|
|
145
|
+
})
|
|
146
|
+
.filter((message) => message !== null)
|
|
147
|
+
.sort((a, b) => parseFloat(b.ts) - parseFloat(a.ts));
|
|
148
|
+
return (0, utils_1.getFirstFiveOrAll)(processedMessages);
|
|
149
|
+
}),
|
|
150
|
+
run: (context) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
|
|
151
|
+
var _a, _b;
|
|
152
|
+
const payloadBody = context.payload.body;
|
|
153
|
+
const channels = (_a = context.propsValue.channels) !== null && _a !== void 0 ? _a : [];
|
|
154
|
+
const commands = (_b = context.propsValue.commands) !== null && _b !== void 0 ? _b : [];
|
|
155
|
+
const user = context.propsValue.user;
|
|
156
|
+
// Check if we should process this channel
|
|
157
|
+
if (!(channels.length === 0 || channels.includes(payloadBody.event.channel))) {
|
|
158
|
+
return [];
|
|
159
|
+
}
|
|
160
|
+
// Check for bot messages if configured to ignore them
|
|
161
|
+
if (context.propsValue.ignoreBots && payloadBody.event.bot_id) {
|
|
162
|
+
return [];
|
|
163
|
+
}
|
|
164
|
+
// Check for mention and parse command
|
|
165
|
+
if (user && payloadBody.event.text) {
|
|
166
|
+
const parsedCommand = parseCommand(payloadBody.event.text, user, commands);
|
|
167
|
+
if (parsedCommand && commands.includes(parsedCommand.command)) {
|
|
168
|
+
// Return event with parsed command
|
|
169
|
+
return [
|
|
170
|
+
Object.assign(Object.assign({}, payloadBody.event), { parsed_command: parsedCommand }),
|
|
171
|
+
];
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
return [];
|
|
175
|
+
}),
|
|
176
|
+
});
|
|
177
|
+
/**
|
|
178
|
+
* Parse a message text to extract command and arguments
|
|
179
|
+
*/
|
|
180
|
+
function parseCommand(text, botUserId, validCommands) {
|
|
181
|
+
if (!botUserId) {
|
|
182
|
+
return null;
|
|
183
|
+
}
|
|
184
|
+
// Check if the message mentions the bot
|
|
185
|
+
const mentionRegex = new RegExp(`<@${botUserId}>\\s+(.+)`, 's');
|
|
186
|
+
const mentionMatch = text.match(mentionRegex);
|
|
187
|
+
if (!mentionMatch) {
|
|
188
|
+
return null;
|
|
189
|
+
}
|
|
190
|
+
// Extract the text after the mention
|
|
191
|
+
const commandText = mentionMatch[1].trim();
|
|
192
|
+
// Split into command and arguments (first word is command, rest are args)
|
|
193
|
+
const parts = commandText.split(/\s+/);
|
|
194
|
+
const command = parts[0].toLowerCase();
|
|
195
|
+
const args = parts.slice(1);
|
|
196
|
+
// Check if it's a valid command
|
|
197
|
+
if (!validCommands.includes(command)) {
|
|
198
|
+
return null;
|
|
199
|
+
}
|
|
200
|
+
return {
|
|
201
|
+
command,
|
|
202
|
+
args,
|
|
203
|
+
};
|
|
204
|
+
}
|
|
205
|
+
//# sourceMappingURL=new-command.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"new-command.js","sourceRoot":"","sources":["../../../../../../../../packages/pieces/community/slack/src/lib/triggers/new-command.ts"],"names":[],"mappings":";;;;AAAA,qEAKwC;AACxC,2CAA8E;AAC9E,8BAAmC;AACnC,4CAA2C;AAC3C,iDAA6C;AAC7C,2CAAoD;AAEpD,MAAM,UAAU,GAAG;IACjB,aAAa,EAAE,sCAAsC;IACrD,IAAI,EAAE,SAAS;IACf,IAAI,EAAE,yCAAyC;IAC/C,IAAI,EAAE,aAAa;IACnB,EAAE,EAAE,mBAAmB;IACvB,MAAM,EAAE;QACN;YACE,IAAI,EAAE,WAAW;YACjB,QAAQ,EAAE,OAAO;YACjB,QAAQ,EAAE;gBACR;oBACE,IAAI,EAAE,mBAAmB;oBACzB,QAAQ,EAAE;wBACR;4BACE,IAAI,EAAE,MAAM;4BACZ,OAAO,EAAE,aAAa;yBACvB;wBACD;4BACE,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,2BAA2B;yBAClC;qBACF;iBACF;aACF;SACF;KACF;IACD,IAAI,EAAE,aAAa;IACnB,OAAO,EAAE,aAAa;IACtB,QAAQ,EAAE,mBAAmB;IAC7B,YAAY,EAAE,SAAS;IACvB,cAAc,EAAE;QACd,OAAO,EAAE,MAAM;QACf,IAAI,EAAE,CAAC,WAAW,EAAE,WAAW,CAAC;KACjC;CACF,CAAC;AAEW,QAAA,UAAU,GAAG,IAAA,gCAAa,EAAC;IACtC,IAAI,EAAE,aAAS;IACf,IAAI,EAAE,aAAa;IACnB,WAAW,EAAE,aAAa;IAC1B,WAAW,EACT,oFAAoF;IACtF,KAAK,EAAE;QACL,IAAI,EAAE,8BAAsB;QAC5B,IAAI,EAAE,cAAM;QACZ,QAAQ,EAAE,2BAAQ,CAAC,KAAK,CAAC;YACvB,WAAW,EAAE,UAAU;YACvB,WAAW,EACT,iFAAiF;YACnF,QAAQ,EAAE,IAAI;YACd,YAAY,EAAE,CAAC,MAAM,CAAC;SACvB,CAAC;QACF,QAAQ,EAAE,2BAAQ,CAAC,mBAAmB,CAAC;YACrC,WAAW,EAAE,UAAU;YACvB,WAAW,EACT,oFAAoF;YACtF,QAAQ,EAAE,KAAK;YACf,UAAU,EAAE,EAAE;YACR,OAAO;6EAAC,EAAE,IAAI,EAAE;oBACpB,IAAI,CAAC,IAAI,EAAE,CAAC;wBACV,OAAO;4BACL,QAAQ,EAAE,IAAI;4BACd,WAAW,EAAE,uBAAuB;4BACpC,OAAO,EAAE,EAAE;yBACZ,CAAC;oBACJ,CAAC;oBACD,MAAM,cAAc,GAAG,IAA2B,CAAC;oBACnD,MAAM,WAAW,GAAG,cAAc,CAAC,cAAc,CAAC,CAAC;oBACnD,MAAM,QAAQ,GAAG,MAAM,IAAA,mBAAW,EAAC,WAAW,CAAC,CAAC;oBAChD,OAAO;wBACL,QAAQ,EAAE,KAAK;wBACf,WAAW,EAAE,gBAAgB;wBAC7B,OAAO,EAAE,QAAQ;qBAClB,CAAC;gBACJ,CAAC;aAAA;SACF,CAAC;QACF,UAAU,EAAE,2BAAQ,CAAC,QAAQ,CAAC;YAC5B,WAAW,EAAE,uBAAuB;YACpC,QAAQ,EAAE,IAAI;YACd,YAAY,EAAE,IAAI;SACnB,CAAC;KACH;IACD,IAAI,EAAE,kCAAe,CAAC,WAAW;IACjC,UAAU,EAAE,UAAU;IACtB,QAAQ,EAAE,CAAO,OAAO,EAAE,EAAE;;QAC1B,8CAA8C;QAC9C,MAAM,MAAM,GACV,MAAA,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,mCAAI,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC;QAClE,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;YAC1B,MAAM,EAAE,CAAC,SAAS,CAAC;YACnB,eAAe,EAAE,MAAM;SACxB,CAAC,CAAC;IACL,CAAC,CAAA;IACD,SAAS,EAAE,CAAO,OAAO,EAAE,EAAE;QAC3B,UAAU;IACZ,CAAC,CAAA;IAED,IAAI,EAAE,CAAO,OAAO,EAAE,EAAE;QACtB,MAAM,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC,QAAoB,CAAC;QACzD,MAAM,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC,QAAoB,CAAC;QACzD,MAAM,IAAI,GAAG,OAAO,CAAC,UAAU,CAAC,IAAc,CAAC;QAE/C,IAAI,CAAC,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,EAAE,CAAC;YACpE,OAAO;gDAEA,UAAU,KACb,cAAc,EAAE;wBACd,OAAO,EAAE,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM;wBACnD,IAAI,EAAE,CAAC,WAAW,EAAE,WAAW,CAAC;qBACjC;aAEJ,CAAC;QACJ,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,mBAAS,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACxD,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC;YAClD,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;YACpB,KAAK,EAAE,GAAG;SACX,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;YACvB,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,yDAAyD;QACzD,MAAM,iBAAiB,GAAG,QAAQ,CAAC,QAAQ;aACxC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,IAAA,cAAK,EAAC,OAAO,CAAC,EAAE,CAAC,CAAC;aACvC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE;YAClB,6CAA6C;YAC7C,IAAI,OAAO,CAAC,UAAU,CAAC,UAAU,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;gBACpD,OAAO,KAAK,CAAC;YACf,CAAC;YACD,oCAAoC;YACpC,OAAO,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,GAAG,CAAC,CAAC;QAC7D,CAAC,CAAC;aACD,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;YACf,oBAAoB;YACpB,MAAM,aAAa,GAAG,YAAY,CAAC,OAAO,CAAC,IAAI,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;YAEvE,4CAA4C;YAC5C,IAAI,aAAa,IAAI,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC9D,uCACK,OAAO,KACV,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,EACpB,QAAQ,EAAE,mBAAmB,EAC7B,YAAY,EAAE,SAAS,EACvB,cAAc,EAAE,aAAa,IAC7B;YACJ,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC,CAAC;aACD,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,KAAK,IAAI,CAAC;aACrC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAE,CAAC,EAAG,CAAC,GAAG,UAAU,CAAC,CAAE,CAAC,EAAG,CAAC,CAAC,CAAC;QAE3D,OAAO,IAAA,yBAAiB,EAAC,iBAAiB,CAAC,CAAC;IAC9C,CAAC,CAAA;IAED,GAAG,EAAE,CAAO,OAAO,EAAE,EAAE;;QACrB,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,IAAmB,CAAC;QACxD,MAAM,QAAQ,GAAG,MAAC,OAAO,CAAC,UAAU,CAAC,QAAqB,mCAAI,EAAE,CAAC;QACjE,MAAM,QAAQ,GAAG,MAAC,OAAO,CAAC,UAAU,CAAC,QAAqB,mCAAI,EAAE,CAAC;QACjE,MAAM,IAAI,GAAG,OAAO,CAAC,UAAU,CAAC,IAAc,CAAC;QAE/C,0CAA0C;QAC1C,IACE,CAAC,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,EACxE,CAAC;YACD,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,sDAAsD;QACtD,IAAI,OAAO,CAAC,UAAU,CAAC,UAAU,IAAI,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YAC9D,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,sCAAsC;QACtC,IAAI,IAAI,IAAI,WAAW,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;YACnC,MAAM,aAAa,GAAG,YAAY,CAChC,WAAW,CAAC,KAAK,CAAC,IAAI,EACtB,IAAI,EACJ,QAAQ,CACT,CAAC;YAEF,IAAI,aAAa,IAAI,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC9D,mCAAmC;gBACnC,OAAO;oDAEA,WAAW,CAAC,KAAK,KACpB,cAAc,EAAE,aAAa;iBAEhC,CAAC;YACJ,CAAC;QACH,CAAC;QAED,OAAO,EAAE,CAAC;IACZ,CAAC,CAAA;CACF,CAAC,CAAC;AAEH;;GAEG;AACH,SAAS,YAAY,CACnB,IAAY,EACZ,SAAiB,EACjB,aAAuB;IAEvB,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,IAAI,CAAC;IACd,CAAC;IAED,wCAAwC;IACxC,MAAM,YAAY,GAAG,IAAI,MAAM,CAAC,KAAK,SAAS,WAAW,EAAE,GAAG,CAAC,CAAC;IAChE,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IAE9C,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,qCAAqC;IACrC,MAAM,WAAW,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAE3C,0EAA0E;IAC1E,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACvC,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IACvC,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAE5B,gCAAgC;IAChC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QACrC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO;QACL,OAAO;QACP,IAAI;KACL,CAAC;AACJ,CAAC"}
|