forked from AgustinSRG/Pokemon-Showdown-Node-Bot
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsettings.js
More file actions
100 lines (90 loc) · 2.59 KB
/
settings.js
File metadata and controls
100 lines (90 loc) · 2.59 KB
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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
/*
Settings Manager
*/
const settingsDataFile = AppOptions.data + 'settings.json';
var settings = exports.settings = {};
if (!fs.existsSync(settingsDataFile))
fs.writeFileSync(settingsDataFile, '{}');
try {
settings = exports.settings = JSON.parse(fs.readFileSync(settingsDataFile).toString());
} catch (e) {
errlog(e.stack);
error("Could not import settings: " + sys.inspect(e));
}
var writing = exports.writing = false;
var writePending = exports.writePending = false;
var save = exports.save = function () {
var data = JSON.stringify(settings);
var finishWriting = function () {
writing = false;
if (writePending) {
writePending = false;
save();
}
};
if (writing) {
writePending = true;
return;
}
fs.writeFile(settingsDataFile + '.0', data, function () {
// rename is atomic on POSIX, but will throw an error on Windows
fs.rename(settingsDataFile + '.0', settingsDataFile, function (err) {
if (err) {
// This should only happen on Windows.
fs.writeFile(settingsDataFile, data, finishWriting);
return;
}
finishWriting();
});
});
};
exports.userCan = function (room, user, permission) {
var rank;
if (!settings['commands'] || !settings['commands'][room] || typeof settings['commands'][room][permission] === "undefined") {
rank = Config.defaultPermission;
if (Config.permissionExceptions[permission]) rank = Config.permissionExceptions[permission];
} else {
rank = settings['commands'][room][permission];
}
return Tools.equalOrHigherRank(user, rank);
};
var permissions = exports.permissions = {};
exports.addPermissions = function (perms) {
for (var i = 0; i < perms.length; i++) {
permissions[perms[i]] = 1;
}
};
var parserFilters = exports.parserFilters = {};
exports.callParseFilters = function (room, by, msg) {
for (var f in parserFilters) {
if (typeof parserFilters[f] === "function") {
if (parserFilters[f].call(this, room, by, msg)) return true;
}
}
return false;
};
exports.addParseFilter = function (id, func) {
parserFilters[id] = func;
return true;
};
exports.deleteParseFilter = function (id) {
if (!parserFilters[id]) return false;
delete parserFilters[id];
return true;
};
var seen = exports.seen = {};
var reportSeen = exports.reportSeen = function (user, room, action, args) {
if (!args) args = [];
var userid = toId(user);
var dSeen = {};
dSeen.name = user.substr(1);
dSeen.time = Date.now();
if (!(room in Config.privateRooms)) {
dSeen.room = room;
dSeen.action = action;
dSeen.args = args;
}
seen[userid] = dSeen;
};
exports.package = require('./package.json');
ok('Loaded Settings. Bot version: ' + exports.package.version);