forked from GitHub/dbot
Moved all data loaded from config to be used only from dbot.config. Changed admin key in to admins to avoid clash with admin module config. Admins should probably be a key under dbot.admin module anyway.
This commit is contained in:
parent
96312303f0
commit
d0c47d18eb
@ -11,7 +11,7 @@
|
|||||||
]
|
]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"admin": [ "batman" ],
|
"admins": [ "batman" ],
|
||||||
"moduleNames": [ "ignore", "admin", "command", "dice", "js", "kick", "puns", "quotes", "spelling", "youare" ],
|
"moduleNames": [ "ignore", "admin", "command", "dice", "js", "kick", "puns", "quotes", "spelling", "youare" ],
|
||||||
"language": "english"
|
"language": "english"
|
||||||
}
|
}
|
||||||
|
@ -70,21 +70,22 @@ var admin = function(dbot) {
|
|||||||
// Load new module
|
// Load new module
|
||||||
'load': function(event) {
|
'load': function(event) {
|
||||||
var moduleName = event.params[1];
|
var moduleName = event.params[1];
|
||||||
dbot.moduleNames.push(moduleName);
|
dbot.config.moduleNames.push(moduleName);
|
||||||
dbot.reloadModules();
|
dbot.reloadModules();
|
||||||
event.reply(dbot.t('load_module', {'moduleName': moduleName}));
|
event.reply(dbot.t('load_module', {'moduleName': moduleName}));
|
||||||
},
|
},
|
||||||
|
|
||||||
// Unload a loaded module
|
// Unload a loaded module
|
||||||
'unload': function(event) {
|
'unload': function(event) {
|
||||||
|
var moduleNames = dbot.config.moduleNames;
|
||||||
var moduleName = event.params[1];
|
var moduleName = event.params[1];
|
||||||
if(dbot.moduleNames.include(moduleName)) {
|
if(moduleNames.include(moduleName)) {
|
||||||
var moduleDir = '../' + moduleName + '/';
|
var moduleDir = '../' + moduleName + '/';
|
||||||
var cacheKey = require.resolve(moduleDir + moduleName);
|
var cacheKey = require.resolve(moduleDir + moduleName);
|
||||||
delete require.cache[cacheKey];
|
delete require.cache[cacheKey];
|
||||||
|
|
||||||
var moduleIndex = dbot.moduleNames.indexOf(moduleName);
|
var moduleIndex = moduleNames.indexOf(moduleName);
|
||||||
dbot.moduleNames.splice(moduleIndex, 1);
|
moduleNames.splice(moduleIndex, 1);
|
||||||
dbot.reloadModules();
|
dbot.reloadModules();
|
||||||
|
|
||||||
event.reply(dbot.t('unload_module', {'moduleName': moduleName}));
|
event.reply(dbot.t('unload_module', {'moduleName': moduleName}));
|
||||||
@ -134,7 +135,7 @@ var admin = function(dbot) {
|
|||||||
*/
|
*/
|
||||||
'listener': function(event) {
|
'listener': function(event) {
|
||||||
var commandName = event.params[0];
|
var commandName = event.params[0];
|
||||||
if(commands.hasOwnProperty(commandName) && dbot.admin.include(event.user)) {
|
if(commands.hasOwnProperty(commandName) && dbot.config.admins.include(event.user)) {
|
||||||
commands[commandName](event);
|
commands[commandName](event);
|
||||||
dbot.save();
|
dbot.save();
|
||||||
}
|
}
|
||||||
|
@ -22,7 +22,7 @@ var js = function(dbot) {
|
|||||||
|
|
||||||
// Run JS code un-sandboxed, with access to DBot memory (admin-only).
|
// Run JS code un-sandboxed, with access to DBot memory (admin-only).
|
||||||
'~ajs': function(event) {
|
'~ajs': function(event) {
|
||||||
if(dbot.admin.include(event.user) ) {
|
if(dbot.config.admins.include(event.user) ) {
|
||||||
var ret = eval(event.input[1]);
|
var ret = eval(event.input[1]);
|
||||||
if(ret !== undefined) {
|
if(ret !== undefined) {
|
||||||
event.reply(ret);
|
event.reply(ret);
|
||||||
|
@ -46,10 +46,10 @@ var kick = function(dbot) {
|
|||||||
'commands': commands,
|
'commands': commands,
|
||||||
|
|
||||||
'listener': function(event) {
|
'listener': function(event) {
|
||||||
if(event.kickee == dbot.name) {
|
if(event.kickee == dbot.config.name) {
|
||||||
dbot.instance.join(event, event.channel);
|
dbot.instance.join(event, event.channel);
|
||||||
event.reply(dbot.t('kicked_dbot', {'botname': dbot.name}));
|
event.reply(dbot.t('kicked_dbot', {'botname': dbot.config.name}));
|
||||||
dbot.db.kicks[dbot.name] += 1;
|
dbot.db.kicks[dbot.config.name] += 1;
|
||||||
} else {
|
} else {
|
||||||
if(!dbot.db.kicks.hasOwnProperty(event.kickee)) {
|
if(!dbot.db.kicks.hasOwnProperty(event.kickee)) {
|
||||||
dbot.db.kicks[event.kickee] = 1;
|
dbot.db.kicks[event.kickee] = 1;
|
||||||
|
@ -8,7 +8,7 @@ var puns = function(dbot) {
|
|||||||
|
|
||||||
'listener': function(event) {
|
'listener': function(event) {
|
||||||
event.user = dbot.cleanNick(event.user);
|
event.user = dbot.cleanNick(event.user);
|
||||||
if(dbot.moduleNames.include('quotes') &&
|
if(dbot.config.moduleNames.include('quotes') &&
|
||||||
dbot.db.quoteArrs.hasOwnProperty(event.user)) {
|
dbot.db.quoteArrs.hasOwnProperty(event.user)) {
|
||||||
event.message = '~q ' + event.user;
|
event.message = '~q ' + event.user;
|
||||||
event.action = 'PRIVMSG';
|
event.action = 'PRIVMSG';
|
||||||
|
@ -94,10 +94,10 @@ var quotes = function(dbot) {
|
|||||||
},
|
},
|
||||||
|
|
||||||
'~rmlast': function(event) {
|
'~rmlast': function(event) {
|
||||||
if(rmAllowed == true || dbot.admin.include(event.user)) {
|
if(rmAllowed == true || dbot.config.admins.include(event.user)) {
|
||||||
var key = event.input[1].trim().toLowerCase();
|
var key = event.input[1].trim().toLowerCase();
|
||||||
if(quotes.hasOwnProperty(key)) {
|
if(quotes.hasOwnProperty(key)) {
|
||||||
if(!dbot.db.locks.include(key) || dbot.admin.include(event.user)) {
|
if(!dbot.db.locks.include(key) || dbot.config.admins.include(event.user)) {
|
||||||
var quote = quotes[key].pop();
|
var quote = quotes[key].pop();
|
||||||
if(quotes[key].length === 0) {
|
if(quotes[key].length === 0) {
|
||||||
delete quotes[key];
|
delete quotes[key];
|
||||||
@ -116,7 +116,7 @@ var quotes = function(dbot) {
|
|||||||
},
|
},
|
||||||
|
|
||||||
'~rm': function(event) {
|
'~rm': function(event) {
|
||||||
if(rmAllowed == true || dbot.admin.include(event.user)) {
|
if(rmAllowed == true || dbot.config.admins.include(event.user)) {
|
||||||
var key = event.input[1].trim().toLowerCase();
|
var key = event.input[1].trim().toLowerCase();
|
||||||
var quote = event.input[2];
|
var quote = event.input[2];
|
||||||
|
|
||||||
|
@ -9,21 +9,21 @@ var webInterface = function(dbot) {
|
|||||||
app.set('view engine', 'jade');
|
app.set('view engine', 'jade');
|
||||||
|
|
||||||
app.get('/', function(req, res) {
|
app.get('/', function(req, res) {
|
||||||
res.render('index', { 'name': dbot.name });
|
res.render('index', { 'name': dbot.config.name });
|
||||||
});
|
});
|
||||||
|
|
||||||
app.get('/connections', function(req, res) {
|
app.get('/connections', function(req, res) {
|
||||||
var connections = Object.keys(dbot.instance.connections);
|
var connections = Object.keys(dbot.instance.connections);
|
||||||
res.render('connections', { 'name': dbot.name, 'connections': connections });
|
res.render('connections', { 'name': dbot.config.name, 'connections': connections });
|
||||||
});
|
});
|
||||||
|
|
||||||
app.get('/channels/:connection', function(req, res) {
|
app.get('/channels/:connection', function(req, res) {
|
||||||
var connection = req.params.connection;
|
var connection = req.params.connection;
|
||||||
if(dbot.instance.connections.hasOwnProperty(connection)) {
|
if(dbot.instance.connections.hasOwnProperty(connection)) {
|
||||||
var channels = Object.keys(dbot.instance.connections[connection].channels);
|
var channels = Object.keys(dbot.instance.connections[connection].channels);
|
||||||
res.render('channels', { 'name': dbot.name, 'connection': connection, 'channels': channels});
|
res.render('channels', { 'name': dbot.config.name, 'connection': connection, 'channels': channels});
|
||||||
} else {
|
} else {
|
||||||
res.render('error', { 'name': dbot.name, 'message': 'No such connection.' });
|
res.render('error', { 'name': dbot.config.name, 'message': 'No such connection.' });
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -35,10 +35,10 @@ var webInterface = function(dbot) {
|
|||||||
if(connections.hasOwnProperty(connection) &&
|
if(connections.hasOwnProperty(connection) &&
|
||||||
connections[connection].channels.hasOwnProperty(channel)) {
|
connections[connection].channels.hasOwnProperty(channel)) {
|
||||||
var nicks = Object.keys(connections[connection].channels[channel].nicks);
|
var nicks = Object.keys(connections[connection].channels[channel].nicks);
|
||||||
res.render('users', { 'name': dbot.name, 'connection': connection,
|
res.render('users', { 'name': dbot.config.name, 'connection': connection,
|
||||||
'channel': channel, 'nicks': nicks });
|
'channel': channel, 'nicks': nicks });
|
||||||
} else {
|
} else {
|
||||||
res.render('error', { 'name': dbot.name, 'message': 'No such connection or channel.' });
|
res.render('error', { 'name': dbot.config.name, 'message': 'No such connection or channel.' });
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -64,35 +64,35 @@ var webInterface = function(dbot) {
|
|||||||
var kicked = dbot.db.kickers[req.params.user];
|
var kicked = dbot.db.kickers[req.params.user];
|
||||||
}
|
}
|
||||||
|
|
||||||
res.render('user', { 'name': dbot.name, 'user': req.params.user,
|
res.render('user', { 'name': dbot.config.name, 'user': req.params.user,
|
||||||
'channel': channel, 'connection': connection, 'cleanUser': user,
|
'channel': channel, 'connection': connection, 'cleanUser': user,
|
||||||
'quotecount': quoteCount, 'kicks': kicks, 'kicked': kicked });
|
'quotecount': quoteCount, 'kicks': kicks, 'kicked': kicked });
|
||||||
});
|
});
|
||||||
|
|
||||||
// Lists the quote categories
|
// Lists the quote categories
|
||||||
app.get('/quotes', function(req, res) {
|
app.get('/quotes', function(req, res) {
|
||||||
res.render('quotelist', { 'name': dbot.name, 'quotelist': Object.keys(dbot.db.quoteArrs) });
|
res.render('quotelist', { 'name': dbot.config.name, 'quotelist': Object.keys(dbot.db.quoteArrs) });
|
||||||
});
|
});
|
||||||
|
|
||||||
// Lists quotes in a category
|
// Lists quotes in a category
|
||||||
app.get('/quotes/:key', function(req, res) {
|
app.get('/quotes/:key', function(req, res) {
|
||||||
var key = req.params.key.toLowerCase();
|
var key = req.params.key.toLowerCase();
|
||||||
if(dbot.db.quoteArrs.hasOwnProperty(key)) {
|
if(dbot.db.quoteArrs.hasOwnProperty(key)) {
|
||||||
res.render('quotes', { 'name': dbot.name, 'quotes': dbot.db.quoteArrs[key], locals: { 'url_regex': RegExp.prototype.url_regex() } });
|
res.render('quotes', { 'name': dbot.config.name, 'quotes': dbot.db.quoteArrs[key], locals: { 'url_regex': RegExp.prototype.url_regex() } });
|
||||||
} else {
|
} else {
|
||||||
res.render('error', { 'name': dbot.name, 'message': 'No quotes under that key.' });
|
res.render('error', { 'name': dbot.config.name, 'message': 'No quotes under that key.' });
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
// Load random quote category page
|
// Load random quote category page
|
||||||
app.get('/rq', function(req, res) {
|
app.get('/rq', function(req, res) {
|
||||||
var rCategory = Object.keys(dbot.db.quoteArrs).random();
|
var rCategory = Object.keys(dbot.db.quoteArrs).random();
|
||||||
res.render('quotes', { 'name': dbot.name, 'quotes': dbot.db.quoteArrs[rCategory], locals: { 'url_regex': RegExp.prototype.url_regex() } });
|
res.render('quotes', { 'name': dbot.config.name, 'quotes': dbot.db.quoteArrs[rCategory], locals: { 'url_regex': RegExp.prototype.url_regex() } });
|
||||||
});
|
});
|
||||||
|
|
||||||
// Lists all of the polls
|
// Lists all of the polls
|
||||||
app.get('/polls', function(req, res) {
|
app.get('/polls', function(req, res) {
|
||||||
res.render('polllist', { 'name': dbot.name, 'polllist': Object.keys(dbot.db.polls) });
|
res.render('polllist', { 'name': dbot.config.name, 'polllist': Object.keys(dbot.db.polls) });
|
||||||
});
|
});
|
||||||
|
|
||||||
// Shows the results of a poll
|
// Shows the results of a poll
|
||||||
@ -107,9 +107,9 @@ var webInterface = function(dbot) {
|
|||||||
totalVotes += N;
|
totalVotes += N;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
res.render('polls', { 'name': dbot.name, 'description': dbot.db.polls[key].description, 'votees': Object.keys(dbot.db.polls[key].votees), 'options': dbot.db.polls[key].votes, locals: { 'totalVotes': totalVotes, 'url_regex': RegExp.prototype.url_regex() } });
|
res.render('polls', { 'name': dbot.config.name, 'description': dbot.db.polls[key].description, 'votees': Object.keys(dbot.db.polls[key].votees), 'options': dbot.db.polls[key].votes, locals: { 'totalVotes': totalVotes, 'url_regex': RegExp.prototype.url_regex() } });
|
||||||
} else {
|
} else {
|
||||||
res.render('error', { 'name': dbot.name, 'message': 'No polls under that key.' });
|
res.render('error', { 'name': dbot.config.name, 'message': 'No polls under that key.' });
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
31
run.js
31
run.js
@ -5,7 +5,7 @@ require('./snippets');
|
|||||||
|
|
||||||
var DBot = function(timers) {
|
var DBot = function(timers) {
|
||||||
// Load external files
|
// Load external files
|
||||||
var requiredConfigKeys = [ 'name', 'servers', 'admin', 'moduleNames', 'language' ];
|
var requiredConfigKeys = [ 'name', 'servers', 'admins', 'moduleNames', 'language' ];
|
||||||
try {
|
try {
|
||||||
this.config = JSON.parse(fs.readFileSync('config.json', 'utf-8'));
|
this.config = JSON.parse(fs.readFileSync('config.json', 'utf-8'));
|
||||||
} catch(err) {
|
} catch(err) {
|
||||||
@ -55,19 +55,14 @@ var DBot = function(timers) {
|
|||||||
this.timers = timers.create();
|
this.timers = timers.create();
|
||||||
|
|
||||||
// Populate bot properties with config data
|
// Populate bot properties with config data
|
||||||
for(var configKey in this.config) {
|
|
||||||
if(this.config.hasOwnProperty(configKey) && this.hasOwnProperty(configKey) === false) {
|
|
||||||
this[configKey] = this.config[configKey];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Create JSBot and connect to each server
|
// Create JSBot and connect to each server
|
||||||
this.instance = jsbot.createJSBot(this.name);
|
this.instance = jsbot.createJSBot(this.config.name);
|
||||||
for(var name in this.servers) {
|
for(var name in this.config.servers) {
|
||||||
if(this.servers.hasOwnProperty(name)) {
|
if(this.config.servers.hasOwnProperty(name)) {
|
||||||
var server = this.servers[name];
|
var server = this.config.servers[name];
|
||||||
this.instance.addConnection(name, server.server, server.port, this.admin, function(event) {
|
this.instance.addConnection(name, server.server, server.port,
|
||||||
var server = this.servers[event.server];
|
this.config.admin, function(event) {
|
||||||
|
var server = this.config.servers[event.server];
|
||||||
for(var i=0;i<server.channels.length;i++) {
|
for(var i=0;i<server.channels.length;i++) {
|
||||||
this.instance.join(event, server.channels[i]);
|
this.instance.join(event, server.channels[i]);
|
||||||
}
|
}
|
||||||
@ -89,7 +84,7 @@ DBot.prototype.say = function(server, channel, message) {
|
|||||||
DBot.prototype.t = function(string, formatData) {
|
DBot.prototype.t = function(string, formatData) {
|
||||||
var formattedString;
|
var formattedString;
|
||||||
if(this.strings.hasOwnProperty(string)) {
|
if(this.strings.hasOwnProperty(string)) {
|
||||||
var lang = this.language;
|
var lang = this.config.language;
|
||||||
if(!this.strings[string].hasOwnProperty(lang)) {
|
if(!this.strings[string].hasOwnProperty(lang)) {
|
||||||
lang = "english";
|
lang = "english";
|
||||||
}
|
}
|
||||||
@ -135,10 +130,12 @@ DBot.prototype.reloadModules = function() {
|
|||||||
this.strings = {};
|
this.strings = {};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var moduleNames = this.config.moduleNames;
|
||||||
|
|
||||||
// Enforce having command. it can still be reloaded, but dbot _will not_
|
// Enforce having command. it can still be reloaded, but dbot _will not_
|
||||||
// function without it, so not having it should be impossible
|
// function without it, so not having it should be impossible
|
||||||
if(!this.moduleNames.include("command")) {
|
if(!moduleNames.include("command")) {
|
||||||
this.moduleNames.push("command");
|
moduleNames.push("command");
|
||||||
}
|
}
|
||||||
|
|
||||||
// Reload Javascript snippets
|
// Reload Javascript snippets
|
||||||
@ -148,7 +145,7 @@ DBot.prototype.reloadModules = function() {
|
|||||||
|
|
||||||
this.instance.removeListeners();
|
this.instance.removeListeners();
|
||||||
|
|
||||||
this.moduleNames.each(function(name) {
|
moduleNames.each(function(name) {
|
||||||
var moduleDir = './modules/' + name + '/';
|
var moduleDir = './modules/' + name + '/';
|
||||||
var cacheKey = require.resolve(moduleDir + name);
|
var cacheKey = require.resolve(moduleDir + name);
|
||||||
delete require.cache[cacheKey];
|
delete require.cache[cacheKey];
|
||||||
|
Loading…
Reference in New Issue
Block a user