You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于Quick.db模块的疑问:能否实现内容扣除功能?附代码

解决Quick.db扣除操作的问题

嘿,我瞅了你的代码,发现几个关键问题导致扣除功能没正常工作,咱们一个个来捋清楚:

1. 参数判断逻辑完全搞反了

你现在写的if (args[0]) return message.channel.send(...),意思是用户输入了物品名称反而返回错误提示,这完全和你想要的逻辑相反!应该改成判断用户没输入的情况:

if (!args[0]) return message.channel.send(`${message.author}, 你需要输入一个物品名称!`)

2. Quick.db subtract的用法误区

subtract是专门用来扣除数值类型数据的(比如物品数量),如果你的envan字段是用来存物品列表(字符串/数组),那subtract根本不适用:

  • 如果是存物品数量:你得把键名改成${user.id}.envan.${args[0]},这样每个物品单独存数量,方便扣除
  • 如果是存物品列表(数组):应该用pull方法来移除指定物品,比如await db.pull(${user.id}.envan, args[0])

3. Discord.js版本兼容性问题

你用的RichEmbed在Discord.js v12及以上版本已经被弃用了,换成MessageEmbed才能正常创建嵌入消息:

let embed = new Discord.MessageEmbed()

4. 异步操作的顺序问题

db.subtract和db.fetch都是异步操作,最好都加上await确保操作完成后再执行下一步,避免获取到旧数据。


修正后的完整代码

const db = require('quick.db')
const Discord = require('discord.js')
exports.run = async (client, message, args, config) => {
  // 先判断权限,提前返回更简洁
  if(message.author.id !== 'My ID'){
    return message.channel.send('你没有权限,兄弟').then(msg => {
      setTimeout(() => msg.delete(), 2500);
    })
  }

  // 检查是否输入物品名称
  if (!args[0]) return message.channel.send(`${message.author}, 你需要输入一个物品名称!`)

  let user = message.mentions.members.first() || message.author
  // 初始化物品数量(如果不存在就设为0,避免出现NaN)
  await db.add(`${user.id}.envan.${args[0]}`, 0)
  // 扣除1个物品(如果要支持自定义数量,可以改成args[1],记得判断是否是数字)
  await db.subtract(`${user.id}.envan.${args[0]}`, 1)
  // 获取更新后的物品数量(用get替代fetch,Quick.db新版推荐用法)
  let itemCount = await db.get(`${user.id}.envan.${args[0]}`)

  // 创建嵌入消息
  let embed = new Discord.MessageEmbed()
    .setAuthor(`你的物品已被扣除!`, message.author.displayAvatarURL({ dynamic: true }))
    .addField(`扣除的物品:`, args[0])
    .addField(`剩余数量:`, itemCount)
    .setColor("RED")
    .setTimestamp()
  message.channel.send(embed)
}

额外补充:如果你的需求是从物品列表里移除某个物品(而不是扣数量),把相关操作改成这样就行:

// 从数组里移除指定物品
await db.pull(`${user.id}.envan`, args[0])
// 获取更新后的列表
let itemList = await db.get(`${user.id}.envan`)

内容的提问来源于stack exchange,提问作者Cosmos

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 07:32:36