From 7e20086b2a097d328e0359efe8b67cc2a7d37e94 Mon Sep 17 00:00:00 2001 From: Daniel Odendahl Jr Date: Mon, 8 May 2017 13:20:49 +0000 Subject: [PATCH] Update SequelizeProvider and do some other stuff --- Procfile | 2 +- index.js | 14 ++++---- package.json | 2 +- providers/Sequelize.js | 74 ++++++++++++++++++++++------------------ shardingmanager.js | 2 -- structures/PostgreSQL.js | 2 +- structures/Stats.js | 4 --- 7 files changed, 49 insertions(+), 51 deletions(-) diff --git a/Procfile b/Procfile index 5f6dddef..8632a70a 100644 --- a/Procfile +++ b/Procfile @@ -1 +1 @@ -worker: node shardingmanager.js \ No newline at end of file +worker: node shardingmanager.js diff --git a/index.js b/index.js index ac0aee90..14b6d8da 100644 --- a/index.js +++ b/index.js @@ -10,8 +10,8 @@ const path = require('path'); const { carbon, discordBots } = require('./structures/Stats'); const SequelizeProvider = require('./providers/Sequelize'); const Database = require('./structures/PostgreSQL'); -const database = new Database(); -database.start(); + +Database.start(); client.setProvider(new SequelizeProvider(Database.db)); @@ -74,13 +74,13 @@ client.on('guildCreate', async(guild) => { console.log(`[Count] ${count}`); try { await carbon(count); - console.log(`[Carbon] Successfully posted to Carbon.`); + console.log('[Carbon] Successfully posted to Carbon.'); } catch(err) { console.log(`[Carbon] Failed to post to Carbon. ${err}`); } try { await discordBots(count, client.user.id); - console.log(`[Discord Bots] Successfully posted to Discord Bots.`); + console.log('[Discord Bots] Successfully posted to Discord Bots.'); } catch(err) { console.log(`[Discord Bots] Failed to post to Discord Bots. ${err}`); } @@ -93,13 +93,13 @@ client.on('guildDelete', async(guild) => { console.log(`[Count] ${count}`); try { await carbon(count); - console.log(`[Carbon] Successfully posted to Carbon.`); + console.log('[Carbon] Successfully posted to Carbon.'); } catch(err) { console.log(`[Carbon] Failed to post to Carbon. ${err}`); } try { await discordBots(count, client.user.id); - console.log(`[Discord Bots] Successfully posted to Discord Bots.`); + console.log('[Discord Bots] Successfully posted to Discord Bots.'); } catch(err) { console.log(`[Discord Bots] Failed to post to Discord Bots. ${err}`); } @@ -120,6 +120,4 @@ client.on('ready', () => { client.user.setGame(`x;help | Shard ${client.shard.id}`); }); -process.on('unhandledRejection', console.error); - client.login(process.env.TOKEN); diff --git a/package.json b/package.json index 57b7db42..ce7d2c9a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "xiaobot", - "version": "18.6.1", + "version": "18.6.2", "description": "A Discord Bot", "main": "shardingmanager.js", "scripts": { diff --git a/providers/Sequelize.js b/providers/Sequelize.js index 70356659..7423d25b 100644 --- a/providers/Sequelize.js +++ b/providers/Sequelize.js @@ -12,20 +12,20 @@ class SequelizeProvider extends SettingProvider { */ /** - * @param {PostgreSQLDatabase} db - Database for the provider + * @param {SQLDatabase} db - Database for the provider */ constructor(db) { super(); /** * Database that will be used for storing/retrieving settings - * @type {PostgreSQLDatabase} + * @type {SQLDatabase} */ this.db = db; /** * Client that the provider is for (set once the client is ready, after using {@link CommandoClient#setProvider}) - * @name PostgreSQLProvider#client + * @name SequelizeProvider#client * @type {CommandoClient} * @readonly */ @@ -57,7 +57,7 @@ class SequelizeProvider extends SettingProvider { unique: true, primaryKey: true }, - settings: { type: Sequelize.STRING } + settings: { type: Sequelize.TEXT } }); /** @@ -72,19 +72,19 @@ class SequelizeProvider extends SettingProvider { // Load all settings const rows = await this.model.findAll(); - for(const row of rows) { + for (const row of rows) { let settings; try { settings = JSON.parse(row.dataValues.settings); - } catch(err) { - client.emit('warn', `PostgreSQLProvider couldn't parse the settings stored for guild ${row.dataValues.guild}.`); + } catch (err) { + client.emit('warn', `SequelizeProvider couldn't parse the settings stored for guild ${row.dataValues.guild}.`); continue; } const guild = row.dataValues.guild !== '0' ? row.dataValues.guild : 'global'; this.settings.set(guild, settings); - if(guild !== 'global' && !client.guilds.has(row.dataValues.guild)) continue; + if (guild !== 'global' && !client.guilds.has(row.dataValues.guild)) continue; this.setupGuild(guild, settings); } @@ -95,27 +95,27 @@ class SequelizeProvider extends SettingProvider { .set('groupStatusChange', (guild, group, enabled) => this.set(guild, `grp-${group.id}`, enabled)) .set('guildCreate', guild => { const settings = this.settings.get(guild.id); - if(!settings) return; + if (!settings) return; this.setupGuild(guild.id, settings); }) .set('commandRegister', command => { - for(const [guild, settings] of this.settings) { - if(guild !== 'global' && !client.guilds.has(guild)) continue; + for (const [guild, settings] of this.settings) { + if (guild !== 'global' && !client.guilds.has(guild)) continue; this.setupGuildCommand(client.guilds.get(guild), command, settings); } }) .set('groupRegister', group => { - for(const [guild, settings] of this.settings) { - if(guild !== 'global' && !client.guilds.has(guild)) continue; + for (const [guild, settings] of this.settings) { + if (guild !== 'global' && !client.guilds.has(guild)) continue; this.setupGuildGroup(client.guilds.get(guild), group, settings); } }); - for(const [event, listener] of this.listeners) client.on(event, listener); + for (const [event, listener] of this.listeners) client.on(event, listener); } destroy() { // Remove all listeners from the client - for(const [event, listener] of this.listeners) this.client.removeListener(event, listener); + for (const [event, listener] of this.listeners) this.client.removeListener(event, listener); this.listeners.clear(); } @@ -127,32 +127,38 @@ class SequelizeProvider extends SettingProvider { async set(guild, key, val) { guild = this.constructor.getGuildID(guild); let settings = this.settings.get(guild); - if(!settings) { + if (!settings) { settings = {}; this.settings.set(guild, settings); } settings[key] = val; - await this.model.upsert({ guild: guild !== 'global' ? guild : '0', settings: JSON.stringify(settings) }, { where: { guild: guild !== 'global' ? guild : '0' } }); // eslint-disable-line max-len - if(guild === 'global') this.updateOtherShards(key, val); + await this.model.upsert( + { guild: guild !== 'global' ? guild : '0', settings: JSON.stringify(settings) }, + { where: { guild: guild !== 'global' ? guild : '0' } } + ); + if (guild === 'global') this.updateOtherShards(key, val); return val; } async remove(guild, key) { guild = this.constructor.getGuildID(guild); const settings = this.settings.get(guild); - if(!settings || typeof settings[key] === 'undefined') return undefined; + if (!settings || typeof settings[key] === 'undefined') return undefined; const val = settings[key]; settings[key] = undefined; - await this.model.upsert({ guild: guild !== 'global' ? guild : '0', settings: JSON.stringify(settings) }, { where: { guild: guild !== 'global' ? guild : '0' } }); // eslint-disable-line max-len - if(guild === 'global') this.updateOtherShards(key, undefined); + await this.model.upsert( + { guild: guild !== 'global' ? guild : '0', settings: JSON.stringify(settings) }, + { where: { guild: guild !== 'global' ? guild : '0' } } + ); + if (guild === 'global') this.updateOtherShards(key, undefined); return val; } async clear(guild) { guild = this.constructor.getGuildID(guild); - if(!this.settings.has(guild)) return; + if (!this.settings.has(guild)) return; this.settings.delete(guild); await this.model.destroy({ where: { guild: guild !== 'global' ? guild : '0' } }); } @@ -164,18 +170,18 @@ class SequelizeProvider extends SettingProvider { * @private */ setupGuild(guild, settings) { - if(typeof guild !== 'string') throw new TypeError('The guild must be a guild ID or "global".'); + if (typeof guild !== 'string') throw new TypeError('The guild must be a guild ID or "global".'); guild = this.client.guilds.get(guild) || null; // Load the command prefix - if(typeof settings.prefix !== 'undefined') { - if(guild) guild._commandPrefix = settings.prefix; + if (typeof settings.prefix !== 'undefined') { + if (guild) guild._commandPrefix = settings.prefix; else this.client._commandPrefix = settings.prefix; } // Load all command/group statuses - for(const command of this.client.registry.commands.values()) this.setupGuildCommand(guild, command, settings); - for(const group of this.client.registry.groups.values()) this.setupGuildGroup(guild, group, settings); + for (const command of this.client.registry.commands.values()) this.setupGuildCommand(guild, command, settings); + for (const group of this.client.registry.groups.values()) this.setupGuildGroup(guild, group, settings); } /** @@ -186,9 +192,9 @@ class SequelizeProvider extends SettingProvider { * @private */ setupGuildCommand(guild, command, settings) { - if(typeof settings[`cmd-${command.name}`] === 'undefined') return; - if(guild) { - if(!guild._commandsEnabled) guild._commandsEnabled = {}; + if (typeof settings[`cmd-${command.name}`] === 'undefined') return; + if (guild) { + if (!guild._commandsEnabled) guild._commandsEnabled = {}; guild._commandsEnabled[command.name] = settings[`cmd-${command.name}`]; } else { command._globalEnabled = settings[`cmd-${command.name}`]; @@ -203,9 +209,9 @@ class SequelizeProvider extends SettingProvider { * @private */ setupGuildGroup(guild, group, settings) { - if(typeof settings[`grp-${group.id}`] === 'undefined') return; - if(guild) { - if(!guild._groupsEnabled) guild._groupsEnabled = {}; + if (typeof settings[`grp-${group.id}`] === 'undefined') return; + if (guild) { + if (!guild._groupsEnabled) guild._groupsEnabled = {}; guild._groupsEnabled[group.id] = settings[`grp-${group.id}`]; } else { group._globalEnabled = settings[`grp-${group.id}`]; @@ -219,7 +225,7 @@ class SequelizeProvider extends SettingProvider { * @private */ updateOtherShards(key, val) { - if(!this.client.shard) return; + if (!this.client.shard) return; key = JSON.stringify(key); val = typeof val !== 'undefined' ? JSON.stringify(val) : 'undefined'; this.client.shard.broadcastEval(` diff --git a/shardingmanager.js b/shardingmanager.js index 2a14e586..642948bb 100644 --- a/shardingmanager.js +++ b/shardingmanager.js @@ -1,5 +1,3 @@ const { ShardingManager } = require('discord.js'); const Manager = new ShardingManager('./index.js', { token: process.env.TOKEN }); Manager.spawn(); - -process.on('unhandledRejection', console.error); diff --git a/structures/PostgreSQL.js b/structures/PostgreSQL.js index a8565829..9d569319 100644 --- a/structures/PostgreSQL.js +++ b/structures/PostgreSQL.js @@ -6,7 +6,7 @@ class Database { return database; } - start() { + static start() { database.authenticate() .then(() => console.log('[Database] Connection has been established successfully.')) .then(() => console.log('[Database] Synchronizing...')) diff --git a/structures/Stats.js b/structures/Stats.js index d241eedb..71ac55a2 100644 --- a/structures/Stats.js +++ b/structures/Stats.js @@ -1,10 +1,6 @@ const request = require('superagent'); class Stats { - constructor() { - throw new Error(`The ${this.constructor.name} class may not be instantiated.`); - } - static discordBots(server_count, userID) { return request .post(`https://bots.discord.pw/api/bots/${userID}/stats`)