El código de Discord.js v13 se rompe al actualizar a v14

Resuelto Zsolt Meszaros asked hace 2 años • 1 respuestas

Acabo de actualizar mi discord.js de v13 a v14 y hay muchos errores.

Errores con messagey interactioneventos:

Ni los eventos messageni interactionlos 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 interactions:

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
Zsolt Meszaros avatar Jul 19 '22 04:07 Zsolt Meszaros
Aceptado

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 messagey interactioneventos:

Los eventos messagey interactionahora se eliminan. Puedes usar los eventos messageCreatey interactionCreateen 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 interactions:

Se han eliminado algunas protecciones de tipo interacción. En su lugar , puedes comparar interaction.typecon la InteractionTypeenumeració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.typecon una ChannelTypeenumeració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 ChannelTypes, puede leer esta respuesta .

Además, hay algunos tipos de guardias nuevos:

channel.isDMBased();
channel.isTextBased();
channel.isVoiceBased();

Errores con constructores e incrustaciones:

MessageEmbedha sido renombrado a EmbedBuilder.

// v13
const embed = new MessageEmbed();
// v14
const { EmbedBuilder } = require('discord.js');
const embed = new EmbedBuilder();

MessageAttachmentSe le ha cambiado el nombre AttachmentBuildery, 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' });

MessageComponentshan sido renombrados; ya no tienen el Messageprefijo y ahora tienen un Buildersufijo.

// 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.contentno 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

Zsolt Meszaros avatar Jul 18 '2022 21:07 Zsolt Meszaros