mirror of
https://github.com/AsgardEternal/SquadJS.git
synced 2024-09-29 04:04:25 -05:00
47 lines
1.4 KiB
JavaScript
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;
|
||
|
}
|