修复验证面板重复创建数据与删除数据无效的Bug
问题修复方案
问题1:setup命令重复生成数据的修复
原代码存在两个核心问题:
verify.findOne是异步操作,未添加await,导致data是Promise对象而非实际查询结果,判断逻辑完全失效- 重复检查的
if (data == data)是无意义表达式,永远为true,无法拦截已存在的验证面板记录
修复后的setup代码:
// setup const data = await verify.findOne({ guildId: interaction.guild.id }); if (data) { return interaction.reply({ content: '你已经创建过验证面板了!', ephemeral: true, }); } await verify.create({ guildId: interaction.guild.id, roleId: role.id, }); return interaction.reply({ content: '验证面板设置成功!', ephemeral: true, });
问题2:delete命令无法删除数据的修复
原代码的问题是verify.findOneAndDelete是异步操作,未加await,导致data始终是Promise对象,!data的判断永远不成立,同时无法确保删除操作完成后再执行回复逻辑。
修复后的delete代码:
// delete const data = await verify.findOneAndDelete({ guildId: interaction.guild.id }); if (!data) { return interaction.reply({ content: '此服务器尚未设置验证面板', ephemeral: true, }); } interaction.reply({ content: `已成功删除**${interaction.guild.name}**的验证数据`, ephemeral: true, });
关键说明
所有MongoDB操作(findOne/create/findOneAndDelete)均为异步函数,必须添加await才能获取实际的查询/操作结果,否则无法正确执行逻辑判断。
内容的提问来源于stack exchange,提问作者midora
相关产品推荐
相关产品推荐

