diff --git a/backend/src/plugins/GuildAccessMonitor/GuildAccessMonitorPlugin.ts b/backend/src/plugins/GuildAccessMonitor/GuildAccessMonitorPlugin.ts new file mode 100644 index 00000000..60d118fa --- /dev/null +++ b/backend/src/plugins/GuildAccessMonitor/GuildAccessMonitorPlugin.ts @@ -0,0 +1,39 @@ +import { zeppelinPlugin } from "../ZeppelinPluginBlueprint"; +import { BasePluginType, eventListener, PluginData } from "knub"; +import * as t from "io-ts"; +import { AllowedGuilds } from "../../data/AllowedGuilds"; +import { Guild } from "eris"; + +interface GuildAccessMonitorPluginType extends BasePluginType { + config: {}; + state: { + allowedGuilds: AllowedGuilds; + }; +} + +async function checkGuild(pluginData: PluginData, guild: Guild) { + if (!(await pluginData.state.allowedGuilds.isAllowed(guild.id))) { + console.log(`Non-allowed server ${guild.name} (${guild.id}), would leave`); + } +} + +/** + * Global plugin to monitor if Zeppelin is invited to a non-whitelisted server, and leave it + */ +export const GuildAccessMonitorPlugin = zeppelinPlugin()("guild_access_monitor", { + configSchema: t.type({}), + + events: [ + eventListener()("guildAvailable", ({ pluginData, args: { guild } }) => { + checkGuild(pluginData, guild); + }), + ], + + onLoad(pluginData) { + pluginData.state.allowedGuilds = new AllowedGuilds(); + + for (const guild of pluginData.client.guilds.values()) { + checkGuild(pluginData, guild); + } + }, +}); diff --git a/backend/src/plugins/availablePlugins.ts b/backend/src/plugins/availablePlugins.ts index 158b3d7b..f7c31251 100644 --- a/backend/src/plugins/availablePlugins.ts +++ b/backend/src/plugins/availablePlugins.ts @@ -30,6 +30,7 @@ import { AutomodPlugin } from "./Automod/AutomodPlugin"; import { CompanionChannelsPlugin } from "./CompanionChannels/CompanionChannelsPlugin"; import { CustomEventsPlugin } from "./CustomEvents/CustomEventsPlugin"; import { BotControlPlugin } from "./BotControl/BotControlPlugin"; +import { GuildAccessMonitorPlugin } from "./GuildAccessMonitor/GuildAccessMonitorPlugin"; // prettier-ignore export const guildPlugins: Array> = [ @@ -68,6 +69,7 @@ export const guildPlugins: Array> = [ export const globalPlugins = [ GuildConfigReloaderPlugin, BotControlPlugin, + GuildAccessMonitorPlugin, ]; // prettier-ignore