feat: integration partial transformer

This commit is contained in:
Fleny
2026-08-20 13:47:47 +02:00
parent 29303704f4
commit 55c2f337be
3 changed files with 65 additions and 37 deletions
+12 -2
View File
@@ -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<DiscordGuildOnboardingPrompt, GuildOnboardingPrompt, true>;
guildOnboardingPromptOption: TransformerInformation<DiscordGuildOnboardingPromptOption, GuildOnboardingPromptOption, true>;
incidentsData: TransformerInformation<DiscordIncidentsData, IncidentsData, true>;
integration: TransformerInformation<DiscordIntegrationCreateUpdate, Integration, false>;
integration: TransformerInformation<DiscordIntegrationCreateUpdate, Integration, true>;
integrationAccount: TransformerInformation<DiscordIntegrationAccount, IntegrationAccount, true>;
integrationApplication: TransformerInformation<DiscordIntegrationApplication, IntegrationApplication, true>;
interaction: TransformerInformation<DiscordInteraction, Interaction, true, { shardId?: number }>;
interactionCallback: TransformerInformation<DiscordInteractionCallback, InteractionCallback, true>;
interactionCallbackResponse: TransformerInformation<DiscordInteractionCallbackResponse, InteractionCallbackResponse, true, { shardId?: number }>;
@@ -447,6 +453,8 @@ export function createTransformers<TProps extends TransformersDesiredProperties,
guildOnboardingPromptOption: _options.customizers?.guildOnboardingPromptOption ?? defaultCustomizer,
incidentsData: _options.customizers?.incidentsData ?? defaultCustomizer,
integration: _options.customizers?.integration ?? defaultCustomizer,
integrationAccount: _options.customizers?.integrationAccount ?? defaultCustomizer,
integrationApplication: _options.customizers?.integrationApplication ?? defaultCustomizer,
interaction: _options.customizers?.interaction ?? defaultCustomizer,
interactionCallback: _options.customizers?.interactionCallback ?? defaultCustomizer,
interactionCallbackResponse: _options.customizers?.interactionCallbackResponse ?? defaultCustomizer,
@@ -557,6 +565,8 @@ export function createTransformers<TProps extends TransformersDesiredProperties,
guildOnboardingPromptOption: _options.guildOnboardingPromptOption ?? transformGuildOnboardingPromptOption,
incidentsData: _options.incidentsData ?? transformIncidentsData,
integration: _options.integration ?? transformIntegration,
integrationAccount: _options.integrationAccount ?? transformIntegrationAccount,
integrationApplication: _options.integrationApplication ?? transformIntegrationApplication,
interaction: _options.interaction ?? transformInteraction,
interactionCallback: _options.interactionCallback ?? transformInteractionCallback,
interactionCallbackResponse: _options.interactionCallbackResponse ?? transformInteractionCallbackResponse,
+52 -34
View File
@@ -1,39 +1,57 @@
import type { DiscordIntegrationCreateUpdate } from '@discordeno/types';
import type { DiscordIntegrationAccount, DiscordIntegrationApplication, DiscordIntegrationCreateUpdate } from '@discordeno/types';
import { iconHashToBigInt } from '@discordeno/utils';
import type { Bot } from '../bot.js';
import type { Integration } from './types.js';
import type { DesiredPropertiesBehavior, SetupDesiredProps, TransformersDesiredProperties } from '../desiredProperties.js';
import { callCustomizer } from '../transformers.js';
import type { Integration, IntegrationAccount, IntegrationApplication } from './types.js';
export function transformIntegration(bot: Bot, payload: DiscordIntegrationCreateUpdate) {
const integration = {
guildId: bot.transformers.snowflake(payload.guild_id),
id: bot.transformers.snowflake(payload.id),
name: payload.name,
type: payload.type,
enabled: payload.enabled,
syncing: payload.syncing,
roleId: payload.role_id ? bot.transformers.snowflake(payload.role_id) : undefined,
enableEmoticons: payload.enable_emoticons,
expireBehavior: payload.expire_behavior,
expireGracePeriod: payload.expire_grace_period,
user: payload.user ? bot.transformers.user(bot, payload.user) : undefined,
account: {
id: bot.transformers.snowflake(payload.account.id),
name: payload.account.name,
},
syncedAt: payload.synced_at ? Date.parse(payload.synced_at) : undefined,
subscriberCount: payload.subscriber_count,
revoked: payload.revoked,
application: payload.application
? {
id: bot.transformers.snowflake(payload.application.id),
name: payload.application.name,
icon: payload.application.icon ? iconHashToBigInt(payload.application.icon) : undefined,
description: payload.application.description,
bot: payload.application.bot ? bot.transformers.user(bot, payload.application.bot) : undefined,
}
: undefined,
scopes: payload.scopes,
} as Integration;
export function transformIntegration(bot: Bot, payload: Partial<DiscordIntegrationCreateUpdate>, extra?: { partial?: boolean }) {
const integration = {} as SetupDesiredProps<Integration, TransformersDesiredProperties, DesiredPropertiesBehavior>;
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<DiscordIntegrationAccount>, extra?: { partial?: boolean }) {
const integrationAccount = {} as SetupDesiredProps<IntegrationAccount, TransformersDesiredProperties, DesiredPropertiesBehavior>;
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<DiscordIntegrationApplication>, extra?: { partial?: boolean }) {
const integrationApplication = {} as SetupDesiredProps<IntegrationApplication, TransformersDesiredProperties, DesiredPropertiesBehavior>;
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,
});
}
+1 -1
View File
@@ -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[];
}