在discord.js中设置用户的昵称

时间:2017-11-06 17:30:06

标签: javascript node.js discord.js

所以对于我的discord bot,我想添加一个nick命令。为此,我查看了this线程,并根据我的代码对其进行了调整。

client.on("message", async message => {
    const args = message.content.slice(config.prefix.length).trim().split(/ +/g);
    const command = args.shift().toLowerCase();

    if (command == "nick") {
        var userID = args[0].replace('<@', '').replace('>', '').replace('!', '');
        message.channel.send(userID);
        message.guild.members.get(args[0]).id.setNickname("test", "nick command executed");
        message.channel.send(`Successfully changed ${args[0]}'s nickname to "${message.channel.server.detailsOf(args[0]).nick}"`);
    }
});

client.login("token");

由于某种原因,这会将TypeError: Cannot read property 'id' of undefined输出到控制台,但会成功将UserID发送到频道。

为什么会这样,以及如何“修复”它以便实际更改用户的昵称?

1 个答案:

答案 0 :(得分:3)

您的代码中发生的事情是您将args[0]的更改版本存储在userId中:

var userID = args[0].replace('<@', '').replace('>', '').replace('!', '');

然后你将未更改的args[0]传递给.get

message.guild.members.get(args[0]).id.setNickname("test", "nick command executed");

因此代码正在运行:..get(<@...>)将返回错误,因为它不是有效的ID。

你应该改变两件事:

  1. args[0]替换为userId
  2. .id移除message.guild.members.get(args[0]).id,因为之后您将无法调用setNickname。