¿Cómo puedo migrar mi código a Discord.js v12 desde v11?

4 minutos de lectura

¿Como puedo migrar mi codigo a Discordjs v12 desde v11
flor de cerezo

Actualicé a Discord.js v12, pero rompió mi código v11 existente. Estos son algunos ejemplos de cosas que causan errores:

// TypeError: client.users.get is not a function
const user = client.users.get('123456789012345678')

// TypeError: message.guild.roles.find is not a function
const role = message.guild.roles.find(r => r.name === 'Admin')

// TypeError: message.member.addRole is not a function
await message.member.addRole(role)

// TypeError: message.guild.createChannel is not a function
await message.guild.createChannel('welcome')

// TypeError: message.channel.fetchMessages is not a function
const messages = await message.channel.fetchMessages()

const {RichEmbed} = require('discord.js')
// TypeError: RichEmbed is not a constructor
const embed = new RichEmbed()

const connection = await message.channel.join()
// TypeError: connection.playFile is not a function
const dispatcher = connection.playFile('./music.mp3')

¿Cómo puedo migrar mi código a Discord.js v12 y corregir estos errores? ¿Dónde puedo ver los cambios importantes introducidos en v12?

  • Para quien haya votado para cerrar esto como “necesita más atención”: esta pregunta fue el resultado de esta meta discusión sobre tener una pregunta canónica que respondiera a problemas relacionados con la actualización a Discord.js v12, sobre todo la introducción de administradores. Había mucho de preguntas relacionadas con la actualización que se han marcado como duplicados de esta pregunta. No creo que esta pregunta sea demasiado amplia; si se dividiera en varias preguntas, tendría la misma información (lea la guía de migración y los documentos).

    – flor de cerezo

    3 oct 2021 a las 6:34

  • Si todavía cree que esta pregunta es demasiado amplia, siéntase libre de abrir una discusión sobre meta, pero en esta etapa no creo que se necesite ninguna acción sobre esta pregunta, especialmente considerando que se lanzó Discord.js v13.

    – flor de cerezo

    3 oct 2021 a las 6:37


¿Como puedo migrar mi codigo a Discordjs v12 desde v11
flor de cerezo

Estos son algunos de los cambios de última hora más comunes introducidos en Discord.js v12 con los que se encuentran las personas.

Gerentes

Propiedades tales como Client#users y Guild#roles son ahora gerentesen lugar de la caché Collection de artículos Para acceder a esta colección, utilice el cache propiedad:

const user = client.users.cache.get('123456789012345678')
const role = message.guild.roles.cache.find(r => r.name === 'Admin')

Además, métodos como GuildMember#addRole, Guild#createChannely TextBasedChannel#fetchMessages han trasladado a los respectivos administradores:

await message.member.roles.add(role)
await message.guild.channels.create('welcome')
const messages = await message.channel.messages.fetch()

Collection

los Collection clase (por ejemplo client.users.cache, guild.roles.cache, guild.channels.cache) ahora solo acepta funcionesno claves y valores de propiedad, por .find y .findKey:

// v11: collection.find('property', 'value')
collection.find(item => item.property === 'value')

.exists, .deleteAll, .filterArray, .findAll también han sido eliminados:

// v11: collection.exists('property', 'value')
collection.some(item => item.property === 'value')

// v11: collection.deleteAll()
Promise.all(collection.map(item => item.delete()))

// v11: collection.filterArray(fn)
collection.filter(fn).array()

// v11: collection.findAll('property', value')
collection.filter(item => item.property === 'value').array()

.tap ahora ejecuta una función en la colección en lugar de cada elemento de la colección:

// v11: collection.tap(item => console.log(item))
collection.each(item => console.log(item))

// New .tap behaviour:
collection.tap(coll => console.log(`${coll.size} items`))

RichEmbed/MessageEmbed

los RichEmbed la clase ha sido eliminada; utilizar el MessageEmbed class en su lugar, que ahora se usa para todas las incrustaciones (en lugar de las incrustaciones recién recibidas).

const {MessageEmbed} = require('discord.js')
const embed = new MessageEmbed()

los addBlankField El método también ha sido eliminado. Este método simplemente agregó un campo con un espacio de ancho cero (\u200B) como nombre y valor, así que para agregar un campo en blanco, haga lo siguiente:

embed.addField('\u200B', '\u200B')

Voz

Toda la VoiceConnection/VoiceBroadcast#play*** los métodos se han unificado bajo un único play método:

const dispatcher = connection.play('./music.mp3')

Client#createVoiceBroadcast ha sido trasladado a la ClientVoiceManager:

const broadcast = client.voice.createVoiceBroadcast()

Adicionalmente, StreamDispatcher extiende Node.js’ stream.Writableasí que usa dispatcher.destroy() en lugar de dispatcher.end(). los end el evento ha sido eliminado a favor del nativo finish evento.

URL de imagen

Propiedades tales como User#displayAvatarURL y Guild#iconURL son ahora métodos:

const avatar = user.displayAvatarURL()
const icon = mesage.guild.iconURL()

También puede pasar un ImageURLOptions para personalizar cosas como el formato y el tamaño.

Más información

Para obtener más información sobre los cambios importantes de v12, eche un vistazo a la guía de actualización y el registro de cambios. los documentación también es un buen recurso para encontrar un método/propiedad en particular.

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad