我想创建一个命令来更改用户的昵称,然后在他们输入afk时,机器人将AFK添加到该昵称。当他们关闭afk时,会从那里删除AFK。
client.on('message', message => {
if (message.content.includes('changeNick')) {
client.setNickname({nick: message.content.replace('changeNick', '')});
}
});
我参考了此代码,但是它不起作用。另外,当用户键入changenickoff时,您是否还能将昵称重设回去?
答案 0 :(得分:0)
是的,您需要使用Member#setNickname
:
client.on('message', message => {
if (message.content.includes('start-afk')) {
message.member.setNickname(`${message.author.username} [AFK]`);
}
if (message.content.includes('end-afk')) {
message.member.setNickname('');
}
});
答案 1 :(得分:0)
这是您需要做的:
[AFK]
开头?
[AFK]
您正在做client.setNickname
,据我所知,由于client
不是GuildMember
实例,因此无法正常工作。
值得注意的是,GuildMember
与不和谐的User
完全不同。公会会员有权访问角色和权限;用户没有。
User
来准确查看console.log(client.users.cache.get(message.author.id))
结构是什么这是修改后的代码。 此外,我还包括一个修剪字符串的函数,以确保其长度不超过X个字符。
client.on('message', message => {
//function to trim strings, ensuring they don't exceed X chars in length
trimStr = (str, max) => ((str.length > max) ? `${str.slice(0, max - 3)}...` : str);
if (message.guild) /* Ensure message is in a server; */ {
if (message.content.toLowerCase().startsWith('!afk')) {
const nick = message.member.nickname;
if (nick.startsWith('[AFK]')) {
//remove nick and notify user:
message.member.setNickname(null);
message.reply("Welcome back, I've removed your AFK status.");
} else { //If above condition is false:
//add [AFK] to the new nick along with the nickname
//trim new string to ensure it's not longer than 32 characters since Discord limits this.
const newNickname = trimStr(`[AFK] ${nick.length ? nick : message.author.username}`, 32);
message.member.setNickname(newNickname);
message.reply("Ight mate, I've set your AFK!");
};
};
};
});
如果有任何错误,请在注释中提供它们的详细信息(stacktrace和错误本身),以便为您提供进一步的帮助。
注意-您需要输入!afk
才能触发此代码。