diff --git a/backend/src/plugins/GuildInfoSaver/GuildInfoSaverPlugin.ts b/backend/src/plugins/GuildInfoSaver/GuildInfoSaverPlugin.ts new file mode 100644 index 00000000..29649dab --- /dev/null +++ b/backend/src/plugins/GuildInfoSaver/GuildInfoSaverPlugin.ts @@ -0,0 +1,27 @@ +import { zeppelinPlugin } from "../ZeppelinPluginBlueprint"; +import { PluginData } from "knub"; +import { AllowedGuilds } from "src/data/AllowedGuilds"; +import { GuildInfoSaverPluginType } from "./types"; +import { MINUTES } from "src/utils"; + +export const GuildInfoSaverPlugin = zeppelinPlugin()("guild_info_saver", { + showInDocs: false, + + onLoad(pluginData) { + const { state, guild } = pluginData; + + state.allowedGuilds = new AllowedGuilds(); + + updateGuildInfo(pluginData); + state.updateInterval = setInterval(() => updateGuildInfo(pluginData), 60 * MINUTES); + }, +}); + +function updateGuildInfo(pluginData: PluginData) { + pluginData.state.allowedGuilds.updateInfo( + pluginData.guild.id, + pluginData.guild.name, + pluginData.guild.iconURL, + pluginData.guild.ownerID, + ); +} diff --git a/backend/src/plugins/GuildInfoSaver/types.ts b/backend/src/plugins/GuildInfoSaver/types.ts new file mode 100644 index 00000000..33e913c9 --- /dev/null +++ b/backend/src/plugins/GuildInfoSaver/types.ts @@ -0,0 +1,9 @@ +import { BasePluginType } from "knub"; +import { AllowedGuilds } from "src/data/AllowedGuilds"; + +export interface GuildInfoSaverPluginType extends BasePluginType { + state: { + allowedGuilds: AllowedGuilds; + updateInterval: NodeJS.Timeout; + }; +} diff --git a/backend/src/plugins/availablePlugins.ts b/backend/src/plugins/availablePlugins.ts index 373b1ef1..18745db3 100644 --- a/backend/src/plugins/availablePlugins.ts +++ b/backend/src/plugins/availablePlugins.ts @@ -13,6 +13,7 @@ import { GuildConfigReloaderPlugin } from "./GuildConfigReloader/GuildConfigRelo import { CasesPlugin } from "./Cases/CasesPlugin"; import { MutesPlugin } from "./Mutes/MutesPlugin"; import { TagsPlugin } from "./Tags/TagsPlugin"; +import { GuildInfoSaverPlugin } from "./GuildInfoSaver/GuildInfoSaverPlugin"; import { CensorPlugin } from "./Censor/CensorPlugin"; import { RolesPlugin } from "./Roles/RolesPlugin"; import { SlowmodePlugin } from "./Slowmode/SlowmodePlugin"; @@ -22,6 +23,7 @@ import { ChannelArchiverPlugin } from "./ChannelArchiver/ChannelArchiverPlugin"; // prettier-ignore export const guildPlugins: Array> = [ AutoReactionsPlugin, + GuildInfoSaverPlugin, CensorPlugin, ChannelArchiverPlugin, LocateUserPlugin,