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

基于Discord.js的机器人是否有setCurrency函数?求编写setBalance函数

关于Discord.js自定义货币系统的setBalance函数实现

首先明确一点:Discord.js核心库本身并没有内置setCurrency或setBalance函数,你提到的currency.add()和currency.getBalance()都是Discord.js官方指南中演示的自定义货币系统的方法,它们依赖于你自己定义的Users数据库模型和currency缓存对象来工作。

根据你提供的现有代码风格,这里是对应的setBalance函数实现:

Reflect.defineProperty(currency, 'setBalance', {
  value: async function setBalance(id, amount) {
    // 转换amount为数值类型,避免非数字输入导致问题
    const numericAmount = Number(amount);
    // 从缓存中获取用户
    const user = currency.get(id);
    
    if (user) {
      // 用户存在时直接更新余额并保存到数据库
      user.balance = numericAmount;
      return user.save();
    }
    // 用户不存在时创建新记录,余额设为指定值
    const newUser = await Users.create({ user_id: id, balance: numericAmount });
    currency.set(id, newUser);
    return newUser;
  },
});

代码逻辑说明:

  • 和add方法保持一致的异步设计,因为涉及数据库操作(save()和create()都是异步方法)
  • 先将传入的amount转换为数值类型,防止字符串或其他类型导致的计算错误
  • 优先检查缓存中的用户:如果存在则直接更新余额并保存到数据库;如果不存在则创建新的用户记录,同时更新缓存
  • 最终返回更新后的用户对象,方便后续的逻辑处理

这个实现完全适配你现有的货币系统结构,你可以像调用currency.add()或currency.getBalance()一样调用currency.setBalance(userID, targetBalance)来设置指定用户的余额。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 18:52:57