斜杠命令处理程序中的 Discord.js v13 TypeError
Posted
技术标签:
【中文标题】斜杠命令处理程序中的 Discord.js v13 TypeError【英文标题】:Discord.js v13 TypeError in slash command handler 【发布时间】:2021-12-15 19:54:04 【问题描述】:我想创建一个基本的静音命令,它只是向用户添加一个没有时间参数的角色,我如何在 Discord.js v13 中实现它?我已经有斜杠命令和处理程序命令设置,但是我收到以下错误:
TypeError: Cannot read properties of undefined (reading 'cache')
我的代码:
const SlashCommandBuilder = require("@discordjs/builders")
const MessageEmbed = require("discord.js")
const Discord = require("discord.js")
module.exports =
data: new SlashCommandBuilder()
.setName("mute")
.setDescription("El bot muteara a un usuario del server")
.addUserOption(option =>
option
.setName("miembro") // target
.setDescription("Mencione al miembro que desea mutear")
.setRequired(true)
)
.addStringOption(option =>
option
.setName("razon") // reason
.setDescription("Razon por la que el usuario sera muteado")
.setRequired(true)
),
async run(client, interaction)
const target = interaction.options.getUser("miembro");
const reason = interaction.options.getString("razon");
if(!interaction.guild.roles.cache.get('902652079762468975')) return interaction.followUp( embeds: [new MessageEmbed().setColor("RED").setDescription("El rol de muteado no existe")])
await target.roles.cache.add("902652079762468975");
interaction.followUp( embeds: [new MessageEmbed().setColor("GREEN").setDescription(`✅ $target ha sido muteado. Razon:$reason`)])
【问题讨论】:
你能详细说明一下吗?例如,名为“run”的异步函数中的interaction
参数是什么?
哪个缓存触发了错误? DJS13 改变了很多东西,其中之一是内部缓存。
【参考方案1】:
这是最终代码
async run(client, interaction)
const target = interaction.options.getMember("miembro");
const reason = interaction.options.getString("razon");
const embed = new Discord.MessageEmbed()
.setColor("GREEN")
.setDescription(`✅ $target has been muted. Reason:$reason`)
await target.roles.add('role-id');
interaction.reply( embeds: [embed])
【讨论】:
【参考方案2】:假设您使用的是最新版本的 djs13,您希望使用 option.getMember()
而不是 option.getUser
。
getUser 返回没有任何公会信息(包括角色)的User
对象。 getMember
返回引用角色缓存的 GuildMember
对象。这仅在从公会频道触发命令时才有效。
如果您希望您的命令在公会之外可用,您必须使用 getUser 并手动在公会的成员缓存中查找用户的 id。
这可能需要更改您的命令注册以适应值类型的更改。
Documentation
【讨论】:
以上是关于斜杠命令处理程序中的 Discord.js v13 TypeError的主要内容,如果未能解决你的问题,请参考以下文章
如何将斜杠命令隐藏到特定用户或频道 Discord.js v13
如何使用 discord.js 调用 SubCommand 的选项? (v13)