基于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
相关产品推荐
相关产品推荐

