【问题标题】:Trying to make an AFK command using change nickname尝试使用更改昵称发出 AFK 命令
【发布时间】:2020-08-20 16:27:38
【问题描述】:
我想创建一个命令,当他们键入 afk 时更改该人的昵称,然后机器人将 AFK 添加到昵称。当他们键入 afk 时,它会从名称中删除 AFK。
client.on('message', message => {
if (message.content.includes('changeNick')) {
client.setNickname({nick: message.content.replace('changeNick', '')});
}
});
我参考了这段代码,但它不起作用。当用户键入 changenickoff 时,您还可以重新设置昵称吗?
【问题讨论】:
标签:
javascript
node.js
discord
discord.js
【解决方案1】:
是的,你需要使用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('');
}
});
【解决方案2】:
这是你需要做的:
- 用户的昵称是否已经以
[AFK] 开头?
- ELSE:将
[AFK] 添加到他们的昵称中
您正在执行client.setNickname,据我所知,这不会起作用,因为client 不是GuildMember 实例。
值得注意的是,GuildMember 与 Discord User 非常不同。 GuildMembers 可以访问角色和权限;用户没有。
- 您可以通过执行
console.log(client.users.cache.get(message.author.id)) 来准确查看User 结构是什么
这是修改后的代码。
此外,我还包含一个函数,它可以修剪字符串以确保它的长度不超过 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!");
};
};
};
});
如果有任何错误,请在 cmets 中提供完整的详细信息(堆栈跟踪和错误本身),以便我可以为您提供进一步的帮助。
注意 - 您需要输入 !afk 才能触发此代码。