mirror of
https://github.com/discordeno/discordeno.git
synced 2026-09-17 08:47:22 +00:00
* refactor(bot)!: setup desired properties for all transformers SetupDesiredProps when is given an object that does not corrispond to a transformer object that supports desired properties will behave like TransformProperty on the entire object as when it tries to get the properties for said object it will find `never` as the props and for `IsKeyDesired` a props of `never` means that all props are desired. * feat(transformers)!: Handle partials in transformers * Add expiresAt to invite create event * Use Equals helper, clean up a bit the code * Explicit the IsKeyDesired TProps never behavior * Fix type errors * format * Add all trasformer objects to bot.transformers.$inferredTypes * Use transfromerInformations for bot.transformers.$inferredTypes * code review * code review * fix component transformer * fix * Update packages/bot/src/transformers/types.ts * Fixes from Tri (+ GPT sol) code review --------- Co-authored-by: Link <link20050703@gmail.com>
43 lines
3.0 KiB
TypeScript
43 lines
3.0 KiB
TypeScript
import type { DiscordInviteMetadata } from '@discordeno/types';
|
|
import type { Bot } from '../bot.js';
|
|
import type { DesiredPropertiesBehavior, SetupDesiredProps, TransformersDesiredProperties } from '../desiredProperties.js';
|
|
import { callCustomizer } from '../transformers.js';
|
|
import { ToggleBitfield } from './toggles/ToggleBitfield.js';
|
|
import type { Invite } from './types.js';
|
|
|
|
export function transformInvite(bot: Bot, payload: Partial<DiscordInviteMetadata>, extra?: { shardId?: number; partial?: boolean }) {
|
|
const props = bot.transformers.desiredProperties.invite;
|
|
const invite = {} as SetupDesiredProps<Invite, TransformersDesiredProperties, DesiredPropertiesBehavior>;
|
|
|
|
if (props.type && payload.type !== undefined) invite.type = payload.type;
|
|
if (props.code && payload.code) invite.code = payload.code;
|
|
if (props.createdAt && payload.created_at) invite.createdAt = Date.parse(payload.created_at);
|
|
if (props.inviter && payload.inviter) invite.inviter = bot.transformers.user(bot, payload.inviter);
|
|
if (props.maxAge && payload.max_age !== undefined) invite.maxAge = payload.max_age;
|
|
if (props.maxUses && payload.max_uses !== undefined) invite.maxUses = payload.max_uses;
|
|
if (props.targetType && payload.target_type) invite.targetType = payload.target_type;
|
|
if (props.targetUser && payload.target_user) invite.targetUser = bot.transformers.user(bot, payload.target_user);
|
|
if (props.targetApplication && payload.target_application)
|
|
invite.targetApplication = bot.transformers.application(bot, payload.target_application, { shardId: extra?.shardId, partial: true });
|
|
if (props.temporary && payload.temporary) invite.temporary = payload.temporary;
|
|
if (props.uses && payload.uses !== undefined) invite.uses = payload.uses;
|
|
if (props.channelId && payload.channel?.id) invite.channelId = bot.transformers.snowflake(payload.channel.id);
|
|
if (props.guildId && payload.guild?.id) invite.guildId = bot.transformers.snowflake(payload.guild.id);
|
|
if (props.approximateMemberCount && payload.approximate_member_count) invite.approximateMemberCount = payload.approximate_member_count;
|
|
if (props.approximatePresenceCount && payload.approximate_presence_count !== undefined)
|
|
invite.approximatePresenceCount = payload.approximate_presence_count;
|
|
if (props.guildScheduledEvent && payload.guild_scheduled_event)
|
|
invite.guildScheduledEvent = bot.transformers.scheduledEvent(bot, payload.guild_scheduled_event);
|
|
if (props.expiresAt && payload.expires_at) invite.expiresAt = Date.parse(payload.expires_at);
|
|
if (props.flags && payload.flags) invite.flags = new ToggleBitfield(payload.flags);
|
|
if (props.roles && payload.roles) {
|
|
// Going from a Partial<T> To Pick<T, K> requires an as, as typescript can't guarantee that the properties exist on the partial
|
|
invite.roles = payload.roles.map((role) => bot.transformers.role(bot, role, { partial: true, guildId: payload.guild?.id })) as Invite['roles'];
|
|
}
|
|
|
|
return callCustomizer('invite', bot, payload, invite, {
|
|
shardId: extra?.shardId,
|
|
partial: extra?.partial ?? false,
|
|
});
|
|
}
|