拉取旧值而不是更新值

时间:2021-05-27 07:23:07

标签: javascript node.js

index.js(仅与系统这部分相关的内容。)

const Discord = require('discord.js');
const {GoogleSpreadsheet} = require('google-spreadsheet'); 
const doc = new GoogleSpreadsheet(process.env.SHEET_TOKEN);
const client = new Discord.Client();

const achieveFiles = fs.readdirSync('./achievements').filter(file => file.endsWith('js'));

// Create the Achievements Table
for(const file of achieveFiles){
  const achieve = require(`./achievements/${file}`);
  var key = `${file}`;
  ach_list[key.slice(0, -3)] = achieve;
}

function checkAllAchievement(ply, list2){
 ply.members.cache.forEach(mem => {
  if (mem["id"] === "156963320220352512" || mem["id"] === "202932736984481793"){
     var allRoles = mem["_roles"]
     var keylen = Object.keys(list2).length
     for (var i = 0; i < keylen; i++) {
        var notFound = false;
        var key = Object.keys(list2)[i]

        //get all users roles and check against 1 achievement at a time
        for (var j = 0; j < allRoles.length; j++){
           //Check All Roles Against Achievement Role
           if (allRoles[j] == list2[key].roleID){
              notFound = true
           } 
        } 

       if (!notFound) {
          list2[key].execute(mem, list2[key].roleID, list2[key].name, list2[key].umbrellans, list2[key].description, doc)
          notFound = true
       }
    };
  }
})

setInterval(() => checkAllAchievement(client.guilds.cache.get("the correctnumbershere"), ach_list), 20000)
----------------ReadyPlayerOne.js---------------------

    const Discord = require('discord.js');
var interviewRole = '841576000034570280'
async function checkReadyPlayerOne(user, roleID, achievementName, umbrellans, desc, doc){
  var unlocked = false
  console.log("Running")
  const sheet = doc.sheetsByIndex[0];
  const rows = await sheet.getRows();

  var allRoles = user["_roles"]
  // Check all roles for Achievement Role
  for (var i = 0; i < allRoles.length; i++){
      if (allRoles[i] === roleID){
        unlocked = true
      }
    } 
  // If Achievement isnt unlocked then check if it should be
  if(!unlocked){
    for (var i = 0; i < allRoles.length; i++){
      if (allRoles[i] === interviewRole){
        console.log("GIVING U THE ROLE!")
        user.roles.add(roleID)
        user.send("**Congratulations!! You unlocked the achievement '" + achievementName + "'** :partying_face:\n**Achievement Description: " + desc + "**\n**You have received " + umbrellans + " Umbrellans for unlocking this achievement!**");
        rows.forEach(row => {
          if(row.DiscordID === user["id"]){
            console.log(user["id"])
            row.Currency = (parseInt(row.Currency) + parseInt(umbrellans));
            row.save()
          }
        });
      }
    }
  } 
}


module.exports = {
  name: 'Ready Player One!', 
  description: "Receive your Interview Certification.",
  roleID: "844544209830412308",
  umbrellans: 10,
  execute(user, role, name, coin, desc, doc){
    checkReadyPlayerOne(user, role, name, coin, desc, doc);
    //console.log("CALLED FUNCTION")
  }  
}

----------------LivingOnAPrayer.js---------------------

const Discord = require('discord.js');
const interviewRole = '841576000034570280'
const boothRole = '841575999186927636'

var hasInt = false;
var hasBooth = false;

async function checkLivingOnAPrayer(user, roleID, achievementName, umbrellans, desc, doc){
  var unlocked = false
  //console.log("Running")
  const sheet = doc.sheetsByIndex[0];
  const rows = await sheet.getRows();

  var allRoles = user["_roles"]
  // Check all roles for Achievement Role
  for (var i = 0; i < allRoles.length; i++){
      if (allRoles[i] == roleID){
        unlocked = true
      }
    } 
  // If Achievement isnt unlocked then check if it should be
  if(!unlocked){
    for (var i = 0; i < allRoles.length; i++){
      //console.log(allRoles[i])
      if (allRoles[i] == interviewRole){
        hasInt = true
      }

      if (allRoles[i] == boothRole){
        console.log(allRoles[i])
        hasBooth = true
      }

    }
    //console.log("booth: " + hasBooth + " int: " + hasInt)
    if (hasBooth && hasInt){
      //console.log("GIVING U THE ROLE!")
      user.roles.add(roleID)
      user.send("**Congratulations!! You unlocked the achievement '" + achievementName + "'** :partying_face:\n**Achievement Description: " + desc + "**\n**You have received " + umbrellans + " Umbrellans for unlocking this achievement!**");
      rows.forEach(row => {
        if(row.DiscordID === user["id"]){
          //console.log(user["id"])
          row.Currency = (parseInt(row.Currency) + parseInt(umbrellans));
          row.save()
        }
      })
    hasBooth = false
    hasInt = false
    } 
  }
}


module.exports = {
  name: 'Living On A Prayer', 
  description: "Receive your Interview Certification & Booth Certification",
  roleID: "844544201563832380",
  umbrellans: 10,
  execute(user, role, name, coin, desc, doc){
    checkLivingOnAPrayer(user, role, name, coin, desc, doc);
    //console.log("CALLED FUNCTION")
  }  
}

当它执行 row.save() 时,它会将其写入谷歌文档。 row.Currency 是文档上的值。在 index.js 中的每次循环迭代中,它不断拉取旧货币而不是新货币。有时它会两者兼而有之,即让货币增加 10 并保存。但大多数情况下,它获取旧值加 10 并保存,然后获取旧值加 10 并再次保存。我希望它获得增值 10 并保存。然后下一次循环获取新值加 10 并保存。

0 个答案:

没有答案