【问题标题】:使用 discord.js 更改用户昵称
【发布时间】:2017-05-05 23:11:48
【问题描述】:

我想知道您是否可以提供帮助(我搜索它并没有...)我正在学习如何使用 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');

【问题讨论】:

    标签: javascript node.js discord discord.js


    【解决方案1】:

    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.member.setNickname 替换为message.guild.me.setNickname,类似于我们检查权限的方式。这将更改机器人的昵称,而不是运行命令的用户的昵称。编码愉快!

    【讨论】:

      【解决方案2】:

      根据Docs,你只能更改一个公会成员的昵称,所以你需要从它的id中获取你的客户端的成员对象,并按照文档所示设置它的昵称,像这样:

      message.guild.members.get(bot.user.id).setNickname("some nickname");
      

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

      【讨论】:

        【解决方案3】:

        如果你使用它应该可以工作

        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!");
          

          【讨论】:

            【解决方案5】:

            就像@Zaidhaan 说的,这里有一个小sn-p,它只在有权限的情况下尝试设置昵称

                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() 获取用户,因此需要权限才能在服务器上编辑昵称

            【讨论】:

              【解决方案6】:

              使用message.content.startsWith()message.author.setNickname()

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

              【讨论】:

                【解决方案7】:

                不知道你是想设置用户昵称还是你的机器人昵称,所以我把两个都放了,希望对你有帮助!

                更改机器人昵称:

                
                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')) {
                        message.guild.me.setNickname(message.content.replace('changeNick ', ''));
                    }
                });
                
                client.login('token');
                

                用户昵称:

                
                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')) {
                        message.member.setNickname(message.content.replace('changeNick ', ''));
                    }
                });
                
                client.login('token');
                

                乐于助人!

                【讨论】:

                  【解决方案8】:

                  你应该使用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);
                    }
                  });
                  

                  【讨论】:

                    【解决方案9】:

                    您可以像这样使用 GuildMember#setNickname 函数:

                    var nick = message.content.split(" ").slice(1).join(" ");
                    message.member.setNickname(nick);
                    

                    【讨论】:

                      【解决方案10】:

                      根据文档中的示例,类似于

                      message.guild.members.get(message.author.id).setNickname("");

                      如果您希望用户只能通过命令更改他/她的昵称,将会给您想要的结果。

                      【讨论】:

                        【解决方案11】:

                        尝试使用这个: Docs Guild#Me

                        var newNickname = "Nickname !"
                        message.guild.me.setNickname(newNickname);
                        

                        注意:机器人应该得到MANAGE_NICKNAMES

                        【讨论】:

                          【解决方案12】:

                          看起来你正试图给你的机器人起一个昵称 要更改机器人的昵称,请使用:

                          const Discord = require('discord.js');
                          const client = new Discord.Client();
                          client.on('ready', () => {
                              console.log('I am ready!');
                          });
                          
                          client.on('message', message => {
                              let args = message.content.split(" ");
                          
                              if (args[0].toLowerCase() === "changenick") { //command is 'changeNick <new nickname>
                                 var newNickname = args.slice(1).join(" ");
                                 message.guild.me.setNickname(newNickname);
                              }
                          });
                          

                          如果你想更改用户昵称,你应该使用这个:

                          const Discord = require('discord.js');
                          const client = new Discord.Client();
                          client.on('ready', () => {
                              console.log('I am ready!');
                          });
                          
                          client.on('message', message => {
                          
                              let args = message.content.split(" ");
                          
                              if(args[0].toLowerCase() === "changenick"){ //command is 'changeNick <@usertag> <new nickname>'
                                  if(!message.mentions.users.first()) return message.channel.send("You didn't specify a user!");
                                   const user = message.mentions.members.first();
                                   var newNickname = args.slice(2).join(" ");
                                   user.setNickname(newNickname);
                              }
                          });
                          

                          【讨论】:

                            【解决方案13】:

                            首先,为了让你的命令更好,主要变量。

                            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)

                            【讨论】:

                              【解决方案14】:

                              您可以为此使用 GuildMember#setNickname 方法。让我举一个简单的例子:

                              const nickName = "PREFERRED NICKNAME"
                              message.member.setNickname(nickName)
                              

                              【讨论】:

                                猜你喜欢
                                • 2021-02-16
                                • 2018-12-09
                                • 2021-06-27
                                • 2021-01-03
                                • 1970-01-01
                                • 2020-09-28
                                • 2021-07-30
                                • 2021-05-24
                                • 2018-08-21
                                相关资源
                                最近更新 更多