如果用户的健康状况已满,则需要机器人不治疗用户
Posted
技术标签:
【中文标题】如果用户的健康状况已满,则需要机器人不治疗用户【英文标题】:Need the bot to not heal user if their health is full 【发布时间】:2022-01-18 12:59:57 【问题描述】:我最近做了这个“治疗”命令,使用时会以 10 为增量增加生命值。但是,我想尝试将生命值上限设置为 100,这样用户就不会只是在累积它。以下是我的代码和尝试。
const profileModel = require("../models/profileSchema");
module.exports =
name: "heal",
description: "heal a user's health by 10",
cooldown: 120,
async execute(client, message, args, cmd, discord, profileData)
if (!message.member.roles.cache.has('919453438813823017')) return message.channel.send("You aren't a medic!");
if (!args.length) return message.channel.send("You need to mention the user you are trying to heal.");
const Number = 10;
const target = message.mentions.users.first();
if (!target) return message.channel.send("This user does not exist.");
try
const targetData = await profileModel.findOne( userID: target.id );
if (!targetData) return message.channel.send(`This user doens't exist in the db`);
///
if(targetData.health = 100) return message.channel.send('This user is at already at max health');
///
await profileModel.findOneAndUpdate(
userID: target.id,
,
$inc:
health: Number,
,
);
return message.channel.send(`$target's health has been healed for $Number!`);
catch (err)
console.log(err);
;
基本上,目标是机器人检查提到的用户的健康状况,如果健康状况为 100,则无法对他们执行命令。任何建议都会有所帮助。
编辑:控制台日志给出 ReferenceError: targetData is not defined at if(targetData.health === 100) return message.channel.send('This user is at already at max health');
。当我执行命令时,什么都没有发生,而不是提到的用户得到治愈(他们的健康#不是 100)。
const mongoose = require("mongoose");
const profileSchema = new mongoose.Schema(
name: type: String, require: true, unique: true ,
userID: type: String, require: true, unique: true ,
serverID: type: String, require: true ,
reputation: type: Number, default: 0 ,
health: type: Number, deafult: 100,
);
const model = mongoose.model("ProfileModels", profileSchema);
module.exports = model;
let profileData;
try
profileData = await profileModel.findOne( userID: message.author.id );
if(!profileData)
let profile = await profileModel.create(
name: message.author.id,
userID: message.author.id,
serverID: message.guild.id,
reputation: 0,
health: 100,
);
profile.save();
catch (err)
console.log(err);
【问题讨论】:
除了 '($targetData.health)' 部分我看你的代码很好,你有没有试过放几个日志,看看你能找到哪对日志? 对日志?对不起,如果这是一个明显的问题,我对 js 不是很熟悉。 添加一些带有您认为错误的数据的console.log。顺便问一下,当 ypu 执行命令时会发生什么,你期望什么? 控制台日志给出 ReferenceError: targetData is not defined at ` if(targetData.health === 100) return message.channel.send('This user is at already at max health');` .当我执行命令时,什么都没有发生,而不是提到的用户得到治愈(他们的健康#不是 100)。 尝试在const targetData = await profileModel.findOne( userID: target.id );
之后设置一个console.log(targetData)
,看看里面有什么。
【参考方案1】:
由于您尝试检查变量和数字之间的相等性,而不是为变量分配数字,因此您需要使用double equals:
if(targetData.health == 100)
【讨论】:
我在看到这条评论之前使用了三等号并且它有效,您仍然建议我使用双等号吗? 双“100” == 100 会返回真,三重“100” === 100 会返回假,因为类型不一样,相等性并不完美。取决于你有什么和想要什么。 我会坚持使用 == 以确保安全。谢谢!以上是关于如果用户的健康状况已满,则需要机器人不治疗用户的主要内容,如果未能解决你的问题,请参考以下文章