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

执行.addmoney命令报TypeError: 期望数字却收到字符串,如何解决?

报错原因
  • 你使用的数据库add方法要求操作的目标字段存储值为数字类型,目前你数据库中存储的money_${用户id}对应值是字符串类型,同时你传入的增量参数args[1]本身也是用户输入的字符串类型,双重类型不匹配触发报错。
  • 代码存在逻辑笔误:if (args[0] > 10000)判断对象错误,args[0]是你传入的用户参数,你实际要判断的是金额参数args[1]是否超过上限。
修复方案

直接替换原有代码即可,兼容已有的字符串类型旧数据,同时修复逻辑错误:

const { db } = require("../../main");
// 补充你原代码缺失的MessageEmbed导入,否则后续会触发未定义报错
const { MessageEmbed } = require("discord.js");

module.exports = {
    name: "addmoney",
    category: "economy",
    description: "Adds Money to a user",
    usage: ".addmoney [user] <amount>",
    accessableby: "Administrator, Owner",
    run: async (bot, message, args) => {
        if (!message.member.hasPermission("ADMINISTRATOR", "MANAGE_GUILD")) return message.channel.send("You Do Not Have Permissions To Add Money... - [ADMINISTRATOR, MANAGE_GUILD]");
        if (!args[0]) return message.channel.send("You forgot to mention a person")

        let user = message.mentions.members.first() || message.guild.members.cache.get(args[0]) || message.guild.members.cache.find(r => r.user.username.toLowerCase() === args[0].toLocaleLowerCase()) || message.guild.members.cache.find(r => r.displayName.toLowerCase() === args[0].toLocaleLowerCase());
        if (!user) return message.channel.send("Enter A Valid User")
        if (!args[1]) return message.channel.send("I can not add an empty amount...")
        if (isNaN(args[1])) return message.channel.send(`Who taught you numbers? I really want to talk with that person`);
        // 转成数字再判断金额上限,修复原参数错误问题
        const addAmount = Number(args[1])
        if (addAmount > 10000) return message.channel.send("Have you even checked your balance yet? You are broke... Get a job first")
        
        // 兼容旧数据的数据库操作
        let currentBal = await db.get(`money_${user.id}`) || 0
        currentBal = Number(currentBal)
        const newBal = currentBal + addAmount
        await db.set(`money_${user.id}`, newBal)
        const bal = newBal

        let moneyEmbed = new MessageEmbed()
            .setColor('#00cbff')
            .setDescription(`Added ${args[1]} coins\n\nNew Balance: ${bal}`);
        message.channel.send(moneyEmbed)
    }
}

修复说明

  • 所有金额相关参数都统一转为数字类型,避免类型不匹配
  • 读取现有余额后强制转数字,兼容之前已经存为字符串的旧用户数据
  • 修复了金额上限判断的参数错误问题
  • 补充了缺失的MessageEmbed导入,避免后续出现未定义报错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 08:06:07