如何在不说前缀的情况下从昵称中删除 AFK

how to remove a AFK from the nickname without say the prefix

所以我做了一个简单的 AFK 命令 像这样

client.on('message', message => {
  if (message.content.includes('!afk')) {
      message.member.setNickname(`[AFK] ${message.member.displayName} `).catch(error => console.log(error));
  }
  
  if (message.content === '!back') {
    message.member.setNickname(message.member.displayName.replace('[AFK] ', )).catch(error => console.log(error));

  }

 
  
  
});

我想要如果用户挂机然后用户聊天像“嗨”[AFK] 就没有说前缀“!back”

我该怎么做?

谢谢你帮助我 (:

如果我没理解错的话,你是要求在玩家再次输入内容时删除挂机状态。 我使用 JS Set 做了一个粗略的解决方案,它应该适用于一小部分用户,但它可能需要对大型服务器进行额外的调整。

基本上,当玩家键入 !afk 时,它会包含在 AFK 玩家集合中,而当 he/she/it 返回并键入内容时,其名称将从集合中删除并更新其昵称。 我不确定 message.member.id 是否存在,它是否是跟踪玩家的正确字段编辑Yes, it is ), 但主要思想是记录每个 afk 玩家的独特之处。

    const afkPlayers = new Set();
    
    client.on('message', message => {
      if (message.content.includes('!afk')) {
          afkPlayers.add(message.member.id);
          message.member.setNickname(`[AFK] ${message.member.displayName} `).catch(error => console.log(error));
      }
      
      if(afkPlayers.member.has(message.member.id)){
        afkPlayers.member.delete(message.member.id);
        message.member.setNickname(message.member.displayName.replace('[AFK] ', )).catch(error => console.log(error));
      }
      
});

我真的不知道 Discord 是如何工作的,也不知道什么时候触发“消息”事件,但在我看来,即使没有 set,你也可以做到这一点,正如 @TheCave3 所提议的:

client.on('message', message => {
  const pref='[AFK] ';
  if (message.content.includes('!afk'))
    message.member.setNickname(pref+message.member.displayName).catch(error => console.log(error));
  else if (message.member.displayName.slice(0,pref.length)===pref)
    message.member.setNickname(message.member.displayName.slice(pref.length)).catch(error => console.log(error));
});