Discord.js v12如何让消息收集器监听被提及用户的消息?
问题分析与解决方案
嘿,这个需求完全可行哦!只是你修改的代码里有几个小问题导致没生效,我来帮你捋清楚:
1. 你代码里的核心问题
- 你写的
t.<member>是错误的语法,<member>是占位符,需要替换成实际的服务器成员(GuildMember)实例;同时消息对象t的成员属性是t.member,它对应这条消息发送者的GuildMember对象(仅在服务器频道中有效,DM频道里t.member会是null)。 - 直接写
<member>.id也不对,你得先定义一个代表目标成员的变量,比如targetMember,再用它的ID做判断。
2. 正确的实现示例
假设你已经通过ID、提及等方式获取到了要监听的目标成员,代码可以这样写:
// 示例:通过成员ID获取目标成员 const targetMember = message.guild.members.cache.get("目标成员的ID"); // 创建仅监听该成员消息的收集器 const two = message.channel.createMessageCollector( (t) => t.member && t.member.id === targetMember.id, { max: 1 } );
3. 额外注意事项
- 频道类型判断:如果你的代码可能在DM频道运行,一定要保留
t.member && ...的判断,否则会因为t.member为null,读取id时报错。 - 成员有效性校验:确保
targetMember是有效的GuildMember实例,比如如果成员不在当前服务器,message.guild.members.cache.get()会返回undefined,这时候可以加个前置判断:if (!targetMember) { return message.reply("目标成员不存在于当前服务器!"); }
内容的提问来源于stack exchange,提问作者SHARK
相关产品推荐
相关产品推荐

