From 55c2f337bee81dd674f105deb232df1df16b34af Mon Sep 17 00:00:00 2001 From: Fleny Date: Thu, 20 Aug 2026 13:47:47 +0200 Subject: [PATCH] feat: integration partial transformer --- packages/bot/src/transformers.ts | 14 +++- packages/bot/src/transformers/integration.ts | 86 ++++++++++++-------- packages/bot/src/transformers/types.ts | 2 +- 3 files changed, 65 insertions(+), 37 deletions(-) diff --git a/packages/bot/src/transformers.ts b/packages/bot/src/transformers.ts index 8d1031570..cd6936421 100644 --- a/packages/bot/src/transformers.ts +++ b/packages/bot/src/transformers.ts @@ -40,6 +40,8 @@ import type { DiscordGuildWidget, DiscordGuildWidgetSettings, DiscordIncidentsData, + DiscordIntegrationAccount, + DiscordIntegrationApplication, DiscordIntegrationCreateUpdate, DiscordInteraction, DiscordInteractionCallback, @@ -129,7 +131,7 @@ import { transformEntitlement } from './transformers/entitlement.js'; import { transformGatewayBot, transformSessionStartLimit } from './transformers/gatewayBot.js'; import { transformGuild } from './transformers/guild.js'; import { transformIncidentsData } from './transformers/incidentsData.js'; -import { transformIntegration } from './transformers/integration.js'; +import { transformIntegration, transformIntegrationAccount, transformIntegrationApplication } from './transformers/integration.js'; import { transformInteraction, transformInteractionCallback, @@ -220,6 +222,8 @@ import type { GuildWidgetSettings, IncidentsData, Integration, + IntegrationAccount, + IntegrationApplication, Interaction, InteractionCallback, InteractionCallbackResponse, @@ -314,7 +318,9 @@ export type TransformerInformations = { guildOnboardingPrompt: TransformerInformation; guildOnboardingPromptOption: TransformerInformation; incidentsData: TransformerInformation; - integration: TransformerInformation; + integration: TransformerInformation; + integrationAccount: TransformerInformation; + integrationApplication: TransformerInformation; interaction: TransformerInformation; interactionCallback: TransformerInformation; interactionCallbackResponse: TransformerInformation; @@ -447,6 +453,8 @@ export function createTransformers, extra?: { partial?: boolean }) { + const integration = {} as SetupDesiredProps; - return bot.transformers.customizers.integration(bot, payload, integration); + if (payload.guild_id) integration.guildId = bot.transformers.snowflake(payload.guild_id); + if (payload.id) integration.id = bot.transformers.snowflake(payload.id); + if (payload.name) integration.name = payload.name; + if (payload.type) integration.type = payload.type; + if (payload.enabled) integration.enabled = payload.enabled; + if (payload.syncing) integration.syncing = payload.syncing; + if (payload.role_id) integration.roleId = bot.transformers.snowflake(payload.role_id); + if (payload.enable_emoticons) integration.enableEmoticons = payload.enable_emoticons; + if (payload.expire_behavior) integration.expireBehavior = payload.expire_behavior; + if (payload.expire_grace_period) integration.expireGracePeriod = payload.expire_grace_period; + if (payload.user) integration.user = bot.transformers.user(bot, payload.user); + if (payload.account) integration.account = bot.transformers.integrationAccount(bot, payload.account); + if (payload.synced_at) integration.syncedAt = Date.parse(payload.synced_at); + if (payload.subscriber_count) integration.subscriberCount = payload.subscriber_count; + if (payload.revoked) integration.revoked = payload.revoked; + if (payload.application) integration.application = bot.transformers.integrationApplication(bot, payload.application); + if (payload.scopes) integration.scopes = payload.scopes; + + return callCustomizer('integration', bot, payload, integration, { + partial: extra?.partial ?? false, + }); +} + +export function transformIntegrationAccount(bot: Bot, payload: Partial, extra?: { partial?: boolean }) { + const integrationAccount = {} as SetupDesiredProps; + + if (payload.id !== undefined) integrationAccount.id = bot.transformers.snowflake(payload.id); + if (payload.name !== undefined) integrationAccount.name = payload.name; + + return callCustomizer('integrationAccount', bot, payload, integrationAccount, { + partial: extra?.partial ?? false, + }); +} + +export function transformIntegrationApplication(bot: Bot, payload: Partial, extra?: { partial?: boolean }) { + const integrationApplication = {} as SetupDesiredProps; + + if (payload.id !== undefined) integrationApplication.id = bot.transformers.snowflake(payload.id); + if (payload.name !== undefined) integrationApplication.name = payload.name; + if (payload.description !== undefined) integrationApplication.description = payload.description; + if (payload.icon !== undefined) integrationApplication.icon = payload.icon ? iconHashToBigInt(payload.icon) : undefined; + if (payload.bot !== undefined) integrationApplication.bot = bot.transformers.user(bot, payload.bot); + + return callCustomizer('integrationApplication', bot, payload, integrationApplication, { + partial: extra?.partial ?? false, + }); } diff --git a/packages/bot/src/transformers/types.ts b/packages/bot/src/transformers/types.ts index 94055655d..efbe03b7f 100644 --- a/packages/bot/src/transformers/types.ts +++ b/packages/bot/src/transformers/types.ts @@ -1048,7 +1048,7 @@ export interface Integration { id: bigint; name: string; guildId: bigint; - type: 'twitch' | 'youtube' | 'discord'; + type: 'twitch' | 'youtube' | 'discord' | 'guild_subscription'; account: IntegrationAccount; scopes: OAuth2Scope[]; }