使用discord.js更改用户昵称

Bos*_*ssa 7 javascript node.js discord discord.js

我想知道您是否可以提供帮助(我什么也没搜索...),我正在学习如何使用discord.js节点,并且我想更改用户昵称(而不是用户名本身)

我的代码是

const Discord = require('discord.js');
const client = new Discord.Client();
client.on('ready', () => {
    console.log('I am ready!');
});

client.on('message', message => {
    if (message.content.includes('changeNick')) {
        client.setNickname({nick: message.content.replace('changeNick ', '')});
    }
});

client.login('token');
Run Code Online (Sandbox Code Playgroud)

Fir*_*847 10

Discord.js 通过从消息中获取GuildMember并使用GuildMember#setNickname方法来实现更改昵称。这是设置运行消息的用户的昵称的简单示例:

if (message.content.includes('changeNick')) {
    message.member.setNickname(message.content.replace('changeNick ', ''));
}
Run Code Online (Sandbox Code Playgroud)

但这在您的机器人无权设置用户昵称的情况下是行不通的。如果您想设置用户的昵称,则机器人本身必须具有设置昵称的权限。这需要更多技巧,但您可以使用Guild#me获取 GuildMember,然后使用GuildMember#hasPermission检查Permissions#Flags 中的 MANAGE_NICKNAMES 权限。我知道这可能需要很多东西,所以这里有一个例子,把我刚才说的所有事情放在一起。

if (message.content.includes('changeNick')) {
    if (!message.guild.me.hasPermission('MANAGE_NICKNAMES')) return message.channel.send('I don\'t have permission to change your nickname!');
    message.member.setNickname(message.content.replace('changeNick ', ''));
}
Run Code Online (Sandbox Code Playgroud)

这将用于设置运行命令的昵称的用户。但是如果我们想改变 BOT 的昵称,而不是用户的昵称呢?嗯,这很简单。我们只需更换message.member.setNicknamemessage.guild.me.setNickname,类似于我们如何检查的权限。这将更改机器人的昵称,而不是运行命令的用户的昵称。快乐编码!


小智 6

根据Docs,您只能更改公会成员的昵称,因此您需要从其 id 中获取客户端的成员对象,并按照文档中所示设置其昵称,如下所示:

message.guild.members.get(bot.user.id).setNickname("some nickname");
Run Code Online (Sandbox Code Playgroud)

请注意,这并不总是有效,您的客户需要拥有changeNickname否则将无法正常工作