Discord.js V14中msg.mentions.members.first()无法使用的问题
解决Discord.js中提及成员无法获取的问题
你的问题核心不在msg.mentions.members.first()方法过时,而是消息内容的判断逻辑错误:
你用msg.content === "mention"做条件判断,只有当消息内容完全等于"mention"时才会执行后续代码。但实际触发指令时你发的是mention @User,此时msg.content不等于"mention",代码根本没走到获取提及成员的步骤。
修复方案
方案1:匹配开头包含指令的消息
把判断条件改成检查消息是否以"mention"开头,这样不管后面有没有@用户,都能进入逻辑:
if (msg.content.startsWith("mention")) { const target = msg.mentions.members.first(); if (!target) { msg.delete() const bruhresponsee = await msg.channel.send(`<@${msg.author.id}>, please provide a user in your message!`) setTimeout(() => { bruhresponsee.delete() }, 5000); return; } console.log(target); }
方案2:更严谨的指令拆分(适合扩展多指令)
把消息拆分成命令和参数,方便后续添加更多指令:
const args = msg.content.trim().split(/\s+/); const command = args.shift()?.toLowerCase(); if (command === "mention") { const target = msg.mentions.members.first(); if (!target) { msg.delete() const bruhresponsee = await msg.channel.send(`<@${msg.author.id}>, please provide a user in your message!`) setTimeout(() => { bruhresponsee.delete() }, 5000); return; } console.log(target); }
补充说明
msg.mentions.members.first()方法并没有过时,只要消息中确实包含成员提及,就能正常返回对应的GuildMember对象。
内容的提问来源于stack exchange,提问作者average discord bot maker
相关产品推荐
相关产品推荐

