const Eris = require("eris"); const logger = require("npmlog"); logger.level = "verbose"; const fs = require("fs"); const {resolve} = require("path"); const sqlite3 = require("sqlite3"); const config = require("../config.json"); const apikeys = require("../apikeys.json"); const Command = require("./lib/command.js"); const CommandDispatcher = require("./lib/commandDispatcher.js"); const events = require("./lib/events.js"); const timer = require("./lib/timer.js"); const bot = new Eris(config.token, { defaultImageFormat: "png", defaultImageSize: 1024, intents: Object.keys(Eris.Constants.Intents).filter( (x) => x != "guildMembers" && x != "guildPresences" ), }); const commands = new Eris.Collection(); const database = new sqlite3.Database(resolve(__dirname, "..", "database.db")); function registerCommand(cmdObj) { if (cmdObj instanceof Command) { commands.set(cmdObj.name, cmdObj); const aliases = cmdObj.getAliases(); logger.info( "hf:cmd", "Registered command '%s'%s", cmdObj.name, aliases.length > 0 ? ` (aliases: ${aliases.join(", ")})` : "" ); } } global.hf = { bot, config, apikeys, commands, registerCommand, events, timer, database, }; for (const file of fs.readdirSync(resolve(__dirname, "modules"))) { require(resolve(__dirname, "modules", file)); logger.info("hf:modules", "Loaded module: '%s'", file); } bot.on("messageCreate", async (msg) => { // fix DMs cause of gateway v8 changes if (!(msg.channel instanceof Eris.Channel) && msg.author.id != bot.user.id) { const newChannel = await bot.getDMChannel(msg.author.id); if (msg.channel.id == newChannel.id) msg.channel = newChannel; } // if we still have no dm channel (threads cause this too) if (!(msg.channel instanceof Eris.Channel)) return; await CommandDispatcher(msg); }); bot.on("messageUpdate", (msg) => { const oneDay = Date.now() - 86400000; if (msg.timestamp > oneDay && !msg.hasRan) { CommandDispatcher(msg); } }); bot.on("ready", async () => { logger.info("hf:main", "Connected to Discord."); logger.info( "hf:main", "Logged in as: %s#%s (%s)", bot.user.username, bot.user.discriminator, bot.user.id ); const channel = await bot.getDMChannel(config.owner_id); if (channel) { channel.createMessage("<:ms_tick:503341995348066313> Loaded HiddenPhox."); } }); bot.on("error", (err) => { logger.error("hf:main", "Catching error:", err); }); bot.on("warn", (err) => { logger.warn("hf:main", "Catching warn:", err); }); bot.on("shardDisconnect", (err, id) => { logger.verbose("hf:shard", "Disconnecting from shard %s: %s", id, err); }); bot.on("shardResume", (id) => { logger.verbose("hf:shard", "Resuming shard %s", id); }); bot.on("shardPreReady", (id) => { logger.verbose("hf:shard", "Shard %s getting ready", id); }); bot.on("shardReady", (id) => { logger.verbose("hf:shard", "Shard %s ready", id); }); bot.on("unknown", (packet, id) => { logger.verbose("hf:main", "Shard %s caught unknown packet: %j", id, packet); }); bot.connect();