diff --git a/app/index.js b/app/index.js index 5ab3c6e..c7e2475 100644 --- a/app/index.js +++ b/app/index.js @@ -52,7 +52,10 @@ function doGuildIteration() { function parseLinksInGuilds() { const promises = []; client.guildDataModel.find().then(guildDatas => - guildDatas.forEach(guildData => promises.push(guildData.cachePastPostedLinks(client.guilds.get(guildData.guildID))))); + guildDatas.forEach(guildData => { + if (client.guilds.get(guildData.guildID)) + promises.push(guildData.cachePastPostedLinks(client.guilds.get(guildData.guildID))); + })); return Promise.all(promises); } \ No newline at end of file diff --git a/discord-bot-core/Client.js b/discord-bot-core/Client.js index 2311c88..019d2b4 100644 --- a/discord-bot-core/Client.js +++ b/discord-bot-core/Client.js @@ -35,20 +35,11 @@ module.exports = class Client extends Discord.Client { process.on("uncaughtException", err => this._onUnhandledException(this, err)); } - bootstrap() { - Camo.connect("nedb://guilds-data").then(db => { - neDB = db; - - this.emit("beforeLogin"); - this.login(this._token); - }); - } - _onReady() { this.user.setGame(InternalConfig.website.replace(/^https?:\/\//, "")); CoreUtil.dateLog(`Registered bot ${this.user.username}`); - new CronJob(InternalConfig.dbCompactionSchedule, () => compactCollections(), null, true); + this.removeDeletedGuilds(); } _onMessage(message) { @@ -80,6 +71,24 @@ module.exports = class Client extends Discord.Client { setTimeout(() => client.login(client._token), InternalConfig.reconnectTimeout); }); } + + bootstrap() { + Camo.connect("nedb://guilds-data").then(db => { + neDB = db; + new CronJob(InternalConfig.dbCompactionSchedule, compactCollections, null, true); + + this.emit("beforeLogin"); + this.login(this._token); + }); + } + + removeDeletedGuilds() { + this.guildDataModel.find().then(guildDatas => { + for (let guildData of guildDatas) + if (!this.guilds.get(guildData.guildID)) + guildData.delete(); + }); + } }; function compactCollections() { @@ -89,6 +98,6 @@ function compactCollections() { and camo is designed to work with both NeDB and MongoDB, which is presumably why it doesn't alraedy exist */ for (let collectionName of Object.keys(neDB._collections)) neDB._collections[collectionName].persistence.compactDatafile(); - + Util.dateLog("Executed compaction on loaded NeDB collections"); } \ No newline at end of file