diff --git a/packages/backend/src/apps/discord/actions/create-new-event/index.ts b/packages/backend/src/apps/discord/actions/create-new-event/index.ts deleted file mode 100644 index aff73256..00000000 --- a/packages/backend/src/apps/discord/actions/create-new-event/index.ts +++ /dev/null @@ -1,152 +0,0 @@ -import defineAction from '../../../../helpers/define-action'; - -export default defineAction({ - name: 'Create a new event', - key: 'createNewEvent', - description: 'Creates a new event', - arguments: [ - { - label: 'Type', - key: 'entity_type', - type: 'dropdown' as const, - required: true, - description: 'The name of the event.', - variables: true, - options: [ - {label: 'Stage-Channel', value: 1}, - {label: 'Voicechannel', value: 2}, - {label: 'External', value: 3} - ] - }, - { - label: 'Privacy level', - key: 'privacy_level', - type: 'dropdown' as const, - required: true, - description: 'The privacy level of the event', - variables: true, - options: [ - {label: 'Public', value: 1}, - {label: 'Private', value: 2} - ], - }, - { - label: 'Name', - key: 'name', - type: 'string' as const, - required: true, - description: 'The name of the event.', - variables: true, - }, - { - label: 'Description', - key: 'description', - type: 'string' as const, - required: false, - description: 'The description of the event.', - variables: true, - }, - { - label: 'Start-Time', - key: 'scheduled_start_time', - type: 'string' as const, - required: true, - description: 'The time the event will start [ISO8601]', - variables: true, - }, - { - label: 'End-Time', - key: 'scheduled_end_time', - type: 'string' as const, - required: false, - description: 'The time the event will end [ISO8601]. This will be cleared if type is NOT EXTERNAL', - variables: true, - }, - { - label: 'Channel', - key: 'channel_id', - type: 'dropdown' as const, - required: false, - description: 'Pick a voice or stage channel to link the event to. This will be cleared if type is EXTERNAL', - variables: true, - source: { - type: 'query', - name: 'getDynamicData', - arguments: [ - { - name: 'key', - value: 'listVoiceChannels', - }, - ], - }, - }, - { - label: 'Location', - key: 'location', - type: 'string' as const, - required: false, - description: 'The location of the event (1-100 characters). This will be cleared if type is NOT EXTERNAL', - variables: true, - }, - { - label: 'Image', - key: 'image', - type: 'string' as const, - required: false, - description: 'Image as DataURI scheme [data:image/;base64,BASE64_ENCODED__IMAGE_DATA]', - variables: true, - }, - ], - - async run($) { - - type entity_metadata = { - location: string - } - - type guild_event = { - channel_id: number, - name: string, - privacy_level: number, - scheduled_start_time: string, - scheduled_end_time?: string, - description?: string, - entity_type?: number, - entity_metadata?: entity_metadata, - image?: string, //data:image/jpeg;base64,BASE64_ENCODED_JPEG_IMAGE_DATA - } - - - const data : guild_event = { - channel_id: $.step.parameters.channel_id as number, - name: $.step.parameters.name as string, - privacy_level: $.step.parameters.privacy_level as number, - scheduled_start_time: $.step.parameters.scheduled_start_time as string, - scheduled_end_time: $.step.parameters.scheduled_end_time as string, - description: $.step.parameters.description as string, - entity_type: $.step.parameters.entity_type as number, - image: $.step.parameters.image as string, - }; - - // modifications depending on whether event type is set to EXTERNAL or not - if($.step.parameters.entity_type === 3) { - // entity_metadata must not be added unless type is EXTERNAL - const entity_metadata = { - location: $.step.parameters.location as string, - } - // add metadata, clear channel if EXTERNAL - data.entity_metadata = entity_metadata; - data.channel_id = null; - } else { - // clear end_time if it's not EXTERNAL - data.scheduled_end_time = null; - } - - const response = await $.http?.post( - `/guilds/${$.auth.data.guildId}/scheduled-events`, - data - ); - - $.setActionItem({ raw: response.data }); - }, -}); diff --git a/packages/backend/src/apps/discord/actions/create-new-scheduled-event/index.ts b/packages/backend/src/apps/discord/actions/create-new-scheduled-event/index.ts new file mode 100644 index 00000000..0b34d79a --- /dev/null +++ b/packages/backend/src/apps/discord/actions/create-new-scheduled-event/index.ts @@ -0,0 +1,102 @@ +import defineAction from '../../../../helpers/define-action'; + +export default defineAction({ + name: 'Create a new scheduled event', + key: 'createNewScheduledEvent', + description: 'Creates a new event', + arguments: [ + { + label: 'Type', + key: 'entityType', + type: 'dropdown' as const, + required: true, + variables: true, + options: [ + { label: 'Stage channel', value: 1 }, + { label: 'Voice channel', value: 2 }, + { label: 'External', value: 3 } + ], + additionalFields: { + type: 'query', + name: 'getDynamicFields', + arguments: [ + { + name: 'key', + value: 'listExternalScheduledEventFields', + }, + { + name: 'parameters.entityType', + value: '{parameters.entityType}', + }, + ], + }, + }, + { + label: 'Name', + key: 'name', + type: 'string' as const, + required: true, + variables: true, + }, + { + label: 'Description', + key: 'description', + type: 'string' as const, + required: false, + variables: true, + }, + { + label: 'Image', + key: 'image', + type: 'string' as const, + required: false, + description: 'Image as DataURI scheme [data:image/;base64,BASE64_ENCODED__IMAGE_DATA]', + variables: true, + }, + ], + + async run($) { + type entity_metadata = { + location: string + } + + type guild_event = { + channel_id: number, + name: string, + privacy_level: number, + scheduled_start_time: string, + scheduled_end_time?: string, + description?: string, + entity_type?: number, + entity_metadata?: entity_metadata, + image?: string, //data:image/jpeg;base64,BASE64_ENCODED_JPEG_IMAGE_DATA + } + + + const data: guild_event = { + channel_id: $.step.parameters.channel_id as number, + name: $.step.parameters.name as string, + privacy_level: 2, + scheduled_start_time: $.step.parameters.scheduledStartTime as string, + scheduled_end_time: $.step.parameters.scheduledEndTime as string, + description: $.step.parameters.description as string, + entity_type: $.step.parameters.entityType as number, + image: $.step.parameters.image as string, + }; + + const isExternal = $.step.parameters.entityType === 3; + if (isExternal) { + data.entity_metadata = { + location: $.step.parameters.location as string, + }; + data.channel_id = null; + } + + const response = await $.http?.post( + `/guilds/${$.auth.data.guildId}/scheduled-events`, + data + ); + + $.setActionItem({ raw: response.data }); + }, +}); diff --git a/packages/backend/src/apps/discord/actions/index.ts b/packages/backend/src/apps/discord/actions/index.ts index bfac3994..5265ec56 100644 --- a/packages/backend/src/apps/discord/actions/index.ts +++ b/packages/backend/src/apps/discord/actions/index.ts @@ -1,4 +1,4 @@ import sendMessageToChannel from './send-message-to-channel'; -import createNewEvent from './create-new-event'; +import createNewScheduledEvent from './create-new-scheduled-event'; -export default [sendMessageToChannel, createNewEvent]; \ No newline at end of file +export default [sendMessageToChannel, createNewScheduledEvent]; diff --git a/packages/backend/src/apps/discord/dynamic-fields/index.ts b/packages/backend/src/apps/discord/dynamic-fields/index.ts new file mode 100644 index 00000000..3b0735da --- /dev/null +++ b/packages/backend/src/apps/discord/dynamic-fields/index.ts @@ -0,0 +1,3 @@ +import listExternalScheduledEventFields from './list-external-scheduled-event-fields'; + +export default [listExternalScheduledEventFields]; diff --git a/packages/backend/src/apps/discord/dynamic-fields/list-external-scheduled-event-fields/index.ts b/packages/backend/src/apps/discord/dynamic-fields/list-external-scheduled-event-fields/index.ts new file mode 100644 index 00000000..1f935a53 --- /dev/null +++ b/packages/backend/src/apps/discord/dynamic-fields/list-external-scheduled-event-fields/index.ts @@ -0,0 +1,83 @@ +import { IGlobalVariable } from '@automatisch/types'; +export default { + name: 'List external scheduled event fields', + key: 'listExternalScheduledEventFields', + + async run($: IGlobalVariable) { + const isExternal = $.step.parameters.entityType === 3; + + if (isExternal) { + return [ + { + label: 'Location', + key: 'location', + type: 'string' as const, + required: true, + description: 'The location of the event (1-100 characters). This will be omitted if type is NOT EXTERNAL', + variables: true, + }, + { + label: 'Start-Time', + key: 'scheduledStartTime', + type: 'string' as const, + required: true, + description: 'The time the event will start [ISO8601]', + variables: true, + }, + { + label: 'End-Time', + key: 'scheduledEndTime', + type: 'string' as const, + required: true, + description: 'The time the event will end [ISO8601]. This will be omitted if type is NOT EXTERNAL', + variables: true, + }, + ]; + } + + return [ + { + label: 'Channel', + key: 'channel_id', + type: 'dropdown' as const, + required: true, + description: 'Pick a voice or stage channel to link the event to. This will be omitted if type is EXTERNAL', + variables: true, + source: { + type: 'query', + name: 'getDynamicData', + arguments: [ + { + name: 'key', + value: 'listVoiceChannels', + }, + ], + }, + }, + { + label: 'Location', + key: 'location', + type: 'string' as const, + required: false, + description: 'The location of the event (1-100 characters). This will be omitted if type is NOT EXTERNAL', + variables: true, + }, + { + label: 'Start-Time', + key: 'scheduledStartTime', + type: 'string' as const, + required: true, + description: 'The time the event will start [ISO8601]', + variables: true, + }, + { + label: 'End-Time', + key: 'scheduledEndTime', + type: 'string' as const, + required: false, + description: 'The time the event will end [ISO8601]. This will be omitted if type is NOT EXTERNAL', + variables: true, + }, + ]; + }, +}; diff --git a/packages/backend/src/apps/discord/index.ts b/packages/backend/src/apps/discord/index.ts index 67c0294f..918138cf 100644 --- a/packages/backend/src/apps/discord/index.ts +++ b/packages/backend/src/apps/discord/index.ts @@ -4,6 +4,7 @@ import auth from './auth'; import dynamicData from './dynamic-data'; import actions from './actions'; import triggers from './triggers'; +import dynamicFields from './dynamic-fields'; export default defineApp({ name: 'Discord', @@ -17,6 +18,7 @@ export default defineApp({ beforeRequest: [addAuthHeader], auth, dynamicData, + dynamicFields, triggers, actions, }); diff --git a/packages/docs/pages/apps/discord/actions.md b/packages/docs/pages/apps/discord/actions.md index 2e9913c9..527ff65e 100644 --- a/packages/docs/pages/apps/discord/actions.md +++ b/packages/docs/pages/apps/discord/actions.md @@ -3,8 +3,8 @@ favicon: /favicons/discord.svg items: - name: Send a message to channel desc: Sends a message to a specific channel you specify. - - name: Create a new event - desc: Creates a new server event. + - name: Create a new scheduled event + desc: Creates a new scheduled event. ---