led-bot/bot.js

73 lines
1.8 KiB
JavaScript
Raw Normal View History

2020-11-07 23:12:27 +00:00
import {createRequire} from "module";
const require = createRequire(import.meta.url);
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";
const cfg = require("./config.json");
const dir = dirname(import.meta.url);
const bot = new Eris(cfg.token);
const ctx = {
bot: bot,
log_level: levels.DEBUG
};
const log = new Logger(filename(import.meta.url), ctx.log_level);
const parse = new CommandParser(ctx);
const checkGuild = guild => {
if (!cfg.whitelist.includes(guild.id)) {
log.info(`Leaving guild not on whitelist: ${guild.name}`);
guild.leave();
}
};
bot.on("ready", () => {
log.info("ready recieved.");
bot.guilds.forEach(guild => checkGuild(guild));
});
bot.on("guildAvaliable", guild => checkGuild(guild));
bot.on("messageCreate", msg => parse.parseMsg(msg, ctx));
bot.connect();
async function load_commands() {
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.message}`);
continue;
}
if (obj.default != undefined) {
if (obj.default.constructor.name == "CommandInitializer") {
obj.default.initialize(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.");
}
}
}
let cmd_dir = path.join(dir, "cmd");
log.debug(dir);
let files = fs.readdirSync(cmd_dir);
load_commands();