dbot/modules/admin.js

144 lines
4.8 KiB
JavaScript
Raw Normal View History

var fs = require('fs');
var sys = require('sys')
var exec = require('child_process').exec;
var adminCommands = function(dbot) {
var dbot = dbot;
var commands = {
'join': function(data, params) {
2011-08-22 23:17:13 +02:00
dbot.instance.join(params[1]);
2012-03-10 15:38:47 +01:00
dbot.say(data.channel, 'Joined ' + params[1]);
},
2011-09-12 19:11:32 +02:00
'opme': function(data, params) {
2012-03-10 15:38:47 +01:00
dbot.instance.send('MODE ' + params[1] + ' +o ', data.user);
2011-09-12 19:11:32 +02:00
},
'part': function(data, params) {
dbot.instance.part(params[1]);
},
// Do a git pull and reload
'greload': function(data, params) {
var child;
2012-03-10 19:00:16 +01:00
child = exec("git pull", function (error, stdout, stderr) {
console.log(stderr);
dbot.say(data.channel, dbot.strings[dbot.language].gpull);
commands.reload(data, params);
}.bind(this));
},
'reload': function(data, params) {
2011-08-24 17:15:42 +02:00
dbot.db = JSON.parse(fs.readFileSync('db.json', 'utf-8'));
2012-03-25 03:24:12 +02:00
dbot.strings = JSON.parse(fs.readFileSync('strings.json', 'utf-8'));
2011-08-24 17:15:42 +02:00
dbot.reloadModules();
dbot.say(data.channel, dbot.strings[dbot.language].reload);
},
'say': function(data, params) {
if (params[1] === "@") {
var c = data.channel;
} else {
var c = params[1];
}
var m = params.slice(2).join(' ');
dbot.say(c, m);
},
'act': function(data, params) {
if (params[1] === "@") {
var c = data.channel;
} else {
var c = params[1];
}
var m = params.slice(2).join(' ');
dbot.act(c, m);
},
'load': function(data, params) {
dbot.moduleNames.push(params[1]);
dbot.reloadModules();
dbot.say(data.channel, dbot.strings[dbot.language].load_module + params[1]);
},
'unload': function(data, params) {
if(dbot.moduleNames.include(params[1])) {
2012-02-14 01:35:54 +01:00
var cacheKey = require.resolve('../modules/' + params[1]);
2012-02-14 01:32:31 +01:00
delete require.cache[cacheKey];
2012-02-14 01:41:34 +01:00
var moduleIndex = dbot.moduleNames.indexOf(params[1]);
dbot.moduleNames.splice(moduleIndex, 1);
dbot.reloadModules();
dbot.say(data.channel, dbot.strings[dbot.language].unload_module + params[1]);
} else {
dbot.say(data.channel, params[1] + dbot.strings[dbot.language].unload_error);
}
2011-10-09 17:06:28 +02:00
},
'ban': function(data, params) {
2011-10-09 17:15:44 +02:00
if(dbot.db.bans.hasOwnProperty(params[2])) {
2011-10-09 17:06:28 +02:00
dbot.db.bans[params[2]].push(params[1]);
2011-10-10 14:30:44 +02:00
} else {
dbot.db.bans[params[2]] = [ params[1] ];
2011-10-09 17:06:28 +02:00
}
dbot.say(data.channel, params[1] + dbot.strings[dbot.language].banned + params[2]);
2011-10-09 17:15:44 +02:00
},
'unban': function(data, params) {
if(dbot.db.bans.hasOwnProperty(params[2]) && dbot.db.bans[params[2]].include(params[1])) {
dbot.db.bans[params[2]].splice(dbot.db.bans[params[2]].indexOf(params[1]), 1);
dbot.say(data.channel, params[1] + dbot.strings[dbot.language].unbanned + params[2]);
2011-10-09 17:15:44 +02:00
} else {
dbot.say(data.channel, params[1] + dbot.strings[dbot.language].unban_error);
2011-10-09 17:15:44 +02:00
}
2011-10-12 19:09:55 +02:00
},
'modehate': function(data, params) {
2011-10-12 22:30:48 +02:00
dbot.db.modehate.push(params[1]);
dbot.say(data.channel, dbot.strings[dbot.language].modehate + params[1]);
2011-10-14 14:24:18 +02:00
},
2011-10-18 17:49:04 +02:00
'unmodehate': function(data, params) {
dbot.db.modehate.splice(dbot.db.modehate.indexOf(params[1]), 1);
dbot.say(data.channel, dbot.strings[dbot.language].unmodehate + params[1]);
2011-10-18 17:49:04 +02:00
},
2011-10-14 14:24:18 +02:00
'lock': function(data, params) {
dbot.db.locks.push(params[1]);
dbot.say(data.channel, dbot.strings[dbot.language].qlock + params[1]);
}
};
return {
2012-02-11 16:45:10 +01:00
// These commands are implemented as their own listener so it can easily
// check whether the user is the admin, and so that the admin can't ban
// themselves and then not be able to rectify it...
'listener': function(data) {
2011-10-18 17:57:37 +02:00
if(data.channel == dbot.name) data.channel = data.user;
params = data.message.split(' ');
2012-03-10 15:38:47 +01:00
if(commands.hasOwnProperty(params[0]) && dbot.admin.include(data.user)) {
commands[params[0]](data, params);
2011-10-18 17:52:33 +02:00
dbot.save();
}
},
2012-03-07 17:54:03 +01:00
'onLoad': function() {
return {
'~resetadmin': function(data, params) {
dbot.admin = dbot.config.admin;
}
}
},
'on': 'PRIVMSG'
};
};
exports.fetch = function(dbot) {
return adminCommands(dbot);
};