【问题标题】: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 才能触发此代码。

      【讨论】:

        猜你喜欢
        • 2017-08-04
        • 2021-03-13
        • 2021-06-28
        • 2019-09-05
        • 2021-03-29
        • 1970-01-01
        • 2021-07-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多