Таймер на некоторых командах - PullRequest
0 голосов
/ 18 января 2019

Я пытаюсь создать команду репутации с моим ботом, но я хочу, чтобы он работал на 24-часовом таймере, чтобы они могли давать репутацию только один раз в день. В первом блоке они только просматривают своего представителя, и если они упоминают пользователя, это дает указанному пользователю точку повторения. Я не понимаю, как сделать таймер, хотя ...

const Discord = require("discord.js");
const fs = require("fs");
const ms = require("ms");
let reputation = JSON.parse(fs.readFileSync("./saves/reputation.json", "utf8"));

module.exports.run = async(bot, message, args) => {
  console.log(`${message.member} ran the "reputation" command`);

  //-- Timer on last use
  let repTimer = 8640000

  //-- Getting username
  let repUser = message.guild.member(message.mentions.users.first() ||
    message.guild.members.get(args[0]));

  //-- Only displaying your points --\\
  if (!repUser) {
    if (!reputation[message.author.id]) {
      reputation[message.author.id] = {
        reputation: 0
      };
    }

    let repPoints = reputation[message.author.id].reputation;

    let repEmbed = new Discord.RichEmbed()
      .setAuthor(message.author.username)
      .setColor("#00FF00")
      .setDescription(`Reputation Points: ${repPoints}`);

    message.channel.send(repEmbed);
  } //-- End !repUser
  else {

    if (!reputation[repUser.id]) {
      reputation[repUser.id] = {
        reputation: 0
      };
    }

    //-- If user was mentioned --\\
    let numRep = reputation[repUser.id].reputation;

    reputation[repUser.id] = {
      reputation: numRep + 1
    };

    message.channel.send(`${message.author.username} has given ${repUser} a 
    reputation point`);
  }

  //-- Needed (Also Wth Error Message) --\\
  fs.writeFile("./saves/reputation.json", JSON.stringify(reputation), (err) => {
    if (err) console.log(err)
  });

}

module.exports.help = {
  name: "rep"
}

1 Ответ

0 голосов
/ 18 января 2019

Один из способов сделать это - создать отдельный файл (например, /saves/players.json), в котором вы можете хранить объекты игрока.

Сначала вы прочитаете файл и посмотрите, есть ли у него объект для указанного пользователя, если нет, то вы создаете новый.

После этого вы видите, может ли пользователь дать репутацию, и если это так, вы запускаете код, чтобы дать оценку репутации. После этого вы сбрасываете свойство, чтобы оно могло быть снова использовано через 24 часа.

Посмотрите на код ниже. Это не проверено, но должно дать вам общее представление о том, что я пытаюсь объяснить.

let players = JSON.parse(fs.readFileSync("./saves/players.json", 
"utf8"));

// Get the user who gave the rep
let repGiver;

if(!players[message.author.id]){
  repGiver = {
    nextRep: new Date()
  };

  players[message.author.id] = repGiver;
} else {
  repGiver = players[message.author.id];
}

// Check whether the user can give rep
if (repGiver.nextRep <= new Date()) {
  /*
   * Code to give a player rep
   */

  players[message.author.id] = {
    // Reset the nextRep property to tomorrow
    nextRep: new Date(new Date().getTime() + 24 * 60 * 60 * 1000)
  };
} else {
  // Code for when a player can't give rep yet
}

// Save the new values for players
fs.writeFile("./saves/players.json", JSON.stringify(players), (err) 
    => {
      if (err) console.log(err)
    });
...