SquadJS/factory/build-connectors.js

52 lines
1.5 KiB
JavaScript
Raw Normal View History

import Discord from 'discord.js';
import mysql from 'mysql';
import { SquadLayerFilter } from 'core/squad-layers';
import plugins from 'plugins';
const connectorTypes = {
2020-09-10 08:17:27 -05:00
discordClient: async function (config) {
console.log('Starting discordClient connector...');
const client = new Discord.Client();
await client.login(config);
return client;
},
2020-09-10 08:17:27 -05:00
mysqlPool: async function (config) {
console.log('Starting mysqlPool connector...');
return mysql.createPool(config);
},
2020-09-10 08:17:27 -05:00
layerFilter: async function (config) {
console.log('Starting layerFilter connector...');
return SquadLayerFilter[config.type](config.filter, config.activeLayerFilter);
}
};
export default async function (config) {
const connectors = {};
for (const pluginConfig of config.plugins) {
if (!pluginConfig.enabled) continue;
const plugin = plugins[pluginConfig.plugin];
for (const optionName of Object.keys(plugin.optionsSpec)) {
2020-09-10 08:17:27 -05:00
// check it's a connector
if (!Object.keys(connectorTypes).includes(optionName)) continue;
2020-09-10 08:17:27 -05:00
// check if connector is already setup
if (connectors[pluginConfig[optionName]]) continue;
2020-09-10 08:17:27 -05:00
// check config for connector is present
if (!config.connectors[pluginConfig[optionName]])
throw new Error(`${pluginConfig[optionName]} connector config not present!`);
2020-09-10 08:17:27 -05:00
// initiate connector
connectors[pluginConfig[optionName]] = await connectorTypes[optionName](
config.connectors[pluginConfig[optionName]]
);
}
}
return connectors;
}