From 0530f7de01deca17a71f97f4cc4e6b50eb8425b4 Mon Sep 17 00:00:00 2001 From: Olivier Sambourg Date: Thu, 6 Nov 2025 10:58:12 +0100 Subject: [PATCH] feat(slack): allow multi channel filter for new message trigger --- packages/pieces/community/slack/package.json | 2 +- .../lib/triggers/new-message-in-channel.ts | 6 +-- .../slack/src/lib/triggers/new-message.ts | 40 +++++++++++++++++-- 3 files changed, 41 insertions(+), 7 deletions(-) diff --git a/packages/pieces/community/slack/package.json b/packages/pieces/community/slack/package.json index 18b3819067d..edfde69e151 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.10.15", + "version": "0.10.16", "dependencies": { "@slack/web-api": "7.9.0", "slackify-markdown": "4.4.0" diff --git a/packages/pieces/community/slack/src/lib/triggers/new-message-in-channel.ts b/packages/pieces/community/slack/src/lib/triggers/new-message-in-channel.ts index 2b891b5de04..bc3b85ad052 100644 --- a/packages/pieces/community/slack/src/lib/triggers/new-message-in-channel.ts +++ b/packages/pieces/community/slack/src/lib/triggers/new-message-in-channel.ts @@ -10,8 +10,8 @@ import { getFirstFiveOrAll } from '../common/utils'; export const newMessageInChannelTrigger = createTrigger({ auth: slackAuth, name: 'new-message-in-channel', - displayName: 'New Message Posted to Channel', - description: 'Triggers when a new message is posted to a specific #channel you choose.', + displayName: 'New Message Posted to Channel (DEPRECATED)', + description: 'Triggers when a new message is posted to a specific #channel you choose. This trigger is deprecated: use the "New message posted" trigger instead', props: { info: singleSelectChannelInfo, channel: slackChannel(true), @@ -42,7 +42,7 @@ export const newMessageInChannelTrigger = createTrigger({ if (!['channel','group'].includes(payloadBody.event.channel_type)) { return []; } - + if (payloadBody.event.channel === context.propsValue.channel) { // check for bot messages if (context.propsValue.ignoreBots && payloadBody.event.bot_id) { diff --git a/packages/pieces/community/slack/src/lib/triggers/new-message.ts b/packages/pieces/community/slack/src/lib/triggers/new-message.ts index 5b92ba83dd8..cfd7ccf3b53 100644 --- a/packages/pieces/community/slack/src/lib/triggers/new-message.ts +++ b/packages/pieces/community/slack/src/lib/triggers/new-message.ts @@ -1,12 +1,41 @@ -import { Property, TriggerStrategy, createTrigger } from '@activepieces/pieces-framework'; +import { + Property, + TriggerStrategy, + createTrigger, + OAuth2PropertyValue, +} from '@activepieces/pieces-framework'; import { slackAuth } from '../../'; +import { getChannels } from '../common/props'; export const newMessageTrigger = createTrigger({ auth: slackAuth, name: 'new-message', - displayName: 'New Public Message Posted Anywhere', - description: 'Triggers when a new message is posted to any channel.', + displayName: 'New message posted', + description: 'Triggers when a new message is posted (optionally on one or more channels)', props: { + channels: Property.MultiSelectDropdown({ + displayName: 'Channels', + description: + 'If no channel is selected, the flow will be triggered for messages in all channels', + required: false, + refreshers: [], + async options({ auth }) { + if (!auth) { + return { + disabled: true, + placeholder: 'connect slack account', + options: [], + }; + } + const authentication = auth as OAuth2PropertyValue; + const channels = await getChannels(authentication['access_token']); + return { + disabled: false, + placeholder: 'Select channel(s)', + options: channels, + }; + }, + }), ignoreBots: Property.Checkbox({ displayName: 'Ignore Bot Messages ?', required: true, @@ -35,6 +64,11 @@ export const newMessageTrigger = createTrigger({ return []; } + // check if the channel is among one of the requested ones + if (context.propsValue.channels && !context.propsValue.channels.includes(payloadBody.event.channel)) { + return [] + } + // check for bot messages if (context.propsValue.ignoreBots && payloadBody.event.bot_id) { return [];