feat(bot)!: Use an "extra" params for transformers (#4372)

Co-authored-by: Link <link20050703@gmail.com>
This commit is contained in:
Fleny
2025-08-20 12:10:35 -07:00
committed by GitHub
co-authored by Link
parent 27e53b801a
commit c429ec9c36
36 changed files with 555 additions and 548 deletions
@@ -103,7 +103,7 @@ await memoryBenchmark(
() => ({
cache: [] as any[],
}), // function returns a new instance of object wanted to test with
(object, event: DiscordMessage) => object.cache.push(bot.transformers.message(bot, { message: event, shardId: 0 })),
(object, event: DiscordMessage) => object.cache.push(bot.transformers.message(bot, event)),
// function specify how to add event to the object/ run the object
[...new Array(MESSAGE_SIZE)].map(
() =>
@@ -442,7 +442,7 @@ function oldtransformMessage(bot: Bot, payload: DiscordMessage): any {
: undefined,
}
: undefined,
thread: payload.thread ? bot.transformers.channel(bot, { channel: payload.thread, guildId }) : undefined,
thread: payload.thread ? bot.transformers.channel(bot, payload.thread, { guildId }) : undefined,
components: payload.components?.map((component) => bot.transformers.component(bot, component)),
stickerItems: payload.sticker_items?.map((sticker) => ({
id: bot.transformers.snowflake(sticker.id),
@@ -4,10 +4,7 @@ export async function handleChannelCreate(bot: Bot, payload: DiscordGatewayPaylo
if (!bot.events.channelCreate) return
const data = payload.d as DiscordChannel
const channel = bot.transformers.channel(bot, {
channel: data,
guildId: data.guild_id ? bot.transformers.snowflake(data.guild_id) : undefined,
})
const channel = bot.transformers.channel(bot, data, { guildId: data.guild_id })
bot.events.channelCreate(channel)
}
@@ -6,10 +6,5 @@ export async function handleChannelDelete(bot: Bot, data: DiscordGatewayPayload)
const payload = data.d as DiscordChannel
bot.events.channelDelete(
bot.transformers.channel(bot, {
channel: payload,
guildId: payload.guild_id ? bot.transformers.snowflake(payload.guild_id) : undefined,
}),
)
bot.events.channelDelete(bot.transformers.channel(bot, payload, { guildId: payload.guild_id }))
}
@@ -5,7 +5,7 @@ export async function handleChannelUpdate(bot: Bot, data: DiscordGatewayPayload)
if (!bot.events.channelUpdate) return
const payload = data.d as DiscordChannel
const channel = bot.transformers.channel(bot, { channel: payload })
const channel = bot.transformers.channel(bot, payload)
bot.events.channelUpdate(channel)
}
@@ -6,5 +6,5 @@ export async function handleThreadCreate(bot: Bot, data: DiscordGatewayPayload):
const payload = data.d as DiscordChannel
bot.events.threadCreate(bot.transformers.channel(bot, { channel: payload }))
bot.events.threadCreate(bot.transformers.channel(bot, payload))
}
@@ -6,5 +6,5 @@ export async function handleThreadDelete(bot: Bot, data: DiscordGatewayPayload):
const payload = data.d as DiscordChannel
bot.events.threadDelete(bot.transformers.channel(bot, { channel: payload }))
bot.events.threadDelete(bot.transformers.channel(bot, payload))
}
@@ -11,7 +11,7 @@ export async function handleThreadListSync(bot: Bot, data: DiscordGatewayPayload
bot.events.threadListSync({
guildId,
channelIds: payload.channel_ids?.map((id) => bot.transformers.snowflake(id)),
threads: payload.threads.map((thread) => bot.transformers.channel(bot, { channel: thread, guildId })),
threads: payload.threads.map((thread) => bot.transformers.channel(bot, thread, { guildId })),
members: payload.members.map((member) => ({
id: member.id ? bot.transformers.snowflake(member.id) : undefined,
userId: member.user_id ? bot.transformers.snowflake(member.user_id) : undefined,
@@ -6,5 +6,5 @@ export async function handleThreadUpdate(bot: Bot, data: DiscordGatewayPayload):
const payload = data.d as DiscordChannel
bot.events.threadUpdate(bot.transformers.channel(bot, { channel: payload }))
bot.events.threadUpdate(bot.transformers.channel(bot, payload))
}
@@ -5,5 +5,5 @@ export async function handleGuildCreate(bot: Bot, data: DiscordGatewayPayload, s
if (!bot.events.guildCreate) return
const payload = data.d as DiscordGuild
bot.events.guildCreate(bot.transformers.guild(bot, { guild: payload, shardId }))
bot.events.guildCreate(bot.transformers.guild(bot, payload, { shardId }))
}
@@ -6,5 +6,5 @@ export async function handleGuildUpdate(bot: Bot, data: DiscordGatewayPayload, s
const payload = data.d as DiscordGuild
bot.events.guildUpdate(bot.transformers.guild(bot, { guild: payload, shardId }))
bot.events.guildUpdate(bot.transformers.guild(bot, payload, { shardId }))
}
@@ -4,10 +4,7 @@ import type { Bot } from '../../index.js'
export async function handleInteractionCreate(bot: Bot, data: DiscordGatewayPayload, shardId: number): Promise<void> {
if (!bot.events.interactionCreate) return
bot.events.interactionCreate(
bot.transformers.interaction(bot, {
interaction: data.d as DiscordInteraction,
shardId,
}),
)
const payload = data.d as DiscordInteraction
bot.events.interactionCreate(bot.transformers.interaction(bot, payload, { shardId }))
}
@@ -4,5 +4,7 @@ import type { Bot } from '../../index.js'
export async function handleInviteCreate(bot: Bot, data: DiscordGatewayPayload, shardId: number): Promise<void> {
if (!bot.events.inviteCreate) return
bot.events.inviteCreate(bot.transformers.invite(bot, { invite: data.d as DiscordInviteCreate, shardId }))
const payload = data.d as DiscordInviteCreate
bot.events.inviteCreate(bot.transformers.invite(bot, payload, { shardId }))
}
@@ -7,6 +7,6 @@ export async function handleGuildMemberAdd(bot: Bot, data: DiscordGatewayPayload
const payload = data.d as DiscordGuildMemberAdd
const guildId = bot.transformers.snowflake(payload.guild_id)
const user = bot.transformers.user(bot, payload.user)
const member = bot.transformers.member(bot, payload, guildId, payload.user.id)
const member = bot.transformers.member(bot, payload, { guildId, userId: payload.user.id })
bot.events.guildMemberAdd(member, user)
}
@@ -7,6 +7,9 @@ export async function handleGuildMemberUpdate(bot: Bot, data: DiscordGatewayPayl
const payload = data.d as DiscordGuildMemberUpdate
const user = bot.transformers.user(bot, payload.user)
// @ts-expect-error Flags in the update are nullable, while on the member they are be always present
bot.events.guildMemberUpdate(bot.transformers.member(bot, payload, bot.transformers.snowflake(payload.guild_id), user.id), user)
bot.events.guildMemberUpdate(
// @ts-expect-error Flags in the update are nullable, while on the member they are be always present
bot.transformers.member(bot, payload, { guildId: payload.guild_id, userId: payload.user.id }),
user,
)
}
@@ -6,5 +6,5 @@ export async function handleMessageCreate(bot: Bot, data: DiscordGatewayPayload,
const payload = data.d as DiscordMessage
bot.events.messageCreate(bot.transformers.message(bot, { message: payload, shardId }))
bot.events.messageCreate(bot.transformers.message(bot, payload, { shardId }))
}
@@ -13,7 +13,7 @@ export async function handleMessageReactionAdd(bot: Bot, data: DiscordGatewayPay
channelId: bot.transformers.snowflake(payload.channel_id),
messageId: bot.transformers.snowflake(payload.message_id),
guildId,
member: payload.member && guildId ? bot.transformers.member(bot, payload.member, guildId, userId) : undefined,
member: payload.member && guildId ? bot.transformers.member(bot, payload.member, { guildId, userId }) : undefined,
user: payload.member ? bot.transformers.user(bot, payload.member.user) : undefined,
// @ts-expect-error TODO: Deal with partials
emoji: bot.transformers.emoji(bot, payload.emoji),
@@ -7,5 +7,5 @@ export async function handleMessageUpdate(bot: Bot, data: DiscordGatewayPayload,
const payload = data.d as DiscordMessage
if (!payload.edited_timestamp) return
bot.events.messageUpdate(bot.transformers.message(bot, { message: payload, shardId }))
bot.events.messageUpdate(bot.transformers.message(bot, payload, { shardId }))
}
@@ -14,6 +14,6 @@ export async function handleTypingStart(bot: Bot, data: DiscordGatewayPayload):
channelId: bot.transformers.snowflake(payload.channel_id),
userId,
timestamp: payload.timestamp,
member: payload.member && guildId ? bot.transformers.member(bot, payload.member, guildId, userId) : undefined,
member: payload.member && guildId ? bot.transformers.member(bot, payload.member, { guildId, userId }) : undefined,
})
}
@@ -6,8 +6,7 @@ export async function handleGuildRoleCreate(bot: Bot, data: DiscordGatewayPayloa
const payload = data.d as DiscordGuildRoleCreate
bot.events.roleCreate(
bot.transformers.role(bot, {
role: payload.role,
bot.transformers.role(bot, payload.role, {
guildId: bot.transformers.snowflake(payload.guild_id),
}),
)
@@ -7,8 +7,7 @@ export async function handleGuildRoleUpdate(bot: Bot, data: DiscordGatewayPayloa
const payload = data.d as DiscordGuildRoleUpdate
bot.events.roleUpdate(
bot.transformers.role(bot, {
role: payload.role,
bot.transformers.role(bot, payload.role, {
guildId: bot.transformers.snowflake(payload.guild_id),
}),
)
@@ -10,5 +10,5 @@ export async function handleVoiceStateUpdate(bot: Bot, data: DiscordGatewayPaylo
const guildId = bot.transformers.snowflake(payload.guild_id)
bot.events.voiceStateUpdate(bot.transformers.voiceState(bot, { voiceState: payload, guildId }))
bot.events.voiceStateUpdate(bot.transformers.voiceState(bot, payload, { guildId }))
}
+46 -55
View File
@@ -45,7 +45,6 @@ import type {
DiscordInvite,
DiscordInviteMetadata,
DiscordListArchivedThreads,
DiscordMessage,
DiscordPrunedCount,
DiscordTokenExchange,
DiscordTokenRevocation,
@@ -155,7 +154,7 @@ export function createBotHelpers<TProps extends TransformersDesiredProperties, T
return bot.transformers.automodRule(bot, snakelize(await bot.rest.createAutomodRule(guildId, options, reason)))
},
createChannel: async (guildId, options, reason) => {
return bot.transformers.channel(bot, { channel: snakelize(await bot.rest.createChannel(guildId, options, reason)), guildId })
return bot.transformers.channel(bot, snakelize(await bot.rest.createChannel(guildId, options, reason)), { guildId })
},
createEmoji: async (guildId, options, reason) => {
return bot.transformers.emoji(bot, snakelize(await bot.rest.createEmoji(guildId, options, reason)))
@@ -164,7 +163,7 @@ export function createBotHelpers<TProps extends TransformersDesiredProperties, T
return bot.transformers.emoji(bot, snakelize(await bot.rest.createApplicationEmoji(options)))
},
createForumThread: async (channelId, options, reason) => {
return bot.transformers.channel(bot, { channel: snakelize(await bot.rest.createForumThread(channelId, options, reason)) })
return bot.transformers.channel(bot, snakelize(await bot.rest.createForumThread(channelId, options, reason)))
},
createGlobalApplicationCommand: async (command, options) => {
return bot.transformers.applicationCommand(bot, snakelize(await bot.rest.createGlobalApplicationCommand(command, options)))
@@ -182,7 +181,7 @@ export function createBotHelpers<TProps extends TransformersDesiredProperties, T
return await bot.rest.createInvite(channelId, options, reason)
},
createRole: async (guildId, options, reason) => {
return bot.transformers.role(bot, { role: snakelize(await bot.rest.createRole(guildId, options, reason)), guildId })
return bot.transformers.role(bot, snakelize(await bot.rest.createRole(guildId, options, reason)), { guildId })
},
createScheduledEvent: async (guildId, options, reason) => {
return bot.transformers.scheduledEvent(bot, snakelize(await bot.rest.createScheduledEvent(guildId, options, reason)))
@@ -206,7 +205,7 @@ export function createBotHelpers<TProps extends TransformersDesiredProperties, T
return bot.transformers.user(bot, snakelize(await bot.rest.editBotProfile(options)))
},
editChannel: async (channelId, options, reason) => {
return bot.transformers.channel(bot, { channel: snakelize(await bot.rest.editChannel(channelId, options, reason)) })
return bot.transformers.channel(bot, snakelize(await bot.rest.editChannel(channelId, options, reason)))
},
editEmoji: async (guildId, id, options, reason) => {
return bot.transformers.emoji(bot, snakelize(await bot.rest.editEmoji(guildId, id, options, reason)))
@@ -215,13 +214,13 @@ export function createBotHelpers<TProps extends TransformersDesiredProperties, T
return bot.transformers.emoji(bot, snakelize(await bot.rest.editApplicationEmoji(id, options)))
},
editFollowupMessage: async (token, messageId, options) => {
return bot.transformers.message(bot, { message: snakelize(await bot.rest.editFollowupMessage(token, messageId, options)), shardId: 0 })
return bot.transformers.message(bot, snakelize(await bot.rest.editFollowupMessage(token, messageId, options)))
},
editGlobalApplicationCommand: async (commandId, options) => {
return bot.transformers.applicationCommand(bot, snakelize(await bot.rest.editGlobalApplicationCommand(commandId, options)))
},
editGuild: async (guildId, options, reason) => {
return bot.transformers.guild(bot, { guild: snakelize(await bot.rest.editGuild(guildId, options, reason)), shardId: 0 })
return bot.transformers.guild(bot, snakelize(await bot.rest.editGuild(guildId, options, reason)))
},
editGuildApplicationCommand: async (commandId, guildId, options) => {
return bot.transformers.applicationCommand(bot, snakelize(await bot.rest.editGuildApplicationCommand(commandId, guildId, options)))
@@ -233,19 +232,16 @@ export function createBotHelpers<TProps extends TransformersDesiredProperties, T
return bot.transformers.template(bot, snakelize(await bot.rest.editGuildTemplate(guildId, templateCode, options)))
},
editMessage: async (channelId, messageId, options) => {
return bot.transformers.message(bot, {
message: snakelize(await bot.rest.editMessage(channelId, messageId, options)) as DiscordMessage,
shardId: 0,
})
return bot.transformers.message(bot, snakelize(await bot.rest.editMessage(channelId, messageId, options)))
},
editOriginalInteractionResponse: async (token, options) => {
return bot.transformers.message(bot, { message: snakelize(await bot.rest.editOriginalInteractionResponse(token, options)), shardId: 0 })
return bot.transformers.message(bot, snakelize(await bot.rest.editOriginalInteractionResponse(token, options)))
},
editRole: async (guildId, roleId, options, reason) => {
return bot.transformers.role(bot, { role: snakelize(await bot.rest.editRole(guildId, roleId, options, reason)), guildId })
return bot.transformers.role(bot, snakelize(await bot.rest.editRole(guildId, roleId, options, reason)), { guildId })
},
editRolePositions: async (guildId, options, reason) => {
return snakelize(await bot.rest.editRolePositions(guildId, options, reason)).map((role) => bot.transformers.role(bot, { role, guildId }))
return snakelize(await bot.rest.editRolePositions(guildId, options, reason)).map((role) => bot.transformers.role(bot, role, { guildId }))
},
editScheduledEvent: async (guildId, eventId, options, reason) => {
return bot.transformers.scheduledEvent(bot, snakelize(await bot.rest.editScheduledEvent(guildId, eventId, options, reason)))
@@ -257,10 +253,7 @@ export function createBotHelpers<TProps extends TransformersDesiredProperties, T
return bot.transformers.webhook(bot, snakelize(await bot.rest.editWebhook(webhookId, options, reason)))
},
editWebhookMessage: async (webhookId, token, messageId, options) => {
return bot.transformers.message(bot, {
message: snakelize(await bot.rest.editWebhookMessage(webhookId, token, messageId, options)) as DiscordMessage,
shardId: 0,
})
return bot.transformers.message(bot, snakelize(await bot.rest.editWebhookMessage(webhookId, token, messageId, options)))
},
editWebhookWithToken: async (webhookId, token, options) => {
return bot.transformers.webhook(bot, snakelize(await bot.rest.editWebhookWithToken(webhookId, token, options)))
@@ -275,7 +268,7 @@ export function createBotHelpers<TProps extends TransformersDesiredProperties, T
const result = await bot.rest.executeWebhook(webhookId, token, options)
if (!result) return
return bot.transformers.message(bot, { message: snakelize(result) as DiscordMessage, shardId: 0 })
return bot.transformers.message(bot, snakelize(result))
},
followAnnouncement: async (sourceChannelId, targetChannelId) => {
return await bot.rest.followAnnouncement(sourceChannelId, targetChannelId)
@@ -283,15 +276,15 @@ export function createBotHelpers<TProps extends TransformersDesiredProperties, T
getActiveThreads: async (guildId) => {
const result = await bot.rest.getActiveThreads(guildId)
return {
threads: result.threads.map((thread) => bot.transformers.channel(bot, { guildId, channel: snakelize(thread) })),
threads: result.threads.map((thread) => bot.transformers.channel(bot, snakelize(thread), { guildId })),
members: result.members.map((member) => bot.transformers.threadMember(bot, snakelize(member), { guildId })),
}
},
getApplicationInfo: async () => {
return bot.transformers.application(bot, { application: snakelize(await bot.rest.getApplicationInfo()), shardId: 0 })
return bot.transformers.application(bot, snakelize(await bot.rest.getApplicationInfo()))
},
editApplicationInfo: async (body) => {
return bot.transformers.application(bot, { application: snakelize(await bot.rest.editApplicationInfo(body)), shardId: 0 })
return bot.transformers.application(bot, snakelize(await bot.rest.editApplicationInfo(body)))
},
getCurrentAuthenticationInfo: async (bearerToken) => {
return await bot.rest.getCurrentAuthenticationInfo(bearerToken)
@@ -332,23 +325,23 @@ export function createBotHelpers<TProps extends TransformersDesiredProperties, T
return await bot.rest.getBans(guildId, options)
},
getChannel: async (channelId) => {
return bot.transformers.channel(bot, { channel: snakelize(await bot.rest.getChannel(channelId)) })
return bot.transformers.channel(bot, snakelize(await bot.rest.getChannel(channelId)))
},
getChannelInvites: async (channelId) => {
return await bot.rest.getChannelInvites(channelId)
// return (await bot.rest.getChannelInvites(channelId)).map((res) => bot.transformers.invite(bot, snakelize(res)))
},
getChannels: async (guildId) => {
return (await bot.rest.getChannels(guildId)).map((res) => bot.transformers.channel(bot, { channel: snakelize(res), guildId }))
return (await bot.rest.getChannels(guildId)).map((res) => bot.transformers.channel(bot, snakelize(res), { guildId }))
},
getChannelWebhooks: async (channelId) => {
return (await bot.rest.getChannelWebhooks(channelId)).map((res) => bot.transformers.webhook(bot, snakelize(res)))
},
getDmChannel: async (userId) => {
return bot.transformers.channel(bot, { channel: snakelize(await bot.rest.getDmChannel(userId)) })
return bot.transformers.channel(bot, snakelize(await bot.rest.getDmChannel(userId)))
},
getGroupDmChannel: async (options) => {
return bot.transformers.channel(bot, { channel: snakelize(await bot.rest.getGroupDmChannel(options)) })
return bot.transformers.channel(bot, snakelize(await bot.rest.getGroupDmChannel(options)))
},
getEmoji: async (guildId, emojiId) => {
return bot.transformers.emoji(bot, snakelize(await bot.rest.getEmoji(guildId, emojiId)))
@@ -367,7 +360,7 @@ export function createBotHelpers<TProps extends TransformersDesiredProperties, T
}
},
getFollowupMessage: async (token, messageId) => {
return bot.transformers.message(bot, { message: snakelize(await bot.rest.getFollowupMessage(token, messageId)), shardId: 0 })
return bot.transformers.message(bot, snakelize(await bot.rest.getFollowupMessage(token, messageId)))
},
getGatewayBot: async () => {
return bot.transformers.gatewayBot(bot, snakelize(await bot.rest.getGatewayBot()))
@@ -379,12 +372,12 @@ export function createBotHelpers<TProps extends TransformersDesiredProperties, T
return (await bot.rest.getGlobalApplicationCommands(options)).map((res) => bot.transformers.applicationCommand(bot, snakelize(res)))
},
getGuild: async (guildId, options) => {
return bot.transformers.guild(bot, { guild: snakelize(await bot.rest.getGuild(guildId, options)), shardId: 0 })
return bot.transformers.guild(bot, snakelize(await bot.rest.getGuild(guildId, options)))
},
getGuilds: async (bearerToken, options) => {
return (await bot.rest.getGuilds(bearerToken, options)).map<Partial<typeof bot.transformers.$inferredTypes.guild>>((res) =>
// @ts-expect-error getGuilds returns partial guilds
bot.transformers.guild(bot, { guild: snakelize(res), shardId: 0 }),
bot.transformers.guild(bot, snakelize(res)),
)
},
getGuildApplicationCommand: async (commandId, guildId) => {
@@ -418,16 +411,16 @@ export function createBotHelpers<TProps extends TransformersDesiredProperties, T
)
},
getInvite: async (inviteCode, options) => {
return bot.transformers.invite(bot, { invite: snakelize(await bot.rest.getInvite(inviteCode, options)), shardId: 0 })
return bot.transformers.invite(bot, snakelize(await bot.rest.getInvite(inviteCode, options)))
},
getInvites: async (guildId) => {
return (await bot.rest.getInvites(guildId)).map((res) => bot.transformers.invite(bot, { invite: snakelize(res), shardId: 0 }))
return (await bot.rest.getInvites(guildId)).map((res) => bot.transformers.invite(bot, snakelize(res)))
},
getMessage: async (channelId, messageId) => {
return bot.transformers.message(bot, { message: snakelize(await bot.rest.getMessage(channelId, messageId)), shardId: 0 })
return bot.transformers.message(bot, snakelize(await bot.rest.getMessage(channelId, messageId)))
},
getMessages: async (channelId, options) => {
return (await bot.rest.getMessages(channelId, options)).map((res) => bot.transformers.message(bot, { message: snakelize(res), shardId: 0 }))
return (await bot.rest.getMessages(channelId, options)).map((res) => bot.transformers.message(bot, snakelize(res)))
},
getStickerPack: async (stickerPackId) => {
return bot.transformers.stickerPack(bot, snakelize(await bot.rest.getStickerPack(stickerPackId)))
@@ -436,7 +429,7 @@ export function createBotHelpers<TProps extends TransformersDesiredProperties, T
return (await bot.rest.getStickerPacks()).map((res) => bot.transformers.stickerPack(bot, snakelize(res)))
},
getOriginalInteractionResponse: async (token) => {
return bot.transformers.message(bot, { message: snakelize(await bot.rest.getOriginalInteractionResponse(token)), shardId: 0 })
return bot.transformers.message(bot, snakelize(await bot.rest.getOriginalInteractionResponse(token)))
},
getChannelPins: async (channelId, options) => {
const res = snakelize(await bot.rest.getChannelPins(channelId, options))
@@ -447,7 +440,7 @@ export function createBotHelpers<TProps extends TransformersDesiredProperties, T
}
},
getPinnedMessages: async (channelId) => {
return (await bot.rest.getPinnedMessages(channelId)).map((res) => bot.transformers.message(bot, { message: snakelize(res), shardId: 0 }))
return (await bot.rest.getPinnedMessages(channelId)).map((res) => bot.transformers.message(bot, snakelize(res)))
},
getPrivateArchivedThreads: async (channelId, options) => {
return await bot.rest.getPrivateArchivedThreads(channelId, options)
@@ -462,10 +455,10 @@ export function createBotHelpers<TProps extends TransformersDesiredProperties, T
return await bot.rest.getPublicArchivedThreads(channelId, options)
},
getRoles: async (guildId) => {
return snakelize(await bot.rest.getRoles(guildId)).map((role) => bot.transformers.role(bot, { role, guildId }))
return snakelize(await bot.rest.getRoles(guildId)).map((role) => bot.transformers.role(bot, role, { guildId }))
},
getRole: async (guildId, roleId) => {
return bot.transformers.role(bot, { role: snakelize(await bot.rest.getRole(guildId, roleId)), guildId })
return bot.transformers.role(bot, snakelize(await bot.rest.getRole(guildId, roleId)), { guildId })
},
getScheduledEvent: async (guildId, eventId, options) => {
return bot.transformers.scheduledEvent(bot, snakelize(await bot.rest.getScheduledEvent(guildId, eventId, options)))
@@ -477,7 +470,7 @@ export function createBotHelpers<TProps extends TransformersDesiredProperties, T
return (await bot.rest.getScheduledEventUsers(guildId, eventId, options)).map((u) => {
return {
user: bot.transformers.user(bot, snakelize(u.user)),
member: u.member && bot.transformers.member(bot, snakelize(u.member), guildId, bot.transformers.snowflake(u.user.id)),
member: u.member && bot.transformers.member(bot, snakelize(u.member), { guildId, userId: bot.transformers.snowflake(u.user.id) }),
}
})
},
@@ -488,10 +481,10 @@ export function createBotHelpers<TProps extends TransformersDesiredProperties, T
return bot.transformers.stageInstance(bot, snakelize(await bot.rest.getStageInstance(channelId)))
},
getOwnVoiceState: async (guildId) => {
return bot.transformers.voiceState(bot, { guildId, voiceState: snakelize(await bot.rest.getOwnVoiceState(guildId)) })
return bot.transformers.voiceState(bot, snakelize(await bot.rest.getOwnVoiceState(guildId)), { guildId })
},
getUserVoiceState: async (guildId, userId) => {
return bot.transformers.voiceState(bot, { guildId, voiceState: snakelize(await bot.rest.getUserVoiceState(guildId, userId)) })
return bot.transformers.voiceState(bot, snakelize(await bot.rest.getUserVoiceState(guildId, userId)), { guildId })
},
getSticker: async (stickerId) => {
return bot.transformers.sticker(bot, snakelize(await bot.rest.getSticker(stickerId)))
@@ -527,7 +520,7 @@ export function createBotHelpers<TProps extends TransformersDesiredProperties, T
return bot.transformers.webhook(bot, snakelize(await bot.rest.getWebhook(webhookId)))
},
getWebhookMessage: async (webhookId, token, messageId, options) => {
return bot.transformers.message(bot, { message: snakelize(await bot.rest.getWebhookMessage(webhookId, token, messageId, options)), shardId: 0 })
return bot.transformers.message(bot, snakelize(await bot.rest.getWebhookMessage(webhookId, token, messageId, options)))
},
getWebhookWithToken: async (webhookId, token) => {
return bot.transformers.webhook(bot, snakelize(await bot.rest.getWebhookWithToken(webhookId, token)))
@@ -542,21 +535,19 @@ export function createBotHelpers<TProps extends TransformersDesiredProperties, T
return bot.transformers.widgetSettings(bot, snakelize(await bot.rest.getWidgetSettings(guildId)))
},
publishMessage: async (channelId, messageId) => {
return bot.transformers.message(bot, { message: snakelize(await bot.rest.publishMessage(channelId, messageId)), shardId: 0 })
return bot.transformers.message(bot, snakelize(await bot.rest.publishMessage(channelId, messageId)))
},
sendMessage: async (channelId, options) => {
return bot.transformers.message(bot, { message: snakelize(await bot.rest.sendMessage(channelId, options)), shardId: 0 })
return bot.transformers.message(bot, snakelize(await bot.rest.sendMessage(channelId, options)))
},
sendFollowupMessage: async (token, options) => {
return bot.transformers.message(bot, { message: snakelize(await bot.rest.sendFollowupMessage(token, options)), shardId: 0 })
return bot.transformers.message(bot, snakelize(await bot.rest.sendFollowupMessage(token, options)))
},
startThreadWithMessage: async (channelId, messageId, options, reason) => {
return bot.transformers.channel(bot, {
channel: snakelize(await bot.rest.startThreadWithMessage(channelId, messageId, options, reason)),
})
return bot.transformers.channel(bot, snakelize(await bot.rest.startThreadWithMessage(channelId, messageId, options, reason)))
},
startThreadWithoutMessage: async (channelId, options, reason) => {
return bot.transformers.channel(bot, { channel: snakelize(await bot.rest.startThreadWithoutMessage(channelId, options, reason)) })
return bot.transformers.channel(bot, snakelize(await bot.rest.startThreadWithoutMessage(channelId, options, reason)))
},
syncGuildTemplate: async (guildId) => {
return bot.transformers.template(bot, snakelize(await bot.rest.syncGuildTemplate(guildId)))
@@ -572,21 +563,21 @@ export function createBotHelpers<TProps extends TransformersDesiredProperties, T
)
},
editBotMember: async (guildId, options, reason) => {
return bot.transformers.member(bot, snakelize(await bot.rest.editBotMember(guildId, options, reason)), guildId, bot.id)
return bot.transformers.member(bot, snakelize(await bot.rest.editBotMember(guildId, options, reason)), { guildId, userId: bot.id })
},
editMember: async (guildId, userId, options, reason) => {
return bot.transformers.member(bot, snakelize(await bot.rest.editMember(guildId, userId, options, reason)), guildId, userId)
return bot.transformers.member(bot, snakelize(await bot.rest.editMember(guildId, userId, options, reason)), { guildId, userId })
},
getMember: async (guildId, userId) => {
return bot.transformers.member(bot, snakelize(await bot.rest.getMember(guildId, userId)), guildId, userId)
return bot.transformers.member(bot, snakelize(await bot.rest.getMember(guildId, userId)), { guildId, userId })
},
getCurrentMember: async (guildId, bearerToken) => {
const res = await bot.rest.getCurrentMember(guildId, bearerToken)
return bot.transformers.member(bot, snakelize(res), guildId, bot.transformers.snowflake(res.user.id))
return bot.transformers.member(bot, snakelize(res), { guildId, userId: bot.transformers.snowflake(res.user.id) })
},
getMembers: async (guildId, options) => {
return (await bot.rest.getMembers(guildId, options)).map((res) =>
bot.transformers.member(bot, snakelize(res), guildId, bot.transformers.snowflake(res.user.id)),
bot.transformers.member(bot, snakelize(res), { guildId, userId: bot.transformers.snowflake(res.user.id) }),
)
},
pruneMembers: async (guildId, options, reason) => {
@@ -594,7 +585,7 @@ export function createBotHelpers<TProps extends TransformersDesiredProperties, T
},
searchMembers: async (guildId, query, options) => {
return (await bot.rest.searchMembers(guildId, query, options)).map((res) =>
bot.transformers.member(bot, snakelize(res), guildId, bot.transformers.snowflake(res.user.id)),
bot.transformers.member(bot, snakelize(res), { guildId, userId: bot.transformers.snowflake(res.user.id) }),
)
},
bulkBanMembers: async (guildId, options, reason) => {
@@ -764,7 +755,7 @@ export function createBotHelpers<TProps extends TransformersDesiredProperties, T
if (!response) return
return bot.transformers.interactionCallbackResponse(bot, { interactionCallbackResponse: snakelize(response), shardId: 0 })
return bot.transformers.interactionCallbackResponse(bot, snakelize(response))
},
triggerTypingIndicator: async (channelId) => {
return await bot.rest.triggerTypingIndicator(channelId)
+74 -26
View File
@@ -263,7 +263,7 @@ export type Transformers<TProps extends TransformersDesiredProperties, TBehavior
payload: DiscordActivityLocation,
activityLocation: SetupDesiredProps<ActivityLocation, TProps, TBehavior>,
) => any
application: (bot: Bot<TProps, TBehavior>, payload: DiscordApplication, application: Application) => any
application: (bot: Bot<TProps, TBehavior>, payload: DiscordApplication, application: Application, extra?: { shardId?: number }) => any
applicationCommand: (bot: Bot<TProps, TBehavior>, payload: DiscordApplicationCommand, applicationCommand: ApplicationCommand) => any
applicationCommandOption: (
bot: Bot<TProps, TBehavior>,
@@ -293,7 +293,12 @@ export type Transformers<TProps extends TransformersDesiredProperties, TBehavior
payload: DiscordAvatarDecorationData,
avatarDecorationData: SetupDesiredProps<AvatarDecorationData, TProps, TBehavior>,
) => any
channel: (bot: Bot<TProps, TBehavior>, payload: DiscordChannel, channel: SetupDesiredProps<Channel, TProps, TBehavior>) => any
channel: (
bot: Bot<TProps, TBehavior>,
payload: DiscordChannel,
channel: SetupDesiredProps<Channel, TProps, TBehavior>,
extra?: { guildId?: bigint },
) => any
collectibles: (bot: Bot<TProps, TBehavior>, payload: DiscordCollectibles, collectibles: SetupDesiredProps<Collectibles, TProps, TBehavior>) => any
component: (bot: Bot<TProps, TBehavior>, payload: DiscordMessageComponent, component: Component) => any
defaultReactionEmoji: (
@@ -306,7 +311,12 @@ export type Transformers<TProps extends TransformersDesiredProperties, TBehavior
entitlement: (bot: Bot<TProps, TBehavior>, payload: DiscordEntitlement, entitlement: SetupDesiredProps<Entitlement, TProps, TBehavior>) => any
forumTag: (bot: Bot<TProps, TBehavior>, payload: DiscordForumTag, forumTag: SetupDesiredProps<ForumTag, TProps, TBehavior>) => any
gatewayBot: (bot: Bot<TProps, TBehavior>, payload: DiscordGetGatewayBot, getGatewayBot: GetGatewayBot) => any
guild: (bot: Bot<TProps, TBehavior>, payload: DiscordGuild, guild: SetupDesiredProps<Guild, TProps, TBehavior>) => any
guild: (
bot: Bot<TProps, TBehavior>,
payload: DiscordGuild,
guild: SetupDesiredProps<Guild, TProps, TBehavior>,
extra?: { shardId?: number },
) => any
guildOnboarding: (
bot: Bot<TProps, TBehavior>,
payload: DiscordGuildOnboarding,
@@ -330,8 +340,9 @@ export type Transformers<TProps extends TransformersDesiredProperties, TBehavior
integration: (bot: Bot<TProps, TBehavior>, payload: DiscordIntegrationCreateUpdate, integration: Integration) => any
interaction: (
bot: Bot<TProps, TBehavior>,
payload: { interaction: DiscordInteraction; shardId: number },
payload: DiscordInteraction,
interaction: SetupDesiredProps<Interaction, TProps, TBehavior>,
extra?: { shardId?: number },
) => any
interactionCallback: (
bot: Bot<TProps, TBehavior>,
@@ -342,50 +353,71 @@ export type Transformers<TProps extends TransformersDesiredProperties, TBehavior
bot: Bot<TProps, TBehavior>,
payload: DiscordInteractionCallbackResponse,
interactionCallbackResponse: SetupDesiredProps<InteractionCallbackResponse, TProps, TBehavior>,
extra?: { shardId?: number },
) => any
interactionDataOptions: (bot: Bot<TProps, TBehavior>, payload: DiscordInteractionDataOption, interactionDataOptions: InteractionDataOption) => any
interactionDataResolved: (
bot: Bot<TProps, TBehavior>,
payload: { resolved: DiscordInteractionDataResolved; guildId?: bigint },
payload: DiscordInteractionDataResolved,
interactionDataResolved: InteractionDataResolved,
extra?: { shardId?: number; guildId?: bigint },
) => any
interactionResource: (
bot: Bot<TProps, TBehavior>,
payload: DiscordInteractionResource,
interactionResource: SetupDesiredProps<InteractionResource, TProps, TBehavior>,
extra?: { shardId?: number },
) => any
invite: (
bot: Bot<TProps, TBehavior>,
payload: DiscordInviteCreate | DiscordInviteMetadata,
invite: SetupDesiredProps<Invite, TProps, TBehavior>,
extra?: { shardId?: number },
) => any
inviteStageInstance: (
bot: Bot<TProps, TBehavior>,
payload: DiscordInviteStageInstance,
inviteStageInstance: SetupDesiredProps<InviteStageInstance, TProps, TBehavior>,
extra?: { guildId?: bigint },
) => any
lobby: (bot: Bot<TProps, TBehavior>, payload: DiscordLobby, lobby: SetupDesiredProps<Lobby, TProps, TBehavior>) => any
lobbyMember: (bot: Bot<TProps, TBehavior>, payload: DiscordLobbyMember, lobbyMember: SetupDesiredProps<LobbyMember, TProps, TBehavior>) => any
mediaGalleryItem: (bot: Bot<TProps, TBehavior>, payload: DiscordMediaGalleryItem, item: MediaGalleryItem) => any
member: (bot: Bot<TProps, TBehavior>, payload: DiscordMember, member: SetupDesiredProps<Member, TProps, TBehavior>) => any
message: (bot: Bot<TProps, TBehavior>, payload: DiscordMessage, message: SetupDesiredProps<Message, TProps, TBehavior>) => any
member: (
bot: Bot<TProps, TBehavior>,
payload: DiscordMember,
member: SetupDesiredProps<Member, TProps, TBehavior>,
extra?: { guildId?: bigint; userId?: bigint },
) => any
message: (
bot: Bot<TProps, TBehavior>,
payload: DiscordMessage,
message: SetupDesiredProps<Message, TProps, TBehavior>,
extra?: { shardId?: number },
) => any
messageCall: (bot: Bot<TProps, TBehavior>, payload: DiscordMessageCall, call: SetupDesiredProps<MessageCall, TProps, TBehavior>) => any
messageInteractionMetadata: (
bot: Bot<TProps, TBehavior>,
payload: DiscordMessageInteractionMetadata,
metadata: SetupDesiredProps<MessageInteractionMetadata, TProps, TBehavior>,
) => any
messagePin: (bot: Bot<TProps, TBehavior>, payload: DiscordMessagePin, call: SetupDesiredProps<MessagePin, TProps, TBehavior>) => any
messagePin: (
bot: Bot<TProps, TBehavior>,
payload: DiscordMessagePin,
call: SetupDesiredProps<MessagePin, TProps, TBehavior>,
extra?: { shardId?: number },
) => any
messageSnapshot: (
bot: Bot<TProps, TBehavior>,
payload: DiscordMessageSnapshot,
messageSnapshot: SetupDesiredProps<MessageSnapshot, TProps, TBehavior>,
extra?: { shardId?: number },
) => any
nameplate: (bot: Bot<TProps, TBehavior>, payload: DiscordNameplate, nameplate: SetupDesiredProps<Nameplate, TProps, TBehavior>) => any
poll: (bot: Bot<TProps, TBehavior>, payload: DiscordPoll, poll: SetupDesiredProps<Poll, TProps, TBehavior>) => any
pollMedia: (bot: Bot<TProps, TBehavior>, payload: DiscordPollMedia, pollMedia: SetupDesiredProps<PollMedia, TProps, TBehavior>) => any
presence: (bot: Bot<TProps, TBehavior>, payload: DiscordPresenceUpdate, presence: PresenceUpdate) => any
role: (bot: Bot<TProps, TBehavior>, payload: DiscordRole, role: SetupDesiredProps<Role, TProps, TBehavior>) => any
role: (bot: Bot<TProps, TBehavior>, payload: DiscordRole, role: SetupDesiredProps<Role, TProps, TBehavior>, extra?: { guildId?: bigint }) => any
roleColors: (bot: Bot<TProps, TBehavior>, payload: DiscordRoleColors, roleColors: SetupDesiredProps<RoleColors, TProps, TBehavior>) => any
scheduledEvent: (
bot: Bot<TProps, TBehavior>,
@@ -427,7 +459,12 @@ export type Transformers<TProps extends TransformersDesiredProperties, TBehavior
userPrimaryGuild: SetupDesiredProps<UserPrimaryGuild, TProps, TBehavior>,
) => any
voiceRegion: (bot: Bot<TProps, TBehavior>, payload: DiscordVoiceRegion, voiceRegion: VoiceRegion) => any
voiceState: (bot: Bot<TProps, TBehavior>, payload: DiscordVoiceState, voiceState: SetupDesiredProps<VoiceState, TProps, TBehavior>) => any
voiceState: (
bot: Bot<TProps, TBehavior>,
payload: DiscordVoiceState,
voiceState: SetupDesiredProps<VoiceState, TProps, TBehavior>,
extra?: { guildId?: bigint },
) => any
webhook: (bot: Bot<TProps, TBehavior>, payload: DiscordWebhook, webhook: SetupDesiredProps<Webhook, TProps, TBehavior>) => any
welcomeScreen: (bot: Bot<TProps, TBehavior>, payload: DiscordWelcomeScreen, welcomeScreen: WelcomeScreen) => any
widget: (bot: Bot<TProps, TBehavior>, payload: DiscordGuildWidget, widget: GuildWidget) => any
@@ -454,7 +491,7 @@ export type Transformers<TProps extends TransformersDesiredProperties, TBehavior
activity: (bot: Bot<TProps, TBehavior>, payload: DiscordActivity) => Activity
activityInstance: (bot: Bot<TProps, TBehavior>, payload: DiscordActivityInstance) => SetupDesiredProps<ActivityInstance, TProps, TBehavior>
activityLocation: (bot: Bot<TProps, TBehavior>, payload: DiscordActivityLocation) => SetupDesiredProps<ActivityLocation, TProps, TBehavior>
application: (bot: Bot<TProps, TBehavior>, payload: { application: DiscordApplication; shardId: number }) => Application
application: (bot: Bot<TProps, TBehavior>, payload: DiscordApplication, extra?: { shardId?: number }) => Application
applicationCommand: (bot: Bot<TProps, TBehavior>, payload: DiscordApplicationCommand) => ApplicationCommand
applicationCommandOption: (bot: Bot<TProps, TBehavior>, payload: DiscordApplicationCommandOption) => ApplicationCommandOption
applicationCommandOptionChoice: (bot: Bot<TProps, TBehavior>, payload: DiscordApplicationCommandOptionChoice) => ApplicationCommandOptionChoice
@@ -470,7 +507,7 @@ export type Transformers<TProps extends TransformersDesiredProperties, TBehavior
bot: Bot<TProps, TBehavior>,
payload: DiscordAvatarDecorationData,
) => SetupDesiredProps<AvatarDecorationData, TProps, TBehavior>
channel: (bot: Bot<TProps, TBehavior>, payload: { channel: DiscordChannel; guildId?: BigString }) => SetupDesiredProps<Channel, TProps, TBehavior>
channel: (bot: Bot<TProps, TBehavior>, payload: DiscordChannel, extra?: { guildId?: BigString }) => SetupDesiredProps<Channel, TProps, TBehavior>
collectibles: (bot: Bot<TProps, TBehavior>, payload: DiscordCollectibles) => SetupDesiredProps<Collectibles, TProps, TBehavior>
component: (bot: Bot<TProps, TBehavior>, payload: DiscordMessageComponent) => Component
defaultReactionEmoji: (
@@ -482,7 +519,7 @@ export type Transformers<TProps extends TransformersDesiredProperties, TBehavior
entitlement: (bot: Bot<TProps, TBehavior>, payload: DiscordEntitlement) => SetupDesiredProps<Entitlement, TProps, TBehavior>
forumTag: (bot: Bot<TProps, TBehavior>, payload: DiscordForumTag) => SetupDesiredProps<ForumTag, TProps, TBehavior>
gatewayBot: (bot: Bot<TProps, TBehavior>, payload: DiscordGetGatewayBot) => GetGatewayBot
guild: (bot: Bot<TProps, TBehavior>, payload: { guild: DiscordGuild; shardId: number }) => SetupDesiredProps<Guild, TProps, TBehavior>
guild: (bot: Bot<TProps, TBehavior>, payload: DiscordGuild, extra?: { shardId?: number }) => SetupDesiredProps<Guild, TProps, TBehavior>
guildOnboarding: (bot: Bot<TProps, TBehavior>, payload: DiscordGuildOnboarding) => SetupDesiredProps<GuildOnboarding, TProps, TBehavior>
guildOnboardingPrompt: (
bot: Bot<TProps, TBehavior>,
@@ -493,29 +530,35 @@ export type Transformers<TProps extends TransformersDesiredProperties, TBehavior
integration: (bot: Bot<TProps, TBehavior>, payload: DiscordIntegrationCreateUpdate) => Integration
interaction: (
bot: Bot<TProps, TBehavior>,
payload: { interaction: DiscordInteraction; shardId: number },
payload: DiscordInteraction,
extra?: { shardId?: number },
) => SetupDesiredProps<Interaction, TProps, TBehavior>
interactionCallback: (bot: Bot<TProps, TBehavior>, payload: DiscordInteractionCallback) => SetupDesiredProps<InteractionCallback, TProps, TBehavior>
interactionCallbackResponse: (
bot: Bot<TProps, TBehavior>,
payload: { interactionCallbackResponse: DiscordInteractionCallbackResponse; shardId: number },
payload: DiscordInteractionCallbackResponse,
extra?: { shardId?: number },
) => SetupDesiredProps<InteractionCallbackResponse, TProps, TBehavior>
interactionDataOptions: (bot: Bot<TProps, TBehavior>, payload: DiscordInteractionDataOption) => InteractionDataOption
interactionDataResolved: (
bot: Bot<TProps, TBehavior>,
payload: { resolved: DiscordInteractionDataResolved; shardId: number; guildId?: bigint },
payload: DiscordInteractionDataResolved,
extra?: { shardId?: number; guildId?: BigString },
) => TransformProperty<InteractionDataResolved, TProps, TBehavior>
interactionResource: (
bot: Bot<TProps, TBehavior>,
payload: { interactionResource: DiscordInteractionResource; shardId: number },
payload: DiscordInteractionResource,
extra?: { shardId?: number },
) => SetupDesiredProps<InteractionResource, TProps, TBehavior>
invite: (
bot: Bot<TProps, TBehavior>,
payload: { invite: DiscordInviteCreate | DiscordInviteMetadata; shardId: number },
payload: DiscordInviteCreate | DiscordInviteMetadata,
extra?: { shardId?: number },
) => SetupDesiredProps<Invite, TProps, TBehavior>
inviteStageInstance: (
bot: Bot<TProps, TBehavior>,
payload: DiscordInviteStageInstance & { guildId: BigString },
payload: DiscordInviteStageInstance,
extra?: { guildId: BigString },
) => SetupDesiredProps<InviteStageInstance, TProps, TBehavior>
lobby: (bot: Bot<TProps, TBehavior>, payload: DiscordLobby) => SetupDesiredProps<Lobby, TProps, TBehavior>
lobbyMember: (bot: Bot<TProps, TBehavior>, payload: DiscordLobbyMember) => SetupDesiredProps<LobbyMember, TProps, TBehavior>
@@ -523,25 +566,29 @@ export type Transformers<TProps extends TransformersDesiredProperties, TBehavior
member: (
bot: Bot<TProps, TBehavior>,
payload: DiscordMember,
guildId: BigString | undefined,
userId: BigString,
extra?: { guildId?: BigString; userId?: BigString },
) => SetupDesiredProps<Member, TProps, TBehavior>
message: (bot: Bot<TProps, TBehavior>, payload: { message: DiscordMessage; shardId: number }) => SetupDesiredProps<Message, TProps, TBehavior>
message: (bot: Bot<TProps, TBehavior>, payload: DiscordMessage, extra?: { shardId?: number }) => SetupDesiredProps<Message, TProps, TBehavior>
messageCall: (bot: Bot<TProps, TBehavior>, payload: DiscordMessageCall) => SetupDesiredProps<MessageCall, TProps, TBehavior>
messageInteractionMetadata: (
bot: Bot<TProps, TBehavior>,
payload: DiscordMessageInteractionMetadata,
) => SetupDesiredProps<MessageInteractionMetadata, TProps, TBehavior>
messagePin: (bot: Bot<TProps, TBehavior>, payload: DiscordMessagePin) => SetupDesiredProps<MessagePin, TProps, TBehavior>
messagePin: (
bot: Bot<TProps, TBehavior>,
payload: DiscordMessagePin,
extra?: { shardId?: number },
) => SetupDesiredProps<MessagePin, TProps, TBehavior>
messageSnapshot: (
bot: Bot<TProps, TBehavior>,
payload: { messageSnapshot: DiscordMessageSnapshot; shardId: number },
payload: DiscordMessageSnapshot,
extra?: { shardId?: number },
) => SetupDesiredProps<MessageSnapshot, TProps, TBehavior>
nameplate: (bot: Bot<TProps, TBehavior>, payload: DiscordNameplate) => SetupDesiredProps<Nameplate, TProps, TBehavior>
poll: (bot: Bot<TProps, TBehavior>, payload: DiscordPoll) => SetupDesiredProps<Poll, TProps, TBehavior>
pollMedia: (bot: Bot<TProps, TBehavior>, payload: DiscordPollMedia) => SetupDesiredProps<PollMedia, TProps, TBehavior>
presence: (bot: Bot<TProps, TBehavior>, payload: DiscordPresenceUpdate) => PresenceUpdate
role: (bot: Bot<TProps, TBehavior>, payload: { role: DiscordRole; guildId: BigString }) => SetupDesiredProps<Role, TProps, TBehavior>
role: (bot: Bot<TProps, TBehavior>, payload: DiscordRole, extra?: { guildId?: BigString }) => SetupDesiredProps<Role, TProps, TBehavior>
roleColors: (bot: Bot<TProps, TBehavior>, payload: DiscordRoleColors) => SetupDesiredProps<RoleColors, TProps, TBehavior>
scheduledEvent: (bot: Bot<TProps, TBehavior>, payload: DiscordScheduledEvent) => SetupDesiredProps<ScheduledEvent, TProps, TBehavior>
scheduledEventRecurrenceRule: (
@@ -565,7 +612,8 @@ export type Transformers<TProps extends TransformersDesiredProperties, TBehavior
voiceRegion: (bot: Bot<TProps, TBehavior>, payload: DiscordVoiceRegion) => VoiceRegion
voiceState: (
bot: Bot<TProps, TBehavior>,
payload: { voiceState: DiscordVoiceState; guildId: BigString },
payload: DiscordVoiceState,
extra?: { guildId?: BigString },
) => SetupDesiredProps<VoiceState, TProps, TBehavior>
webhook: (bot: Bot<TProps, TBehavior>, payload: DiscordWebhook) => SetupDesiredProps<Webhook, TProps, TBehavior>
welcomeScreen: (bot: Bot<TProps, TBehavior>, payload: DiscordWelcomeScreen) => WelcomeScreen
+43 -43
View File
@@ -7,70 +7,70 @@ import {
iconHashToBigInt,
} from '../index.js'
export function transformApplication(bot: Bot, payload: { application: DiscordApplication; shardId: number }): Application {
export function transformApplication(bot: Bot, payload: DiscordApplication, extra?: { shardId?: number }): Application {
const application = {
name: payload.application.name,
description: payload.application.description,
rpcOrigins: payload.application.rpc_origins,
botPublic: payload.application.bot_public,
botRequireCodeGrant: payload.application.bot_require_code_grant,
termsOfServiceUrl: payload.application.terms_of_service_url,
privacyPolicyUrl: payload.application.privacy_policy_url,
verifyKey: payload.application.verify_key,
primarySkuId: payload.application.primary_sku_id,
slug: payload.application.slug,
coverImage: payload.application.cover_image ? iconHashToBigInt(payload.application.cover_image) : undefined,
flags: payload.application.flags,
name: payload.name,
description: payload.description,
rpcOrigins: payload.rpc_origins,
botPublic: payload.bot_public,
botRequireCodeGrant: payload.bot_require_code_grant,
termsOfServiceUrl: payload.terms_of_service_url,
privacyPolicyUrl: payload.privacy_policy_url,
verifyKey: payload.verify_key,
primarySkuId: payload.primary_sku_id,
slug: payload.slug,
coverImage: payload.cover_image ? iconHashToBigInt(payload.cover_image) : undefined,
flags: payload.flags,
id: bot.transformers.snowflake(payload.application.id),
icon: payload.application.icon ? iconHashToBigInt(payload.application.icon) : undefined,
owner: payload.application.owner
id: bot.transformers.snowflake(payload.id),
icon: payload.icon ? iconHashToBigInt(payload.icon) : undefined,
owner: payload.owner
? // @ts-expect-error the partial here wont break anything
bot.transformers.user(bot, payload.application.owner)
bot.transformers.user(bot, payload.owner)
: undefined,
team: payload.application.team ? bot.transformers.team(bot, payload.application.team) : undefined,
guildId: payload.application.guild_id ? bot.transformers.snowflake(payload.application.guild_id) : undefined,
customInstallUrl: payload.application.custom_install_url,
team: payload.team ? bot.transformers.team(bot, payload.team) : undefined,
guildId: payload.guild_id ? bot.transformers.snowflake(payload.guild_id) : undefined,
customInstallUrl: payload.custom_install_url,
// @ts-expect-error the partial here wont break anything
guild: payload.application.guild ? bot.transformers.guild(bot, { guild: payload.application.guild, shardId: payload.shardId }) : undefined,
approximateGuildCount: payload.application.approximate_guild_count,
approximateUserInstallCount: payload.application.approximate_user_install_count,
approximateUserAuthorizationCount: payload.application.approximate_user_authorization_count,
bot: payload.application.bot ? bot.transformers.user(bot, payload.application.bot as DiscordUser) : undefined,
interactionsEndpointUrl: payload.application.interactions_endpoint_url ? payload.application.interactions_endpoint_url : undefined,
redirectUris: payload.application.redirect_uris,
roleConnectionsVerificationUrl: payload.application.role_connections_verification_url,
tags: payload.application.tags,
installParams: payload.application.install_params
guild: payload.guild ? bot.transformers.guild(bot, payload.guild, { shardId: extra?.shardId }) : undefined,
approximateGuildCount: payload.approximate_guild_count,
approximateUserInstallCount: payload.approximate_user_install_count,
approximateUserAuthorizationCount: payload.approximate_user_authorization_count,
bot: payload.bot ? bot.transformers.user(bot, payload.bot as DiscordUser) : undefined,
interactionsEndpointUrl: payload.interactions_endpoint_url ? payload.interactions_endpoint_url : undefined,
redirectUris: payload.redirect_uris,
roleConnectionsVerificationUrl: payload.role_connections_verification_url,
tags: payload.tags,
installParams: payload.install_params
? {
scopes: payload.application.install_params.scopes,
permissions: bot.transformers.snowflake(payload.application.install_params.permissions),
scopes: payload.install_params.scopes,
permissions: bot.transformers.snowflake(payload.install_params.permissions),
}
: undefined,
integrationTypesConfig: payload.application.integration_types_config
integrationTypesConfig: payload.integration_types_config
? {
[DiscordApplicationIntegrationType.GuildInstall]: payload.application.integration_types_config['0']?.oauth2_install_params
[DiscordApplicationIntegrationType.GuildInstall]: payload.integration_types_config['0']?.oauth2_install_params
? {
oauth2InstallParams: {
scopes: payload.application.integration_types_config['0'].oauth2_install_params.scopes,
permissions: bot.transformers.snowflake(payload.application.integration_types_config['0'].oauth2_install_params.permissions),
scopes: payload.integration_types_config['0'].oauth2_install_params.scopes,
permissions: bot.transformers.snowflake(payload.integration_types_config['0'].oauth2_install_params.permissions),
},
}
: undefined,
[DiscordApplicationIntegrationType.UserInstall]: payload.application.integration_types_config['1']?.oauth2_install_params
[DiscordApplicationIntegrationType.UserInstall]: payload.integration_types_config['1']?.oauth2_install_params
? {
oauth2InstallParams: {
scopes: payload.application.integration_types_config['1'].oauth2_install_params.scopes,
permissions: bot.transformers.snowflake(payload.application.integration_types_config['1'].oauth2_install_params.permissions),
scopes: payload.integration_types_config['1'].oauth2_install_params.scopes,
permissions: bot.transformers.snowflake(payload.integration_types_config['1'].oauth2_install_params.permissions),
},
}
: undefined,
}
: undefined,
eventWebhooksUrl: payload.application.event_webhooks_url,
eventWebhooksStatus: payload.application.event_webhooks_status,
eventWebhooksTypes: payload.application.event_webhooks_types,
eventWebhooksUrl: payload.event_webhooks_url,
eventWebhooksStatus: payload.event_webhooks_status,
eventWebhooksTypes: payload.event_webhooks_types,
} as Application
return bot.transformers.customizers.application(bot, payload.application, application)
return bot.transformers.customizers.application(bot, payload, application, extra)
}
+48 -49
View File
@@ -76,62 +76,61 @@ export const baseChannel: Channel = {
},
}
export function transformChannel(bot: Bot, payload: { channel: DiscordChannel; guildId?: BigString }) {
export function transformChannel(bot: Bot, payload: DiscordChannel, extra?: { guildId?: BigString }) {
const channel = Object.create(baseChannel) as SetupDesiredProps<Channel, TransformersDesiredProperties, DesiredPropertiesBehavior>
const props = bot.transformers.desiredProperties.channel
channel.toggles = new ChannelToggles(payload.channel)
channel.toggles = new ChannelToggles(payload)
if (props.id && payload.channel.id) channel.id = bot.transformers.snowflake(payload.channel.id)
if (props.guildId && (payload.guildId ?? payload.channel.guild_id))
channel.guildId = payload.guildId ? bot.transformers.snowflake(payload.guildId) : bot.transformers.snowflake(payload.channel.guild_id!)
if (props.type) channel.type = payload.channel.type
if (props.position) channel.position = payload.channel.position
if (props.name && payload.channel.name) channel.name = payload.channel.name
if (props.topic && payload.channel.topic) channel.topic = payload.channel.topic
if (props.lastMessageId && payload.channel.last_message_id) channel.lastMessageId = bot.transformers.snowflake(payload.channel.last_message_id)
if (props.bitrate && payload.channel.bitrate) channel.bitrate = payload.channel.bitrate
if (props.userLimit) channel.userLimit = payload.channel.user_limit
if (props.rateLimitPerUser) channel.rateLimitPerUser = payload.channel.rate_limit_per_user
if (props.ownerId && payload.channel.owner_id) channel.ownerId = bot.transformers.snowflake(payload.channel.owner_id)
if (props.lastPinTimestamp && payload.channel.last_pin_timestamp) channel.lastPinTimestamp = Date.parse(payload.channel.last_pin_timestamp)
if (props.rtcRegion && payload.channel.rtc_region) channel.rtcRegion = payload.channel.rtc_region
if (props.videoQualityMode && payload.channel.video_quality_mode) channel.videoQualityMode = payload.channel.video_quality_mode
if (props.messageCount) channel.messageCount = payload.channel.message_count
if (props.memberCount) channel.memberCount = payload.channel.member_count
if (props.id && payload.id) channel.id = bot.transformers.snowflake(payload.id)
if (props.guildId && (extra?.guildId ?? payload.guild_id))
channel.guildId = extra?.guildId ? bot.transformers.snowflake(extra.guildId) : bot.transformers.snowflake(payload.guild_id!)
if (props.type) channel.type = payload.type
if (props.position) channel.position = payload.position
if (props.name && payload.name) channel.name = payload.name
if (props.topic && payload.topic) channel.topic = payload.topic
if (props.lastMessageId && payload.last_message_id) channel.lastMessageId = bot.transformers.snowflake(payload.last_message_id)
if (props.bitrate && payload.bitrate) channel.bitrate = payload.bitrate
if (props.userLimit) channel.userLimit = payload.user_limit
if (props.rateLimitPerUser) channel.rateLimitPerUser = payload.rate_limit_per_user
if (props.ownerId && payload.owner_id) channel.ownerId = bot.transformers.snowflake(payload.owner_id)
if (props.lastPinTimestamp && payload.last_pin_timestamp) channel.lastPinTimestamp = Date.parse(payload.last_pin_timestamp)
if (props.rtcRegion && payload.rtc_region) channel.rtcRegion = payload.rtc_region
if (props.videoQualityMode && payload.video_quality_mode) channel.videoQualityMode = payload.video_quality_mode
if (props.messageCount) channel.messageCount = payload.message_count
if (props.memberCount) channel.memberCount = payload.member_count
if (props.threadMetadata) {
channel.internalThreadMetadata = {} as NonNullable<Channel['internalThreadMetadata']>
if (payload.channel.thread_metadata?.archive_timestamp)
channel.internalThreadMetadata.archiveTimestamp = Date.parse(payload.channel.thread_metadata.archive_timestamp)
if (payload.channel.thread_metadata?.create_timestamp)
channel.internalThreadMetadata.createTimestamp = Date.parse(payload.channel.thread_metadata.create_timestamp)
if (payload.channel.thread_metadata?.auto_archive_duration)
channel.internalThreadMetadata.autoArchiveDuration = payload.channel.thread_metadata.auto_archive_duration
if (payload.thread_metadata?.archive_timestamp)
channel.internalThreadMetadata.archiveTimestamp = Date.parse(payload.thread_metadata.archive_timestamp)
if (payload.thread_metadata?.create_timestamp)
channel.internalThreadMetadata.createTimestamp = Date.parse(payload.thread_metadata.create_timestamp)
if (payload.thread_metadata?.auto_archive_duration)
channel.internalThreadMetadata.autoArchiveDuration = payload.thread_metadata.auto_archive_duration
}
if (props.defaultAutoArchiveDuration && payload.channel.default_auto_archive_duration)
channel.defaultAutoArchiveDuration = payload.channel.default_auto_archive_duration
if (props.permissions && payload.channel.permissions) channel.permissions = new Permissions(payload.channel.permissions)
if (props.flags) channel.flags = payload.channel.flags
if (props.permissionOverwrites && payload.channel.permission_overwrites)
channel.internalOverwrites = payload.channel.permission_overwrites.map((o) => packOverwrites(o.allow ?? '0', o.deny ?? '0', o.id, o.type))
if (props.parentId && payload.channel.parent_id) channel.parentId = bot.transformers.snowflake(payload.channel.parent_id)
if (props.recipients && payload.channel.recipients) channel.recipients = payload.channel.recipients.map((u) => bot.transformers.user(bot, u))
if (props.icon && payload.channel.icon) channel.icon = iconHashToBigInt(payload.channel.icon)
if (props.applicationId && payload.channel.application_id) channel.applicationId = bot.transformers.snowflake(payload.channel.application_id)
if (props.member && payload.channel.member)
channel.member = bot.transformers.threadMember(bot, payload.channel.member, { guildId: payload.guildId })
if (props.totalMessageSent && payload.channel.total_message_sent !== undefined) channel.totalMessageSent = payload.channel.total_message_sent
if (props.availableTags && payload.channel.available_tags)
channel.availableTags = payload.channel.available_tags.map((x) => bot.transformers.forumTag(bot, x))
if (props.appliedTags && payload.channel.applied_tags) channel.appliedTags = payload.channel.applied_tags.map((x) => bot.transformers.snowflake(x))
if (props.defaultReactionEmoji && payload.channel.default_reaction_emoji)
channel.defaultReactionEmoji = bot.transformers.defaultReactionEmoji(bot, payload.channel.default_reaction_emoji)
if (props.defaultThreadRateLimitPerUser && payload.channel.default_thread_rate_limit_per_user)
channel.defaultThreadRateLimitPerUser = payload.channel.default_thread_rate_limit_per_user
if (props.defaultSortOrder && payload.channel.default_sort_order !== undefined) channel.defaultSortOrder = payload.channel.default_sort_order
if (props.defaultForumLayout && payload.channel.default_forum_layout !== undefined)
channel.defaultForumLayout = payload.channel.default_forum_layout
if (props.defaultAutoArchiveDuration && payload.default_auto_archive_duration)
channel.defaultAutoArchiveDuration = payload.default_auto_archive_duration
if (props.permissions && payload.permissions) channel.permissions = new Permissions(payload.permissions)
if (props.flags) channel.flags = payload.flags
if (props.permissionOverwrites && payload.permission_overwrites)
channel.internalOverwrites = payload.permission_overwrites.map((o) => packOverwrites(o.allow ?? '0', o.deny ?? '0', o.id, o.type))
if (props.parentId && payload.parent_id) channel.parentId = bot.transformers.snowflake(payload.parent_id)
if (props.recipients && payload.recipients) channel.recipients = payload.recipients.map((u) => bot.transformers.user(bot, u))
if (props.icon && payload.icon) channel.icon = iconHashToBigInt(payload.icon)
if (props.applicationId && payload.application_id) channel.applicationId = bot.transformers.snowflake(payload.application_id)
if (props.member && payload.member) channel.member = bot.transformers.threadMember(bot, payload.member, { guildId: extra?.guildId })
if (props.totalMessageSent && payload.total_message_sent !== undefined) channel.totalMessageSent = payload.total_message_sent
if (props.availableTags && payload.available_tags) channel.availableTags = payload.available_tags.map((x) => bot.transformers.forumTag(bot, x))
if (props.appliedTags && payload.applied_tags) channel.appliedTags = payload.applied_tags.map((x) => bot.transformers.snowflake(x))
if (props.defaultReactionEmoji && payload.default_reaction_emoji)
channel.defaultReactionEmoji = bot.transformers.defaultReactionEmoji(bot, payload.default_reaction_emoji)
if (props.defaultThreadRateLimitPerUser && payload.default_thread_rate_limit_per_user)
channel.defaultThreadRateLimitPerUser = payload.default_thread_rate_limit_per_user
if (props.defaultSortOrder && payload.default_sort_order !== undefined) channel.defaultSortOrder = payload.default_sort_order
if (props.defaultForumLayout && payload.default_forum_layout !== undefined) channel.defaultForumLayout = payload.default_forum_layout
return bot.transformers.customizers.channel(bot, payload.channel, channel)
return bot.transformers.customizers.channel(bot, payload, channel, {
guildId: extra?.guildId ? bot.transformers.snowflake(extra.guildId) : undefined,
})
}
export function transformForumTag(bot: Bot, payload: DiscordForumTag): ForumTag {
+80 -82
View File
@@ -21,33 +21,32 @@ export const baseGuild: Guild = {
},
}
export function transformGuild(bot: Bot, payload: { guild: DiscordGuild; shardId: number }): Guild {
const guildId = bot.transformers.snowflake(payload.guild.id)
export function transformGuild(bot: Bot, payload: DiscordGuild, extra?: { shardId?: number }): Guild {
const guildId = bot.transformers.snowflake(payload.id)
const props = bot.transformers.desiredProperties.guild
const guild: SetupDesiredProps<Guild, TransformersDesiredProperties, DesiredPropertiesBehavior> = Object.create(baseGuild)
if (props.afkTimeout && payload.guild.afk_timeout) guild.afkTimeout = payload.guild.afk_timeout
if (props.approximateMemberCount && payload.guild.approximate_member_count) guild.approximateMemberCount = payload.guild.approximate_member_count
if (props.approximatePresenceCount && payload.guild.approximate_presence_count)
guild.approximatePresenceCount = payload.guild.approximate_presence_count
if (props.defaultMessageNotifications) guild.defaultMessageNotifications = payload.guild.default_message_notifications
if (props.description && payload.guild.description) guild.description = payload.guild.description
if (props.toggles) guild.toggles = new GuildToggles(payload.guild)
if (props.explicitContentFilter) guild.explicitContentFilter = payload.guild.explicit_content_filter
if (props.maxMembers && payload.guild.max_members) guild.maxMembers = payload.guild.max_members
if (props.maxPresences && payload.guild.max_presences) guild.maxPresences = payload.guild.max_presences ?? undefined
if (props.maxVideoChannelUsers && payload.guild.max_video_channel_users) guild.maxVideoChannelUsers = payload.guild.max_video_channel_users
if (props.maxStageVideoChannelUsers && payload.guild.max_stage_video_channel_users)
guild.maxStageVideoChannelUsers = payload.guild.max_stage_video_channel_users
if (props.mfaLevel) guild.mfaLevel = payload.guild.mfa_level
if (props.name && payload.guild.name) guild.name = payload.guild.name
if (props.nsfwLevel) guild.nsfwLevel = payload.guild.nsfw_level
if (props.preferredLocale && payload.guild.preferred_locale) guild.preferredLocale = payload.guild.preferred_locale
if (props.premiumSubscriptionCount && payload.guild.premium_subscription_count !== undefined)
guild.premiumSubscriptionCount = payload.guild.premium_subscription_count
if (props.premiumTier) guild.premiumTier = payload.guild.premium_tier
if (props.stageInstances && payload.guild.stage_instances)
guild.stageInstances = payload.guild.stage_instances.map((si) => ({
if (props.afkTimeout && payload.afk_timeout) guild.afkTimeout = payload.afk_timeout
if (props.approximateMemberCount && payload.approximate_member_count) guild.approximateMemberCount = payload.approximate_member_count
if (props.approximatePresenceCount && payload.approximate_presence_count) guild.approximatePresenceCount = payload.approximate_presence_count
if (props.defaultMessageNotifications) guild.defaultMessageNotifications = payload.default_message_notifications
if (props.description && payload.description) guild.description = payload.description
if (props.toggles) guild.toggles = new GuildToggles(payload)
if (props.explicitContentFilter) guild.explicitContentFilter = payload.explicit_content_filter
if (props.maxMembers && payload.max_members) guild.maxMembers = payload.max_members
if (props.maxPresences && payload.max_presences) guild.maxPresences = payload.max_presences ?? undefined
if (props.maxVideoChannelUsers && payload.max_video_channel_users) guild.maxVideoChannelUsers = payload.max_video_channel_users
if (props.maxStageVideoChannelUsers && payload.max_stage_video_channel_users)
guild.maxStageVideoChannelUsers = payload.max_stage_video_channel_users
if (props.mfaLevel) guild.mfaLevel = payload.mfa_level
if (props.name && payload.name) guild.name = payload.name
if (props.nsfwLevel) guild.nsfwLevel = payload.nsfw_level
if (props.preferredLocale && payload.preferred_locale) guild.preferredLocale = payload.preferred_locale
if (props.premiumSubscriptionCount && payload.premium_subscription_count !== undefined)
guild.premiumSubscriptionCount = payload.premium_subscription_count
if (props.premiumTier) guild.premiumTier = payload.premium_tier
if (props.stageInstances && payload.stage_instances)
guild.stageInstances = payload.stage_instances.map((si) => ({
/** The id of this Stage instance */
id: bot.transformers.snowflake(si.id),
/** The guild id of the associated Stage channel */
@@ -57,97 +56,96 @@ export function transformGuild(bot: Bot, payload: { guild: DiscordGuild; shardId
/** The topic of the Stage instance (1-120 characters) */
topic: si.topic,
}))
if (props.channels && (!!payload.guild.channels || !!payload.guild.threads))
if (props.channels && (!!payload.channels || !!payload.threads))
guild.channels = new Collection(
[...(payload.guild.channels ?? []), ...(payload.guild.threads ?? [])].map((channel) => {
const result = bot.transformers.channel(bot, { channel, guildId })
[...(payload.channels ?? []), ...(payload.threads ?? [])].map((channel) => {
const result = bot.transformers.channel(bot, channel, { guildId })
// TODO: We should check that id exists, or else the collection will have undefined as it's key (This is valid for all the collections below as well)
// @ts-expect-error: We TODO above
// @ts-expect-error: See TODO above
return [result.id, result]
}),
)
if (props.members && payload.guild.members)
if (props.members && payload.members)
guild.members = new Collection(
payload.guild.members.map((member) => {
const result = bot.transformers.member(bot, member, guildId, bot.transformers.snowflake(member.user!.id))
// @ts-expect-error: We TODO above
payload.members.map((member) => {
const result = bot.transformers.member(bot, member, { guildId, userId: bot.transformers.snowflake(member.user!.id) })
// @ts-expect-error: See TODO above
return [result.id, result]
}),
)
if (props.roles && payload.guild.roles)
if (props.roles && payload.roles)
guild.roles = new Collection(
payload.guild.roles.map((role) => {
const result = bot.transformers.role(bot, { role, guildId })
// @ts-expect-error: We TODO above
payload.roles.map((role) => {
const result = bot.transformers.role(bot, role, { guildId })
// @ts-expect-error: See TODO above
return [result.id, result]
}),
)
if (props.emojis && payload.guild.emojis)
if (props.emojis && payload.emojis)
guild.emojis = new Collection(
payload.guild.emojis.map((emoji) => {
payload.emojis.map((emoji) => {
const result = bot.transformers.emoji(bot, emoji)
// @ts-expect-error: We TODO above
// @ts-expect-error: See TODO above
return [result.id!, result]
}),
)
if (props.voiceStates && payload.guild.voice_states)
if (props.voiceStates && payload.voice_states)
guild.voiceStates = new Collection(
payload.guild.voice_states.map((voiceState) => {
const result = bot.transformers.voiceState(bot, { voiceState, guildId })
// @ts-expect-error: We TODO above
payload.voice_states.map((voiceState) => {
const result = bot.transformers.voiceState(bot, voiceState, { guildId })
// @ts-expect-error: See TODO above
return [result.userId, result]
}),
)
if (props.stickers && payload.guild.stickers)
if (props.stickers && payload.stickers)
guild.stickers = new Collection(
payload.guild.stickers?.map((sticker) => {
payload.stickers?.map((sticker) => {
const result = bot.transformers.sticker(bot, sticker)
// @ts-expect-error: We TODO above
// @ts-expect-error: See TODO above
return [result.id, result]
}),
)
if (props.systemChannelFlags && payload.guild.system_channel_flags) guild.systemChannelFlags = payload.guild.system_channel_flags
if (props.vanityUrlCode && payload.guild.vanity_url_code) guild.vanityUrlCode = payload.guild.vanity_url_code
if (props.verificationLevel) guild.verificationLevel = payload.guild.verification_level
if (props.welcomeScreen && payload.guild.welcome_screen)
if (props.systemChannelFlags && payload.system_channel_flags) guild.systemChannelFlags = payload.system_channel_flags
if (props.vanityUrlCode && payload.vanity_url_code) guild.vanityUrlCode = payload.vanity_url_code
if (props.verificationLevel) guild.verificationLevel = payload.verification_level
if (props.welcomeScreen && payload.welcome_screen)
guild.welcomeScreen = {
description: payload.guild.welcome_screen.description ?? undefined,
welcomeChannels: payload.guild.welcome_screen.welcome_channels.map((wc) => ({
description: payload.welcome_screen.description ?? undefined,
welcomeChannels: payload.welcome_screen.welcome_channels.map((wc) => ({
channelId: bot.transformers.snowflake(wc.channel_id),
description: wc.description,
emojiId: wc.emoji_id ? bot.transformers.snowflake(wc.emoji_id) : undefined,
emojiName: wc.emoji_name ?? undefined,
})),
}
if (props.discoverySplash && payload.guild.discovery_splash) guild.discoverySplash = iconHashToBigInt(payload.guild.discovery_splash)
if (props.joinedAt && payload.guild.joined_at) guild.joinedAt = Date.parse(payload.guild.joined_at)
if (props.memberCount && payload.guild.member_count) guild.memberCount = payload.guild.member_count ?? 0
if (props.shardId) guild.shardId = payload.shardId
if (props.icon && payload.guild.icon) guild.icon = iconHashToBigInt(payload.guild.icon)
if (props.banner && payload.guild.banner) guild.banner = iconHashToBigInt(payload.guild.banner)
if (props.splash && payload.guild.splash) guild.splash = iconHashToBigInt(payload.guild.splash)
if (props.id && payload.guild.id) guild.id = guildId
if (props.ownerId && payload.guild.owner_id) guild.ownerId = bot.transformers.snowflake(payload.guild.owner_id)
if (props.permissions && payload.guild.permissions) guild.permissions = bot.transformers.snowflake(payload.guild.permissions)
if (props.afkChannelId && payload.guild.afk_channel_id) guild.afkChannelId = bot.transformers.snowflake(payload.guild.afk_channel_id)
if (props.widgetChannelId && payload.guild.widget_channel_id) guild.widgetChannelId = bot.transformers.snowflake(payload.guild.widget_channel_id)
if (props.applicationId && payload.guild.application_id) guild.applicationId = bot.transformers.snowflake(payload.guild.application_id)
if (props.systemChannelId && payload.guild.system_channel_id) guild.systemChannelId = bot.transformers.snowflake(payload.guild.system_channel_id)
if (props.rulesChannelId && payload.guild.rules_channel_id) guild.rulesChannelId = bot.transformers.snowflake(payload.guild.rules_channel_id)
if (props.publicUpdatesChannelId && payload.guild.public_updates_channel_id)
guild.publicUpdatesChannelId = bot.transformers.snowflake(payload.guild.public_updates_channel_id)
if (props.premiumProgressBarEnabled && payload.guild.premium_progress_bar_enabled)
guild.premiumProgressBarEnabled = payload.guild.premium_progress_bar_enabled
if (props.large && payload.guild.large) guild.large = payload.guild.large
if (props.owner && payload.guild.owner) guild.owner = payload.guild.owner
if (props.widgetEnabled && payload.guild.widget_enabled) guild.widgetEnabled = payload.guild.widget_enabled
if (props.unavailable && payload.guild.unavailable) guild.unavailable = payload.guild.unavailable
if (props.iconHash && payload.guild.icon_hash) guild.iconHash = iconHashToBigInt(payload.guild.icon_hash)
if (props.presences && payload.guild.presences)
guild.presences = payload.guild.presences?.map((presence) => bot.transformers.presence(bot, presence as DiscordPresenceUpdate))
if (props.safetyAlertsChannelId && payload.guild.safety_alerts_channel_id)
guild.safetyAlertsChannelId = bot.transformers.snowflake(payload.guild.safety_alerts_channel_id)
if (props.incidentsData && payload.guild.incidents_data) guild.incidentsData = bot.transformers.incidentsData(bot, payload.guild.incidents_data)
if (props.discoverySplash && payload.discovery_splash) guild.discoverySplash = iconHashToBigInt(payload.discovery_splash)
if (props.joinedAt && payload.joined_at) guild.joinedAt = Date.parse(payload.joined_at)
if (props.memberCount && payload.member_count) guild.memberCount = payload.member_count ?? 0
if (props.shardId && extra?.shardId) guild.shardId = extra.shardId
if (props.icon && payload.icon) guild.icon = iconHashToBigInt(payload.icon)
if (props.banner && payload.banner) guild.banner = iconHashToBigInt(payload.banner)
if (props.splash && payload.splash) guild.splash = iconHashToBigInt(payload.splash)
if (props.id && payload.id) guild.id = guildId
if (props.ownerId && payload.owner_id) guild.ownerId = bot.transformers.snowflake(payload.owner_id)
if (props.permissions && payload.permissions) guild.permissions = bot.transformers.snowflake(payload.permissions)
if (props.afkChannelId && payload.afk_channel_id) guild.afkChannelId = bot.transformers.snowflake(payload.afk_channel_id)
if (props.widgetChannelId && payload.widget_channel_id) guild.widgetChannelId = bot.transformers.snowflake(payload.widget_channel_id)
if (props.applicationId && payload.application_id) guild.applicationId = bot.transformers.snowflake(payload.application_id)
if (props.systemChannelId && payload.system_channel_id) guild.systemChannelId = bot.transformers.snowflake(payload.system_channel_id)
if (props.rulesChannelId && payload.rules_channel_id) guild.rulesChannelId = bot.transformers.snowflake(payload.rules_channel_id)
if (props.publicUpdatesChannelId && payload.public_updates_channel_id)
guild.publicUpdatesChannelId = bot.transformers.snowflake(payload.public_updates_channel_id)
if (props.premiumProgressBarEnabled && payload.premium_progress_bar_enabled) guild.premiumProgressBarEnabled = payload.premium_progress_bar_enabled
if (props.large && payload.large) guild.large = payload.large
if (props.owner && payload.owner) guild.owner = payload.owner
if (props.widgetEnabled && payload.widget_enabled) guild.widgetEnabled = payload.widget_enabled
if (props.unavailable && payload.unavailable) guild.unavailable = payload.unavailable
if (props.iconHash && payload.icon_hash) guild.iconHash = iconHashToBigInt(payload.icon_hash)
if (props.presences && payload.presences)
guild.presences = payload.presences?.map((presence) => bot.transformers.presence(bot, presence as DiscordPresenceUpdate))
if (props.safetyAlertsChannelId && payload.safety_alerts_channel_id)
guild.safetyAlertsChannelId = bot.transformers.snowflake(payload.safety_alerts_channel_id)
if (props.incidentsData && payload.incidents_data) guild.incidentsData = bot.transformers.incidentsData(bot, payload.incidents_data)
return bot.transformers.customizers.guild(bot, payload.guild, guild)
return bot.transformers.customizers.guild(bot, payload, guild, extra)
}
+83 -94
View File
@@ -13,10 +13,10 @@ import {
import { Collection } from '@discordeno/utils'
import type {
Attachment,
BigString,
Bot,
CompleteDesiredProperties,
DesiredPropertiesBehavior,
DiscordChannel,
Interaction,
InteractionCallback,
InteractionCallbackResponse,
@@ -136,81 +136,75 @@ export const baseInteraction: SetupDesiredProps<Interaction, CompleteDesiredProp
},
}
export function transformInteraction(bot: Bot, payload: { interaction: DiscordInteraction; shardId: number }): Interaction {
const guildId = payload.interaction.guild_id ? bot.transformers.snowflake(payload.interaction.guild_id) : undefined
export function transformInteraction(bot: Bot, payload: DiscordInteraction, extra?: { shardId?: number }): Interaction {
const guildId = payload.guild_id ? bot.transformers.snowflake(payload.guild_id) : undefined
const interaction: SetupDesiredProps<Interaction, TransformersDesiredProperties, DesiredPropertiesBehavior> = Object.create(baseInteraction)
const props = bot.transformers.desiredProperties.interaction
// Typescript has an hard time with this, so we need to tell him for sure this is a Bot
interaction.bot = bot as unknown as Bot
interaction.bot = bot
interaction.acknowledged = false
if (props.id && payload.interaction.id) interaction.id = bot.transformers.snowflake(payload.interaction.id)
if (props.applicationId && payload.interaction.application_id)
interaction.applicationId = bot.transformers.snowflake(payload.interaction.application_id)
if (props.type && payload.interaction.type) interaction.type = payload.interaction.type
if (props.token && payload.interaction.token) interaction.token = payload.interaction.token
if (props.version && payload.interaction.version) interaction.version = payload.interaction.version
if (props.locale && payload.interaction.locale) interaction.locale = payload.interaction.locale
if (props.guildLocale && payload.interaction.guild_locale) interaction.guildLocale = payload.interaction.guild_locale
if (props.guild && payload.interaction.guild)
// @ts-expect-error payload.interaction.guild is a Partial<DiscordGuild>
interaction.guild = bot.transformers.guild(bot, { guild: payload.interaction.guild, shardId: payload.shardId })
if (props.id && payload.id) interaction.id = bot.transformers.snowflake(payload.id)
if (props.applicationId && payload.application_id) interaction.applicationId = bot.transformers.snowflake(payload.application_id)
if (props.type && payload.type) interaction.type = payload.type
if (props.token && payload.token) interaction.token = payload.token
if (props.version && payload.version) interaction.version = payload.version
if (props.locale && payload.locale) interaction.locale = payload.locale
if (props.guildLocale && payload.guild_locale) interaction.guildLocale = payload.guild_locale
if (props.guild && payload.guild)
// @ts-expect-error payload.guild is a Partial<DiscordGuild>
interaction.guild = bot.transformers.guild(bot, payload.guild, { shardId: extra?.shardId })
if (props.guildId && guildId) interaction.guildId = guildId
if (props.user) {
if (payload.interaction.member?.user) interaction.user = bot.transformers.user(bot, payload.interaction.member?.user)
else if (payload.interaction.user) interaction.user = bot.transformers.user(bot, payload.interaction.user)
if (payload.member?.user) interaction.user = bot.transformers.user(bot, payload.member?.user)
else if (payload.user) interaction.user = bot.transformers.user(bot, payload.user)
}
if (props.appPermissions && payload.interaction.app_permissions)
interaction.appPermissions = bot.transformers.snowflake(payload.interaction.app_permissions)
if (props.message && payload.interaction.message)
interaction.message = bot.transformers.message(bot, { message: payload.interaction.message, shardId: 0 })
if (props.channel && payload.interaction.channel)
interaction.channel = bot.transformers.channel(bot, { channel: payload.interaction.channel as DiscordChannel, guildId })
if (props.channelId && payload.interaction.channel_id) interaction.channelId = bot.transformers.snowflake(payload.interaction.channel_id)
if (props.member && guildId && payload.interaction.member)
interaction.member = bot.transformers.member(
bot,
payload.interaction.member,
if (props.appPermissions && payload.app_permissions) interaction.appPermissions = bot.transformers.snowflake(payload.app_permissions)
if (props.message && payload.message) interaction.message = bot.transformers.message(bot, payload.message, { shardId: extra?.shardId })
if (props.channel && payload.channel)
// @ts-expect-error payload.channel is a Partial<>
interaction.channel = bot.transformers.channel(bot, payload.channel, { guildId })
if (props.channelId && payload.channel_id) interaction.channelId = bot.transformers.snowflake(payload.channel_id)
if (props.member && guildId && payload.member)
interaction.member = bot.transformers.member(bot, payload.member, {
guildId,
payload.interaction.member?.user.id ?? payload.interaction.user?.id,
)
if (props.entitlements && payload.interaction.entitlements)
interaction.entitlements = payload.interaction.entitlements.map((e) => bot.transformers.entitlement(bot, e))
if (props.authorizingIntegrationOwners && payload.interaction.authorizing_integration_owners) {
userId: payload.member?.user.id ?? payload.user?.id,
})
if (props.entitlements && payload.entitlements) interaction.entitlements = payload.entitlements.map((e) => bot.transformers.entitlement(bot, e))
if (props.authorizingIntegrationOwners && payload.authorizing_integration_owners) {
interaction.authorizingIntegrationOwners = {}
if (payload.interaction.authorizing_integration_owners['0'])
if (payload.authorizing_integration_owners['0'])
interaction.authorizingIntegrationOwners[DiscordApplicationIntegrationType.GuildInstall] = bot.transformers.snowflake(
payload.interaction.authorizing_integration_owners['0'],
payload.authorizing_integration_owners['0'],
)
if (payload.interaction.authorizing_integration_owners['1'])
if (payload.authorizing_integration_owners['1'])
interaction.authorizingIntegrationOwners[DiscordApplicationIntegrationType.UserInstall] = bot.transformers.snowflake(
payload.interaction.authorizing_integration_owners['1'],
payload.authorizing_integration_owners['1'],
)
}
if (props.context && payload.interaction.context) interaction.context = payload.interaction.context
if (props.attachmentSizeLimit && payload.interaction.attachment_size_limit)
interaction.attachmentSizeLimit = payload.interaction.attachment_size_limit
if (props.data && payload.interaction.data) {
if (props.context && payload.context) interaction.context = payload.context
if (props.attachmentSizeLimit && payload.attachment_size_limit) interaction.attachmentSizeLimit = payload.attachment_size_limit
if (props.data && payload.data) {
interaction.data = {
type: payload.interaction.data.type,
componentType: payload.interaction.data.component_type,
customId: payload.interaction.data.custom_id,
components: payload.interaction.data.components?.map((component) => bot.transformers.component(bot, component)),
values: payload.interaction.data.values,
id: payload.interaction.data.id ? bot.transformers.snowflake(payload.interaction.data.id) : undefined,
name: payload.interaction.data.name,
resolved: payload.interaction.data.resolved
? bot.transformers.interactionDataResolved(bot, { resolved: payload.interaction.data.resolved, shardId: payload.shardId, guildId })
type: payload.data.type,
componentType: payload.data.component_type,
customId: payload.data.custom_id,
components: payload.data.components?.map((component) => bot.transformers.component(bot, component)),
values: payload.data.values,
id: payload.data.id ? bot.transformers.snowflake(payload.data.id) : undefined,
name: payload.data.name,
resolved: payload.data.resolved
? bot.transformers.interactionDataResolved(bot, payload.data.resolved, { shardId: extra?.shardId, guildId })
: undefined,
options: payload.interaction.data.options?.map((opt) => bot.transformers.interactionDataOptions(bot, opt)),
targetId: payload.interaction.data.target_id ? bot.transformers.snowflake(payload.interaction.data.target_id) : undefined,
options: payload.data.options?.map((opt) => bot.transformers.interactionDataOptions(bot, opt)),
targetId: payload.data.target_id ? bot.transformers.snowflake(payload.data.target_id) : undefined,
}
}
// Typescript has an hard time with interaction.bot, so we need to tell him for sure this interaction is the of the correct type
return bot.transformers.customizers.interaction(bot, payload, interaction as unknown as typeof bot.transformers.$inferredTypes.interaction)
return bot.transformers.customizers.interaction(bot, payload, interaction as unknown as typeof bot.transformers.$inferredTypes.interaction, extra)
}
export function transformInteractionDataOption(bot: Bot, option: DiscordInteractionDataOption): InteractionDataOption {
@@ -227,37 +221,38 @@ export function transformInteractionDataOption(bot: Bot, option: DiscordInteract
export function transformInteractionDataResolved(
bot: Bot,
payload: { resolved: DiscordInteractionDataResolved; shardId: number; guildId?: bigint },
payload: DiscordInteractionDataResolved,
extra?: { shardId?: number; guildId?: BigString },
): TransformProperty<InteractionDataResolved, TransformersDesiredProperties, DesiredPropertiesBehavior.RemoveKey> {
const transformed: InteractionDataResolved = {}
if (payload.resolved.messages) {
if (payload.messages) {
transformed.messages = new Collection(
Object.entries(payload.resolved.messages).map(([_id, value]) => {
Object.entries(payload.messages).map(([_id, value]) => {
// @ts-expect-error TODO: Deal with partials
const message = bot.transformers.message(bot, { message: value, shardId: payload.shardId }) as Message
const message = bot.transformers.message(bot, value, { shardId: extra?.shardId }) as Message
return [message.id, message]
}),
)
}
if (payload.resolved.users) {
if (payload.users) {
transformed.users = new Collection(
Object.entries(payload.resolved.users).map(([_id, value]) => {
Object.entries(payload.users).map(([_id, value]) => {
const user = bot.transformers.user(bot, value) as User
return [user.id, user]
}),
)
}
if (payload.guildId && payload.resolved.members) {
if (extra?.guildId && payload.members) {
transformed.members = new Collection(
Object.entries(payload.resolved.members).map(([id, value]) => {
Object.entries(payload.members).map(([id, value]) => {
// @ts-expect-error TODO: Deal with partials, value is missing 2 values but the transformer can handle it, despite what the types says
const member = bot.transformers.member(bot, value, payload.guildId!, bot.transformers.snowflake(id)) as InteractionResolvedDataMember<
TransformersDesiredProperties,
DesiredPropertiesBehavior
>
const member = bot.transformers.member(bot, value, {
guildId: extra.guildId,
userId: bot.transformers.snowflake(id),
}) as InteractionResolvedDataMember<TransformersDesiredProperties, DesiredPropertiesBehavior>
// We need to tell TS that we are sure the id is a bigint
return [member.id as bigint, member]
@@ -265,19 +260,19 @@ export function transformInteractionDataResolved(
)
}
if (payload.guildId && payload.resolved.roles) {
if (extra?.guildId && payload.roles) {
transformed.roles = new Collection(
Object.entries(payload.resolved.roles).map(([_id, value]) => {
const role = bot.transformers.role(bot, { role: value, guildId: payload.guildId! }) as Role
Object.entries(payload.roles).map(([_id, value]) => {
const role = bot.transformers.role(bot, value, { guildId: extra.guildId }) as Role
return [role.id, role]
}),
)
}
if (payload.resolved.channels) {
if (payload.channels) {
transformed.channels = new Collection(
Object.entries(payload.resolved.channels).map(([_id, value]) => {
const channel = bot.transformers.channel(bot, { channel: value }) as unknown as InteractionResolvedDataChannel<
Object.entries(payload.channels).map(([_id, value]) => {
const channel = bot.transformers.channel(bot, value) as unknown as InteractionResolvedDataChannel<
TransformersDesiredProperties,
DesiredPropertiesBehavior
>
@@ -287,9 +282,9 @@ export function transformInteractionDataResolved(
)
}
if (payload.resolved.attachments) {
if (payload.attachments) {
transformed.attachments = new Collection(
Object.entries(payload.resolved.attachments).map(([key, value]) => {
Object.entries(payload.attachments).map(([key, value]) => {
const id = bot.transformers.snowflake(key)
const attachment = bot.transformers.attachment(bot, value) as Attachment
return [id, attachment]
@@ -297,25 +292,24 @@ export function transformInteractionDataResolved(
)
}
return bot.transformers.customizers.interactionDataResolved(bot, payload, transformed)
return bot.transformers.customizers.interactionDataResolved(bot, payload, transformed, {
shardId: extra?.shardId,
guildId: extra?.guildId ? bot.transformers.snowflake(extra.guildId) : undefined,
})
}
export function transformInteractionCallbackResponse(
bot: Bot,
payload: { interactionCallbackResponse: DiscordInteractionCallbackResponse; shardId: number },
payload: DiscordInteractionCallbackResponse,
extra?: { shardId?: number },
): InteractionCallbackResponse {
const props = bot.transformers.desiredProperties.interactionCallbackResponse
const response = {} as SetupDesiredProps<InteractionCallbackResponse, TransformersDesiredProperties, DesiredPropertiesBehavior>
if (props.interaction && payload.interactionCallbackResponse.interaction)
response.interaction = bot.transformers.interactionCallback(bot, payload.interactionCallbackResponse.interaction)
if (props.resource && payload.interactionCallbackResponse.resource)
response.resource = bot.transformers.interactionResource(bot, {
interactionResource: payload.interactionCallbackResponse.resource,
shardId: payload.shardId,
})
if (props.interaction && payload.interaction) response.interaction = bot.transformers.interactionCallback(bot, payload.interaction)
if (props.resource && payload.resource) response.resource = bot.transformers.interactionResource(bot, payload.resource, { shardId: extra?.shardId })
return bot.transformers.customizers.interactionCallbackResponse(bot, payload.interactionCallbackResponse, response)
return bot.transformers.customizers.interactionCallbackResponse(bot, payload, response, extra)
}
export function transformInteractionCallback(bot: Bot, payload: DiscordInteractionCallback): InteractionCallback {
@@ -332,18 +326,13 @@ export function transformInteractionCallback(bot: Bot, payload: DiscordInteracti
return bot.transformers.customizers.interactionCallback(bot, payload, callback)
}
export function transformInteractionResource(
bot: Bot,
payload: { interactionResource: DiscordInteractionResource; shardId: number },
): InteractionResource {
export function transformInteractionResource(bot: Bot, payload: DiscordInteractionResource, extra?: { shardId?: number }): InteractionResource {
const props = bot.transformers.desiredProperties.interactionResource
const resource = {} as SetupDesiredProps<InteractionResource, TransformersDesiredProperties, DesiredPropertiesBehavior>
if (props.type && payload.interactionResource.type) resource.type = payload.interactionResource.type
if (props.activityInstance && payload.interactionResource.activity_instance)
resource.activityInstance = payload.interactionResource.activity_instance
if (props.message && payload.interactionResource.message)
resource.message = bot.transformers.message(bot, { message: payload.interactionResource.message, shardId: payload.shardId })
if (props.type && payload.type) resource.type = payload.type
if (props.activityInstance && payload.activity_instance) resource.activityInstance = payload.activity_instance
if (props.message && payload.message) resource.message = bot.transformers.message(bot, payload.message, { shardId: extra?.shardId })
return bot.transformers.customizers.interactionResource(bot, payload.interactionResource, resource)
return bot.transformers.customizers.interactionResource(bot, payload, resource, extra)
}
+31 -37
View File
@@ -1,4 +1,4 @@
import type { DiscordApplication, DiscordInviteCreate, DiscordInviteMetadata } from '@discordeno/types'
import type { DiscordInviteCreate, DiscordInviteMetadata } from '@discordeno/types'
import {
type Bot,
type DesiredPropertiesBehavior,
@@ -9,49 +9,43 @@ import {
type TransformersDesiredProperties,
} from '../index.js'
export function transformInvite(bot: Bot, payload: { invite: DiscordInviteCreate | DiscordInviteMetadata; shardId: number }): Invite {
export function transformInvite(bot: Bot, payload: DiscordInviteCreate | DiscordInviteMetadata, extra?: { shardId?: number }): Invite {
const props = bot.transformers.desiredProperties.invite
const invite = {} as SetupDesiredProps<Invite, TransformersDesiredProperties, DesiredPropertiesBehavior>
if (props.type && 'type' in payload.invite) invite.type = payload.invite.type
if (props.code && payload.invite.code) invite.code = payload.invite.code
if (props.createdAt && payload.invite.created_at) invite.createdAt = Date.parse(payload.invite.created_at)
if (props.inviter && payload.invite.inviter) invite.inviter = bot.transformers.user(bot, payload.invite.inviter)
if (props.maxAge) invite.maxAge = payload.invite.max_age
if (props.maxUses) invite.maxUses = payload.invite.max_uses
if (props.targetType && payload.invite.target_type) invite.targetType = payload.invite.target_type
if (props.targetUser && payload.invite.target_user) invite.targetUser = bot.transformers.user(bot, payload.invite.target_user)
if (props.targetApplication && payload.invite.target_application)
invite.targetApplication = bot.transformers.application(bot, {
application: payload.invite.target_application as DiscordApplication,
shardId: payload.shardId,
})
if (props.temporary && payload.invite.temporary) invite.temporary = payload.invite.temporary
if (props.uses && payload.invite.uses) invite.uses = payload.invite.uses
if (props.type && 'type' in payload) 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) invite.maxAge = payload.max_age
if (props.maxUses) 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)
// @ts-expect-error TODO: Partials
invite.targetApplication = bot.transformers.application(bot, payload.target_application, { shardId: extra?.shardId })
if (props.temporary && payload.temporary) invite.temporary = payload.temporary
if (props.uses && payload.uses) invite.uses = payload.uses
if (isInviteWithMetadata(payload.invite)) {
if (props.channelId && payload.invite.channel?.id) invite.channelId = bot.transformers.snowflake(payload.invite.channel.id)
if (props.guildId && payload.invite.guild?.id) invite.guildId = bot.transformers.snowflake(payload.invite.guild.id)
if (props.approximateMemberCount && payload.invite.approximate_member_count)
invite.approximateMemberCount = payload.invite.approximate_member_count
if (props.approximatePresenceCount && payload.invite.approximate_presence_count !== undefined)
invite.approximatePresenceCount = payload.invite.approximate_presence_count
if (props.guildScheduledEvent && payload.invite.guild_scheduled_event)
invite.guildScheduledEvent = bot.transformers.scheduledEvent(bot, payload.invite.guild_scheduled_event)
if (props.stageInstance && payload.invite.guild?.id && payload.invite.stage_instance) {
invite.stageInstance = bot.transformers.inviteStageInstance(bot, {
...payload.invite.stage_instance,
guildId: bot.transformers.snowflake(payload.invite.guild.id),
})
if (isInviteWithMetadata(payload)) {
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.stageInstance && payload.guild?.id && payload.stage_instance) {
invite.stageInstance = bot.transformers.inviteStageInstance(bot, payload.stage_instance, { guildId: payload.guild.id })
}
if (props.expiresAt && payload.invite.expires_at) {
invite.expiresAt = Date.parse(payload.invite.expires_at)
if (props.expiresAt && payload.expires_at) {
invite.expiresAt = Date.parse(payload.expires_at)
}
if (props.flags && payload.invite.flags) invite.flags = new ToggleBitfield(payload.invite.flags)
if (props.flags && payload.flags) invite.flags = new ToggleBitfield(payload.flags)
} else {
if (props.channelId && payload.invite.channel_id) invite.channelId = bot.transformers.snowflake(payload.invite.channel_id)
if (props.guildId && payload.invite.guild_id) invite.guildId = bot.transformers.snowflake(payload.invite.guild_id)
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)
}
return bot.transformers.customizers.invite(bot, payload.invite, invite)
return bot.transformers.customizers.invite(bot, payload, invite, extra)
}
+1 -1
View File
@@ -17,7 +17,7 @@ export function transformLobby(bot: Bot, payload: DiscordLobby): Lobby {
if (props.applicationId && payload.application_id) lobby.applicationId = bot.transformers.snowflake(payload.application_id)
if (props.metadata && payload.metadata) lobby.metadata = payload.metadata
if (props.members && payload.members) lobby.members = payload.members.map((member) => bot.transformers.lobbyMember(bot, member))
if (props.linkedChannel && payload.linked_channel) lobby.linkedChannel = bot.transformers.channel(bot, { channel: payload.linked_channel })
if (props.linkedChannel && payload.linked_channel) lobby.linkedChannel = bot.transformers.channel(bot, payload.linked_channel)
return bot.transformers.customizers.lobby(bot, payload, lobby)
}
+7 -4
View File
@@ -36,12 +36,12 @@ export const baseMember: Member = {
},
}
export function transformMember(bot: Bot, payload: DiscordMember, guildId: BigString | undefined, userId: BigString): Member {
export function transformMember(bot: Bot, payload: DiscordMember, extra?: { guildId?: BigString; userId?: BigString }): Member {
const member: SetupDesiredProps<Member, TransformersDesiredProperties, DesiredPropertiesBehavior> = Object.create(baseMember)
const props = bot.transformers.desiredProperties.member
if (props.id && userId) member.id = typeof userId === 'string' ? bot.transformers.snowflake(userId) : userId
if (props.guildId && guildId) member.guildId = typeof guildId === 'string' ? bot.transformers.snowflake(guildId) : guildId
if (props.id && extra?.userId) member.id = typeof extra.userId === 'string' ? bot.transformers.snowflake(extra.userId) : extra.userId
if (props.guildId && extra?.guildId) member.guildId = typeof extra.guildId === 'string' ? bot.transformers.snowflake(extra.guildId) : extra.guildId
if (props.user && payload.user) member.user = bot.transformers.user(bot, payload.user)
if (props.nick && payload.nick) member.nick = payload.nick
if (props.roles && payload.roles) member.roles = payload.roles.map((id) => bot.transformers.snowflake(id))
@@ -56,5 +56,8 @@ export function transformMember(bot: Bot, payload: DiscordMember, guildId: BigSt
if (props.avatarDecorationData && payload.avatar_decoration_data)
member.avatarDecorationData = bot.transformers.avatarDecorationData(bot, payload.avatar_decoration_data)
return bot.transformers.customizers.member(bot, payload, member)
return bot.transformers.customizers.member(bot, payload, member, {
guildId: extra?.guildId ? bot.transformers.snowflake(extra.guildId) : undefined,
userId: extra?.userId ? bot.transformers.snowflake(extra.userId) : undefined,
})
}
+67 -75
View File
@@ -1,5 +1,4 @@
import {
type DiscordApplication,
DiscordApplicationIntegrationType,
type DiscordMessage,
type DiscordMessageCall,
@@ -142,102 +141,97 @@ export const baseMessage: Message = {
},
}
export function transformMessage(bot: Bot, payload: { message: DiscordMessage; shardId: number }): Message {
const guildId = payload.message.guild_id ? bot.transformers.snowflake(payload.message.guild_id) : undefined
const userId = payload.message.author?.id ? bot.transformers.snowflake(payload.message.author.id) : undefined
export function transformMessage(bot: Bot, payload: DiscordMessage, extra?: { shardId?: number }): Message {
const guildId = payload.guild_id ? bot.transformers.snowflake(payload.guild_id) : undefined
const userId = payload.author?.id ? bot.transformers.snowflake(payload.author.id) : undefined
const message: SetupDesiredProps<Message, TransformersDesiredProperties, DesiredPropertiesBehavior> = Object.create(baseMessage)
message.bitfield = new ToggleBitfield()
message.flags = new ToggleBitfield(payload.message.flags)
message.flags = new ToggleBitfield(payload.flags)
const props = bot.transformers.desiredProperties.message
if (props.author && payload.message.author) message.author = bot.transformers.user(bot, payload.message.author)
if (props.application && payload.message.application)
message.application = bot.transformers.application(bot, {
application: payload.message.application as DiscordApplication,
shardId: payload.shardId,
})
if (props.applicationId && payload.message.application_id) message.applicationId = bot.transformers.snowflake(payload.message.application_id)
if (props.attachments && payload.message.attachments?.length)
message.attachments = payload.message.attachments.map((attachment) => bot.transformers.attachment(bot, attachment))
if (props.channelId && payload.message.channel_id) message.channelId = bot.transformers.snowflake(payload.message.channel_id)
if (props.components && payload.message.components?.length)
message.components = payload.message.components.map((comp) => bot.transformers.component(bot, comp))
if (props.content) message.content = payload.message.content ?? EMPTY_STRING
if (props.editedTimestamp && payload.message.edited_timestamp) message.editedTimestamp = Date.parse(payload.message.edited_timestamp)
if (props.embeds && payload.message.embeds?.length) message.embeds = payload.message.embeds.map((embed) => bot.transformers.embed(bot, embed))
if (props.author && payload.author) message.author = bot.transformers.user(bot, payload.author)
if (props.application && payload.application)
// @ts-expect-error TODO: Partials
message.application = bot.transformers.application(bot, payload.application, { shardId: extra?.shardId })
if (props.applicationId && payload.application_id) message.applicationId = bot.transformers.snowflake(payload.application_id)
if (props.attachments && payload.attachments?.length)
message.attachments = payload.attachments.map((attachment) => bot.transformers.attachment(bot, attachment))
if (props.channelId && payload.channel_id) message.channelId = bot.transformers.snowflake(payload.channel_id)
if (props.components && payload.components?.length) message.components = payload.components.map((comp) => bot.transformers.component(bot, comp))
if (props.content) message.content = payload.content ?? EMPTY_STRING
if (props.editedTimestamp && payload.edited_timestamp) message.editedTimestamp = Date.parse(payload.edited_timestamp)
if (props.embeds && payload.embeds?.length) message.embeds = payload.embeds.map((embed) => bot.transformers.embed(bot, embed))
if (props.guildId && guildId) message.guildId = guildId
if (props.id && payload.message.id) message.id = bot.transformers.snowflake(payload.message.id)
if (props.interactionMetadata && payload.message.interaction_metadata)
message.interactionMetadata = bot.transformers.messageInteractionMetadata(bot, payload.message.interaction_metadata)
if (props.interaction && payload.message.interaction) {
if (props.id && payload.id) message.id = bot.transformers.snowflake(payload.id)
if (props.interactionMetadata && payload.interaction_metadata)
message.interactionMetadata = bot.transformers.messageInteractionMetadata(bot, payload.interaction_metadata)
if (props.interaction && payload.interaction) {
const interaction = {} as SetupDesiredProps<MessageInteraction, TransformersDesiredProperties, DesiredPropertiesBehavior>
const messageInteractionProps = bot.transformers.desiredProperties.messageInteraction
if (messageInteractionProps.id) {
interaction.id = bot.transformers.snowflake(payload.message.interaction.id)
interaction.id = bot.transformers.snowflake(payload.interaction.id)
}
if (messageInteractionProps.member && payload.message.interaction.member) {
if (messageInteractionProps.member && payload.interaction.member) {
// @ts-expect-error TODO: partial - check why this is partial and handle as needed
interaction.member = bot.transformers.member(bot, payload.message.interaction.member, guildId, payload.message.interaction.user.id)
interaction.member = bot.transformers.member(bot, payload.interaction.member, { guildId, userId: payload.interaction.user.id })
}
if (messageInteractionProps.name) {
interaction.name = payload.message.interaction.name
interaction.name = payload.interaction.name
}
if (messageInteractionProps.type) {
interaction.type = payload.message.interaction.type
interaction.type = payload.interaction.type
}
if (messageInteractionProps.user) {
interaction.user = bot.transformers.user(bot, payload.message.interaction.user)
interaction.user = bot.transformers.user(bot, payload.interaction.user)
}
message.interaction = interaction
}
if (props.member && guildId && userId && payload.message.member)
if (props.member && guildId && userId && payload.member)
// @ts-expect-error TODO: partial
message.member = bot.transformers.member(bot, payload.message.member, guildId, userId)
if (payload.message.mention_everyone) message.mentionEveryone = true
if (props.mentionedChannelIds && payload.message.mention_channels?.length) {
message.member = bot.transformers.member(bot, payload.member, { guildId, userId })
if (payload.mention_everyone) message.mentionEveryone = true
if (props.mentionedChannelIds && payload.mention_channels?.length) {
message.mentionedChannelIds = [
// Keep any ids tht discord sends
...(payload.message.mention_channels ?? []).map((m) => bot.transformers.snowflake(m.id)),
...(payload.mention_channels ?? []).map((m) => bot.transformers.snowflake(m.id)),
// Add any other ids that can be validated in a channel mention format
...(payload.message.content?.match(CHANNEL_MENTION_REGEX) ?? []).map((text) =>
...(payload.content?.match(CHANNEL_MENTION_REGEX) ?? []).map((text) =>
// converts the <#123> into 123
bot.transformers.snowflake(text.substring(2, text.length - 1)),
),
]
}
if (props.mentionedRoleIds && payload.message.mention_roles?.length)
message.mentionedRoleIds = payload.message.mention_roles.map((id) => bot.transformers.snowflake(id))
if (props.mentions && payload.message.mentions?.length) message.mentions = payload.message.mentions.map((user) => bot.transformers.user(bot, user))
if (props.messageReference && payload.message.message_reference) {
if (props.mentionedRoleIds && payload.mention_roles?.length)
message.mentionedRoleIds = payload.mention_roles.map((id) => bot.transformers.snowflake(id))
if (props.mentions && payload.mentions?.length) message.mentions = payload.mentions.map((user) => bot.transformers.user(bot, user))
if (props.messageReference && payload.message_reference) {
const reference = {} as NonNullable<Message['messageReference']>
const messageReferenceProps = bot.transformers.desiredProperties.messageReference
if (messageReferenceProps.channelId && payload.message.message_reference.channel_id) {
reference.channelId = bot.transformers.snowflake(payload.message.message_reference.channel_id)
if (messageReferenceProps.channelId && payload.message_reference.channel_id) {
reference.channelId = bot.transformers.snowflake(payload.message_reference.channel_id)
}
if (messageReferenceProps.guildId && payload.message.message_reference.guild_id) {
reference.guildId = bot.transformers.snowflake(payload.message.message_reference.guild_id)
if (messageReferenceProps.guildId && payload.message_reference.guild_id) {
reference.guildId = bot.transformers.snowflake(payload.message_reference.guild_id)
}
if (messageReferenceProps.messageId && payload.message.message_reference.message_id) {
reference.messageId = bot.transformers.snowflake(payload.message.message_reference.message_id)
if (messageReferenceProps.messageId && payload.message_reference.message_id) {
reference.messageId = bot.transformers.snowflake(payload.message_reference.message_id)
}
message.messageReference = reference
}
if (props.referencedMessage && payload.message.referenced_message)
message.referencedMessage = bot.transformers.message(bot, { message: payload.message.referenced_message, shardId: payload.shardId })
if (props.messageSnapshots && payload.message.message_snapshots)
message.messageSnapshots = payload.message.message_snapshots.map((snap) =>
bot.transformers.messageSnapshot(bot, { messageSnapshot: snap, shardId: payload.shardId }),
)
if (props.nonce && payload.message.nonce) message.nonce = payload.message.nonce
if (payload.message.pinned) message.pinned = true
if (props.reactions && payload.message.reactions?.length) {
message.reactions = payload.message.reactions.map((reaction) => ({
if (props.referencedMessage && payload.referenced_message)
message.referencedMessage = bot.transformers.message(bot, payload.referenced_message, { shardId: extra?.shardId })
if (props.messageSnapshots && payload.message_snapshots)
message.messageSnapshots = payload.message_snapshots.map((snap) => bot.transformers.messageSnapshot(bot, snap, { shardId: extra?.shardId }))
if (props.nonce && payload.nonce) message.nonce = payload.nonce
if (payload.pinned) message.pinned = true
if (props.reactions && payload.reactions?.length) {
message.reactions = payload.reactions.map((reaction) => ({
me: reaction.me,
meBurst: reaction.me_burst,
count: reaction.count,
@@ -250,43 +244,41 @@ export function transformMessage(bot: Bot, payload: { message: DiscordMessage; s
burstColors: reaction.burst_colors,
}))
}
if (props.stickerItems && payload.message.sticker_items?.length)
message.stickerItems = payload.message.sticker_items.map((item) => ({
if (props.stickerItems && payload.sticker_items?.length)
message.stickerItems = payload.sticker_items.map((item) => ({
id: bot.transformers.snowflake(item.id),
name: item.name,
formatType: item.format_type,
}))
if (payload.message.tts) message.tts = true
if (props.thread && payload.message.thread) message.thread = bot.transformers.channel(bot, { channel: payload.message.thread, guildId })
if (props.type) message.type = payload.message.type
if (props.webhookId && payload.message.webhook_id) message.webhookId = bot.transformers.snowflake(payload.message.webhook_id)
if (props.poll && payload.message.poll) message.poll = bot.transformers.poll(bot, payload.message.poll)
if (props.call && payload.message.call) message.call = bot.transformers.messageCall(bot, payload.message.call)
if (payload.tts) message.tts = true
if (props.thread && payload.thread) message.thread = bot.transformers.channel(bot, 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.poll && payload.poll) message.poll = bot.transformers.poll(bot, payload.poll)
if (props.call && payload.call) message.call = bot.transformers.messageCall(bot, payload.call)
return bot.transformers.customizers.message(bot, payload.message, message)
return bot.transformers.customizers.message(bot, payload, message, extra)
}
export function transformMessagePin(bot: Bot, payload: DiscordMessagePin): MessagePin {
export function transformMessagePin(bot: Bot, payload: DiscordMessagePin, extra?: { shardId?: number }): MessagePin {
const props = bot.transformers.desiredProperties.messagePin
const messagePin = {} as SetupDesiredProps<MessagePin, TransformersDesiredProperties, DesiredPropertiesBehavior>
if (props.pinnedAt && payload.pinned_at) messagePin.pinnedAt = Date.parse(payload.pinned_at)
if (props.message && payload.message) messagePin.message = bot.transformers.message(bot, { message: payload.message, shardId: 0 })
if (props.message && payload.message) messagePin.message = bot.transformers.message(bot, payload.message, { shardId: extra?.shardId })
return bot.transformers.customizers.messagePin(bot, payload, messagePin)
return bot.transformers.customizers.messagePin(bot, payload, messagePin, extra)
}
export function transformMessageSnapshot(bot: Bot, payload: { messageSnapshot: DiscordMessageSnapshot; shardId: number }): MessageSnapshot {
export function transformMessageSnapshot(bot: Bot, payload: DiscordMessageSnapshot, extra?: { shardId?: number }): MessageSnapshot {
const props = bot.transformers.desiredProperties.messageSnapshot
const messageSnapshot = {} as SetupDesiredProps<MessageSnapshot, TransformersDesiredProperties, DesiredPropertiesBehavior>
if (props.message && payload.messageSnapshot.message)
messageSnapshot.message = bot.transformers.message(bot, {
message: payload.messageSnapshot.message as DiscordMessage,
shardId: payload.shardId,
}) as Message
if (props.message && payload.message)
// @ts-expect-error TODO: Partials
messageSnapshot.message = bot.transformers.message(bot, payload.message, { shardId: extra?.shardId }) as Message
return bot.transformers.customizers.messageSnapshot(bot, payload.messageSnapshot, messageSnapshot)
return bot.transformers.customizers.messageSnapshot(bot, payload, messageSnapshot, extra)
}
export function transformMessageInteractionMetadata(bot: Bot, payload: DiscordMessageInteractionMetadata): MessageInteractionMetadata {
+19 -19
View File
@@ -51,31 +51,31 @@ export const baseRole: Role = {
},
}
export function transformRole(bot: Bot, payload: { role: DiscordRole; guildId: BigString }): Role {
export function transformRole(bot: Bot, payload: DiscordRole, extra?: { guildId?: BigString }): Role {
const role: SetupDesiredProps<Role, TransformersDesiredProperties, DesiredPropertiesBehavior> = Object.create(baseRole)
const props = bot.transformers.desiredProperties.role
if (props.id && payload.role.id) role.id = bot.transformers.snowflake(payload.role.id)
if (props.id && payload.id) role.id = bot.transformers.snowflake(payload.id)
// Role name can be an empty string
if (props.name && payload.role.name !== undefined) role.name = payload.role.name
if (props.position) role.position = payload.role.position
if (props.guildId && payload.guildId) role.guildId = bot.transformers.snowflake(payload.guildId)
if (props.color && payload.role.color !== undefined) role.color = payload.role.color
if (props.permissions && payload.role.permissions) role.permissions = new Permissions(payload.role.permissions)
if (props.icon && payload.role.icon) role.icon = iconHashToBigInt(payload.role.icon)
if (props.unicodeEmoji && payload.role.unicode_emoji) role.unicodeEmoji = payload.role.unicode_emoji
if (props.flags) role.flags = payload.role.flags
if (props.tags && payload.role.tags) {
if (props.name && payload.name !== undefined) role.name = payload.name
if (props.position) role.position = payload.position
if (props.guildId && extra?.guildId) role.guildId = bot.transformers.snowflake(extra?.guildId)
if (props.color && payload.color !== undefined) role.color = payload.color
if (props.permissions && payload.permissions) role.permissions = new Permissions(payload.permissions)
if (props.icon && payload.icon) role.icon = iconHashToBigInt(payload.icon)
if (props.unicodeEmoji && payload.unicode_emoji) role.unicodeEmoji = payload.unicode_emoji
if (props.flags) role.flags = payload.flags
if (props.tags && payload.tags) {
role.internalTags = {}
if (payload.role.tags.bot_id) role.internalTags.botId = bot.transformers.snowflake(payload.role.tags.bot_id)
if (payload.role.tags.integration_id) role.internalTags.integrationId = bot.transformers.snowflake(payload.role.tags.integration_id)
if (payload.role.tags.subscription_listing_id)
role.internalTags.subscriptionListingId = bot.transformers.snowflake(payload.role.tags.subscription_listing_id)
}
if (props.toggles) {
role.toggles = new RoleToggles(payload.role)
if (payload.tags.bot_id) role.internalTags.botId = bot.transformers.snowflake(payload.tags.bot_id)
if (payload.tags.integration_id) role.internalTags.integrationId = bot.transformers.snowflake(payload.tags.integration_id)
if (payload.tags.subscription_listing_id)
role.internalTags.subscriptionListingId = bot.transformers.snowflake(payload.tags.subscription_listing_id)
}
if (props.toggles) role.toggles = new RoleToggles(payload)
return bot.transformers.customizers.role(bot, payload.role, role)
return bot.transformers.customizers.role(bot, payload, role, {
guildId: extra?.guildId ? bot.transformers.snowflake(extra.guildId) : undefined,
})
}
export function transformRoleColors(bot: Bot, payload: DiscordRoleColors): RoleColors {
@@ -1,23 +1,24 @@
import type { BigString, DiscordInviteStageInstance, DiscordMember } from '@discordeno/types'
import type { BigString, DiscordInviteStageInstance } from '@discordeno/types'
import type { Bot, DesiredPropertiesBehavior, InviteStageInstance, SetupDesiredProps, TransformersDesiredProperties } from '../index.js'
export function transformInviteStageInstance(bot: Bot, payload: DiscordInviteStageInstance & { guildId: BigString }): InviteStageInstance {
export function transformInviteStageInstance(bot: Bot, payload: DiscordInviteStageInstance, extra?: { guildId?: BigString }): InviteStageInstance {
const props = bot.transformers.desiredProperties.inviteStageInstance
const inviteStageInstance = {} as SetupDesiredProps<InviteStageInstance, TransformersDesiredProperties, DesiredPropertiesBehavior>
if (props.members && payload.members) {
inviteStageInstance.members = payload.members.map((member) =>
bot.transformers.member(
bot,
member as DiscordMember,
payload.guildId,
member.user?.id ? bot.transformers.snowflake(member.user.id) : undefined!,
),
// @ts-expect-error TODO: Partials
bot.transformers.member(bot, member, {
guildId: extra?.guildId,
userId: member.user?.id,
}),
)
}
if (props.participantCount) inviteStageInstance.participantCount = payload.participant_count
if (props.speakerCount) inviteStageInstance.participantCount = payload.participant_count
if (props.topic && payload.topic) inviteStageInstance.topic = payload.topic
return bot.transformers.customizers.inviteStageInstance(bot, payload, inviteStageInstance)
return bot.transformers.customizers.inviteStageInstance(bot, payload, inviteStageInstance, {
guildId: extra?.guildId ? bot.transformers.snowflake(extra.guildId) : undefined,
})
}
@@ -8,12 +8,10 @@ export function transformThreadMember(bot: Bot, payload: DiscordThreadMember, ex
joinTimestamp: Date.parse(payload.join_timestamp),
flags: payload.flags,
member: payload.member
? bot.transformers.member(
bot,
payload.member,
extra?.guildId ? bot.transformers.snowflake(extra.guildId) : undefined,
bot.transformers.snowflake(payload.user_id),
)
? bot.transformers.member(bot, payload.member, {
guildId: extra?.guildId,
userId: payload.user_id,
})
: undefined,
} as ThreadMember
+11 -9
View File
@@ -2,17 +2,19 @@ import type { BigString, DiscordVoiceState } from '@discordeno/types'
import type { Bot, DesiredPropertiesBehavior, SetupDesiredProps, TransformersDesiredProperties, VoiceState } from '../index.js'
import { VoiceStateToggles } from './toggles/voice.js'
export function transformVoiceState(bot: Bot, payload: { voiceState: DiscordVoiceState; guildId: BigString }): VoiceState {
export function transformVoiceState(bot: Bot, payload: DiscordVoiceState, extra?: { guildId?: BigString }): VoiceState {
const props = bot.transformers.desiredProperties.voiceState
const voiceState = {} as SetupDesiredProps<VoiceState, TransformersDesiredProperties, DesiredPropertiesBehavior>
if (props.requestToSpeakTimestamp && payload.voiceState.request_to_speak_timestamp)
voiceState.requestToSpeakTimestamp = Date.parse(payload.voiceState.request_to_speak_timestamp)
if (props.channelId && payload.voiceState.channel_id) voiceState.channelId = bot.transformers.snowflake(payload.voiceState.channel_id)
if (props.guildId) voiceState.guildId = bot.transformers.snowflake(payload.guildId)
if (props.toggles) voiceState.toggles = new VoiceStateToggles(payload.voiceState)
if (props.sessionId) voiceState.sessionId = payload.voiceState.session_id
if (props.userId && payload.voiceState.user_id) voiceState.userId = bot.transformers.snowflake(payload.voiceState.user_id) ?? 0n
if (props.requestToSpeakTimestamp && payload.request_to_speak_timestamp)
voiceState.requestToSpeakTimestamp = Date.parse(payload.request_to_speak_timestamp)
if (props.channelId && payload.channel_id) voiceState.channelId = bot.transformers.snowflake(payload.channel_id)
if (props.guildId && extra?.guildId) voiceState.guildId = bot.transformers.snowflake(extra.guildId)
if (props.toggles) voiceState.toggles = new VoiceStateToggles(payload)
if (props.sessionId) voiceState.sessionId = payload.session_id
if (props.userId && payload.user_id) voiceState.userId = bot.transformers.snowflake(payload.user_id)
return bot.transformers.customizers.voiceState(bot, payload.voiceState, voiceState)
return bot.transformers.customizers.voiceState(bot, payload, voiceState, {
guildId: extra?.guildId ? bot.transformers.snowflake(extra.guildId) : undefined,
})
}
+1 -1
View File
@@ -7,7 +7,7 @@ export function transformWidget(bot: Bot, payload: DiscordGuildWidget): GuildWid
name: payload.name,
instantInvite: payload.instant_invite ?? undefined,
// @ts-expect-error TODO: Deal with partials
channels: payload.channels.map((channel) => bot.transformers.channel(bot, { channel })),
channels: payload.channels.map((channel) => bot.transformers.channel(bot, channel)),
// @ts-expect-error TODO: Deal with partials
members: payload.members.map((user) => bot.transformers.user(bot, user)),
presenceCount: payload.presence_count,