SquadJS/factory/build-connectors.js
2020-08-20 21:21:03 +01:00

47 lines
1.4 KiB
JavaScript

import Discord from 'discord.js';
import mysql from 'mysql';
import { SquadLayerFilter } from 'core/squad-layers';
import plugins from 'plugins';
const connectorTypes = {
DiscordConnector: async function (config) {
const client = new Discord.Client();
await client.login(config);
return client;
},
MySQLPoolConnector: async function (config) {
return mysql.createPool(config);
},
SquadLayerFilterConnector: async function (config) {
return SquadLayerFilter[config.type](config.filter, config.activeLayerFilter);
}
};
export default async function (config) {
const connectors = {};
for (const pluginConfig of config.plugins) {
if (pluginConfig.disabled) continue;
const plugin = plugins[pluginConfig.plugin];
for (const optionName of Object.keys(plugin.optionsSpec)) {
const option = plugin.optionsSpec[optionName];
if (!Object.keys(connectorTypes).includes(option.type)) continue;
if (!connectorTypes[option.type]) throw new Error('Connector type not supported!');
if (connectors[pluginConfig[optionName]]) continue;
if (!config.connectors[pluginConfig[optionName]])
throw new Error(`${pluginConfig[optionName]} connector config not present!`);
connectors[pluginConfig[optionName]] = await connectorTypes[option.type](
config.connectors[pluginConfig[optionName]]
);
}
}
return connectors;
}