以下是 Discord.js v12 中一些常见的破坏性更改,会给人们带来影响。
管理器
Client#users
和 Guild#roles
等属性现在是管理器(managers),而不是缓存的Collection
。要访问此集合,请使用 cache
属性:
const user = client.users.cache.get('123456789012345678')
const role = message.guild.roles.cache.find(r => r.name === 'Admin')
另外,像GuildMember#addRole
,Guild#createChannel
和TextBasedChannel#fetchMessages
这样的方法已经移动到各自的管理器中:
await message.member.roles.add(role)
await message.guild.channels.create('welcome')
const messages = await message.channel.messages.fetch()
集合
Collection
类(例如client.users.cache
,guild.roles.cache
,guild.channels.cache
)现在只接受函数,而不是属性键和值,用于.find
和.findKey
方法:
collection.find(item => item.property === 'value')
.exists
, .deleteAll
, .filterArray
, .findAll
也已被移除:
collection.some(item => item.property === 'value')
Promise.all(collection.map(item => item.delete()))
collection.filter(fn).array()
collection.filter(item => item.property === 'value').array()
.tap
现在在集合上运行函数,而不是在集合中的每个项目上运行函数:
collection.each(item => console.log(item))
collection.tap(coll => console.log(`${coll.size} items`))
RichEmbed
/MessageEmbed
RichEmbed
类已被移除,现在使用MessageEmbed
类替代它来处理所有的嵌入内容(而不仅仅是接收到的嵌入内容)。
const {MessageEmbed} = require('discord.js')
const embed = new MessageEmbed()
addBlankField
方法也已被删除。该方法只是添加一个名称和值均为零宽度空格(\u200B
)的字段,因此要添加一个空白字段,请执行以下操作:
embed.addField('\u200B', '\u200B')
语音
所有的VoiceConnection
/VoiceBroadcast#play***
方法已统一为单一的play
方法:
const dispatcher = connection.play('./music.mp3')
Client#createVoiceBroadcast
已经移到ClientVoiceManager
中:
const broadcast = client.voice.createVoiceBroadcast()
此外,
StreamDispatcher
扩展了 Node.js 的
stream.Writable
,因此请使用
dispatcher.destroy()
而不是
dispatcher.end()
。已删除
end
事件,改用原生的
finish
事件。
图像 URL
例如
User#displayAvatarURL
和
Guild#iconURL
等属性现在是
方法:
const avatar = user.displayAvatarURL()
const icon = mesage.guild.iconURL()
你可以传递
ImageURLOptions
来自定义格式和大小。
更多信息
要了解有关v12重大变化的更多信息,请查看更新指南和更改日志。文档也是查找特定方法/属性的好资源。