corrigiendo errores de eliminar, enlistar y crear

This commit is contained in:
2025-09-20 03:31:03 -05:00
parent 383971903d
commit b4397fab2f
3 changed files with 78 additions and 181 deletions

View File

@@ -3,9 +3,9 @@ import { CommandMessage } from "../../../core/types/commands";
import { EmbedBuilder, ButtonStyle, MessageFlags, ChannelType } from "discord.js"; import { EmbedBuilder, ButtonStyle, MessageFlags, ChannelType } from "discord.js";
export const command: CommandMessage = { export const command: CommandMessage = {
name: "listchannels-alliance", name: "listar-canales-alianza",
type: "message", type: "message",
aliases: ["listalchannel", "channelsally", "alliancechannels"], aliases: ["listchannels-alliance", "listalchannel", "channelsally", "alliancechannels"],
cooldown: 5, cooldown: 5,
// @ts-ignore // @ts-ignore
run: async (message, args, client) => { run: async (message, args, client) => {

View File

@@ -1,11 +1,11 @@
import { CommandMessage } from "../../../core/types/commands"; import { CommandMessage } from "../../../core/types/commands";
// @ts-ignore // @ts-ignore
import { ComponentType, ButtonStyle, MessageFlags, ChannelType } from "discord.js"; import { EmbedBuilder, ButtonStyle, MessageFlags, ChannelType } from "discord.js";
export const command: CommandMessage = { export const command: CommandMessage = {
name: "removechannel-alliance", name: "eliminar-canal-alianza",
type: "message", type: "message",
aliases: ["removealchannel", "removechannelally", "delalchannel"], aliases: ["removechannel-alliance", "removealchannel", "delalchannel"],
cooldown: 10, cooldown: 10,
// @ts-ignore // @ts-ignore
run: async (message, args, client) => { run: async (message, args, client) => {
@@ -19,52 +19,23 @@ export const command: CommandMessage = {
}); });
if (existingChannels.length === 0) { if (existingChannels.length === 0) {
const noChannelsPanel = { const noChannelsEmbed = new EmbedBuilder()
type: 17, .setTitle("🗑️ Eliminar Canal de Alianzas")
accent_color: 0xf04747, .setDescription("📭 **No hay canales configurados**\n\nNo existen canales de alianza configurados en este servidor para eliminar.\n\n💡 **Sugerencia:** Usa `!setchannel-alliance` para configurar canales primero.")
components: [ .setColor(0xf04747)
{ .setTimestamp();
type: 10,
content: "# 🗑️ **Eliminar Canal de Alianzas**"
},
{
type: 14,
spacing: 2,
divider: true
},
{
type: 10,
content: "📭 **No hay canales configurados**\n\nNo existen canales de alianza configurados en este servidor para eliminar.\n\n💡 **Sugerencia:** Usa `!setchannel-alliance` para configurar canales primero."
}
]
};
return message.reply({ return message.reply({
flags: MessageFlags.SuppressEmbeds, embeds: [noChannelsEmbed]
components: [noChannelsPanel]
}); });
} }
// Panel principal de eliminación // Embed principal
const removePanel = { const removeEmbed = new EmbedBuilder()
type: 17, .setTitle("🗑️ Eliminar Canal de Alianzas")
accent_color: 0xf04747, // Rojo para eliminación .setDescription(`⚠️ **Atención:** Estás a punto de eliminar la configuración de alianzas de un canal.\n\n📊 **Estado actual:**\n• **${existingChannels.length}** canal(es) configurado(s)\n• **${existingChannels.filter((c: any) => c.isActive).length}** canal(es) activo(s)\n\n🎯 Selecciona el canal que deseas eliminar:`)
components: [ .setColor(0xf04747)
{ .setTimestamp();
type: 10,
content: "# 🗑️ **Eliminar Canal de Alianzas**"
},
{
type: 14,
spacing: 2,
divider: true
},
{
type: 10,
content: `⚠️ **Atención:** Estás a punto de eliminar la configuración de alianzas de un canal.\n\n📊 **Estado actual:**\n• **${existingChannels.length}** canal(es) configurado(s)\n• **${existingChannels.filter((c: any) => c.isActive).length}** canal(es) activo(s)\n\n🎯 Selecciona el canal que deseas eliminar de la configuración:`
}
]
};
// Crear opciones para el selector de canales // Crear opciones para el selector de canales
const channelOptions = existingChannels.map((config: any) => { const channelOptions = existingChannels.map((config: any) => {
@@ -73,10 +44,10 @@ export const command: CommandMessage = {
const status = config.isActive ? "🟢 Activo" : "🔴 Inactivo"; const status = config.isActive ? "🟢 Activo" : "🔴 Inactivo";
return { return {
label: channelName, label: channelName.length > 100 ? channelName.substring(0, 97) + "..." : channelName,
value: config.channelId, value: config.channelId,
description: `${config.blockConfigName}${status}`, description: `${config.blockConfigName}${status}`,
emoji: { name: channel ? "💬" : "⚠️" } emoji: channel ? "💬" : "⚠️"
}; };
}).slice(0, 25); }).slice(0, 25);
@@ -111,8 +82,8 @@ export const command: CommandMessage = {
}; };
const panelMessage = await message.reply({ const panelMessage = await message.reply({
flags: MessageFlags.SuppressEmbeds, embeds: [removeEmbed],
components: [removePanel, channelSelectRow, cancelRow] components: [channelSelectRow, cancelRow]
}); });
const collector = panelMessage.createMessageComponentCollector({ const collector = panelMessage.createMessageComponentCollector({
@@ -129,33 +100,12 @@ export const command: CommandMessage = {
const selectedChannel = message.guild!.channels.cache.get(selectedChannelId); const selectedChannel = message.guild!.channels.cache.get(selectedChannelId);
const channelName = selectedChannel ? `#${selectedChannel.name}` : "Canal Eliminado"; const channelName = selectedChannel ? `#${selectedChannel.name}` : "Canal Eliminado";
// Panel de confirmación // Embed de confirmación
const confirmPanel = { const confirmEmbed = new EmbedBuilder()
type: 17, .setTitle("⚠️ Confirmar Eliminación")
accent_color: 0xff6b6b, .setDescription(`🎯 **Canal seleccionado:** ${channelName}\n🧩 **Configuración:** \`${selectedConfig?.blockConfigName}\`\n📊 **Estado:** ${selectedConfig?.isActive ? "🟢 Activo" : "🔴 Inactivo"}\n\n❗ **¿Estás seguro de eliminar esta configuración?**\n\n📝 **Efectos:**\n• Los usuarios ya no ganarán puntos en este canal\n• El historial de puntos se mantendrá\n• Esta acción NO se puede deshacer`)
components: [ .setColor(0xff6b6b)
{ .setTimestamp();
type: 10,
content: "⚠️ **Confirmar Eliminación**"
},
{
type: 14,
divider: true,
spacing: 2
},
{
type: 10,
content: `🎯 **Canal seleccionado:** ${channelName}\n` +
`🧩 **Configuración:** \`${selectedConfig?.blockConfigName}\`\n` +
`📊 **Estado:** ${selectedConfig?.isActive ? "🟢 Activo" : "🔴 Inactivo"}\n\n` +
`❗ **¿Estás seguro de eliminar esta configuración?**\n\n` +
`📝 **Efectos:**\n` +
`• Los usuarios ya no ganarán puntos en este canal\n` +
`• El historial de puntos se mantendrá\n` +
`• Esta acción NO se puede deshacer`
}
]
};
const confirmRow = { const confirmRow = {
type: 1, type: 1,
@@ -164,8 +114,7 @@ export const command: CommandMessage = {
type: 2, type: 2,
style: ButtonStyle.Danger, style: ButtonStyle.Danger,
label: "✅ Sí, Eliminar", label: "✅ Sí, Eliminar",
custom_id: `confirm_remove_${selectedChannelId}`, custom_id: `confirm_remove_${selectedChannelId}`
emoji: { name: "🗑️" }
}, },
{ {
type: 2, type: 2,
@@ -177,46 +126,36 @@ export const command: CommandMessage = {
}; };
await interaction.update({ await interaction.update({
components: [confirmPanel, confirmRow] embeds: [confirmEmbed],
components: [confirmRow]
}); });
} }
break; break;
case "cancel_removal": case "cancel_removal":
const cancelPanel = { const cancelEmbed = new EmbedBuilder()
type: 17, .setTitle("❌ Operación Cancelada")
accent_color: 0x36393f, .setDescription("La eliminación ha sido cancelada.\nNingún canal fue modificado.")
components: [ .setColor(0x36393f)
{ .setTimestamp();
type: 10,
content: "❌ **Operación Cancelada**"
},
{
type: 14,
divider: true,
spacing: 1
},
{
type: 10,
content: "La eliminación ha sido cancelada.\nNingún canal fue modificado."
}
]
};
await interaction.update({ await interaction.update({
components: [cancelPanel] embeds: [cancelEmbed],
components: []
}); });
collector.stop(); collector.stop();
break; break;
case "view_all_channels": case "view_all_channels":
await interaction.reply({ const channelsList = existingChannels.map((config: any, index: number) => {
content: `📋 **Canales Configurados**\n\n${existingChannels.map((config: any, index: number) => {
const channel = message.guild!.channels.cache.get(config.channelId); const channel = message.guild!.channels.cache.get(config.channelId);
const channelName = channel ? `#${channel.name}` : "Canal Eliminado"; const channelName = channel ? `#${channel.name}` : "Canal Eliminado";
const status = config.isActive ? "🟢 Activo" : "🔴 Inactivo"; const status = config.isActive ? "🟢 Activo" : "🔴 Inactivo";
return `**${index + 1}.** ${channelName} - \`${config.blockConfigName}\`${status}`; return `**${index + 1}.** ${channelName} - \`${config.blockConfigName}\`${status}`;
}).join('\n')}`, }).join('\n');
await interaction.reply({
content: `📋 **Canales Configurados**\n\n${channelsList}`,
flags: 64 // Ephemeral flags: 64 // Ephemeral
}); });
break; break;
@@ -240,29 +179,11 @@ export const command: CommandMessage = {
} }
}); });
const successPanel = { const successEmbed = new EmbedBuilder()
type: 17, .setTitle("✅ Eliminación Exitosa")
accent_color: 0x57f287, .setDescription(`🗑️ **Canal eliminado de la configuración:**\n\n📺 **Canal:** ${channelName}\n🧩 **Configuración eliminada:** \`${channelConfig?.blockConfigName}\`\n\n✅ **Completado:** Los usuarios ya no ganarán puntos de alianza en este canal.\n\n💡 **Nota:** El historial de puntos anterior se mantiene intacto.`)
components: [ .setColor(0x57f287)
{ .setTimestamp();
type: 10,
content: "✅ **Eliminación Exitosa**"
},
{
type: 14,
divider: true,
spacing: 2
},
{
type: 10,
content: `🗑️ **Canal eliminado de la configuración:**\n\n` +
`📺 **Canal:** ${channelName}\n` +
`🧩 **Configuración eliminada:** \`${channelConfig?.blockConfigName}\`\n\n` +
`✅ **Completado:** Los usuarios ya no ganarán puntos de alianza en este canal.\n\n` +
`💡 **Nota:** El historial de puntos anterior se mantiene intacto.`
}
]
};
const successActionsRow = { const successActionsRow = {
type: 1, type: 1,
@@ -283,38 +204,27 @@ export const command: CommandMessage = {
}; };
await interaction.update({ await interaction.update({
components: [successPanel, successActionsRow] embeds: [successEmbed],
components: [successActionsRow]
}); });
} catch (error) { } catch (error) {
const errorPanel = { const errorEmbed = new EmbedBuilder()
type: 17, .setTitle("❌ Error de Eliminación")
accent_color: 0xf04747, .setDescription(`💥 **Error al eliminar el canal:**\n\n📺 Canal: ${channelName}\n🧩 Configuración: \`${channelConfig?.blockConfigName}\`\n\n🔍 **Posibles causas:**\n• El canal ya fue eliminado\n• Error de base de datos\n• Permisos insuficientes\n\n🔄 Intenta nuevamente.`)
components: [ .setColor(0xf04747)
{ .setTimestamp();
type: 10,
content: "❌ **Error de Eliminación**"
},
{
type: 14,
divider: true,
spacing: 2
},
{
type: 10,
content: `💥 **Error al eliminar el canal:**\n\n` +
`📺 Canal: ${channelName}\n` +
`🧩 Configuración: \`${channelConfig?.blockConfigName}\`\n\n` +
`🔍 **Posibles causas:**\n` +
`• El canal ya fue eliminado\n` +
`• Error de base de datos\n` +
`• Permisos insuficientes\n\n` +
`🔄 Intenta nuevamente.`
}
]
};
await interaction.update({ components: [errorPanel] }); await interaction.update({
embeds: [errorEmbed],
components: []
});
}
} else if (interaction.customId === "finish_removal" || interaction.customId === "remove_another") {
collector.stop();
if (interaction.customId === "remove_another") {
// Reiniciar el comando
return module.exports.command.run(message, args, client);
} }
} }
break; break;
@@ -323,29 +233,16 @@ export const command: CommandMessage = {
collector.on("end", async (collected, reason) => { collector.on("end", async (collected, reason) => {
if (reason === "time") { if (reason === "time") {
const timeoutPanel = { const timeoutEmbed = new EmbedBuilder()
type: 17, .setTitle("⏰ Sesión Expirada")
accent_color: 0x36393f, .setDescription("El panel de eliminación ha expirado.\nUsa el comando nuevamente para continuar.")
components: [ .setColor(0x36393f)
{ .setTimestamp();
type: 10,
content: "⏰ **Sesión Expirada**"
},
{
type: 14,
divider: true,
spacing: 1
},
{
type: 10,
content: "El panel de eliminación ha expirado.\nUsa el comando nuevamente para continuar."
}
]
};
try { try {
await panelMessage.edit({ await panelMessage.edit({
components: [timeoutPanel] embeds: [timeoutEmbed],
components: []
}); });
} catch (error) { } catch (error) {
// Mensaje eliminado o error de edición // Mensaje eliminado o error de edición

View File

@@ -44,19 +44,19 @@ export const command: CommandMessage = {
name: "canal-alianza", name: "canal-alianza",
aliases: ["configurar-canal", "setup-canal"], aliases: ["configurar-canal", "setup-canal"],
description: "Configurar canales para sistema de alianzas", description: "Configurar canales para sistema de alianzas",
usage: `${prefix}canal-alianza {canal}` usage: `${prefix}canal-alianza`
}, },
{ {
name: "eliminar-canal-alianza", name: "eliminar-canal-alianza",
aliases: ["removechannel-alliance", "removealchannel", "delalchannel"], aliases: ["removechannel-alliance", "removealchannel", "delalchannel"],
description: "Eliminar canales de la configuración de alianzas", description: "Eliminar canales de la configuración de alianzas",
usage: `${prefix}removechannel-alliance` usage: `${prefix}eliminar-canal-alianza`
}, },
{ {
name: "listar-canales-alianza", name: "listar-canales-alianza",
aliases: ["listchannels-alliance", "listalchannel", "channelsally"], aliases: ["listchannels-alliance", "listalchannel", "channelsally"],
description: "Ver lista detallada de canales configurados para alianzas", description: "Ver lista detallada de canales configurados para alianzas",
usage: `${prefix}listchannels-alliance` usage: `${prefix}listar-canales-alianza`
}, },
{ {
name: "demo-componentes", name: "demo-componentes",
@@ -319,7 +319,7 @@ export const command: CommandMessage = {
case "category_network": case "category_network":
const networkPanel = { const networkPanel = {
type: 17, type: 17,
accent_color: 0x5865f2, accent_color: 05865f2,
components: [ components: [
{ {
type: 10, type: 10,