diff --git a/packages/bot/src/transformers.ts b/packages/bot/src/transformers.ts index 2ece767d7..1ed622f9e 100644 --- a/packages/bot/src/transformers.ts +++ b/packages/bot/src/transformers.ts @@ -31,6 +31,7 @@ import type { DiscordInviteStageInstance, DiscordMember, DiscordMessage, + DiscordMessageCall, DiscordMessageInteractionMetadata, DiscordPoll, DiscordPollMedia, @@ -86,7 +87,14 @@ import { transformIntegration, type Integration } from './transformers/integrati import { transformInteraction, transformInteractionDataOption, type Interaction, type InteractionDataOption } from './transformers/interaction.js' import { transformInvite, type Invite } from './transformers/invite.js' import { transformMember, type Member } from './transformers/member.js' -import { transformMessage, type Message, type MessageInteractionMetadata, transformMessageInteractionMetadata } from './transformers/message.js' +import { + transformMessage, + transformMessageCall, + transformMessageInteractionMetadata, + type Message, + type MessageCall, + type MessageInteractionMetadata, +} from './transformers/message.js' import { transformGuildOnboarding, type GuildOnboarding } from './transformers/onboarding.js' import { transformPoll, transformPollMedia, type Poll, type PollMedia } from './transformers/poll.js' import { transformPresence, type PresenceUpdate } from './transformers/presence.js' @@ -122,6 +130,7 @@ export interface Transformers { interaction: (bot: Bot, payload: DiscordInteraction, interaction: Interaction) => any message: (bot: Bot, payload: DiscordMessage, message: Message) => any messageInteractionMetadata: (bot: Bot, payload: DiscordMessageInteractionMetadata, metadata: MessageInteractionMetadata) => any + messageCall: (bot: Bot, payload: DiscordMessageCall, call: MessageCall) => any user: (bot: Bot, payload: DiscordUser, user: User) => any member: (bot: Bot, payload: DiscordMember, member: Member) => any role: (bot: Bot, payload: DiscordRole, role: Role) => any @@ -380,6 +389,10 @@ export interface Transformers { thread: boolean type: boolean webhookId: boolean + call: { + participants: boolean + endedTimestamp: boolean + } } role: { name: boolean @@ -574,6 +587,7 @@ export interface Transformers { member: (bot: Bot, payload: DiscordMember, guildId: BigString, userId: BigString) => Member message: (bot: Bot, payload: DiscordMessage) => Message messageInteractionMetadata: (bot: Bot, payload: DiscordMessageInteractionMetadata) => MessageInteractionMetadata + messageCall: (bot: Bot, payload: DiscordMessageCall) => MessageCall role: (bot: Bot, payload: { role: DiscordRole } & { guildId: BigString }) => Role voiceState: (bot: Bot, payload: { voiceState: DiscordVoiceState } & { guildId: bigint }) => VoiceState interaction: (bot: Bot, payload: DiscordInteraction) => Interaction @@ -648,6 +662,9 @@ export function createTransformers(options: Partial, opts?: Create messageInteractionMetadata(bot, payload, metadata) { return metadata }, + messageCall(bot, payload, call) { + return call + }, role(bot, payload, role) { return role }, @@ -979,6 +996,10 @@ export function createTransformers(options: Partial, opts?: Create thread: opts?.defaultDesiredPropertiesValue ?? false, type: opts?.defaultDesiredPropertiesValue ?? false, webhookId: opts?.defaultDesiredPropertiesValue ?? false, + call: { + participants: opts?.defaultDesiredPropertiesValue ?? false, + endedTimestamp: opts?.defaultDesiredPropertiesValue ?? false, + }, }, role: { name: opts?.defaultDesiredPropertiesValue ?? false, @@ -1181,6 +1202,7 @@ export function createTransformers(options: Partial, opts?: Create member: options.member ?? transformMember, message: options.message ?? transformMessage, messageInteractionMetadata: options.messageInteractionMetadata ?? transformMessageInteractionMetadata, + messageCall: options.messageCall ?? transformMessageCall, presence: options.presence ?? transformPresence, role: options.role ?? transformRole, user: options.user ?? transformUser, diff --git a/packages/bot/src/transformers/message.ts b/packages/bot/src/transformers/message.ts index c892d9b4d..9b0affbc1 100644 --- a/packages/bot/src/transformers/message.ts +++ b/packages/bot/src/transformers/message.ts @@ -1,6 +1,7 @@ import { DiscordApplicationIntegrationType, type DiscordMessage, + type DiscordMessageCall, type DiscordMessageInteractionMetadata, type InteractionTypes, type MessageActivityTypes, @@ -270,6 +271,8 @@ export interface Message extends MessageBase { thread?: Channel /** If the message is generated by a webhook, this is the webhook's id */ webhookId?: bigint + /** The call associated with the message */ + call?: MessageCall } const EMPTY_STRING = '' @@ -383,6 +386,7 @@ export function transformMessage(bot: Bot, payload: DiscordMessage): Message { if (props.thread && payload.thread) message.thread = bot.transformers.channel(bot, { channel: payload.thread, guildId }) if (props.type) message.type = payload.type if (props.webhookId && payload.webhook_id) message.webhookId = bot.transformers.snowflake(payload.webhook_id) + if (props.call && payload.call) message.call = bot.transformers.messageCall(bot, payload.call) return bot.transformers.customizers.message(bot, payload, message) } @@ -415,6 +419,16 @@ export function transformMessageInteractionMetadata(bot: Bot, payload: DiscordMe return bot.transformers.customizers.messageInteractionMetadata(bot, payload, metadata) } +export function transformMessageCall(bot: Bot, payload: DiscordMessageCall): MessageCall { + const call = {} as MessageCall + const props = bot.transformers.desiredProperties.message.call + + if (props.participants && payload.participants) call.participants = payload.participants.map((x) => bot.transformers.snowflake(x)) + if (props.endedTimestamp && payload.ended_timestamp) call.endedTimestamp = Date.parse(payload.ended_timestamp) + + return bot.transformers.customizers.messageCall(bot, payload, call) +} + export interface MessageInteractionMetadata { /** Id of the interaction */ id: bigint @@ -431,3 +445,10 @@ export interface MessageInteractionMetadata { /** Metadata for the interaction that was used to open the modal, present only on modal submit interactions */ triggeringInteractionMetadata?: MessageInteractionMetadata } + +export interface MessageCall { + /** Array of user object ids that participated in the call */ + participants: bigint[] + /** Time when call ended */ + endedTimestamp: number +} diff --git a/packages/types/src/discord.ts b/packages/types/src/discord.ts index 84424d6f2..818e53799 100644 --- a/packages/types/src/discord.ts +++ b/packages/types/src/discord.ts @@ -1368,6 +1368,16 @@ export interface DiscordMessage { position?: number /** The poll object */ poll?: DiscordPoll + /** The call associated with the message */ + call?: DiscordMessageCall +} + +/** https://discord.com/developers/docs/resources/channel#message-call-object */ +export interface DiscordMessageCall { + /** Array of user object ids that participated in the call */ + participants: string[] + /** Time when call ended */ + ended_timestamp: string } /** https://discord.com/developers/docs/resources/channel#channel-mention-object */