2017-09-14 15:09:43 +03:00
|
|
|
//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");
|
|
|
|
|
2017-09-14 23:54:21 +03:00
|
|
|
function bootstrap(token, component, guildDataModel, commands) {
|
2017-09-14 15:09:43 +03:00
|
|
|
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);
|
|
|
|
});
|
|
|
|
|
2017-09-14 23:54:21 +03:00
|
|
|
client.login(token);
|
2017-09-14 15:09:43 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
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;
|
|
|
|
}
|
|
|
|
|
2017-09-14 23:54:21 +03:00
|
|
|
module.exports = bootstrap;
|