// 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')
如何将代码迁移到Discord.js v12并进行修复错误?在哪里可以看到v12引入的重大更改?
#1 楼
这是人们在Discord.js v12中引入的一些最常见的重大更改。要访问此集合,请使用Client#users
属性: Guild#roles
此外,诸如
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
)现在仅接受函数,不是Collection
和client.users.cache
的属性键和值: guild.roles.cache
.find
,.findKey
,// v11: collection.find('property', 'value')
collection.find(item => item.property === 'value')
和.exists
也已删除: .deleteAll
.filterArray
现在在集合上而不是集合中的每个项目上运行一个函数: .findAll
// 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
// 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
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
扩展了Node.js的ClientVoiceManager
,因此请使用const broadcast = client.voice.createVoiceBroadcast()
而不是StreamDispatcher
。 stream.Writable
事件已被删除,以支持本机dispatcher.destroy()
事件。图像URL
诸如
dispatcher.end()
和end
之类的属性现在是方法: finish
您还可以传递
User#displayAvatarURL
来自定义格式和大小等内容。更多信息
要了解有关v12重大更改的更多信息,请查看更新指南和变更日志。该文档也是查找特定方法/属性的好资源。