{"version":3,"file":"Response.mjs","sourceRoot":"","sources":["../../src/interactions/Response.mts"],"names":[],"mappings":"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","sourcesContent":["import { APIApplicationCommandOptionChoice, InteractionResponseType, MessageFlags, Routes, Snowflake, type APIMessage } from \"discord-api-types/v10\";\nimport { Headers, fetch } from \"undici\";\nimport FormData from \"form-data\";\nimport { DISCORD_API_BASE_URL } from \"../constants.mjs\";\nimport BaseInteraction, { InteractionModalResponseData, InteractionResponseData } from \"./BaseInteraction.mjs\";\nimport AttachmentBuilder from \"../basic/AttachmentBuilder.mjs\";\n\n\nconst discordPostForm = (url: string, form: FormData, method = \"POST\") => fetch(DISCORD_API_BASE_URL + url, { body: form.getBuffer(), headers: form.getHeaders(), method });\nconst discordPost = (url: string, body: object, method = \"POST\") => fetch(DISCORD_API_BASE_URL + url, { body: JSON.stringify(body), headers: jsonHeaders, method });\nconst discordDelete = (url: string) => fetch(DISCORD_API_BASE_URL + url, { method: \"DELETE\" });\n\n\nfunction addAttachmentsToForm(data: object, attachments: AttachmentBuilder[]): FormData {\n    // @ts-expect-error I know that this exists\n    data[\"data\"][\"attachments\"] = attachments.map((attachment, index) => ({\n        id: index.toString(),\n        filename: attachment.name,\n    }));\n\n    // @ts-expect-error Not needed\n    data[\"attachments\"] = undefined;\n    const form = new FormData();\n    form.append(\"payload_json\", JSON.stringify(data), { contentType: \"application/json\" });\n\n    // loop through data.attachments (with index)\n    for (const [index, attachment] of attachments?.entries() ?? []) {\n        form.append(`files[${index}]`, attachment.file, { filename: attachment.name });\n    }\n\n    return form;\n}\n\nexport class InteractionResponseMethods extends BaseInteraction {\n    /** Reply to the interaction (within 3sec) */\n    async reply(data: InteractionResponseData, fetchResponse: true): Promise<APIMessage>;\n    async reply(data: InteractionResponseData, fetchResponse?: boolean): Promise<void>;\n    async reply(data: InteractionResponseData, fetchResponse?: boolean): Promise<void | APIMessage> {\n\n        const form = addAttachmentsToForm({\n            type: InteractionResponseType.ChannelMessageWithSource,\n            data: { ...data, flags: data.ephemeral ? MessageFlags.Ephemeral : null },\n        }, data.attachments ?? []);\n\n        const res = await discordPostForm(Routes.interactionCallback(this.id, this.token), form);\n\n        if (!res.ok) {\n            throw new Error(await res.text());\n        }\n\n        // Clearing it from ram\n        await res.text();\n\n        if (fetchResponse) return this.fetchReply();\n        return;\n    }\n\n    /** Edit a response to the interaction */\n    async editReply(data: InteractionResponseData, messageId: Snowflake | \"@original\" = \"@original\"): Promise<APIMessage> {\n\n        const form = addAttachmentsToForm({\n            // flags: data?.ephemeral ? MessageFlags.Ephemeral : null,\n            ...data,\n        }, data.attachments ?? []);\n\n        const res = await discordPostForm(Routes.webhookMessage(this.applicationId, this.token, messageId), form, \"PATCH\");\n\n        if (!res.ok) {\n            throw new Error(await res.text());\n        }\n\n        return res.json() as Promise<APIMessage>;\n    }\n\n    /** Delete a reply from the interaction*/\n    async deleteReply(messageId: Snowflake | \"@original\" = \"@original\"): Promise<void> {\n\n        const res = await discordDelete(Routes.webhookMessage(this.applicationId, this.token, messageId));\n\n        if (!res.ok) {\n            throw new Error(await res.text());\n        }\n\n        // Clearing it from ram\n        res.text();\n\n        return;\n    }\n\n    /** Create a new  */\n    async followUp(data: InteractionResponseData): Promise<APIMessage> {\n\n        const form = addAttachmentsToForm({\n            flags: data.ephemeral ? MessageFlags.Ephemeral : null,\n            ...data,\n        }, data.attachments ?? []);\n\n        const res = await discordPost(Routes.webhook(this.applicationId, this.token), form);\n\n        if (!res.ok) {\n            throw new Error(await res.text());\n        }\n\n        return await res.json() as APIMessage;\n    }\n\n    async fetchReply(messageId: Snowflake | \"@original\" = \"@original\"): Promise<APIMessage> {\n\n        const url = DISCORD_API_BASE_URL + Routes.webhookMessage(this.applicationId, this.token, messageId);\n\n        const res = await fetch(url, { method: \"GET\" });\n\n        if (!res.ok) {\n            throw new Error(await res.text());\n        }\n\n        return await res.json() as APIMessage;\n\n    }\n\n    async deferReply(data?: { ephemeral?: boolean }): Promise<void> {\n\n        const res = await discordPost(Routes.interactionCallback(this.id, this.token), {\n            type: InteractionResponseType.DeferredChannelMessageWithSource,\n            flags: data?.ephemeral ? MessageFlags.Ephemeral : null,\n        });\n\n        if (!res.ok) {\n            throw new Error(await res.text());\n        }\n\n        // Clearing it from ram\n        res.text();\n\n        return;\n    }\n\n    async showModal(data: InteractionModalResponseData): Promise<void> {\n\n        const res = await discordPost(Routes.interactionCallback(this.id, this.token), {\n            type: InteractionResponseType.Modal,\n            data,\n        });\n\n        if (!res.ok) {\n            throw new Error(await res.text());\n        }\n\n        // Clearing it from ram\n        res.text();\n\n        return;\n    }\n\n    async deferUpdate(): Promise<void> {\n\n        const res = await discordPost(Routes.interactionCallback(this.id, this.token), {\n            type: InteractionResponseType.DeferredMessageUpdate,\n        });\n\n        if (!res.ok) {\n            throw new Error(await res.text());\n        }\n\n        // Clearing it from ram\n        res.text();\n\n        return;\n    }\n\n    async update(data: InteractionResponseData, fetchResponse: true): Promise<APIMessage>;\n    async update(data: InteractionResponseData, fetchResponse?: boolean): Promise<void>;\n    async update(data: InteractionResponseData, fetchResponse?: boolean): Promise<void | APIMessage> {\n\n        const form = addAttachmentsToForm({\n            type: InteractionResponseType.UpdateMessage,\n            data: { ...data, flags: data.ephemeral ? MessageFlags.Ephemeral : null },\n        }, data.attachments ?? []);\n\n        const res = await discordPostForm(Routes.interactionCallback(this.id, this.token), form);\n\n        if (!res.ok) {\n            throw new Error(await res.text());\n        }\n\n        // Clearing it from ram\n        res.text();\n\n        if (fetchResponse) return this.fetchReply();\n        return;\n    }\n\n    async respond(choices: APIApplicationCommandOptionChoice[]): Promise<void> {\n\n        const res = await discordPost(Routes.interactionCallback(this.id, this.token), {\n            type: InteractionResponseType.ApplicationCommandAutocompleteResult,\n            data: {\n                choices,\n            }\n        });\n\n        if (!res.ok) {\n            throw new Error(await res.text());\n        }\n\n        // Clearing it from ram\n        res.text();\n\n        return;\n    }\n\n}\n\nconst jsonHeaders = new Headers({ \"content-type\": \"application/json\" });\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\n// const consume = (any: any) => any;\n\n\n/** @internal methods added in InteractionResponseMethods */\ntype ResponseMethodName = Exclude<keyof InteractionResponseMethods, keyof BaseInteraction>;\n\n/**\n * Mixin helper for adding responses to an interaction. Use in in combination with\n * `createInteractionMixinList` and `applyInteractionResponseMixins`. You'll see these all around.\n *\n * More about mixins: https://www.typescriptlang.org/docs/handbook/mixins.html#alternative-pattern.\n */\nexport type InteractionResponseMixin<Keys extends readonly ResponseMethodName[]> = Pick<\n    InteractionResponseMethods,\n    Keys[number]\n>;\n\n/**\n * Returns the given argument, which is a typed list of methods from `InteractionResponseMethods`.\n */\nexport function createInteractionMixinList<T extends ResponseMethodName>(list: T[]): T[] {\n    return list;\n}\n\n/**\n * Applies the given `methods` to `base`\n *\n * @see {InteractionResponseMixin} which explains usage.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function applyInteractionResponseMixins(base: any, methods: readonly ResponseMethodName[]): void {\n    methods.forEach(method => {\n        base.prototype[method] = InteractionResponseMethods.prototype[method];\n    });\n}\n"]}