Discord.js中MongoDB黑名单功能报错:无法获取封禁原因
Discord机器人黑名单命令修复方案
错误原因分析
- 直接报错原因:你在定义
reasons变量之前,就把它用在了Blacklist.findOne的查询条件里(reason: reasons),触发了ReferenceError。 - 逻辑冗余/错误:
- 第一次查询已经能拿到包含封禁原因的完整用户黑名单记录,完全不需要第二次查询
- 第二次查询中
userID: profile是错误写法,profile是查询返回的文档对象,不是用户ID
修正后的代码
// 单次查询获取用户的黑名单记录 let blacklistRecord = await Blacklist.findOne({ userID: message.author.id, }); // 若存在封禁记录,回复包含原因的提示 if (blacklistRecord) { return message.reply(`你被封禁使用此机器人,原因:${blacklistRecord.reason}`); }
修正说明
- 简化查询流程:只用一次
findOne就能获取用户的所有黑名单信息(包括reason) - 直接从返回的文档对象中提取
reason属性,避免变量未初始化的问题 - 修复了查询条件的错误写法,确保查询逻辑正确
内容的提问来源于stack exchange,提问作者kairi
相关产品推荐
相关产品推荐

