使用discord.js更改用户昵称

14

我想知道你是否能帮忙(我搜索了一下但没有找到相关资料...)我正在学习如何使用discord.js和node,并且想要更改我的用户昵称(而不是用户名本身)

我的代码是:

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');
14个回答

14

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

if (message.content.includes('changeNick')) {
    message.member.setNickname(message.content.replace('changeNick ', ''));
}

但是如果您的机器人没有权限设置用户昵称,那么这样做就无法实现。如果您想要设置用户的昵称,机器人本身需要有设置昵称的权限。这需要一些技巧,但您可以使用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 ', ''));
}

这将会设置运行命令的用户的昵称。但是如果我们想要改变BOT的昵称呢?这很简单。我们可以用message.guild.me.setNickname替换message.member.setNickname,类似于我们检查权限的方式。这将更改机器人的昵称而不是运行命令的用户。祝编码愉快!


9
根据文档,你只能更改公会成员的昵称,因此你需要通过其 id 获取客户端的成员对象,并按照文档中所示设置其昵称,像这样:
message.guild.members.get(bot.user.id).setNickname("some nickname");

请注意,这并不总是有效的,您的客户端需要具有changeNickname才能使其正常工作。

4
如果您使用这个,它应该能够工作。
message.guild.members.get("Random ID or something").setNickname("RandomName")

4
为此,我们需要获取首次提到的用户。 做法如下:
let nickedUser = message.mentions.users.first();

在完成这个步骤之后,我们需要获取所谓的用户信息。我只是使用了nickReason,你可以使用任何你想要的名称。
let nickReason = args.join(" ").slice(22);

好的,接下来我们需要检查是否没有提到用户。这很简单:

if(!nickedUser) return message.channel.send("No mentioned user.");

在添加之后,我们需要检查是否有有效的名称,这也很容易:

if(!nickReason) return message.channel.send("Not having a name is not a good nickname.");

现在我们检查他们是否拥有MANAGE_NICKNAMES权限,这也很容易。我们还将检查所提到的用户是否拥有MANAGE_NICKNAMES权限:

if(!message.member.hasPermission("MANAGE_NICKNAMES")) return message.channel.send("No permissions!");

if(nick.hasPermission("MANAGE_NICKNAMES")) return message.channel.send("No need to change the nickname of someone that can change nicknames as well.");

好的,现在我们可以更改他们的昵称了!

nickedUser.setNickname(nickReason);

message.channel.send("Changed " + nickedUser + "'s nickname!");

3
使用 message.content.startsWith()message.author.setNickname():
client.on('message', message => {
  if (message.content.startsWith('changeNick')) {
    message.author.setNickname({
      nick: message.content.replace('changeNick ', '')
    });
  }
});

3

就像@Zaidhaan所说的那样,这是一个小片段,只在有权限时尝试设置昵称。

    if (message.guild.members.get(bot.user.id).hasPermission("MANAGE_NICKNAMES") && message.guild.members.get(bot.user.id).hasPermission("CHANGE_NICKNAME")) {
        message.guild.members.get(bot.user.id).setNickname("Nickname Here");
    } else {
        message.channel.sendMessage("I dont have the permissons to change my nickname in this server.");
    }

由于您使用message.guild.members.get()获取用户,因此需要权限才能编辑服务器上的昵称


1
首先,为了让您的命令更好,需要主要变量。 let messageArray = message.content.split(" "); let cmd = messageArray[0]; let args = messageArray.slice(1) 为了创建命令,请输入: if (cmd === 'changeNick') { } 在括号内,我们需要输入成员变量。 let mentionedMember = message.mentions.members.first() let mentionedUser = message.mentions.users.first() let nickname = args.slice(1).join(' ') 之后,为了查看它是否改变了成员的昵称,请输入:

message.channel.send(mentionedMember.setNickname(nickname)


1
你可以使用 GuildMember#setNickname 方法来完成这个操作。让我给您举个例子:
const nickName = "PREFERRED NICKNAME"
message.member.setNickname(nickName)

1
请尝试使用以下内容: Docs Guild#Me
var newNickname = "Nickname !"
message.guild.me.setNickname(newNickname);

注意:机器人应该获取 MANAGE_NICKNAMES

1

你应该使用discord.js GuildMember.setNickname函数,而不是Client.setNickname()

client.on ('message', async message => {
  var nickname = message.content.split (" ").slice (1).join (" ");
  if (message.content.startsWith ('setNickname')) {
    message.member.setNickname (nickname);
  }
});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接