diff --git a/packages/pieces/community/slack/package.json b/packages/pieces/community/slack/package.json index 5c246bced3d..3b174283ab1 100644 --- a/packages/pieces/community/slack/package.json +++ b/packages/pieces/community/slack/package.json @@ -1,6 +1,6 @@ { "name": "@activepieces/piece-slack", - "version": "0.12.2", + "version": "0.12.3", "dependencies": { "@slack/web-api": "7.9.0", "slackify-markdown": "4.4.0" diff --git a/packages/pieces/community/slack/src/lib/actions/invite-user-to-channel.ts b/packages/pieces/community/slack/src/lib/actions/invite-user-to-channel.ts index 314ba4ce520..af3ed2b2ed1 100644 --- a/packages/pieces/community/slack/src/lib/actions/invite-user-to-channel.ts +++ b/packages/pieces/community/slack/src/lib/actions/invite-user-to-channel.ts @@ -11,7 +11,7 @@ export const inviteUserToChannelAction = createAction({ props: { info: singleSelectChannelInfo, channel: slackChannel(true), - userId, + userId: userId(true), }, async run(context) { const client = new WebClient(context.auth.access_token); diff --git a/packages/pieces/community/slack/src/lib/actions/request-action-direct-message.ts b/packages/pieces/community/slack/src/lib/actions/request-action-direct-message.ts index 4cc677b6c2e..0054c6c9f26 100644 --- a/packages/pieces/community/slack/src/lib/actions/request-action-direct-message.ts +++ b/packages/pieces/community/slack/src/lib/actions/request-action-direct-message.ts @@ -18,7 +18,7 @@ export const requestActionDirectMessageAction = createAction({ description: 'Send a message to a user and wait until the user selects an action', props: { - userId, + userId: userId(true), text, actions, username, diff --git a/packages/pieces/community/slack/src/lib/actions/request-approval-direct-message.ts b/packages/pieces/community/slack/src/lib/actions/request-approval-direct-message.ts index 96954caa18a..489b31e1b81 100644 --- a/packages/pieces/community/slack/src/lib/actions/request-approval-direct-message.ts +++ b/packages/pieces/community/slack/src/lib/actions/request-approval-direct-message.ts @@ -16,7 +16,7 @@ export const requestApprovalDirectMessageAction = createAction({ description: 'Send approval message to a user and then wait until the message is approved or disapproved', props: { - userId, + userId: userId(true), text, username, profilePicture, diff --git a/packages/pieces/community/slack/src/lib/actions/send-direct-message-action.ts b/packages/pieces/community/slack/src/lib/actions/send-direct-message-action.ts index 18171eb2011..ba7dd91fef4 100644 --- a/packages/pieces/community/slack/src/lib/actions/send-direct-message-action.ts +++ b/packages/pieces/community/slack/src/lib/actions/send-direct-message-action.ts @@ -20,7 +20,7 @@ export const slackSendDirectMessageAction = createAction({ displayName: 'Send Message To A User', description: 'Send message to a user', props: { - userId, + userId: userId(true), text, username, profilePicture, diff --git a/packages/pieces/community/slack/src/lib/common/props.ts b/packages/pieces/community/slack/src/lib/common/props.ts index 4e893ed3564..95d42b872a2 100644 --- a/packages/pieces/community/slack/src/lib/common/props.ts +++ b/packages/pieces/community/slack/src/lib/common/props.ts @@ -90,45 +90,46 @@ export const blocks = Property.Json({ defaultValue: [] }); -export const userId = Property.Dropdown({ - auth: slackAuth, - displayName: 'User', - required: true, - refreshers: [], - async options({ auth }) { - if (!auth) { - return { - disabled: true, - placeholder: 'connect slack account', - options: [], - }; - } +export const userId = (required: R) => + Property.Dropdown({ + auth: slackAuth, + displayName: 'User', + required, + refreshers: [], + async options({ auth }) { + if (!auth) { + return { + disabled: true, + placeholder: 'connect slack account', + options: [], + }; + } - const accessToken = (auth as OAuth2PropertyValue).access_token; - - const client = new WebClient(accessToken); - const users: { label: string; value: string }[] = []; - for await (const page of client.paginate('users.list', { - limit: 1000, // Only limits page size, not total number of results - })) { - const response = page as UsersListResponse; - if (response.members) { - users.push( - ...response.members - .filter((member) => !member.deleted) - .map((member) => { - return { label: member.name || '', value: member.id || '' }; - }) - ); + const accessToken = (auth as OAuth2PropertyValue).access_token; + + const client = new WebClient(accessToken); + const users: { label: string; value: string }[] = []; + for await (const page of client.paginate('users.list', { + limit: 1000, // Only limits page size, not total number of results + })) { + const response = page as UsersListResponse; + if (response.members) { + users.push( + ...response.members + .filter((member) => !member.deleted) + .map((member) => { + return { label: member.name || '', value: member.id || '' }; + }) + ); + } } - } - return { - disabled: false, - placeholder: 'Select User', - options: users, - }; - }, -}); + return { + disabled: false, + placeholder: 'Select User', + options: users, + }; + }, + }); export const text = Property.LongText({ displayName: 'Message', diff --git a/packages/pieces/community/slack/src/lib/triggers/new-command-in-direct-message.ts b/packages/pieces/community/slack/src/lib/triggers/new-command-in-direct-message.ts index 2f2ae843483..6cbe055816d 100644 --- a/packages/pieces/community/slack/src/lib/triggers/new-command-in-direct-message.ts +++ b/packages/pieces/community/slack/src/lib/triggers/new-command-in-direct-message.ts @@ -14,7 +14,7 @@ export const newCommandInDirectMessageTrigger = createTrigger({ description: 'Triggers when a specific command is sent to the bot (e.g., @bot command arg1 arg2) via Direct Message.', props: { - user: userId, + user: userId(true), commands: Property.Array({ displayName: 'Commands', description: diff --git a/packages/pieces/community/slack/src/lib/triggers/new-command.ts b/packages/pieces/community/slack/src/lib/triggers/new-command.ts index 584d11dafb3..22c1331eb05 100644 --- a/packages/pieces/community/slack/src/lib/triggers/new-command.ts +++ b/packages/pieces/community/slack/src/lib/triggers/new-command.ts @@ -16,7 +16,7 @@ export const newCommand = createTrigger({ 'Triggers when a specific command is sent to the bot (e.g., @bot command arg1 arg2)', props: { info: multiSelectChannelInfo, - user: userId, + user: userId(true), commands: Property.Array({ displayName: 'Commands', description: diff --git a/packages/pieces/community/slack/src/lib/triggers/new-mention-in-direct-message.ts b/packages/pieces/community/slack/src/lib/triggers/new-mention-in-direct-message.ts index acd165104bc..267127fafd7 100644 --- a/packages/pieces/community/slack/src/lib/triggers/new-mention-in-direct-message.ts +++ b/packages/pieces/community/slack/src/lib/triggers/new-mention-in-direct-message.ts @@ -13,7 +13,7 @@ export const newMentionInDirectMessageTrigger = createTrigger({ description: 'Triggers when a username is mentioned in a direct message channel.', props: { - user: userId, + user: userId(true), ignoreBots: Property.Checkbox({ displayName: 'Ignore Bot Messages ?', required: true, diff --git a/packages/pieces/community/slack/src/lib/triggers/new-mention.ts b/packages/pieces/community/slack/src/lib/triggers/new-mention.ts index e478dce9d30..b1ebe558967 100644 --- a/packages/pieces/community/slack/src/lib/triggers/new-mention.ts +++ b/packages/pieces/community/slack/src/lib/triggers/new-mention.ts @@ -14,7 +14,7 @@ export const newMention = createTrigger({ description: 'Triggers when a username is mentioned.', props: { info: multiSelectChannelInfo, - user: userId, + user: userId(true), channels: Property.MultiSelectDropdown({ auth: slackAuth, displayName: 'Channels', diff --git a/packages/pieces/community/slack/src/lib/triggers/new-reaction-added.ts b/packages/pieces/community/slack/src/lib/triggers/new-reaction-added.ts index a9dc7c576fb..dd1e969660d 100644 --- a/packages/pieces/community/slack/src/lib/triggers/new-reaction-added.ts +++ b/packages/pieces/community/slack/src/lib/triggers/new-reaction-added.ts @@ -5,7 +5,7 @@ import { createTrigger, } from '@activepieces/pieces-framework'; import { slackAuth } from '../../'; -import { getChannels, multiSelectChannelInfo } from '../common/props'; +import { getChannels, multiSelectChannelInfo, userId } from '../common/props'; export const newReactionAdded = createTrigger({ @@ -20,6 +20,7 @@ export const newReactionAdded = createTrigger({ description: 'Select emojis to trigger on', required: false, }), + user: userId(false), channels: Property.MultiSelectDropdown({ auth: slackAuth, displayName: 'Channels', @@ -67,6 +68,11 @@ export const newReactionAdded = createTrigger({ const payloadBody = context.payload.body as PayloadBody; const channels = (context.propsValue.channels as string[]) ?? []; + // Filter by user if specified + if (context.propsValue.user && payloadBody.event.user !== context.propsValue.user) { + return []; + } + // Filter by emoji if specified if (context.propsValue.emojis) { if (!context.propsValue.emojis.includes(payloadBody.event.reaction)) { @@ -85,6 +91,7 @@ export const newReactionAdded = createTrigger({ type PayloadBody = { event: { + user: string; reaction: string; item: { channel: string;