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();