You need to enable JavaScript to run this app. 如何在quick.db中检查指定元素是否存在?Discord游戏机器人开发问题
优惠活动
大模型
产品
解决方案
定价
更多

如何在quick.db中检查指定元素是否存在?Discord游戏机器人开发问题

你使用的db.has方法作用是检查数据库中是否存在指定键名,仅接收1个键名参数,完全不支持判断数组内的元素是否存在,这是你之前所有写法失效的核心原因。

你用db.push存储用户角色,所以troop_${message.author.id}对应的值是数组类型,要判断角色是否重复需要先拉取整个数组再做校验:


正确校验逻辑

  1. 先拉取用户已拥有的角色列表,没有数据时默认赋值空数组避免报错
const userTroopList = await db.fetch(`troop_${message.author.id}`) || []
  1. 用数组原生方法判断随机角色是否已存在
const has = userTroopList.includes(nada)

额外优化说明

你现有代码里的db.add、db.push等数据库操作都是异步逻辑,没有加await可能会出现数据写入失败、读写顺序错乱的问题,建议所有数据库操作都加上等待。

修正后完整代码示例

// 先做重复校验
const userTroopList = await db.fetch(`troop_${message.author.id}`) || []
const has = userTroopList.includes(nada)

if(has === true){
  console.log(has)
  let embed = new discord.MessageEmbed()
.setTitle('Chest Opening | Clash Chest')
.setDescription(`<@${message.author.id}> got:\n${amount} :coin:`)
.setColor('RANDOM')
.setFooter('Created by Tahmid GS#1867')
 message.channel.send(embed)
  await db.add(`coin_${message.author.id}`, amount)
} else {
  console.log(has)
  await db.push(`troop_${message.author.id}`, nada)

  let embed = new discord.MessageEmbed()
.setTitle('Chest Opening | Clash Chest')
.setDescription(`<@${message.author.id}> got:\n${amount} :coin:\n||Common: ${nada}||`)
.setColor('RANDOM')
.setFooter('Created by Tahmid GS#1867')
  
  message.channel.send(embed)
  await db.add(`coin_${message.author.id}`, amount)
  await db.add(`card_${message.author.id}`, 1)
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 22:09:03