Add partial guild to interaction (#3618)

Co-authored-by: Skillz4Killz <23035000+Skillz4Killz@users.noreply.github.com>
This commit is contained in:
Fleny
2024-07-07 16:32:06 -05:00
committed by GitHub
co-authored by Skillz4Killz
parent 24ea6f8af8
commit 2f89d4da30
4 changed files with 56 additions and 37 deletions
@@ -1,8 +1,13 @@
import type { DiscordGatewayPayload, DiscordInteraction } from '@discordeno/types'
import type { Bot } from '../../index.js'
export async function handleInteractionCreate(bot: Bot, data: DiscordGatewayPayload): Promise<void> {
export async function handleInteractionCreate(bot: Bot, data: DiscordGatewayPayload, shardId: number): Promise<void> {
if (!bot.events.interactionCreate) return
bot.events.interactionCreate(bot.transformers.interaction(bot, data.d as DiscordInteraction))
bot.events.interactionCreate(
bot.transformers.interaction(bot, {
interaction: data.d as DiscordInteraction,
shardId,
}),
)
}
+4 -2
View File
@@ -130,7 +130,7 @@ import type { BotInteractionResponse, DiscordComponent, DiscordInteractionRespon
export interface Transformers {
customizers: {
channel: (bot: Bot, payload: DiscordChannel, channel: Channel) => any
interaction: (bot: Bot, payload: DiscordInteraction, interaction: Interaction) => any
interaction: (bot: Bot, payload: { interaction: DiscordInteraction; shardId: number }, interaction: Interaction) => any
message: (bot: Bot, payload: DiscordMessage, message: Message) => any
messageInteractionMetadata: (bot: Bot, payload: DiscordMessageInteractionMetadata, metadata: MessageInteractionMetadata) => any
messageCall: (bot: Bot, payload: DiscordMessageCall, call: MessageCall) => any
@@ -300,6 +300,7 @@ export interface Transformers {
id: boolean
applicationId: boolean
type: boolean
guild: boolean
guildId: boolean
channel: boolean
channelId: boolean
@@ -602,7 +603,7 @@ export interface Transformers {
messageCall: (bot: Bot, payload: DiscordMessageCall) => MessageCall
role: (bot: Bot, payload: { role: DiscordRole } & { guildId: BigString }) => Role
voiceState: (bot: Bot, payload: { voiceState: DiscordVoiceState } & { guildId: bigint }) => VoiceState
interaction: (bot: Bot, payload: DiscordInteraction) => Interaction
interaction: (bot: Bot, payload: { interaction: DiscordInteraction; shardId: number }) => Interaction
interactionDataOptions: (bot: Bot, payload: DiscordInteractionDataOption) => InteractionDataOption
integration: (bot: Bot, payload: DiscordIntegrationCreateUpdate) => Integration
invite: (bot: Bot, payload: { invite: DiscordInviteCreate | DiscordInviteMetadata; shardId: number }) => Invite
@@ -919,6 +920,7 @@ export function createTransformers(options: Partial<Transformers>, opts?: Create
id: opts?.defaultDesiredPropertiesValue ?? false,
applicationId: opts?.defaultDesiredPropertiesValue ?? false,
type: opts?.defaultDesiredPropertiesValue ?? false,
guild: opts?.defaultDesiredPropertiesValue ?? false,
guildId: opts?.defaultDesiredPropertiesValue ?? false,
channel: opts?.defaultDesiredPropertiesValue ?? false,
channelId: opts?.defaultDesiredPropertiesValue ?? false,
+43 -33
View File
@@ -19,6 +19,7 @@ import {
type Component,
type DiscordChannel,
type DiscordInteractionContextType,
type Guild,
} from '../index.js'
import type { DiscordInteractionDataResolved } from '../typings.js'
import type { Attachment } from './attachment.js'
@@ -38,6 +39,8 @@ export interface Interaction extends BaseInteraction {
applicationId: bigint
/** The type of interaction */
type: InteractionTypes
/** Guild that the interaction was sent from */
guild: Guild
/** The guild it was sent from */
guildId?: bigint
/** The channel it was sent from */
@@ -204,55 +207,62 @@ const baseInteraction: Partial<Interaction> & BaseInteraction = {
},
}
export function transformInteraction(bot: Bot, payload: DiscordInteraction): Interaction {
const guildId = payload.guild_id ? bot.transformers.snowflake(payload.guild_id) : undefined
const user = bot.transformers.user(bot, payload.member?.user ?? payload.user!)
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
const user = bot.transformers.user(bot, payload.interaction.member?.user ?? payload.interaction.user!)
const interaction: Interaction = Object.create(baseInteraction)
const props = bot.transformers.desiredProperties.interaction
interaction.bot = bot
interaction.acknowledged = false
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.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.guildId && guildId) interaction.guildId = guildId
if (props.user && user) interaction.user = user
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)
if (props.channel && payload.channel) interaction.channel = bot.transformers.channel(bot, { channel: payload.channel as DiscordChannel, 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, user.id)
if (props.authorizingIntegrationOwners && payload.authorizing_integration_owners) {
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, payload.interaction.message)
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, guildId, user.id)
if (props.authorizingIntegrationOwners && payload.interaction.authorizing_integration_owners) {
interaction.authorizingIntegrationOwners = {}
if (payload.authorizing_integration_owners['0'])
if (payload.interaction.authorizing_integration_owners['0'])
interaction.authorizingIntegrationOwners[DiscordApplicationIntegrationType.GuildInstall] = bot.transformers.snowflake(
payload.authorizing_integration_owners['0'],
payload.interaction.authorizing_integration_owners['0'],
)
if (payload.authorizing_integration_owners['1'])
if (payload.interaction.authorizing_integration_owners['1'])
interaction.authorizingIntegrationOwners[DiscordApplicationIntegrationType.UserInstall] = bot.transformers.snowflake(
payload.authorizing_integration_owners['1'],
payload.interaction.authorizing_integration_owners['1'],
)
}
if (props.context && payload.context) interaction.context = payload.context
if (props.data && payload.data) {
if (props.context && payload.interaction.context) interaction.context = payload.interaction.context
if (props.data && payload.interaction.data) {
interaction.data = {
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 ? transformInteractionDataResolved(bot, payload.data.resolved, guildId) : 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,
// guildId: payload.data.guild_id ? bot.transformers.snowflake(payload.data.guild_id) : undefined,
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 ? transformInteractionDataResolved(bot, payload.interaction.data.resolved, 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,
// guildId: payload.interaction.data.guild_id ? bot.transformers.snowflake(payload.interaction.data.guild_id) : undefined,
}
}
+2
View File
@@ -1794,6 +1794,8 @@ export interface DiscordInteraction {
application_id: string
/** The type of interaction */
type: InteractionTypes
/** Guild that the interaction was sent from */
guild?: Partial<DiscordGuild>
/** The guild it was sent from */
guild_id?: string
/** The channel it was sent from */