-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathstorage.js
67 lines (56 loc) · 1.73 KB
/
storage.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
/**
* Storage
* Cassius - https://github.com/sirDonovan/Cassius
*
* This file handles the storage of room databases
*
* @license MIT license
*/
'use strict';
const fs = require('fs');
const BACKUP_INTERVAL = 5 * 60 * 1000;
class StorageManager {
constructor() {
this.databases = {};
}
importDatabase(roomid) {
let file = '{}';
try {
file = fs.readFileSync('./databases/' + roomid + '.json').toString();
} catch (e) {}
this.databases[roomid] = JSON.parse(file);
}
exportDatabase(roomid) {
if (!(roomid in this.databases)) return;
fs.writeFileSync('./databases/' + roomid + '.json', JSON.stringify(this.databases[roomid]));
}
importDatabases() {
let databases = fs.readdirSync('./databases');
for (let i = 0, len = databases.length; i < len; i++) {
let file = databases[i];
if (!file.endsWith('.json')) continue;
this.importDatabase(file.substr(0, file.indexOf('.json')));
}
}
exportDatabases() {
for (let roomid in this.databases) {
this.exportDatabase(roomid);
}
}
addPoints(points, user, roomid) {
points = parseInt(points);
if (isNaN(points)) return;
if (!(roomid in this.databases)) this.databases[roomid] = {};
let database = this.databases[roomid];
if (!('leaderboard' in database)) database.leaderboard = {};
if (!(user.id in database.leaderboard)) database.leaderboard[user.id] = {points: 0};
database.leaderboard[user.id].points += points;
if (database.leaderboard[user.id].name !== user.name) database.leaderboard[user.id].name = user.name;
}
removePoints(points, user, roomid) {
this.addPoints(-points, user, roomid);
}
}
let Storage = new StorageManager();
Storage.backupInterval = setInterval(() => Storage.exportDatabases(), BACKUP_INTERVAL);
module.exports = Storage;