import { createCommand } from "@/lib/utils"; import { SlashCommandBuilder, PermissionFlagsBits, TextChannel, NewsChannel, VoiceChannel, MessageFlags } from "discord.js"; import { createErrorEmbed } from "@/lib/embeds"; export const webhook = createCommand({ data: new SlashCommandBuilder() .setName("webhook") .setDescription("Send a message via webhook using a JSON payload") .setDefaultMemberPermissions(PermissionFlagsBits.ManageWebhooks) .addStringOption(option => option.setName("payload") .setDescription("The JSON payload for the webhook message") .setRequired(true) ), execute: async (interaction) => { await interaction.deferReply({ flags: MessageFlags.Ephemeral }); const payloadString = interaction.options.getString("payload", true); let payload; try { payload = JSON.parse(payloadString); } catch (error) { await interaction.editReply({ embeds: [createErrorEmbed("The provided payload is not valid JSON.", "Invalid JSON")] }); return; } const channel = interaction.channel; if (!channel || !('createWebhook' in channel)) { await interaction.editReply({ embeds: [createErrorEmbed("This channel does not support webhooks.", "Unsupported Channel")] }); return; } let webhook; try { webhook = await channel.createWebhook({ name: `${interaction.client.user.username} - Proxy`, avatar: interaction.client.user.displayAvatarURL(), reason: `Proxy message requested by ${interaction.user.tag}` }); // Support snake_case keys for raw API compatibility if (payload.avatar_url && !payload.avatarURL) { payload.avatarURL = payload.avatar_url; delete payload.avatar_url; } await webhook.send(payload); await webhook.delete("Proxy message sent"); await interaction.editReply({ content: "Message sent successfully!" }); } catch (error) { console.error("Webhook error:", error); // Attempt cleanup if webhook was created but sending failed if (webhook) { try { await webhook.delete("Cleanup after failure"); } catch (cleanupError) { console.error("Failed to delete webhook during cleanup:", cleanupError); } } await interaction.editReply({ embeds: [createErrorEmbed("Failed to send message via webhook. Ensure the bot has 'Manage Webhooks' permission and the payload is valid.", "Delivery Failed")] }); } } });