我正在尝试编写一个可以更改用户昵称的命令,但无法使其工作。我已尝试找到解决方案,但无法实现。
下面是我的代码:
const { SlashCommandBuilder, EmbedBuilder } = require("discord.js");
module.exports = {
data: new SlashCommandBuilder()
.setName("nickname")
.setDescription("Change your nickname")
.addStringOption(option =>
option.setName("nickname")
.setDescription("New Nickname")
.setRequired(true)
),
async execute(interaction) {
const { options } = interaction;
const nick = options.getString("nickname");
const member = interaction.author;
const embed = new EmbedBuilder()
.setDescription(`Succesfully changed your nickname to ${nick}`)
.setColor(0xFFFFFE)
.setTimestamp();
await member.setNickname(`${nick}`)
await interaction.reply({
embeds: [embed],
ephemeral: true
});
}
}
我想问题出在这里,但我不确定
await member.setNickname(`${nick}`)
2条答案
按热度按时间cidc1ykv1#
因为
interaction.author
就是undefined
,你可能认为它像message.author
,但它仍然是User
,而不是GuildMember
,只有成员才有setNickname()
方法。你应该得到成员而不是用户。尝试如下:
如果使用
addUserOption()
而不是addStringOption()
,也可以使用options.getMember("nickname")
。gr8qqesn2#
我只是做了一个类似的命令,遇到了和你一样的问题。我意识到我试图改变昵称的成员,有另一个角色分配给他们,这比机器人的角色更高。给予这个看一下,让我知道。另外,确保你有
GatewayIntentBits.Guilds
和GatewayIntentBits.GuildMembers
在你的意图传递。