如果有人 ping 一个处于 AFK 状态的成员,它会发送一条消息 | Discord.js / mongodb

Posted

技术标签:

【中文标题】如果有人 ping 一个处于 AFK 状态的成员,它会发送一条消息 | Discord.js / mongodb【英文标题】:If someone ping a member who is AFK it send a message | Discord.js / mongodb 【发布时间】:2021-07-31 02:28:09 【问题描述】:

我一直在尝试使用 mongodb 为我的机器人创建一个 afk 和 endafk 命令。我的命令工作正常,但我希望这样当你 ping 一个 afk 的人时,它会发送这样的消息:这个用户当前是 AFK!\ n**$afkReason**,但这不起作用。我一直在尝试修复它,但它仍然不起作用,所以如果有人可以帮助我,那就太好了,谢谢。 这是我的 afk 命令:

const mongoose = require('mongoose')

const db = process.env.DB


mongoose.connect(db)

const Afk = require(process.env.ROOTDIR + '/models/afk.js')


const Discord = require('discord.js')

module.exports.help = 
    name: "afk",
    aliases: ['afk', 'setafk', 'afkset'],
    category: 'misc',
    description: "Set your activity to afk",
    usage: " ",
    cooldown: 0,
    args: false
;     

module.exports.run = async (client, message, args) => 

    await message.delete()

    let afkReason = args.slice(0).join(" ")
    if(!afkReason) return(afkReason = "No reason provided")

    const nAfk = new Afk(
        username: message.author.tag,
        userID: message.author.id,
        afkReason: afkReason,
        guildID: message.guild.id,
        time: message.createdAt.toUTCString()
    )

nAfk.save()
.then(result => console.log(result))
.catch(err => console.log(err));

message.reply(`is now afk: **$afkReason.**`)
message.member.setNickname("[AFK] " + message.author.username);

// this is the part where it isnt working
if (message.mentions.member) 
    message.reply(`This user is currently AFK!\n**$afkReason**`);
    

祝你有美好的一天。

【问题讨论】:

【参考方案1】:

只是一个简单的问题 当你这样做时

if(!afkReason) return(afkReason = "No reason provided")

return 实际上结束了函数(run 函数),之后不会执行任何代码。 所以尝试不使用return

if(!afkReason) afkReason = "No reason provided" 

现在你说的实际错误是

如您所见,message.mentions.member 不存在。应该是message.mentions.members.first() 然后运行find示例:

if(message.mentions.members.first()
    let member = message.mentions.members.first();
    Afk.find(
        userID: member.user.id
    ).then( afkstat => 
        message.channel.send(`The user is afk.\nReason: $afkstat.afkReason`);
    ).catch(console.log)

你可能想把它放在chient.on("message", message=> ); 函数中

【讨论】:

嗨,嗯,抱歉回答晚了。首先感谢您抽出宝贵时间帮助我。现在,每当我 ping 某人时,它都会说用户是 afk blablabla,即使该用户不是 afk 并且即使我不是afk。你知道如何解决这个问题吗?再次感谢!【参考方案2】:

:) 您实际上在 afk 命令中检查消息? 您需要输入此代码:

if (message.mentions.member) 
    message.reply(`This user is currently AFK!\n**$afkReason**`);

内部消息事件,并检查提及的成员是否是 afk ?

希望我的回答对你有帮助:)

【讨论】:

以上是关于如果有人 ping 一个处于 AFK 状态的成员,它会发送一条消息 | Discord.js / mongodb的主要内容,如果未能解决你的问题,请参考以下文章

当我写下原因时,我的 AFK 命令只显示一个字。为啥?

如果在某个语音频道中,需要帮助断开成员的连接

常用的几个安全策略

执行下面的bat后,一直是echo处于关闭状态,而且ping的数据也没有保存。

使 /afk 命令在 python 中接受数字而不是字母

C#判断电脑是否处于联网状态