El código de Discord.js v13 se rompe al actualizar a v14
Acabo de actualizar mi discord.js de v13 a v14 y hay muchos errores.
Errores con message
y interaction
eventos:
Ni los eventos message
ni interaction
los incendios.
Errores con intents:
const client = new Client({
intents: [
Intents.FLAGS.GUILDS,
Intents.FLAGS.GUILD_MESSAGES,
Intents.FLAGS.GUILD_MESSAGE_REACTIONS,
],
});
// Intents.FLAGS.GUILDS,
// ^
//
// TypeError: Cannot read properties of undefined (reading 'FLAGS')
const client = new Client({
intents: ['GUILDS', 'GUILD_MEMBERS', 'GUILD_MESSAGES'],
});
// throw new RangeError(ErrorCodes.BitFieldInvalid, bit);
//
// RangeError [BitFieldInvalid]: Invalid bitfield flag or number: GUILDS.
Errores con interaction
s:
if (interaction.isCommand()) {}
// TypeError: interaction.isCommand is not a function
if (interaction.isAutocomplete()) {}
// TypeError: interaction.isAutocomplete is not a function
if (interaction.isMessageComponent()) {}
// TypeError: interaction.isMessageComponent is not a function
if (interaction.isModalSubmit()) {}
// TypeError: interaction.isModalSubmit is not a function
Errores con canales:
if (message.channel.isText()) {}
// TypeError: channel.isText is not a function
if (message.channel.isVoice()) {}
// TypeError: channel.isVoice is not a function
if (message.channel.isDM()) {}
// TypeError: channel.isDM is not a function
if (message.channel.isCategory()) {}
// TypeError: channel.isCategory is not a function
Errores con constructores e incrustaciones:
const embed = new MessageEmbed();
// const embed = new MessageEmbed();
// ^
//
// TypeError: MessageEmbed is not a constructor
const button = new MessageButton();
// const button = new MessageButton();
// ^
//
// TypeError: MessageButton is not a constructor
const actionRow = new MessageActionRow();
// const actionRow = new MessageActionRow();
// ^
//
// TypeError: MessageActionRow is not a constructor
const selectMenu = new MessageSelectMenu();
// const selectMenu = new MessageSelectMenu();
// ^
//
// TypeError: MessageSelectMenu is not a constructor
const textInput = new TextInputComponent();
// const textInput = new TextInputComponent();
// ^
//
// TypeError: TextInputComponent is not a constructor
const modal = new Modal();
// const modal = new Modal();
// ^
//
// TypeError: Modal is not a constructor
const attachment = new MessageAttachment();
// const attachment = new MessageAttachment();
// ^
//
// TypeError: MessageAttachment is not a constructor
Errores con enumeraciones:
new ButtonBuilder()
.setCustomId('verification')
.setStyle('PRIMARY')
// UnknownEnumValueError: Expected the value to be one of the following enum values:
// at NativeEnumValidator.handle
new TextInputBuilder()
.setCustomId('verification')
.setStyle('SHORT')
// UnknownEnumValueError: Expected the value to be one of the following enum values:
// at NativeEnumValidator.handle
Discord.js v14 incluye muchos cambios importantes. Ahora requiere Node 16.9 o superior para su uso, así que asegúrese de actualizar a la última versión LTS .
Esta versión de v14 utiliza la API de Discord v10 .
Errores con message
y interaction
eventos:
Los eventos message
y interaction
ahora se eliminan. Puedes usar los eventos messageCreate
y interactionCreate
en su lugar.
// v13
client.on('message', (message) => {
console.log(`👎 doesn't fire`);
});
client.on('interaction', (interaction) => {
console.log(`👎 doesn't fire`);
});
// v14
client.on('messageCreate', (message) => {
console.log(`👍 works as expected`);
});
client.on('interactionCreate', (interaction) => {
console.log(`👍 works as expected`);
});
Errores con intents:
// v13
const client = new Client({
intents: [
Intents.FLAGS.GUILDS,
Intents.FLAGS.GUILD_MESSAGES,
],
});
// OR
const client = new Client({
intents: ['GUILDS', 'GUILD_MESSAGES'],
});
// v14
const { Client, GatewayIntentBits } = require('discord.js');
const client = new Client({
intents: [
GatewayIntentBits.Guilds,
GatewayIntentBits.GuildMessages,
],
});
Para obtener una lista completa GatewayIntentBits
, puede leer esta respuesta .
Errores con interaction
s:
Se han eliminado algunas protecciones de tipo interacción. En su lugar , puedes comparar interaction.type
con la InteractionType
enumeración .
const { InteractionType } = require('discord.js');
// v13
if (interaction.isCommand()) {}
// v14
if (interaction.type === InteractionType.ApplicationCommand) {}
// v13
if (interaction.isAutocomplete()) {}
// v14
if (interaction.type === InteractionType.ApplicationCommandAutocomplete) {}
// v13
if (interaction.isMessageComponent()) {}
// v14
if (interaction.type === InteractionType.MessageComponent) {}
// v13
if (interaction.isModalSubmit()) {}
// v14
if (interaction.type === InteractionType.ModalSubmit) {}
Errores con canales:
Se han eliminado algunas protecciones de tipo canal. Para limitar los canales, puede compararlos channel.type
con una ChannelType
enumeración .
const { ChannelType } = require('discord.js');
// v13
if (message.channel.isText()) {}
// v14
if (channel.type === ChannelType.GuildText) {}
// v13
if (message.channel.isVoice()) {}
// v14
if (channel.type === ChannelType.GuildVoice) {}
// v13
if (message.channel.isDM()) {}
// v14
if (channel.type === ChannelType.DM) {}
// v13
if (message.channel.isCategory()) {}
// v14
if (channel.type === ChannelType.GuildCategory) {}
Para obtener una lista completa de ChannelType
s, puede leer esta respuesta .
Además, hay algunos tipos de guardias nuevos:
channel.isDMBased();
channel.isTextBased();
channel.isVoiceBased();
Errores con constructores e incrustaciones:
MessageEmbed
ha sido renombrado a EmbedBuilder
.
// v13
const embed = new MessageEmbed();
// v14
const { EmbedBuilder } = require('discord.js');
const embed = new EmbedBuilder();
MessageAttachment
Se le ha cambiado el nombre AttachmentBuilder
y, en lugar de tomar el nombre como segundo parámetro, acepta un objeto AttachmentData .
// v13
const attachment = new MessageAttachment(buffer, 'image.png');
// v14
const { AttachmentBuilder } = require('discord.js');
const attachment = new AttachmentBuilder(buffer, { name: 'image.png' });
MessageComponents
han sido renombrados; ya no tienen el Message
prefijo y ahora tienen un Builder
sufijo.
// v13
const button = new MessageButton();
// v14
const { ButtonBuilder } = require('discord.js');
const button = new ButtonBuilder();
// v13
const actionRow = new MessageActionRow();
// v14
const { ActionRowBuilder } = require('discord.js');
const actionRow = new ActionRowBuilder();
// v13
const selectMenu = new MessageSelectMenu();
// v14
const { SelectMenuBuilder } = require('discord.js');
const selectMenu = new SelectMenuBuilder();
// v13
const textInput = new TextInputComponent();
// v14
const { TextInputBuilder } = require('discord.js');
const textInput = new TextInputBuilder();
Errores con enumeraciones:
Cualquier área que solía aceptar un tipo de cadena o número para un parámetro de enumeración ahora solo aceptará exclusivamente números.
// Wrong
new ButtonBuilder()
.setCustomId('verification')
.setStyle('PRIMARY')
// Fixed
const { ButtonStyle } = require('discord.js');
new ButtonBuilder()
.setCustomId('verification')
.setStyle(ButtonStyle.Primary)
// Wrong
new TextInputBuilder()
.setCustomId('verification')
.setStyle('SHORT')
// Fixed
const { TextInputStyle } = require('discord.js');
new TextInputBuilder()
.setCustomId('verification')
.setStyle(TextInputStyle.Short)
Errores con tipos de actividad: el tipo de actividad setPresence en discord.js v14 solo se puede configurar en "JUGAR"
Si message.content
no tiene ningún valor, agregue la enumeración GatewayIntentBits.MessageContent a su matriz de intenciones.
Para obtener más cambios importantes, puede visitar la guía de discord.js: https://discordjs.guide/additional-info/changes-in-v14.html