74 lines
2.2 KiB
JavaScript
74 lines
2.2 KiB
JavaScript
|
//node imports
|
||
|
const FileSystem = require("fs"); //manage files
|
||
|
const Util = require("util");
|
||
|
|
||
|
//external lib imports
|
||
|
const Discord = require("discord.js");
|
||
|
const JsonFile = require("jsonfile"); //save/load data to/from json
|
||
|
|
||
|
const Config = require("./config.json");
|
||
|
const ParentPackageJSON = require("../package.json"); //used to provide some info about the bot
|
||
|
const DiscordUtil = require("./util.js"); //some discordjs helper functions of mine
|
||
|
const MessageHandler = require("./message-handler.js");
|
||
|
|
||
|
function bootstrap(component, guildDataModel, commands) {
|
||
|
process.on("uncaughtException", (err) => {
|
||
|
DiscordUtil.dateError("Uncaught exception!", err);
|
||
|
});
|
||
|
|
||
|
const client = new Discord.Client();
|
||
|
|
||
|
client.on("ready", () => {
|
||
|
onReady(client, component, guildDataModel, commands);
|
||
|
|
||
|
client.user.setGame("benji7425.github.io");
|
||
|
DiscordUtil.dateLog("Registered bot " + client.user.username);
|
||
|
});
|
||
|
|
||
|
client.on("disconnect", eventData => {
|
||
|
DiscordUtil.dateError("Bot was disconnected!", eventData.code, eventData.reason);
|
||
|
});
|
||
|
|
||
|
client.login(require("../token.json").token);
|
||
|
}
|
||
|
|
||
|
function onReady(client, component, guildDataModel, commands) {
|
||
|
const saveFile = Util.format(Config.saveFile, ParentPackageJSON.name + "");
|
||
|
|
||
|
const guildsData =
|
||
|
FileSystem.existsSync(saveFile) ?
|
||
|
fromJSON(JsonFile.readFileSync(saveFile), guildDataModel) : {};
|
||
|
|
||
|
const writeFile = () =>
|
||
|
JsonFile.writeFile(
|
||
|
saveFile,
|
||
|
guildsData,
|
||
|
err => {
|
||
|
if (err) DiscordUtil.dateError("Error writing file", err);
|
||
|
});
|
||
|
|
||
|
setInterval(() => writeFile(), Config.saveIntervalSec * 1000);
|
||
|
|
||
|
client.on("message", message => {
|
||
|
if (message.author.id !== client.user.id) {
|
||
|
if (message.channel.type === "dm")
|
||
|
MessageHandler.handleDirectMessage({ client, message });
|
||
|
else if (message.channel.type === "text" && message.member)
|
||
|
MessageHandler.handleTextMessage({ client, commands, message, guildDataModel, guildsData, component, writeFile });
|
||
|
}
|
||
|
});
|
||
|
|
||
|
component.onReady(client, guildsData)
|
||
|
.then(() => writeFile())
|
||
|
.catch(err => DiscordUtil.dateError(err));
|
||
|
}
|
||
|
|
||
|
function fromJSON(json, guildDataModel) {
|
||
|
const guildsData = Object.keys(json);
|
||
|
guildsData.forEach(guildID => { json[guildID] = new guildDataModel(json[guildID]); });
|
||
|
return json;
|
||
|
}
|
||
|
|
||
|
module.exports = {
|
||
|
bootstrap
|
||
|
};
|