led-bot/bot.js

111 lines
2.9 KiB
JavaScript
Raw Normal View History

2020-11-08 03:29:13 +00:00
import { createRequire } from 'module';
import { discover } from './lights/light_parser.js';
import { contactServer } from './lights/request.js';
2020-11-07 23:12:27 +00:00
const require = createRequire(import.meta.url);
2020-11-08 03:29:13 +00:00
import Eris from 'eris';
import Logger, { levels } from './logger.js';
import CommandParser, { Command } from './parser.js';
import { filename, dirname } from './utils.js';
import path from 'path';
import fs from 'fs';
2020-11-07 23:12:27 +00:00
2020-11-08 03:29:13 +00:00
const cfg = require('./config.json');
2020-11-22 01:02:52 +00:00
if (!fs.existsSync('./whitelist.json')) {
2021-05-27 00:18:11 +00:00
fs.writeFileSync('./whitelist.json', '{}');
2020-11-22 01:02:52 +00:00
}
const whitelist = require('./whitelist.json');
2020-11-07 23:12:27 +00:00
const dir = dirname(import.meta.url);
const bot = new Eris(cfg.token);
2020-11-12 09:48:33 +00:00
global.ctx = {
2021-05-27 00:18:11 +00:00
bot: bot,
log_level: levels[cfg.log_level.toUpperCase()] || levels.WARN,
set_ctx: (key, value) => {
global.ctx[key] = value;
},
lights: {
port: cfg.lights_port,
addr: cfg.lights_address
}
2020-11-07 23:12:27 +00:00
};
2020-11-12 09:48:33 +00:00
const log = new Logger(filename(import.meta.url), global.ctx.log_level);
2020-11-21 23:12:14 +00:00
const parse = new CommandParser(global.ctx, cfg.prefix || undefined);
2020-11-07 23:12:27 +00:00
2020-11-21 23:12:14 +00:00
const checkUser = (user) => {
2021-05-27 00:18:11 +00:00
if (cfg.user_whitelist.includes(user.id) || (whitelist.user && whitelist.user.includes(user.id))) {
return true;
}
log.info(`user not on whitelist: ${user.username}`);
return false;
2020-11-21 23:12:14 +00:00
};
2020-11-08 03:29:13 +00:00
const checkGuild = (guild) => {
2021-05-27 00:18:11 +00:00
if (cfg.whitelist.includes(guild.id) || (whitelist.guild && whitelist.guild.includes(guild.id))) {
return true;
}
log.info(`guild not on whitelist: ${guild.name}`);
return false;
2020-11-21 23:12:14 +00:00
};
2020-11-22 01:02:52 +00:00
const saveWhitelist = () => {
2021-05-27 00:18:11 +00:00
let data = JSON.stringify(whitelist);
fs.writeFileSync('./whitelist.json', data);
2020-11-22 01:02:52 +00:00
};
2020-11-21 23:12:14 +00:00
global.ctx.whitelist = {
2021-05-27 00:18:11 +00:00
guild: checkGuild,
user: checkUser,
save: saveWhitelist,
wl: whitelist,
2020-11-07 23:12:27 +00:00
};
2020-11-08 03:29:13 +00:00
bot.on('ready', () => {
2021-05-27 00:18:11 +00:00
log.info('ready recieved.');
bot.guilds.forEach((guild) => checkGuild(guild));
2020-11-07 23:12:27 +00:00
});
2020-11-12 09:48:33 +00:00
bot.on('messageCreate', (msg) => parse.parseMsg(msg, global.ctx));
bot.on('error', (err) => log.error(err.toString()));
2020-11-07 23:12:27 +00:00
bot.connect();
async function load_commands() {
2021-05-27 00:18:11 +00:00
for (let file of files) {
let p = path.join(cmd_dir, file);
log.debug(p);
let obj;
try {
obj = await import('file:////' + p);
} catch (e) {
log.warn(`loading file ${file}, ran into issue: ${e.stack}`);
continue;
}
if (obj.default != undefined) {
if (obj.default.constructor.name == 'CommandInitializer') {
obj.default.initialize(global.ctx);
let cmds = obj.default.getCommands();
if (parse.isCmd(cmds)) {
parse.addCommand(cmds);
} else if (cmds.constructor.name == 'Array') {
for (let cmd of cmds) {
parse.addCommand(cmd);
}
}
}
} else {
log.warn('module ' + file + ' returned an undefined module.');
}
}
2020-11-07 23:12:27 +00:00
}
2020-11-08 03:29:13 +00:00
let cmd_dir = path.join(dir, 'cmd');
2020-11-07 23:12:27 +00:00
log.debug(dir);
let files = fs.readdirSync(cmd_dir);
load_commands();
contactServer(discover, (err) => {
log.error(err);
})