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?
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#createChannel
y 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.Writable
así 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.
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