2020-07-26 01:53:55 +02:00
import { PluginOptions } from "knub" ;
2023-05-08 21:33:40 +03:00
import { Queue } from "../../Queue" ;
2020-10-01 01:43:38 +03:00
import { GuildReactionRoles } from "../../data/GuildReactionRoles" ;
import { GuildSavedMessages } from "../../data/GuildSavedMessages" ;
2023-04-01 12:58:17 +01:00
import { makeIoTsConfigParser } from "../../pluginUtils" ;
2021-06-06 23:51:32 +02:00
import { LogsPlugin } from "../Logs/LogsPlugin" ;
import { zeppelinGuildPlugin } from "../ZeppelinPluginBlueprint" ;
import { ClearReactionRolesCmd } from "./commands/ClearReactionRolesCmd" ;
2020-07-26 01:53:55 +02:00
import { InitReactionRolesCmd } from "./commands/InitReactionRolesCmd" ;
import { RefreshReactionRolesCmd } from "./commands/RefreshReactionRolesCmd" ;
import { AddReactionRoleEvt } from "./events/AddReactionRoleEvt" ;
2021-06-08 04:34:32 +02:00
import { MessageDeletedEvt } from "./events/MessageDeletedEvt" ;
2021-06-06 23:51:32 +02:00
import { ConfigSchema , ReactionRolesPluginType } from "./types" ;
2020-07-26 01:53:55 +02:00
const MIN_AUTO_REFRESH = 1000 * 60 * 15 ; // 15min minimum, let's not abuse the API
const defaultOptions : PluginOptions < ReactionRolesPluginType > = {
config : {
auto_refresh_interval : MIN_AUTO_REFRESH ,
2020-08-30 00:49:44 +03:00
remove_user_reactions : true ,
2020-07-26 01:53:55 +02:00
can_manage : false ,
2022-04-24 02:56:13 +03:00
button_groups : null ,
2020-07-26 01:53:55 +02:00
} ,
overrides : [
{
level : ">=100" ,
config : {
can_manage : true ,
} ,
} ,
] ,
} ;
2021-05-23 14:35:16 +03:00
export const ReactionRolesPlugin = zeppelinGuildPlugin < ReactionRolesPluginType > ( ) ( {
name : "reaction_roles" ,
2020-07-30 13:08:06 +03:00
showInDocs : true ,
info : {
prettyName : "Reaction roles" ,
2022-04-23 17:30:37 +03:00
legacy : "Consider using the [Role buttons](/docs/plugins/role_buttons) plugin instead." ,
2023-04-01 12:58:17 +01:00
configSchema : ConfigSchema ,
2020-07-30 13:08:06 +03:00
} ,
2021-08-18 19:33:22 +03:00
dependencies : ( ) = > [ LogsPlugin ] ,
2023-04-01 12:58:17 +01:00
configParser : makeIoTsConfigParser ( ConfigSchema ) ,
2020-07-26 01:53:55 +02:00
defaultOptions ,
// prettier-ignore
2023-04-01 12:58:17 +01:00
messageCommands : [
2020-07-26 01:53:55 +02:00
RefreshReactionRolesCmd ,
ClearReactionRolesCmd ,
InitReactionRolesCmd ,
] ,
// prettier-ignore
events : [
AddReactionRoleEvt ,
2021-06-08 04:34:32 +02:00
MessageDeletedEvt ,
2020-07-26 01:53:55 +02:00
] ,
2021-05-23 17:13:11 +03:00
beforeLoad ( pluginData ) {
2020-07-26 01:53:55 +02:00
const { state , guild } = pluginData ;
state . reactionRoles = GuildReactionRoles . getGuildInstance ( guild . id ) ;
state . savedMessages = GuildSavedMessages . getGuildInstance ( guild . id ) ;
state . reactionRemoveQueue = new Queue ( ) ;
state . roleChangeQueue = new Queue ( ) ;
state . pendingRoleChanges = new Map ( ) ;
state . pendingRefreshes = new Set ( ) ;
2021-05-23 17:13:11 +03:00
} ,
2020-07-26 01:53:55 +02:00
2021-05-23 17:13:11 +03:00
afterLoad ( pluginData ) {
2022-04-23 23:26:16 +03:00
const config = pluginData . config . get ( ) ;
if ( config . button_groups ) {
pluginData . getPlugin ( LogsPlugin ) . logBotAlert ( {
body : "The 'button_groups' option of the 'reaction_roles' plugin is deprecated and non-functional. Consider using the new 'role_buttons' plugin instead!" ,
} ) ;
}
2020-07-26 01:53:55 +02:00
} ,
2021-05-23 14:35:16 +03:00
beforeUnload ( pluginData ) {
2023-05-08 22:58:51 +03:00
const { state } = pluginData ;
2023-04-01 12:58:17 +01:00
if ( state . autoRefreshTimeout ) {
clearTimeout ( state . autoRefreshTimeout ) ;
2020-07-26 01:53:55 +02:00
}
} ,
} ) ;