如果用户的健康状况已满,则需要机器人不治疗用户

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 会返回假,因为类型不一样,相等性并不完美。取决于你有什么和想要什么。 我会坚持使用 == 以确保安全。谢谢!

以上是关于如果用户的健康状况已满,则需要机器人不治疗用户的主要内容,如果未能解决你的问题,请参考以下文章

男性健康 寻医问药 胡老

Nginx实战|Nginx健康检查

如何快速开发一个健康助手,实时守护用户健康

Spring Cloud Consul—HTTP健康检查

利用系统错误日志监控磁盘健康状况

健康风险评估的步骤包括