Add GuildAccessMonitorPlugin

This commit is contained in:
Dragory 2020-07-30 23:01:05 +03:00
parent cdd64d7128
commit 62c01d112b
No known key found for this signature in database
GPG key ID: 5F387BA66DF8AAC1
2 changed files with 41 additions and 0 deletions

View file

@ -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<GuildAccessMonitorPluginType>, 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<GuildAccessMonitorPluginType>()("guild_access_monitor", {
configSchema: t.type({}),
events: [
eventListener<GuildAccessMonitorPluginType>()("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);
}
},
});

View file

@ -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<ZeppelinPluginBlueprint<any>> = [
@ -68,6 +69,7 @@ export const guildPlugins: Array<ZeppelinPluginBlueprint<any>> = [
export const globalPlugins = [
GuildConfigReloaderPlugin,
BotControlPlugin,
GuildAccessMonitorPlugin,
];
// prettier-ignore