diff --git a/backend/package.json b/backend/package.json index e87b53e7..7988a413 100644 --- a/backend/package.json +++ b/backend/package.json @@ -45,7 +45,7 @@ "fp-ts": "^2.0.1", "humanize-duration": "^3.15.0", "js-yaml": "^3.13.1", - "knub": "^32.0.0-next.20", + "knub": "^32.0.0-next.21", "knub-command-manager": "^9.1.0", "last-commit-log": "^2.1.0", "lodash.chunk": "^4.2.0", diff --git a/backend/src/pluginUtils.ts b/backend/src/pluginUtils.ts index 31cbd77c..05428bf7 100644 --- a/backend/src/pluginUtils.ts +++ b/backend/src/pluginUtils.ts @@ -10,7 +10,7 @@ import { PermissionsBitField, TextBasedChannel, } from "discord.js"; -import { AnyPluginData, CommandContext, ExtendedMatchParams, GuildPluginData, helpers } from "knub"; +import { AnyPluginData, BasePluginData, CommandContext, ExtendedMatchParams, GuildPluginData, helpers } from "knub"; import { logger } from "./logger"; import { isStaff } from "./staff"; import { TZeppelinKnub } from "./types"; @@ -124,3 +124,16 @@ export function mapToPublicFn(inputFn: T) { }; }; } + +type FnWithPluginData = (pluginData: TPluginData, ...args: any[]) => any; + +export function makePublicFn, T extends FnWithPluginData>( + pluginData: TPluginData, + fn: T, +) { + return (...args: Tail>): ReturnType => { + return fn(pluginData, ...args); + }; +} + +// ??? diff --git a/backend/src/plugins/Cases/CasesPlugin.ts b/backend/src/plugins/Cases/CasesPlugin.ts index f0b4be6c..b9f9d872 100644 --- a/backend/src/plugins/Cases/CasesPlugin.ts +++ b/backend/src/plugins/Cases/CasesPlugin.ts @@ -1,10 +1,8 @@ import { guildPlugin } from "knub"; -import { CaseTypes } from "../../data/CaseTypes"; import { GuildArchives } from "../../data/GuildArchives"; import { GuildCases } from "../../data/GuildCases"; import { GuildLogs } from "../../data/GuildLogs"; -import { Case } from "../../data/entities/Case"; -import { mapToPublicFn } from "../../pluginUtils"; +import { makePublicFn } from "../../pluginUtils"; import { InternalPosterPlugin } from "../InternalPoster/InternalPosterPlugin"; import { TimeAndDatePlugin } from "../TimeAndDate/TimeAndDatePlugin"; import { createCase } from "./functions/createCase"; @@ -15,7 +13,7 @@ import { getCaseTypeAmountForUserId } from "./functions/getCaseTypeAmountForUser import { getRecentCasesByMod } from "./functions/getRecentCasesByMod"; import { getTotalCasesByMod } from "./functions/getTotalCasesByMod"; import { postCaseToCaseLogChannel } from "./functions/postToCaseLogChannel"; -import { CaseArgs, CaseNoteArgs, CasesPluginType, zCasesConfig } from "./types"; +import { CasesPluginType, zCasesConfig } from "./types"; // The `any` cast here is to prevent TypeScript from locking up from the circular dependency function getLogsPlugin(): Promise { @@ -40,36 +38,17 @@ export const CasesPlugin = guildPlugin()({ configParser: (input) => zCasesConfig.parse(input), defaultOptions, - public: { - createCase(pluginData) { - return (args: CaseArgs) => { - return createCase(pluginData, args); - }; - }, - - createCaseNote(pluginData) { - return (args: CaseNoteArgs) => { - return createCaseNote(pluginData, args); - }; - }, - - postCaseToCaseLogChannel(pluginData) { - return (caseOrCaseId: Case | number) => { - return postCaseToCaseLogChannel(pluginData, caseOrCaseId); - }; - }, - - getCaseTypeAmountForUserId(pluginData) { - return (userID: string, type: CaseTypes) => { - return getCaseTypeAmountForUserId(pluginData, userID, type); - }; - }, - - getTotalCasesByMod: mapToPublicFn(getTotalCasesByMod), - getRecentCasesByMod: mapToPublicFn(getRecentCasesByMod), - - getCaseEmbed: mapToPublicFn(getCaseEmbed), - getCaseSummary: mapToPublicFn(getCaseSummary), + public(pluginData) { + return { + createCase: makePublicFn(pluginData, createCase), + createCaseNote: makePublicFn(pluginData, createCaseNote), + postCaseToCaseLogChannel: makePublicFn(pluginData, postCaseToCaseLogChannel), + getCaseTypeAmountForUserId: makePublicFn(pluginData, getCaseTypeAmountForUserId), + getTotalCasesByMod: makePublicFn(pluginData, getTotalCasesByMod), + getRecentCasesByMod: makePublicFn(pluginData, getRecentCasesByMod), + getCaseEmbed: makePublicFn(pluginData, getCaseEmbed), + getCaseSummary: makePublicFn(pluginData, getCaseSummary), + }; }, afterLoad(pluginData) { diff --git a/backend/src/plugins/Counters/CountersPlugin.ts b/backend/src/plugins/Counters/CountersPlugin.ts index 1143c0a1..ed1b2d8a 100644 --- a/backend/src/plugins/Counters/CountersPlugin.ts +++ b/backend/src/plugins/Counters/CountersPlugin.ts @@ -2,7 +2,7 @@ import { EventEmitter } from "events"; import { PluginOptions, guildPlugin } from "knub"; import { GuildCounters } from "../../data/GuildCounters"; import { CounterTrigger, parseCounterConditionString } from "../../data/entities/CounterTrigger"; -import { mapToPublicFn } from "../../pluginUtils"; +import { makePublicFn } from "../../pluginUtils"; import { MINUTES, convertDelayStringToMS, values } from "../../utils"; import { AddCounterCmd } from "./commands/AddCounterCmd"; import { CountersListCmd } from "./commands/CountersListCmd"; @@ -62,20 +62,16 @@ export const CountersPlugin = guildPlugin()({ // TODO: Separate input and output types configParser: (input) => zCountersConfig.parse(input), - public: { - counterExists: mapToPublicFn(counterExists), - - // Change a counter's value by a relative amount, e.g. +5 - changeCounterValue: mapToPublicFn(changeCounterValue), - - // Set a counter's value to an absolute value - setCounterValue: mapToPublicFn(setCounterValue), - - getPrettyNameForCounter: mapToPublicFn(getPrettyNameForCounter), - getPrettyNameForCounterTrigger: mapToPublicFn(getPrettyNameForCounterTrigger), - - onCounterEvent: mapToPublicFn(onCounterEvent), - offCounterEvent: mapToPublicFn(offCounterEvent), + public(pluginData) { + return { + counterExists: makePublicFn(pluginData, counterExists), + changeCounterValue: makePublicFn(pluginData, changeCounterValue), + setCounterValue: makePublicFn(pluginData, setCounterValue), + getPrettyNameForCounter: makePublicFn(pluginData, getPrettyNameForCounter), + getPrettyNameForCounterTrigger: makePublicFn(pluginData, getPrettyNameForCounterTrigger), + onCounterEvent: makePublicFn(pluginData, onCounterEvent), + offCounterEvent: makePublicFn(pluginData, offCounterEvent), + }; }, // prettier-ignore diff --git a/backend/src/plugins/GuildMemberCache/GuildMemberCachePlugin.ts b/backend/src/plugins/GuildMemberCache/GuildMemberCachePlugin.ts index a3b2127e..cd24c0b8 100644 --- a/backend/src/plugins/GuildMemberCache/GuildMemberCachePlugin.ts +++ b/backend/src/plugins/GuildMemberCache/GuildMemberCachePlugin.ts @@ -1,7 +1,7 @@ import { guildPlugin } from "knub"; import z from "zod"; import { GuildMemberCache } from "../../data/GuildMemberCache"; -import { mapToPublicFn } from "../../pluginUtils"; +import { makePublicFn } from "../../pluginUtils"; import { SECONDS } from "../../utils"; import { cancelDeletionOnMemberJoin } from "./events/cancelDeletionOnMemberJoin"; import { removeMemberCacheOnMemberLeave } from "./events/removeMemberCacheOnMemberLeave"; @@ -28,8 +28,10 @@ export const GuildMemberCachePlugin = guildPlugin()( cancelDeletionOnMemberJoin, ], - public: { - getCachedMemberData: mapToPublicFn(getCachedMemberData), + public(pluginData) { + return { + getCachedMemberData: makePublicFn(pluginData, getCachedMemberData), + }; }, beforeLoad(pluginData) { diff --git a/backend/src/plugins/InternalPoster/InternalPosterPlugin.ts b/backend/src/plugins/InternalPoster/InternalPosterPlugin.ts index 10844aa9..ae01bb64 100644 --- a/backend/src/plugins/InternalPoster/InternalPosterPlugin.ts +++ b/backend/src/plugins/InternalPoster/InternalPosterPlugin.ts @@ -2,7 +2,7 @@ import { PluginOptions, guildPlugin } from "knub"; import z from "zod"; import { Queue } from "../../Queue"; import { Webhooks } from "../../data/Webhooks"; -import { mapToPublicFn } from "../../pluginUtils"; +import { makePublicFn } from "../../pluginUtils"; import { editMessage } from "./functions/editMessage"; import { sendMessage } from "./functions/sendMessage"; import { InternalPosterPluginType } from "./types"; @@ -18,10 +18,11 @@ export const InternalPosterPlugin = guildPlugin()({ configParser: (input) => z.strictObject({}).parse(input), defaultOptions, - // prettier-ignore - public: { - sendMessage: mapToPublicFn(sendMessage), - editMessage: mapToPublicFn(editMessage), + public(pluginData) { + return { + sendMessage: makePublicFn(pluginData, sendMessage), + editMessage: makePublicFn(pluginData, editMessage), + }; }, async beforeLoad(pluginData) { diff --git a/backend/src/plugins/Logs/LogsPlugin.ts b/backend/src/plugins/Logs/LogsPlugin.ts index a8742615..62a6de4d 100644 --- a/backend/src/plugins/Logs/LogsPlugin.ts +++ b/backend/src/plugins/Logs/LogsPlugin.ts @@ -6,9 +6,9 @@ import { GuildLogs } from "../../data/GuildLogs"; import { GuildSavedMessages } from "../../data/GuildSavedMessages"; import { LogType } from "../../data/LogType"; import { logger } from "../../logger"; -import { mapToPublicFn } from "../../pluginUtils"; +import { makePublicFn } from "../../pluginUtils"; import { discardRegExpRunner, getRegExpRunner } from "../../regExpRunners"; -import { TypedTemplateSafeValueContainer, createTypedTemplateSafeValueContainer } from "../../templateFormatter"; +import { createTypedTemplateSafeValueContainer } from "../../templateFormatter"; import { TimeAndDatePlugin } from "../TimeAndDate/TimeAndDatePlugin"; import { LogsChannelCreateEvt, LogsChannelDeleteEvt, LogsChannelUpdateEvt } from "./events/LogsChannelModifyEvts"; import { @@ -30,7 +30,7 @@ import { import { LogsThreadCreateEvt, LogsThreadDeleteEvt, LogsThreadUpdateEvt } from "./events/LogsThreadModifyEvts"; import { LogsGuildMemberUpdateEvt } from "./events/LogsUserUpdateEvts"; import { LogsVoiceStateUpdateEvt } from "./events/LogsVoiceChannelEvts"; -import { FORMAT_NO_TIMESTAMP, ILogTypeData, LogsPluginType, TLogChannel, zLogsConfig } from "./types"; +import { FORMAT_NO_TIMESTAMP, LogsPluginType, zLogsConfig } from "./types"; import { getLogMessage } from "./util/getLogMessage"; import { log } from "./util/log"; import { onMessageDelete } from "./util/onMessageDelete"; @@ -172,86 +172,79 @@ export const LogsPlugin = guildPlugin()({ LogsGuildMemberRoleChangeEvt, ], - public: { - getLogMessage: (pluginData) => { - return ( - type: TLogType, - data: TypedTemplateSafeValueContainer, - opts?: Pick, - ) => { - return getLogMessage(pluginData, type, data, opts); - }; - }, - - logAutomodAction: mapToPublicFn(logAutomodAction), - logBotAlert: mapToPublicFn(logBotAlert), - logCaseCreate: mapToPublicFn(logCaseCreate), - logCaseDelete: mapToPublicFn(logCaseDelete), - logCaseUpdate: mapToPublicFn(logCaseUpdate), - logCensor: mapToPublicFn(logCensor), - logChannelCreate: mapToPublicFn(logChannelCreate), - logChannelDelete: mapToPublicFn(logChannelDelete), - logChannelUpdate: mapToPublicFn(logChannelUpdate), - logClean: mapToPublicFn(logClean), - logEmojiCreate: mapToPublicFn(logEmojiCreate), - logEmojiDelete: mapToPublicFn(logEmojiDelete), - logEmojiUpdate: mapToPublicFn(logEmojiUpdate), - logMassBan: mapToPublicFn(logMassBan), - logMassMute: mapToPublicFn(logMassMute), - logMassUnban: mapToPublicFn(logMassUnban), - logMemberBan: mapToPublicFn(logMemberBan), - logMemberForceban: mapToPublicFn(logMemberForceban), - logMemberJoin: mapToPublicFn(logMemberJoin), - logMemberJoinWithPriorRecords: mapToPublicFn(logMemberJoinWithPriorRecords), - logMemberKick: mapToPublicFn(logMemberKick), - logMemberLeave: mapToPublicFn(logMemberLeave), - logMemberMute: mapToPublicFn(logMemberMute), - logMemberMuteExpired: mapToPublicFn(logMemberMuteExpired), - logMemberMuteRejoin: mapToPublicFn(logMemberMuteRejoin), - logMemberNickChange: mapToPublicFn(logMemberNickChange), - logMemberNote: mapToPublicFn(logMemberNote), - logMemberRestore: mapToPublicFn(logMemberRestore), - logMemberRoleAdd: mapToPublicFn(logMemberRoleAdd), - logMemberRoleChanges: mapToPublicFn(logMemberRoleChanges), - logMemberRoleRemove: mapToPublicFn(logMemberRoleRemove), - logMemberTimedBan: mapToPublicFn(logMemberTimedBan), - logMemberTimedMute: mapToPublicFn(logMemberTimedMute), - logMemberTimedUnban: mapToPublicFn(logMemberTimedUnban), - logMemberTimedUnmute: mapToPublicFn(logMemberTimedUnmute), - logMemberUnban: mapToPublicFn(logMemberUnban), - logMemberUnmute: mapToPublicFn(logMemberUnmute), - logMemberWarn: mapToPublicFn(logMemberWarn), - logMessageDelete: mapToPublicFn(logMessageDelete), - logMessageDeleteAuto: mapToPublicFn(logMessageDeleteAuto), - logMessageDeleteBare: mapToPublicFn(logMessageDeleteBare), - logMessageDeleteBulk: mapToPublicFn(logMessageDeleteBulk), - logMessageEdit: mapToPublicFn(logMessageEdit), - logMessageSpamDetected: mapToPublicFn(logMessageSpamDetected), - logOtherSpamDetected: mapToPublicFn(logOtherSpamDetected), - logPostedScheduledMessage: mapToPublicFn(logPostedScheduledMessage), - logRepeatedMessage: mapToPublicFn(logRepeatedMessage), - logRoleCreate: mapToPublicFn(logRoleCreate), - logRoleDelete: mapToPublicFn(logRoleDelete), - logRoleUpdate: mapToPublicFn(logRoleUpdate), - logScheduledMessage: mapToPublicFn(logScheduledMessage), - logScheduledRepeatedMessage: mapToPublicFn(logScheduledRepeatedMessage), - logSetAntiraidAuto: mapToPublicFn(logSetAntiraidAuto), - logSetAntiraidUser: mapToPublicFn(logSetAntiraidUser), - logStageInstanceCreate: mapToPublicFn(logStageInstanceCreate), - logStageInstanceDelete: mapToPublicFn(logStageInstanceDelete), - logStageInstanceUpdate: mapToPublicFn(logStageInstanceUpdate), - logStickerCreate: mapToPublicFn(logStickerCreate), - logStickerDelete: mapToPublicFn(logStickerDelete), - logStickerUpdate: mapToPublicFn(logStickerUpdate), - logThreadCreate: mapToPublicFn(logThreadCreate), - logThreadDelete: mapToPublicFn(logThreadDelete), - logThreadUpdate: mapToPublicFn(logThreadUpdate), - logVoiceChannelForceDisconnect: mapToPublicFn(logVoiceChannelForceDisconnect), - logVoiceChannelForceMove: mapToPublicFn(logVoiceChannelForceMove), - logVoiceChannelJoin: mapToPublicFn(logVoiceChannelJoin), - logVoiceChannelLeave: mapToPublicFn(logVoiceChannelLeave), - logVoiceChannelMove: mapToPublicFn(logVoiceChannelMove), - logDmFailed: mapToPublicFn(logDmFailed), + public(pluginData) { + return { + getLogMessage: makePublicFn(pluginData, getLogMessage), + logAutomodAction: makePublicFn(pluginData, logAutomodAction), + logBotAlert: makePublicFn(pluginData, logBotAlert), + logCaseCreate: makePublicFn(pluginData, logCaseCreate), + logCaseDelete: makePublicFn(pluginData, logCaseDelete), + logCaseUpdate: makePublicFn(pluginData, logCaseUpdate), + logCensor: makePublicFn(pluginData, logCensor), + logChannelCreate: makePublicFn(pluginData, logChannelCreate), + logChannelDelete: makePublicFn(pluginData, logChannelDelete), + logChannelUpdate: makePublicFn(pluginData, logChannelUpdate), + logClean: makePublicFn(pluginData, logClean), + logEmojiCreate: makePublicFn(pluginData, logEmojiCreate), + logEmojiDelete: makePublicFn(pluginData, logEmojiDelete), + logEmojiUpdate: makePublicFn(pluginData, logEmojiUpdate), + logMassBan: makePublicFn(pluginData, logMassBan), + logMassMute: makePublicFn(pluginData, logMassMute), + logMassUnban: makePublicFn(pluginData, logMassUnban), + logMemberBan: makePublicFn(pluginData, logMemberBan), + logMemberForceban: makePublicFn(pluginData, logMemberForceban), + logMemberJoin: makePublicFn(pluginData, logMemberJoin), + logMemberJoinWithPriorRecords: makePublicFn(pluginData, logMemberJoinWithPriorRecords), + logMemberKick: makePublicFn(pluginData, logMemberKick), + logMemberLeave: makePublicFn(pluginData, logMemberLeave), + logMemberMute: makePublicFn(pluginData, logMemberMute), + logMemberMuteExpired: makePublicFn(pluginData, logMemberMuteExpired), + logMemberMuteRejoin: makePublicFn(pluginData, logMemberMuteRejoin), + logMemberNickChange: makePublicFn(pluginData, logMemberNickChange), + logMemberNote: makePublicFn(pluginData, logMemberNote), + logMemberRestore: makePublicFn(pluginData, logMemberRestore), + logMemberRoleAdd: makePublicFn(pluginData, logMemberRoleAdd), + logMemberRoleChanges: makePublicFn(pluginData, logMemberRoleChanges), + logMemberRoleRemove: makePublicFn(pluginData, logMemberRoleRemove), + logMemberTimedBan: makePublicFn(pluginData, logMemberTimedBan), + logMemberTimedMute: makePublicFn(pluginData, logMemberTimedMute), + logMemberTimedUnban: makePublicFn(pluginData, logMemberTimedUnban), + logMemberTimedUnmute: makePublicFn(pluginData, logMemberTimedUnmute), + logMemberUnban: makePublicFn(pluginData, logMemberUnban), + logMemberUnmute: makePublicFn(pluginData, logMemberUnmute), + logMemberWarn: makePublicFn(pluginData, logMemberWarn), + logMessageDelete: makePublicFn(pluginData, logMessageDelete), + logMessageDeleteAuto: makePublicFn(pluginData, logMessageDeleteAuto), + logMessageDeleteBare: makePublicFn(pluginData, logMessageDeleteBare), + logMessageDeleteBulk: makePublicFn(pluginData, logMessageDeleteBulk), + logMessageEdit: makePublicFn(pluginData, logMessageEdit), + logMessageSpamDetected: makePublicFn(pluginData, logMessageSpamDetected), + logOtherSpamDetected: makePublicFn(pluginData, logOtherSpamDetected), + logPostedScheduledMessage: makePublicFn(pluginData, logPostedScheduledMessage), + logRepeatedMessage: makePublicFn(pluginData, logRepeatedMessage), + logRoleCreate: makePublicFn(pluginData, logRoleCreate), + logRoleDelete: makePublicFn(pluginData, logRoleDelete), + logRoleUpdate: makePublicFn(pluginData, logRoleUpdate), + logScheduledMessage: makePublicFn(pluginData, logScheduledMessage), + logScheduledRepeatedMessage: makePublicFn(pluginData, logScheduledRepeatedMessage), + logSetAntiraidAuto: makePublicFn(pluginData, logSetAntiraidAuto), + logSetAntiraidUser: makePublicFn(pluginData, logSetAntiraidUser), + logStageInstanceCreate: makePublicFn(pluginData, logStageInstanceCreate), + logStageInstanceDelete: makePublicFn(pluginData, logStageInstanceDelete), + logStageInstanceUpdate: makePublicFn(pluginData, logStageInstanceUpdate), + logStickerCreate: makePublicFn(pluginData, logStickerCreate), + logStickerDelete: makePublicFn(pluginData, logStickerDelete), + logStickerUpdate: makePublicFn(pluginData, logStickerUpdate), + logThreadCreate: makePublicFn(pluginData, logThreadCreate), + logThreadDelete: makePublicFn(pluginData, logThreadDelete), + logThreadUpdate: makePublicFn(pluginData, logThreadUpdate), + logVoiceChannelForceDisconnect: makePublicFn(pluginData, logVoiceChannelForceDisconnect), + logVoiceChannelForceMove: makePublicFn(pluginData, logVoiceChannelForceMove), + logVoiceChannelJoin: makePublicFn(pluginData, logVoiceChannelJoin), + logVoiceChannelLeave: makePublicFn(pluginData, logVoiceChannelLeave), + logVoiceChannelMove: makePublicFn(pluginData, logVoiceChannelMove), + logDmFailed: makePublicFn(pluginData, logDmFailed), + }; }, beforeLoad(pluginData) { diff --git a/backend/src/plugins/ModActions/ModActionsPlugin.ts b/backend/src/plugins/ModActions/ModActionsPlugin.ts index b4321d2b..2e92961f 100644 --- a/backend/src/plugins/ModActions/ModActionsPlugin.ts +++ b/backend/src/plugins/ModActions/ModActionsPlugin.ts @@ -1,4 +1,4 @@ -import { GuildMember, Message, Snowflake } from "discord.js"; +import { Message } from "discord.js"; import { EventEmitter } from "events"; import { guildPlugin } from "knub"; import { Queue } from "../../Queue"; @@ -7,7 +7,7 @@ import { onGuildEvent } from "../../data/GuildEvents"; import { GuildLogs } from "../../data/GuildLogs"; import { GuildMutes } from "../../data/GuildMutes"; import { GuildTempbans } from "../../data/GuildTempbans"; -import { mapToPublicFn } from "../../pluginUtils"; +import { makePublicFn, mapToPublicFn } from "../../pluginUtils"; import { MINUTES } from "../../utils"; import { CasesPlugin } from "../Cases/CasesPlugin"; import { LogsPlugin } from "../Logs/LogsPlugin"; @@ -47,7 +47,7 @@ import { offModActionsEvent } from "./functions/offModActionsEvent"; import { onModActionsEvent } from "./functions/onModActionsEvent"; import { updateCase } from "./functions/updateCase"; import { warnMember } from "./functions/warnMember"; -import { BanOptions, KickOptions, ModActionsPluginType, WarnOptions, zModActionsConfig } from "./types"; +import { ModActionsPluginType, zModActionsConfig } from "./types"; const defaultOptions = { config: { @@ -147,42 +147,18 @@ export const ModActionsPlugin = guildPlugin()({ DeleteCaseCmd, ], - public: { - warnMember(pluginData) { - return (member: GuildMember, reason: string, warnOptions?: WarnOptions) => { - warnMember(pluginData, member, reason, warnOptions); - }; - }, - - kickMember(pluginData) { - return (member: GuildMember, reason: string, kickOptions?: KickOptions) => { - kickMember(pluginData, member, reason, kickOptions); - }; - }, - - banUserId(pluginData) { - return (userId: string, reason?: string, banOptions?: BanOptions, banTime?: number) => { - banUserId(pluginData, userId, reason, banOptions, banTime); - }; - }, - - updateCase(pluginData) { - return (msg: Message, caseNumber: number | null, note: string) => { - updateCase(pluginData, msg, { caseNumber, note }); - }; - }, - - hasMutePermission(pluginData) { - return (member: GuildMember, channelId: Snowflake) => { - return hasMutePermission(pluginData, member, channelId); - }; - }, - - on: mapToPublicFn(onModActionsEvent), - off: mapToPublicFn(offModActionsEvent), - getEventEmitter(pluginData) { - return () => pluginData.state.events; - }, + public(pluginData) { + return { + warnMember: makePublicFn(pluginData, warnMember), + kickMember: makePublicFn(pluginData, kickMember), + banUserId: makePublicFn(pluginData, banUserId), + updateCase: (msg: Message, caseNumber: number | null, note: string) => + updateCase(pluginData, msg, { caseNumber, note }), + hasMutePermission: makePublicFn(pluginData, hasMutePermission), + on: mapToPublicFn(onModActionsEvent), + off: mapToPublicFn(offModActionsEvent), + getEventEmitter: () => pluginData.state.events, + }; }, beforeLoad(pluginData) { diff --git a/backend/src/plugins/Mutes/MutesPlugin.ts b/backend/src/plugins/Mutes/MutesPlugin.ts index e64b884f..db8548be 100644 --- a/backend/src/plugins/Mutes/MutesPlugin.ts +++ b/backend/src/plugins/Mutes/MutesPlugin.ts @@ -6,7 +6,7 @@ import { GuildCases } from "../../data/GuildCases"; import { onGuildEvent } from "../../data/GuildEvents"; import { GuildLogs } from "../../data/GuildLogs"; import { GuildMutes } from "../../data/GuildMutes"; -import { mapToPublicFn } from "../../pluginUtils"; +import { makePublicFn } from "../../pluginUtils"; import { CasesPlugin } from "../Cases/CasesPlugin"; import { LogsPlugin } from "../Logs/LogsPlugin"; import { RoleManagerPlugin } from "../RoleManager/RoleManagerPlugin.js"; @@ -84,21 +84,18 @@ export const MutesPlugin = guildPlugin()({ RegisterManualTimeoutsEvt, ], - public: { - muteUser: mapToPublicFn(muteUser), - unmuteUser: mapToPublicFn(unmuteUser), - hasMutedRole(pluginData) { - return (member: GuildMember) => { + public(pluginData) { + return { + muteUser: makePublicFn(pluginData, muteUser), + unmuteUser: makePublicFn(pluginData, unmuteUser), + hasMutedRole: (member: GuildMember) => { const muteRole = pluginData.config.get().mute_role; return muteRole ? member.roles.cache.has(muteRole as Snowflake) : false; - }; - }, - - on: mapToPublicFn(onMutesEvent), - off: mapToPublicFn(offMutesEvent), - getEventEmitter(pluginData) { - return () => pluginData.state.events; - }, + }, + on: makePublicFn(pluginData, onMutesEvent), + off: makePublicFn(pluginData, offMutesEvent), + getEventEmitter: () => pluginData.state.events, + }; }, beforeLoad(pluginData) { diff --git a/backend/src/plugins/Phisherman/PhishermanPlugin.ts b/backend/src/plugins/Phisherman/PhishermanPlugin.ts index 89ac69f2..a5196235 100644 --- a/backend/src/plugins/Phisherman/PhishermanPlugin.ts +++ b/backend/src/plugins/Phisherman/PhishermanPlugin.ts @@ -1,6 +1,6 @@ import { PluginOptions, guildPlugin } from "knub"; import { hasPhishermanMasterAPIKey, phishermanApiKeyIsValid } from "../../data/Phisherman"; -import { mapToPublicFn } from "../../pluginUtils"; +import { makePublicFn } from "../../pluginUtils"; import { getDomainInfo } from "./functions/getDomainInfo"; import { PhishermanPluginType, zPhishermanConfig } from "./types"; @@ -17,9 +17,10 @@ export const PhishermanPlugin = guildPlugin()({ configParser: (input) => zPhishermanConfig.parse(input), defaultOptions, - // prettier-ignore - public: { - getDomainInfo: mapToPublicFn(getDomainInfo), + public(pluginData) { + return { + getDomainInfo: makePublicFn(pluginData, getDomainInfo), + }; }, async beforeLoad(pluginData) { diff --git a/backend/src/plugins/RoleManager/RoleManagerPlugin.ts b/backend/src/plugins/RoleManager/RoleManagerPlugin.ts index ffecf97c..a4430bfe 100644 --- a/backend/src/plugins/RoleManager/RoleManagerPlugin.ts +++ b/backend/src/plugins/RoleManager/RoleManagerPlugin.ts @@ -1,6 +1,6 @@ import { guildPlugin } from "knub"; import { GuildRoleQueue } from "../../data/GuildRoleQueue"; -import { mapToPublicFn } from "../../pluginUtils"; +import { makePublicFn } from "../../pluginUtils"; import { LogsPlugin } from "../Logs/LogsPlugin"; import { addPriorityRole } from "./functions/addPriorityRole"; import { addRole } from "./functions/addRole"; @@ -15,11 +15,13 @@ export const RoleManagerPlugin = guildPlugin()({ dependencies: () => [LogsPlugin], configParser: (input) => zRoleManagerConfig.parse(input), - public: { - addRole: mapToPublicFn(addRole), - removeRole: mapToPublicFn(removeRole), - addPriorityRole: mapToPublicFn(addPriorityRole), - removePriorityRole: mapToPublicFn(removePriorityRole), + public(pluginData) { + return { + addRole: makePublicFn(pluginData, addRole), + removeRole: makePublicFn(pluginData, removeRole), + addPriorityRole: makePublicFn(pluginData, addPriorityRole), + removePriorityRole: makePublicFn(pluginData, removePriorityRole), + }; }, beforeLoad(pluginData) { diff --git a/backend/src/plugins/Tags/TagsPlugin.ts b/backend/src/plugins/Tags/TagsPlugin.ts index 8f603e5b..09379d6d 100644 --- a/backend/src/plugins/Tags/TagsPlugin.ts +++ b/backend/src/plugins/Tags/TagsPlugin.ts @@ -6,7 +6,7 @@ import { GuildArchives } from "../../data/GuildArchives"; import { GuildLogs } from "../../data/GuildLogs"; import { GuildSavedMessages } from "../../data/GuildSavedMessages"; import { GuildTags } from "../../data/GuildTags"; -import { mapToPublicFn } from "../../pluginUtils"; +import { makePublicFn } from "../../pluginUtils"; import { convertDelayStringToMS } from "../../utils"; import { LogsPlugin } from "../Logs/LogsPlugin"; import { TimeAndDatePlugin } from "../TimeAndDate/TimeAndDatePlugin"; @@ -71,9 +71,11 @@ export const TagsPlugin = guildPlugin()({ onMessageDelete, ], - public: { - renderTagBody: mapToPublicFn(renderTagBody), - findTagByName: mapToPublicFn(findTagByName), + public(pluginData) { + return { + renderTagBody: makePublicFn(pluginData, renderTagBody), + findTagByName: makePublicFn(pluginData, findTagByName), + }; }, configParser: (input) => zTagsConfig.parse(input), diff --git a/backend/src/plugins/TimeAndDate/TimeAndDatePlugin.ts b/backend/src/plugins/TimeAndDate/TimeAndDatePlugin.ts index c7924d53..78dd8fa0 100644 --- a/backend/src/plugins/TimeAndDate/TimeAndDatePlugin.ts +++ b/backend/src/plugins/TimeAndDate/TimeAndDatePlugin.ts @@ -1,6 +1,6 @@ import { PluginOptions, guildPlugin } from "knub"; import { GuildMemberTimezones } from "../../data/GuildMemberTimezones"; -import { mapToPublicFn } from "../../pluginUtils"; +import { makePublicFn } from "../../pluginUtils"; import { ResetTimezoneCmd } from "./commands/ResetTimezoneCmd"; import { SetTimezoneCmd } from "./commands/SetTimezoneCmd"; import { ViewTimezoneCmd } from "./commands/ViewTimezoneCmd"; @@ -42,12 +42,14 @@ export const TimeAndDatePlugin = guildPlugin()({ ViewTimezoneCmd, ], - public: { - getGuildTz: mapToPublicFn(getGuildTz), - inGuildTz: mapToPublicFn(inGuildTz), - getMemberTz: mapToPublicFn(getMemberTz), - inMemberTz: mapToPublicFn(inMemberTz), - getDateFormat: mapToPublicFn(getDateFormat), + public(pluginData) { + return { + getGuildTz: makePublicFn(pluginData, getGuildTz), + inGuildTz: makePublicFn(pluginData, inGuildTz), + getMemberTz: makePublicFn(pluginData, getMemberTz), + inMemberTz: makePublicFn(pluginData, inMemberTz), + getDateFormat: makePublicFn(pluginData, getDateFormat), + }; }, beforeLoad(pluginData) { diff --git a/backend/src/plugins/Utility/UtilityPlugin.ts b/backend/src/plugins/Utility/UtilityPlugin.ts index 92debe49..0b44fca5 100644 --- a/backend/src/plugins/Utility/UtilityPlugin.ts +++ b/backend/src/plugins/Utility/UtilityPlugin.ts @@ -1,11 +1,11 @@ -import { GuildMember, Snowflake } from "discord.js"; +import { Snowflake } from "discord.js"; import { PluginOptions, guildPlugin } from "knub"; import { GuildArchives } from "../../data/GuildArchives"; import { GuildCases } from "../../data/GuildCases"; import { GuildLogs } from "../../data/GuildLogs"; import { GuildSavedMessages } from "../../data/GuildSavedMessages"; import { Supporters } from "../../data/Supporters"; -import { sendSuccessMessage } from "../../pluginUtils"; +import { makePublicFn, sendSuccessMessage } from "../../pluginUtils"; import { discardRegExpRunner, getRegExpRunner } from "../../regExpRunners"; import { LogsPlugin } from "../Logs/LogsPlugin"; import { ModActionsPlugin } from "../ModActions/ModActionsPlugin"; @@ -14,7 +14,7 @@ import { AboutCmd } from "./commands/AboutCmd"; import { AvatarCmd } from "./commands/AvatarCmd"; import { BanSearchCmd } from "./commands/BanSearchCmd"; import { ChannelInfoCmd } from "./commands/ChannelInfoCmd"; -import { CleanArgs, CleanCmd, cleanCmd } from "./commands/CleanCmd"; +import { CleanCmd, cleanCmd } from "./commands/CleanCmd"; import { ContextCmd } from "./commands/ContextCmd"; import { EmojiInfoCmd } from "./commands/EmojiInfoCmd"; import { HelpCmd } from "./commands/HelpCmd"; @@ -155,24 +155,12 @@ export const UtilityPlugin = guildPlugin()({ AutoJoinThreadSyncEvt, ], - public: { - clean(pluginData) { - return (args: CleanArgs, msg) => { - cleanCmd(pluginData, args, msg); - }; - }, - - userInfo(pluginData) { - return (userId: Snowflake) => { - return getUserInfoEmbed(pluginData, userId, false); - }; - }, - - hasPermission(pluginData) { - return (member: GuildMember, channelId: Snowflake, permission: string) => { - return hasPermission(pluginData, member, channelId, permission); - }; - }, + public(pluginData) { + return { + clean: makePublicFn(pluginData, cleanCmd), + userInfo: (userId: Snowflake) => getUserInfoEmbed(pluginData, userId, false), + hasPermission: makePublicFn(pluginData, hasPermission), + }; }, beforeLoad(pluginData) { diff --git a/package-lock.json b/package-lock.json index 870ac79d..1139a46a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -44,7 +44,7 @@ "fp-ts": "^2.0.1", "humanize-duration": "^3.15.0", "js-yaml": "^3.13.1", - "knub": "^32.0.0-next.20", + "knub": "^32.0.0-next.21", "knub-command-manager": "^9.1.0", "last-commit-log": "^2.1.0", "lodash.chunk": "^4.2.0", @@ -13250,9 +13250,9 @@ } }, "node_modules/knub": { - "version": "32.0.0-next.20", - "resolved": "https://registry.npmjs.org/knub/-/knub-32.0.0-next.20.tgz", - "integrity": "sha512-RNi6VC4H83HShujPRuIUsuuHhVwvWY4qIaVQSswZPUGtCgY+h8rKtPQ5mCcNAroMJJWr4rVXVXUG7fOfY/ZyBg==", + "version": "32.0.0-next.21", + "resolved": "https://registry.npmjs.org/knub/-/knub-32.0.0-next.21.tgz", + "integrity": "sha512-ZzY9uOxKe0ZKCKQ4yp26SBxuPl6Gac1LGNpXMPGydYX/0EIL1q3zunYAwfpTpgc7LxR02hmYdDcsBCj8ri4xkA==", "dependencies": { "discord-api-types": "^0.37.67", "discord.js": "^14.14.1",