我尝试使用 Discord.JS V14 编写机器人,因为我总是使用 v12 进行编码,并且我观看了文档和一些教程,并且观看了两个。一个用于清除命令,另一个用于禁止和取消禁止命令,当我输入“/”并清除时,清除命令显示并且完全起作用,但当我想输入 /ban 或 /unban 时,它不显示任何内容,我的控制台不显示任何内容显示任何错误
这是我的代码,有些东西是西班牙语的,因为我是西班牙语,但如果有人需要,我可以翻译它们。
索引:
const Discord = require('discord.js');
const configuracion = require('./config.json')
const cliente = new Discord.Client({
intents: [
Discord.GatewayIntentBits.Guilds
]
});
module.exports = cliente
cliente.on('interactionCreate', (interaction) => {
if(interaction.type === Discord.InteractionType.ApplicationCommand){
const cmd = cliente.slashCommands.get(interaction.commandName);
if(!cmd) return interaction.reply(`Error`);
interaction["member"] = interaction.guild.members.cache.get(interaction.user.id);
cmd.run(cliente, interaction)
}
})
cliente.on('ready', () => {
console.log(`🔑 Sesión iniciada como ${cliente.user.username}`)
})
cliente.slashCommands = new Discord.Collection()
require('./handler')(cliente)
cliente.login(configuracion.token)
索引/处理程序
const fs = require('fs');
const Discord = require('discord.js');
module.exports = async (client) => {
const SlashArray = [];
fs.readdir('./Comandos', (error, folder) => {
if (error) {
console.error('Error al leer el directorio:', error);
return;
}
if (!folder || folder.length === 0) {
console.error('No se encontraron carpetas en el directorio.');
return;
}
folder.forEach(subfolder => {
fs.readdir(`./Comandos/${subfolder}/`, (error, files) => {
if (error) {
console.error('Error al leer archivos en la carpeta:', error);
return;
}
files.forEach(file => {
if (!file.endsWith('.js')) return;
const filePath = `../Comandos/${subfolder}/${file}`;
const command = require(filePath);
if (!command.name) return;
client.slashCommands.set(command.name, command);
SlashArray.push(command);
});
});
});
});
client.on('ready', async () => {
client.guilds.cache.forEach(guild => guild.commands.set(SlashArray));
});
};
清除cmd
const fs = require('fs');
const Discord = require('discord.js');
module.exports = async (client) => {
const SlashArray = [];
fs.readdir('./Comandos', (error, folder) => {
if (error) {
console.error('Error al leer el directorio:', error);
return;
}
if (!folder || folder.length === 0) {
console.error('No se encontraron carpetas en el directorio.');
return;
}
folder.forEach(subfolder => {
fs.readdir(`./Comandos/${subfolder}/`, (error, files) => {
if (error) {
console.error('Error al leer archivos en la carpeta:', error);
return;
}
files.forEach(file => {
if (!file.endsWith('.js')) return;
const filePath = `../Comandos/${subfolder}/${file}`;
const command = require(filePath);
if (!command.name) return;
client.slashCommands.set(command.name, command);
SlashArray.push(command);
});
});
});
});
client.on('ready', async () => {
client.guilds.cache.forEach(guild => guild.commands.set(SlashArray));
});
};
禁止cmd
const { SlashCommandBuilder, EmbedBuilder, PermissionFlagsBits} = require('discord.js');
module.exports = {
data: new SlashCommandBuilder()
.setName("ban")
.setDescription("⛔ → Banea a un usuario determinado del servidor.")
.setDefaultMemberPermissions(PermissionFlagsBits.BanMembers)
.addUserOption(option =>
option.setName("usuario")
.setDescription("Usuario que será baneado.")
.setRequired(true)
)
.addStringOption(option =>
option.setName("motivo")
.setDescription("Un motivo para el baneo")
),
async execute(interaction) {
const usuario = interaction.options.getUser("usuario");
const motivo = interaction.options.getString("motivo") || "No se proporcionó una razón.";
const miembro = await interaction.guild.members.fetch(usuario.id);
const errEmbed = new EmbedBuilder()
.setTitle("🛡️ Error 702")
.setDescription(`No puedes tomar acciones sobre ${usuario.username} ya que tiene un rol superior al tuyo.`)
.setColor("RED")
.setTimestamp()
.setFooter({ text: `👀 Comando enviado por ${interaction.user.tag} con id ${interaction.user.id}`, iconURL: interaction.user.displayAvatarURL() });
if (miembro.roles.highest.position >= interaction.member.roles.highest.position)
return interaction.reply({ embeds: [errEmbed] })
await miembro.ban({ reason: motivo });
const embedban = new EmbedBuilder()
.setTitle("🛡️ Acciones de baneo tomadas.")
.setDescription(`ℹ️ El usuario ${usuario.tag} ha sido baneado\n **Motivo:** \`${motivo}\``)
.setColor("GREEN")
.setTimestamp()
.setFooter({ text: `👀 Comando enviado por ${interaction.user.tag} con id ${interaction.user.id}`, iconURL: interaction.user.displayAvatarURL() });
await interaction.reply({
embeds: [embedban]
});
}
}
如图所示,它不显示任何禁止/取消禁止命令,仅显示 ping 命令和清除/清除
我尝试了 2 种不同的斜杠命令方式,认为它会起作用,但它不起作用,我不知道是什么,我已经挣扎了大约 1 天,有什么建议吗?
请参阅本指南。
您需要首先通过向不和谐 API 发出 REST 请求来注册您的命令。