AFK命令discord.js v12

时间:2020-09-14 16:41:40

标签: javascript node.js discord discord.js

我已经做出了一个AFK命令来更改用户的昵称。这是我的代码:

client.on('message', (message) => {
 if (message.content.includes('start-afk')) {
  message.member
   .setNickname(`${message.author.username} [AFK]`)
   .catch((error) => message.channel.send("Couldn't update your nickname."));
 }
 if (message.content.includes('end-afk')) {
  message.member
   .setNickname('')
   .catch((error) => message.channel.send("Couldn't update your nickname."));
 }
});

我希望它添加一个AFK原因,以便在AFK用户被ping通时显示,并且如果AFK用户讲话,则他的AFK将被删除。我尝试过,但是不确定如何做。

2 个答案:

答案 0 :(得分:1)

如果您希望机器人记住谁是AFK及其原因,则必须使用数据库来存储这些信息。

您可以使用npm i quick.db,这是一个非常简单的数据库。

这是示例代码:

client.on('message', message => {
    // checks if the message author is afk
    if (db.has(message.author.id + '.afk')) {
        message.reply("Oh you're back ! i removed your afk")
        db.delete(message.author.id + '.afk')
        db.delete(message.author.id + '.messageafk')
    }
    if (message.content.includes('start-afk')) {
        message.member.setNickname(`${message.author.username} [AFK]`).catch(error => message.channel.send("Couldn't update your nickname."));
        // then here you use the database :
        db.set(message.author.id + '.afk', 'true')
        db.set(message.author.id + '.messageafk', message.content.split(' ').slice(2))

        // I made .slice(2) so that in the message array it also delete the command and the "start-afk"
    }
    if (message.content.includes('end-afk')) {
        message.member.setNickname('').catch(error => message.channel.send("Couldn't update your nickname."));
        // Here you delete it
        db.delete(message.author.id + '.afk')
        db.delete(message.author.id + '.messageafk')
    }
});

然后,每当用户ping通时:

client.on('message', message => {
    // If one of the mentions is the user
    message.mentions.users.forEach(user => {
        if (db.has(user.id + '.afk')) message.reply('the user ' + user.tag + ' is afk !')
    })
})

答案 1 :(得分:-1)

  1. 首先,您需要一个地方来存储原因。
  2. 然后从消息末尾得到原因。
  3. 然后使用用户的用户ID存储原因。
  4. 然后在消息侦听器内部,检查消息的作者是否在数组/映射中,或者您选择将数据存储在其中的任何内容。
  5. 如果用户不存在于afk“列表”中,请忽略
  6. 如果用户位于afk“列表”中,则将其从afk“列表”中删除。
  7. 然后仅通过执行message.mentions.users.first()检查消息中是否有提及,只要存在提及,只需从列表中获取用户的理由并将其发送到频道即可。
  8. 然后,如果用户确实结束了操作,只需将其从“列表”中删除。

反正就是这个主意