HiddenPhox/src/index.js

116 lines
3.0 KiB
JavaScript
Raw Normal View History

2021-03-15 01:41:40 +00:00
const Eris = require("eris");
const logger = require("npmlog");
2021-07-21 16:33:36 +00:00
logger.level = "verbose";
2021-03-15 01:41:40 +00:00
const fs = require("fs");
const {resolve} = require("path");
2021-07-23 23:21:50 +00:00
const sqlite3 = require("sqlite3");
2021-03-15 01:41:40 +00:00
const config = require("../config.json");
2021-06-11 03:54:38 +00:00
const apikeys = require("../apikeys.json");
2021-03-15 01:41:40 +00:00
const Command = require("./lib/command.js");
2021-05-17 22:35:18 +00:00
const events = require("./lib/events.js");
const timer = require("./lib/timer.js");
2021-03-15 01:41:40 +00:00
const bot = new Eris(config.token, {
defaultImageFormat: "png",
defaultImageSize: 1024,
2021-07-24 00:39:34 +00:00
intents: Object.keys(Eris.Constants.Intents).filter(
(x) => x != "guildMembers" && x != "guildPresences"
),
2021-03-15 01:41:40 +00:00
});
const commands = new Eris.Collection();
2021-07-24 00:39:34 +00:00
const database = new sqlite3.Database(resolve(__dirname, "..", "database.db"));
2021-03-15 01:41:40 +00:00
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,
2021-06-11 03:54:38 +00:00
apikeys,
2021-03-15 01:41:40 +00:00
commands,
registerCommand,
2021-05-17 22:35:18 +00:00
events,
timer,
2021-07-24 00:39:34 +00:00
database,
2021-03-15 01:41:40 +00:00
};
2021-08-12 02:44:23 +00:00
const CommandDispatcher = require("./lib/commandDispatcher.js");
2021-03-15 01:41:40 +00:00
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);
});
2021-03-15 01:41:40 +00:00
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.");
2021-03-15 01:41:40 +00:00
}
});
2021-06-01 18:59:15 +00:00
bot.on("error", (err) => {
2021-07-23 23:28:05 +00:00
logger.error("hf:main", "Catching error:", err);
2021-07-21 16:33:36 +00:00
});
bot.on("warn", (err) => {
2021-07-23 23:28:05 +00:00
logger.warn("hf:main", "Catching warn:", err);
2021-07-21 16:33:36 +00:00
});
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);
2021-06-01 18:59:15 +00:00
});
2021-03-15 01:41:40 +00:00
bot.connect();