diff --git a/index.js b/index.js index 9768d87813bc3e67105e1d97768f468ab13ddcb7..270557dc30b0c7ec566508d53a8cef7e1f334e3d 100644 --- a/index.js +++ b/index.js @@ -17,6 +17,8 @@ const { warn, error } = require('./utils/notifications'); // Routes const authRouter = require('./routes/auth'); const charactersRouter = require('./routes/characters'); +// Crons +require('./utils/crons'); // Configuration const app = express(); diff --git a/utils/crons.js b/utils/crons.js new file mode 100644 index 0000000000000000000000000000000000000000..2beec70e1bfba6033467329223a0983f7b92cabd --- /dev/null +++ b/utils/crons.js @@ -0,0 +1,29 @@ +const cron = require('node-cron'); +const fs = require('fs'); +const Character = require('../models/character'); +const { maxActionPoints } = require('js-yaml').safeLoad(fs.readFileSync('./config.yml', 'utf8')); + +if (!fs.existsSync('./data/lastActionPointsUpdate')) { + fs.writeFileSync('./data/lastActionPointsUpdate', new Date().toString()); + console.log("Missing data file, generating..."); +} + +cron.schedule('*/3 * * * *', () => { + // Read last time + let lastUpdate = new Date(fs.readFileSync('./data/lastActionPointsUpdate').toString()); + // Loop until now + while (lastUpdate.getTime() < new Date().getTime() - 3*1000) { + // Give a point + Character.where('actionPoints').lt(maxActionPoints) + .exec((err, characters) => { + characters.forEach(character => { + character.actionPoints ++; + character.save(); + }); + }); + // Write lastime + lastUpdate = new Date(fs.readFileSync('./data/lastActionPointsUpdate').toString()); + lastUpdate = new Date(lastUpdate.getTime() + 3*1000); + fs.writeFileSync('./data/lastActionPointsUpdate', lastUpdate.toString()); + } +});