【问题标题】:AFK command discord.js v12AFK 命令 discord.js v12
【发布时间】:2021-01-01 10:11:20
【问题描述】:

我已经发出了一个更改用户昵称的 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 被删除。我试过了,但我不确定该怎么做。

【问题讨论】:

  • 您能向我们提供您的尝试和错误吗?

标签: javascript node.js discord discord.js


【解决方案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 !')
    })
})

【讨论】:

  • 有什么方法可以只为特定的公会制作吗?
【解决方案2】:
  1. 首先您需要一个地方来存储原因。
  2. 那么你从消息的末尾得到原因。
  3. 然后将原因与用户的用户ID一起存储。
  4. 然后在消息侦听器内部,检查消息的作者是否在数组/映射或您选择在其中存储数据的任何位置。
  5. 如果用户不存在于 afk“列表”中,则忽略
  6. 如果用户存在于 afk“列表”中,只需将其从 afk“列表”中删除即可。
  7. 然后只需通过执行 message.mentions.users.first() 检查消息中是否有提及,如果存在提及,只需从列表中获取用户 afk 原因并将其发送到频道。
  8. 如果用户确实结束了 afk,只需将其从“列表”中删除即可。

反正就是这样

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-18
    • 2021-01-18
    • 2021-04-14
    • 2021-04-19
    • 2021-04-18
    • 2021-04-23
    • 2021-01-30
    相关资源
    最近更新 更多