当前位置: 首页 > 知识库问答 >
问题:

如何将代码从v11迁移到Discord.jsv12?

农弘毅
2023-03-14

我升级为不和谐。JSV12,但它破坏了我现有的v11代码。下面是一些导致错误的示例:

// 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。JSV12并修复这些错误?在哪里可以看到v12引入的突破性更改?

共有1个答案

暴乐邦
2023-03-14

下面是在Discord中引入的一些最常见的突破性变化。人们遇到的JSV12。

Client#usersGuild#roles这样的属性现在是管理者,而不是缓存的项目集合。要访问此集合,请使用缓存属性:

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

此外,诸如GuildMember#addRoleGuild#createChannelTextBasedChannel#fetchMessages等方法已移动到各自的管理者:

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

集合类(例如客户端.用户.缓存帮会.角色.缓存帮会.频道.缓存)现在只接受的函数,而不接受属性键和值。查找。findKey

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

。存在。删除所有。过滤器阵列。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()

。点击现在对集合而不是集合中的每个项目运行一个函数:

// 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类,该类现在用于所有嵌入(而不是刚刚收到的嵌入)。

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'流。可写,所以使用dispatcher.destroy()代替dispatcher.end()end事件已被删除,取而代之的是本机over事件。

诸如User#displayAvatarURLGuild#iconURL等属性现在都是方法:

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

您还可以传递一个ImageURLOptions,以自定义格式和大小等内容。

要了解有关v12突破性更改的更多信息,请查看更新指南和更改日志。文档也是查找特定方法/属性的良好资源。

 类似资料:
  • 问题内容: 我正在从elasticsearch1.4.3迁移到2.4,并替换了elasticsearch文档中引用的一段代码,而其他参考则需要替换andFilter? 码:- 问题答案: 您可以这样做:

  • 问题内容: 我正在将Java代码库迁移到纯Scala,并且只能使用这一段代码。我有一个IntervalMap的实现,即一个数据结构,可让您有效地将范围映射到,和操作全部所在的位置(与IntervalTree或SegmentTree略有不同)。 这段代码使用Java,并且在迁移到Scala时遇到了两个大问题: Scala没有-我决定使用(奇怪的Scala有但没有)存储密钥并将值存储在辅助中来解决它。

  • 如果有人能给出有关迁移到Null-Safety的说明,那就太好了。

  • 请问有一份android环境运行的代码,可以直接转换到DevEco Studio编译实现么 尝试在DevEco Studio打开,但是无法直接预览,是否需要转换成ARKTS语言呢

  • 问题内容: 我正在从弹性搜索1.4.3迁移到2.4,并且替换了弹性搜索文档中引用的一段代码,而其他参考则需要替换andFilter? 码:- 问题答案: 您可以这样做:

  • Spring云流是否支持下面的Kafka流应用程序。下面是Kafka示例应用程序摘录中的代码。感谢您的任何反馈或支持。