尝试使用更改昵称进行AFK命令

时间:2020-08-20 16:27:38

标签: javascript node.js discord discord.js

我想创建一个命令来更改用户的昵称,然后在他们输入afk时,机器人将AFK添加到该昵称。当他们关闭afk时,会从那里删除AFK。

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

我参考了此代码,但是它不起作用。另外,当用户键入changenickoff时,您是否还能将昵称重设回去?

2 个答案:

答案 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]开头?
    • 如果是,请将其删除。
      • 通知用户
        • 结束
  • ELSE:在他们的昵称中添加[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才能触发此代码。