所以对于我的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
发送到频道。
为什么会这样,以及如何“修复”它以便实际更改用户的昵称?
答案 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。
你应该改变两件事:
args[0]
替换为userId
.id
移除message.guild.members.get(args[0]).id
,因为之后您将无法调用setNickname。