Skip to main content
Glama

mcp-google-sheets

new-command.ts3.44 kB
import { OAuth2PropertyValue, Property, TriggerStrategy, createTrigger, } from '@activepieces/pieces-framework'; import { getChannels, multiSelectChannelInfo, userId } from '../common/props'; import { slackAuth } from '../../'; import { parseCommand } from '../common/utils'; export const newCommand = createTrigger({ auth: slackAuth, name: 'new_command', displayName: 'New Command in Channel', description: 'Triggers when a specific command is sent to the bot (e.g., @bot command arg1 arg2)', props: { info: multiSelectChannelInfo, user: userId, commands: Property.Array({ displayName: 'Commands', description: 'List of valid commands that the bot should respond to (e.g., help, ocr, remind)', required: true, defaultValue: ['help'], }), channels: Property.MultiSelectDropdown({ displayName: 'Channels', description: 'If no channel is selected, the flow will be triggered for commands 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 accessToken = authentication['access_token']; const channels = await getChannels(accessToken); return { disabled: false, placeholder: 'Select channel', options: channels, }; }, }), ignoreBots: Property.Checkbox({ displayName: 'Ignore Bot Messages ?', required: true, defaultValue: true, }), }, type: TriggerStrategy.APP_WEBHOOK, sampleData: undefined, onEnable: async (context) => { // Older OAuth2 has team_id, newer has team.id const teamId = context.auth.data['team_id'] ?? context.auth.data['team']['id']; context.app.createListeners({ events: ['message'], identifierValue: teamId, }); }, onDisable: async (context) => { // Ignored }, run: async (context) => { const payloadBody = context.payload.body as PayloadBody; const channels = (context.propsValue.channels as string[]) ?? []; const commands = (context.propsValue.commands as string[]) ?? []; const user = context.propsValue.user as string; // check if it's channel message if (!['channel','group'].includes(payloadBody.event.channel_type)) { return []; } // Check if we should process this channel if ( !(channels.length === 0 || channels.includes(payloadBody.event.channel)) ) { return []; } // Check for bot messages if configured to ignore them if (context.propsValue.ignoreBots && payloadBody.event.bot_id) { return []; } // Check for mention and parse command if (user && payloadBody.event.text) { const parsedCommand = parseCommand( payloadBody.event.text, user, commands ); if (parsedCommand && commands.includes(parsedCommand.command)) { // Return event with parsed command return [ { ...payloadBody.event, parsed_command: parsedCommand, }, ]; } } return []; }, }); type PayloadBody = { event: { channel: string; bot_id?: string; text?: string; channel_type:string }; };

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/activepieces/activepieces'

If you have feedback or need assistance with the MCP directory API, please join our Discord server