Discord.js从v12升级至v13后原有代码报错如何修复?
Discord.js v12 升级 v13 对应报错修复方案
报错:
member.hasPermission is not a function
v13 版本权限检查API移至permissions属性下,同时权限枚举名更新,修复代码:// 需提前引入PermissionsBitField const { PermissionsBitField } = require('discord.js') member.permissions.has(PermissionsBitField.Flags.SendMessages)报错:
Cannot send an empty message三类场景对应修复:- 直接传Embed对象:v13不支持直接把Embed作为send方法的第一个参数,需放入
embeds数组字段中
修复前:channel.send(someEmbed)
修复后:channel.send({ embeds: [someEmbed] }) - 传
{embed: someEmbed}:v13废弃了单Embed的embed字段,统一用数组形式的embeds
修复前:channel.send({embed: someEmbed})
修复后:channel.send({ embeds: [someEmbed] }) - 直接传user对象:v13不支持直接传入用户对象作为发送内容,要@用户需调用
toString()方法放入content字段
修复前:channel.send(user)
修复后:channel.send({ content: user.toString() })
- 直接传Embed对象:v13不支持直接把Embed作为send方法的第一个参数,需放入
警告:
The 'message' event was deprecated, use 'messageCreate' instead
v13将消息接收事件重命名为messageCreate,直接替换事件名即可:client.on("messageCreate", msg => {})报错:
[CLIENT_MISSING_INTENTS] Valid intents must be provided for the client
v13强制要求实例化客户端时声明需要的网关Intents,同时需要去Discord开发者后台开启对应权限的开关,修复代码:const { Client, GatewayIntentBits } = require('discord.js') const client = new Client({ intents: [ GatewayIntentBits.Guilds, // 必须的基础服务器Intent GatewayIntentBits.GuildMessages, // 服务器消息Intent GatewayIntentBits.MessageContent, // 消息内容读取Intent,需后台开启特权权限 // 可按需添加其他需要的Intent,比如成员读取、语音状态等 ] })报错:
channel.join is not a function
v13将语音相关功能拆分到独立的@discordjs/voice包中,首先安装依赖:npm install @discordjs/voice,然后替换原有join逻辑:const { joinVoiceChannel } = require('@discordjs/voice') const connection = joinVoiceChannel({ channelId: channel.id, guildId: channel.guild.id, adapterCreator: channel.guild.voiceAdapterCreator })注意:使用语音功能需要提前在实例化客户端时添加
GatewayIntentBits.GuildVoiceStatesIntent
内容的提问来源于stack exchange,提问作者MrMythical
相关产品推荐
相关产品推荐

