From 52839cc9f39a3058ab1dc67d23313106a4880acd Mon Sep 17 00:00:00 2001 From: Dark <7890309+DarkView@users.noreply.github.com> Date: Tue, 1 Jun 2021 02:05:55 +0200 Subject: [PATCH] More rework progress, remove all eris imports --- .../plugins/AutoDelete/util/deleteNextItem.ts | 12 +++--- .../commands/NewAutoReactionsCmd.ts | 7 +-- .../AutoReactions/events/AddReactionsEvt.ts | 14 +++--- .../src/plugins/Automod/actions/addRoles.ts | 21 +++++---- backend/src/plugins/Automod/actions/alert.ts | 17 ++++---- backend/src/plugins/Automod/actions/ban.ts | 2 +- backend/src/plugins/Automod/actions/clean.ts | 4 +- backend/src/plugins/Automod/actions/kick.ts | 2 +- backend/src/plugins/Automod/actions/mute.ts | 2 +- .../plugins/Automod/actions/removeRoles.ts | 11 ++--- backend/src/plugins/Automod/actions/reply.ts | 20 +++++---- .../plugins/Automod/actions/setSlowmode.ts | 21 +++++---- backend/src/plugins/Automod/actions/warn.ts | 2 +- .../Automod/commands/ViewAntiraidCmd.ts | 4 +- .../events/RunAutomodOnMemberUpdate.ts | 12 +++--- .../events/runAutomodOnAntiraidLevel.ts | 2 +- .../Automod/events/runAutomodOnMessage.ts | 4 +- .../functions/getTextMatchPartialSummary.ts | 5 +-- .../matchMultipleTextTypesOnMessage.ts | 15 ++++--- .../functions/resolveActionContactMethods.ts | 5 ++- .../plugins/Automod/functions/runAutomod.ts | 8 ++-- .../Automod/functions/setAntiraidLevel.ts | 2 +- .../plugins/Automod/triggers/anyMessage.ts | 2 +- .../Automod/triggers/matchAttachmentType.ts | 2 +- .../src/plugins/Automod/triggers/roleAdded.ts | 2 +- .../plugins/Automod/triggers/roleRemoved.ts | 2 +- backend/src/plugins/Automod/types.ts | 5 ++- .../plugins/BotControl/BotControlPlugin.ts | 9 ++-- .../commands/ListDashboardUsersCmd.ts | 1 - .../commands/ReloadGlobalPluginsCmd.ts | 1 - .../plugins/Cases/functions/getCaseEmbed.ts | 5 ++- .../Cases/functions/postToCaseLogChannel.ts | 18 +++++--- .../plugins/Censor/util/applyFiltersToMsg.ts | 2 +- .../src/plugins/Censor/util/censorMessage.ts | 2 +- .../ChannelArchiver/rehostAttachment.ts | 1 - ...etCompanionChannelOptsForVoiceChannelId.ts | 1 - .../functions/handleCompanionPermissions.ts | 6 +-- .../Counters/commands/AddCounterCmd.ts | 2 +- .../commands/ResetAllCounterValuesCmd.ts | 2 +- .../Counters/commands/ResetCounterCmd.ts | 2 +- .../Counters/commands/SetCounterCmd.ts | 2 +- .../Counters/commands/ViewCounterCmd.ts | 2 +- .../CustomEvents/actions/addRoleAction.ts | 1 - .../actions/makeRoleMentionableAction.ts | 2 +- .../actions/makeRoleUnmentionableAction.ts | 2 +- .../CustomEvents/actions/messageAction.ts | 3 +- .../actions/moveToVoiceChannelAction.ts | 3 +- .../actions/setChannelPermissionOverrides.ts | 2 +- .../CustomEvents/functions/runEvent.ts | 2 +- .../GuildAccessMonitorPlugin.ts | 1 - .../LocateUser/events/SendAlertsEvts.ts | 1 - .../LocateUser/utils/createOrReuseInvite.ts | 2 - .../plugins/LocateUser/utils/moveMember.ts | 1 - .../plugins/LocateUser/utils/sendAlerts.ts | 2 +- .../src/plugins/LocateUser/utils/sendWhere.ts | 3 +- backend/src/plugins/Logs/LogsPlugin.ts | 6 +-- .../plugins/Logs/events/LogsGuildBanEvts.ts | 2 +- .../plugins/Logs/events/LogsRoleModifyEvts.ts | 4 +- .../plugins/Logs/events/LogsUserUpdateEvts.ts | 10 ++--- .../Logs/events/LogsVoiceChannelEvts.ts | 11 ++++- .../src/plugins/Logs/util/getLogMessage.ts | 1 - backend/src/plugins/Logs/util/log.ts | 6 +-- .../src/plugins/Logs/util/onMessageDelete.ts | 4 +- .../plugins/Logs/util/onMessageDeleteBulk.ts | 2 +- .../src/plugins/Logs/util/onMessageUpdate.ts | 4 +- .../MessageSaver/events/SaveMessagesEvts.ts | 3 +- .../plugins/MessageSaver/saveMessagesToDB.ts | 1 - .../plugins/ModActions/ModActionsPlugin.ts | 2 +- .../ModActions/commands/CasesModCmd.ts | 2 +- .../ModActions/commands/CasesUserCmd.ts | 2 +- .../ModActions/commands/DeleteCaseCmd.ts | 2 +- .../plugins/ModActions/commands/MassBanCmd.ts | 4 +- .../ModActions/commands/MassUnbanCmd.ts | 2 +- .../ModActions/commands/MassmuteCmd.ts | 4 +- .../plugins/ModActions/commands/MuteCmd.ts | 2 +- .../plugins/ModActions/commands/WarnCmd.ts | 1 - .../events/CreateBanCaseOnManualBanEvt.ts | 2 +- .../events/CreateKickCaseOnManualKickEvt.ts | 2 +- .../events/CreateUnbanCaseOnManualUnbanEvt.ts | 2 +- .../events/PostAlertOnMemberJoinEvt.ts | 8 ++-- .../functions/actualKickMemberCmd.ts | 1 - .../ModActions/functions/actualMuteUserCmd.ts | 1 - .../functions/actualUnmuteUserCmd.ts | 2 +- .../plugins/ModActions/functions/banUserId.ts | 6 +-- .../functions/formatReasonWithAttachments.ts | 2 - .../functions/getDefaultContactMethods.ts | 3 +- .../plugins/ModActions/functions/isBanned.ts | 3 +- .../ModActions/functions/kickMember.ts | 4 +- .../functions/readContactMethodsFromArgs.ts | 1 - .../ModActions/functions/updateCase.ts | 1 - .../ModActions/functions/warnMember.ts | 4 +- backend/src/plugins/ModActions/types.ts | 2 +- backend/src/plugins/Mutes/MutesPlugin.ts | 2 +- .../Mutes/commands/ClearBannedMutesCmd.ts | 2 +- .../src/plugins/Mutes/commands/MutesCmd.ts | 3 +- .../Mutes/functions/clearExpiredMutes.ts | 2 +- .../Mutes/functions/memberHasMutedRole.ts | 1 - .../src/plugins/Mutes/functions/muteUser.ts | 8 ++-- .../src/plugins/Mutes/functions/unmuteUser.ts | 6 +-- backend/src/plugins/Mutes/types.ts | 2 +- .../plugins/NameHistory/commands/NamesCmd.ts | 2 +- .../NameHistory/events/UpdateNameEvts.ts | 2 +- .../src/plugins/NameHistory/updateNickname.ts | 1 - .../src/plugins/Persist/events/LoadDataEvt.ts | 4 +- .../plugins/Persist/events/StoreDataEvt.ts | 2 +- .../events/ChangePingableEvts.ts | 2 +- .../utils/disablePingableRoles.ts | 2 +- .../utils/enablePingableRoles.ts | 2 +- backend/src/plugins/Post/commands/EditCmd.ts | 2 +- .../src/plugins/Post/commands/EditEmbedCmd.ts | 2 +- .../src/plugins/Post/commands/PostEmbedCmd.ts | 2 +- .../Post/commands/ScheduledPostsShowCmd.ts | 1 - .../src/plugins/Post/util/actualPostCmd.ts | 1 - backend/src/plugins/Post/util/postMessage.ts | 2 +- .../plugins/Post/util/scheduledPostLoop.ts | 6 +-- .../commands/ClearReactionRolesCmd.ts | 2 +- .../commands/InitReactionRolesCmd.ts | 2 +- .../events/AddReactionRoleEvt.ts | 4 +- .../applyReactionRoleReactionsToMessage.ts | 4 +- .../Reminders/utils/postDueRemindersLoop.ts | 3 +- .../src/plugins/Roles/commands/AddRoleCmd.ts | 1 - .../plugins/Roles/commands/MassAddRoleCmd.ts | 3 +- .../Roles/commands/MassRemoveRoleCmd.ts | 3 +- .../plugins/Roles/commands/RemoveRoleCmd.ts | 2 +- .../SelfGrantableRoles/commands/RoleAddCmd.ts | 8 ++-- .../commands/RoleRemoveCmd.ts | 2 +- .../Slowmode/commands/SlowmodeClearCmd.ts | 2 +- .../Slowmode/commands/SlowmodeGetCmd.ts | 2 +- .../Slowmode/commands/SlowmodeListCmd.ts | 2 +- .../Slowmode/commands/SlowmodeSetCmd.ts | 4 +- .../plugins/Slowmode/requiredPermissions.ts | 2 - .../Slowmode/util/actualDisableSlowmodeCmd.ts | 3 +- .../Slowmode/util/applyBotSlowmodeToUserId.ts | 4 +- .../util/clearBotSlowmodeFromUserId.ts | 1 - .../Slowmode/util/clearExpiredSlowmodes.ts | 6 +-- .../util/disableBotSlowmodeForChannel.ts | 1 - .../plugins/Slowmode/util/onMessageCreate.ts | 6 +-- .../Spam/util/logAndDetectMessageSpam.ts | 6 +-- .../Spam/util/logAndDetectOtherSpam.ts | 4 +- backend/src/plugins/Spam/util/logCensor.ts | 2 +- .../src/plugins/Spam/util/onMessageCreate.ts | 2 +- .../Starboard/commands/MigratePinsCmd.ts | 4 +- .../events/StarboardReactionAddEvt.ts | 2 +- .../util/createStarboardEmbedFromMessage.ts | 2 +- .../createStarboardPseudoFooterForMessage.ts | 1 - .../Starboard/util/saveMessageToStarboard.ts | 4 +- .../util/updateStarboardMessageStarCount.ts | 1 - backend/src/plugins/Tags/TagsPlugin.ts | 2 +- .../src/plugins/Tags/commands/TagEvalCmd.ts | 2 +- .../Tags/util/matchAndRenderTagFromString.ts | 1 - .../src/plugins/Tags/util/onMessageCreate.ts | 4 +- .../src/plugins/Tags/util/onMessageDelete.ts | 5 +-- .../plugins/Tags/util/renderTagFromString.ts | 2 +- .../events/UpdateUsernameEvts.ts | 2 +- .../plugins/UsernameSaver/updateUsername.ts | 1 - .../src/plugins/Utility/commands/AboutCmd.ts | 11 ++--- .../src/plugins/Utility/commands/AvatarCmd.ts | 1 - .../src/plugins/Utility/commands/CleanCmd.ts | 4 +- .../plugins/Utility/commands/ContextCmd.ts | 2 +- .../src/plugins/Utility/commands/InfoCmd.ts | 4 +- .../src/plugins/Utility/commands/PingCmd.ts | 1 - .../Utility/commands/ReloadGuildCmd.ts | 2 +- .../src/plugins/Utility/commands/RolesCmd.ts | 2 +- .../src/plugins/Utility/commands/SourceCmd.ts | 2 +- .../Utility/commands/VcdisconnectCmd.ts | 2 +- .../src/plugins/Utility/commands/VcmoveCmd.ts | 12 +++--- .../Utility/functions/getChannelInfoEmbed.ts | 4 +- .../Utility/functions/getEmojiInfoEmbed.ts | 1 - .../Utility/functions/getGuildPreview.ts | 1 - .../Utility/functions/getInviteInfoEmbed.ts | 2 +- .../Utility/functions/getMessageInfoEmbed.ts | 2 +- .../Utility/functions/getRoleInfoEmbed.ts | 1 - .../Utility/functions/getServerInfoEmbed.ts | 2 +- .../functions/getSnowflakeInfoEmbed.ts | 1 - .../Utility/functions/getUserInfoEmbed.ts | 5 +-- backend/src/plugins/Utility/guildReloads.ts | 2 - backend/src/plugins/Utility/refreshMembers.ts | 1 - backend/src/plugins/Utility/search.ts | 3 +- .../events/SendWelcomeMessageEvt.ts | 4 +- .../erisAllowedMentionsToDjsMentionOptions.ts | 43 +++++++++++++++++++ backend/src/utils/hasDiscordPermissions.ts | 2 +- 181 files changed, 352 insertions(+), 343 deletions(-) create mode 100644 backend/src/utils/erisAllowedMentionsToDjsMentionOptions.ts diff --git a/backend/src/plugins/AutoDelete/util/deleteNextItem.ts b/backend/src/plugins/AutoDelete/util/deleteNextItem.ts index c5ff6d23..2ec8b598 100644 --- a/backend/src/plugins/AutoDelete/util/deleteNextItem.ts +++ b/backend/src/plugins/AutoDelete/util/deleteNextItem.ts @@ -7,8 +7,8 @@ import { logger } from "../../../logger"; import { scheduleNextDeletion } from "./scheduleNextDeletion"; import { TimeAndDatePlugin } from "../../TimeAndDate/TimeAndDatePlugin"; import { hasDiscordPermissions } from "../../../utils/hasDiscordPermissions"; -import { Constants } from "eris"; import { LogsPlugin } from "../../Logs/LogsPlugin"; +import { Permissions, TextChannel } from "discord.js"; export async function deleteNextItem(pluginData: GuildPluginData) { const [itemToDelete] = pluginData.state.deletionQueue.splice(0, 1); @@ -16,16 +16,16 @@ export async function deleteNextItem(pluginData: GuildPluginData { + (channel as TextChannel).messages.delete(itemToDelete.message.id).catch(err => { if (err.code === 10008) { // "Unknown Message", probably already deleted by automod or another bot, ignore return; diff --git a/backend/src/plugins/AutoReactions/commands/NewAutoReactionsCmd.ts b/backend/src/plugins/AutoReactions/commands/NewAutoReactionsCmd.ts index 8a4a67e1..f1fb64ff 100644 --- a/backend/src/plugins/AutoReactions/commands/NewAutoReactionsCmd.ts +++ b/backend/src/plugins/AutoReactions/commands/NewAutoReactionsCmd.ts @@ -3,11 +3,12 @@ import { commandTypeHelpers as ct } from "../../../commandTypes"; import { canUseEmoji, customEmojiRegex, isEmoji } from "../../../utils"; import { sendErrorMessage, sendSuccessMessage } from "../../../pluginUtils"; import { getMissingChannelPermissions } from "../../../utils/getMissingChannelPermissions"; -import { Constants, GuildChannel } from "eris"; + import { readChannelPermissions } from "../../../utils/readChannelPermissions"; import { missingPermissionError } from "../../../utils/missingPermissionError"; +import { GuildChannel, Permissions } from "discord.js"; -const requiredPermissions = readChannelPermissions | Constants.Permissions.addReactions; +const requiredPermissions = readChannelPermissions | Permissions.FLAGS.ADD_REACTIONS; export const NewAutoReactionsCmd = autoReactionsCmd({ trigger: "auto_reactions", @@ -22,7 +23,7 @@ export const NewAutoReactionsCmd = autoReactionsCmd({ async run({ message: msg, args, pluginData }) { const finalReactions: string[] = []; - const me = pluginData.guild.members.get(pluginData.client.user.id)!; + const me = pluginData.guild.members.cache.get(pluginData.client.user!.id)!; const missingPermissions = getMissingChannelPermissions(me, args.channel as GuildChannel, requiredPermissions); if (missingPermissions) { sendErrorMessage( diff --git a/backend/src/plugins/AutoReactions/events/AddReactionsEvt.ts b/backend/src/plugins/AutoReactions/events/AddReactionsEvt.ts index 54f44951..06ca2bb2 100644 --- a/backend/src/plugins/AutoReactions/events/AddReactionsEvt.ts +++ b/backend/src/plugins/AutoReactions/events/AddReactionsEvt.ts @@ -1,17 +1,17 @@ import { autoReactionsEvt } from "../types"; import { isDiscordRESTError } from "../../../utils"; import { LogType } from "../../../data/LogType"; -import { logger } from "../../../logger"; import { LogsPlugin } from "../../Logs/LogsPlugin"; -import { Constants, GuildChannel } from "eris"; + import { getMissingChannelPermissions } from "../../../utils/getMissingChannelPermissions"; import { readChannelPermissions } from "../../../utils/readChannelPermissions"; import { missingPermissionError } from "../../../utils/missingPermissionError"; +import { GuildChannel, Permissions } from "discord.js"; -const p = Constants.Permissions; +const p = Permissions.FLAGS; export const AddReactionsEvt = autoReactionsEvt({ - event: "messageCreate", + event: "message", allowBots: true, allowSelf: true, @@ -19,11 +19,11 @@ export const AddReactionsEvt = autoReactionsEvt({ const autoReaction = await pluginData.state.autoReactions.getForChannel(message.channel.id); if (!autoReaction) return; - const me = pluginData.guild.members.get(pluginData.client.user.id)!; + const me = pluginData.guild.members.cache.get(pluginData.client.user!.id)!; const missingPermissions = getMissingChannelPermissions( me, message.channel as GuildChannel, - readChannelPermissions | p.addReactions, + readChannelPermissions | p.ADD_REACTIONS, ); if (missingPermissions) { const logs = pluginData.getPlugin(LogsPlugin); @@ -35,7 +35,7 @@ export const AddReactionsEvt = autoReactionsEvt({ for (const reaction of autoReaction.reactions) { try { - await message.addReaction(reaction); + await message.react(reaction); } catch (e) { if (isDiscordRESTError(e)) { const logs = pluginData.getPlugin(LogsPlugin); diff --git a/backend/src/plugins/Automod/actions/addRoles.ts b/backend/src/plugins/Automod/actions/addRoles.ts index 976300a5..39f59870 100644 --- a/backend/src/plugins/Automod/actions/addRoles.ts +++ b/backend/src/plugins/Automod/actions/addRoles.ts @@ -1,17 +1,16 @@ +import { Permissions } from "discord.js"; import * as t from "io-ts"; -import { automodAction } from "../helpers"; import { LogType } from "../../../data/LogType"; import { nonNullish, unique } from "../../../utils"; -import { Constants } from "eris"; -import { hasDiscordPermissions } from "../../../utils/hasDiscordPermissions"; -import { LogsPlugin } from "../../Logs/LogsPlugin"; -import { getMissingPermissions } from "../../../utils/getMissingPermissions"; import { canAssignRole } from "../../../utils/canAssignRole"; -import { missingPermissionError } from "../../../utils/missingPermissionError"; -import { ignoreRoleChange } from "../functions/ignoredRoleChanges"; +import { getMissingPermissions } from "../../../utils/getMissingPermissions"; import { memberRolesLock } from "../../../utils/lockNameHelpers"; +import { missingPermissionError } from "../../../utils/missingPermissionError"; +import { LogsPlugin } from "../../Logs/LogsPlugin"; +import { ignoreRoleChange } from "../functions/ignoredRoleChanges"; +import { automodAction } from "../helpers"; -const p = Constants.Permissions; +const p = Permissions.FLAGS; export const AddRolesAction = automodAction({ configType: t.array(t.string), @@ -19,9 +18,9 @@ export const AddRolesAction = automodAction({ async apply({ pluginData, contexts, actionConfig, ruleName }) { const members = unique(contexts.map(c => c.member).filter(nonNullish)); - const me = pluginData.guild.members.get(pluginData.client.user.id)!; + const me = pluginData.guild.members.cache.get(pluginData.client.user!.id)!; - const missingPermissions = getMissingPermissions(me.permission, p.manageRoles); + const missingPermissions = getMissingPermissions(me.permissions, p.MANAGE_ROLES); if (missingPermissions) { const logs = pluginData.getPlugin(LogsPlugin); logs.log(LogType.BOT_ALERT, { @@ -42,7 +41,7 @@ export const AddRolesAction = automodAction({ if (rolesWeCannotAssign.length) { const roleNamesWeCannotAssign = rolesWeCannotAssign.map( - roleId => pluginData.guild.roles.get(roleId)?.name || roleId, + roleId => pluginData.guild.roles.cache.get(roleId)?.name || roleId, ); const logs = pluginData.getPlugin(LogsPlugin); logs.log(LogType.BOT_ALERT, { diff --git a/backend/src/plugins/Automod/actions/alert.ts b/backend/src/plugins/Automod/actions/alert.ts index 2076ae55..7b932639 100644 --- a/backend/src/plugins/Automod/actions/alert.ts +++ b/backend/src/plugins/Automod/actions/alert.ts @@ -2,22 +2,17 @@ import * as t from "io-ts"; import { automodAction } from "../helpers"; import { LogType } from "../../../data/LogType"; import { - asyncMap, createChunkedMessage, - isDiscordRESTError, messageLink, - resolveMember, stripObjectToScalars, tAllowedMentions, tNormalizedNullOptional, - tNullable, verboseChannelMention, } from "../../../utils"; -import { resolveActionContactMethods } from "../functions/resolveActionContactMethods"; -import { ModActionsPlugin } from "../../ModActions/ModActionsPlugin"; -import { TextChannel } from "eris"; import { renderTemplate, TemplateParseError } from "../../../templateFormatter"; import { LogsPlugin } from "../../Logs/LogsPlugin"; +import { TextChannel } from "discord.js"; +import { erisAllowedMentionsToDjsMentionOptions } from "src/utils/erisAllowedMentionsToDjsMentionOptions"; export const AlertAction = automodAction({ configType: t.type({ @@ -29,7 +24,7 @@ export const AlertAction = automodAction({ defaultConfig: {}, async apply({ pluginData, contexts, actionConfig, ruleName, matchResult }) { - const channel = pluginData.guild.channels.get(actionConfig.channel); + const channel = pluginData.guild.channels.cache.get(actionConfig.channel); const logs = pluginData.getPlugin(LogsPlugin); if (channel && channel instanceof TextChannel) { @@ -73,7 +68,11 @@ export const AlertAction = automodAction({ } try { - await createChunkedMessage(channel, rendered, actionConfig.allowed_mentions); + await createChunkedMessage( + channel, + rendered, + erisAllowedMentionsToDjsMentionOptions(actionConfig.allowed_mentions), + ); } catch (err) { if (err.code === 50001) { logs.log(LogType.BOT_ALERT, { diff --git a/backend/src/plugins/Automod/actions/ban.ts b/backend/src/plugins/Automod/actions/ban.ts index 4867ead7..9ca09086 100644 --- a/backend/src/plugins/Automod/actions/ban.ts +++ b/backend/src/plugins/Automod/actions/ban.ts @@ -37,7 +37,7 @@ export const BanAction = automodAction({ const deleteMessageDays = actionConfig.deleteMessageDays || undefined; const caseArgs: Partial = { - modId: pluginData.client.user.id, + modId: pluginData.client.user!.id, extraNotes: matchResult.fullSummary ? [matchResult.fullSummary] : [], automatic: true, postInCaseLogOverride: actionConfig.postInCaseLog ?? undefined, diff --git a/backend/src/plugins/Automod/actions/clean.ts b/backend/src/plugins/Automod/actions/clean.ts index 3c2c0c7d..4f505cfb 100644 --- a/backend/src/plugins/Automod/actions/clean.ts +++ b/backend/src/plugins/Automod/actions/clean.ts @@ -2,6 +2,7 @@ import * as t from "io-ts"; import { automodAction } from "../helpers"; import { LogType } from "../../../data/LogType"; import { noop } from "../../../utils"; +import { TextChannel } from "discord.js"; export const CleanAction = automodAction({ configType: t.boolean, @@ -29,7 +30,8 @@ export const CleanAction = automodAction({ pluginData.state.logs.ignoreLog(LogType.MESSAGE_DELETE, id); } - await pluginData.client.deleteMessages(channelId, messageIds).catch(noop); + const channel = pluginData.guild.channels.cache.get(channelId) as TextChannel; + await channel.bulkDelete(messageIds).catch(noop); } }, }); diff --git a/backend/src/plugins/Automod/actions/kick.ts b/backend/src/plugins/Automod/actions/kick.ts index 879a541d..0b0fafa5 100644 --- a/backend/src/plugins/Automod/actions/kick.ts +++ b/backend/src/plugins/Automod/actions/kick.ts @@ -25,7 +25,7 @@ export const KickAction = automodAction({ const contactMethods = actionConfig.notify ? resolveActionContactMethods(pluginData, actionConfig) : undefined; const caseArgs: Partial = { - modId: pluginData.client.user.id, + modId: pluginData.client.user!.id, extraNotes: matchResult.fullSummary ? [matchResult.fullSummary] : [], automatic: true, postInCaseLogOverride: actionConfig.postInCaseLog ?? undefined, diff --git a/backend/src/plugins/Automod/actions/mute.ts b/backend/src/plugins/Automod/actions/mute.ts index 798b8b10..3bc7a90b 100644 --- a/backend/src/plugins/Automod/actions/mute.ts +++ b/backend/src/plugins/Automod/actions/mute.ts @@ -42,7 +42,7 @@ export const MuteAction = automodAction({ const rolesToRestore = actionConfig.restore_roles_on_mute; const caseArgs: Partial = { - modId: pluginData.client.user.id, + modId: pluginData.client.user!.id, extraNotes: matchResult.fullSummary ? [matchResult.fullSummary] : [], automatic: true, postInCaseLogOverride: actionConfig.postInCaseLog ?? undefined, diff --git a/backend/src/plugins/Automod/actions/removeRoles.ts b/backend/src/plugins/Automod/actions/removeRoles.ts index c6c74e49..dcfbd9d3 100644 --- a/backend/src/plugins/Automod/actions/removeRoles.ts +++ b/backend/src/plugins/Automod/actions/removeRoles.ts @@ -8,11 +8,12 @@ import { getMissingPermissions } from "../../../utils/getMissingPermissions"; import { LogsPlugin } from "../../Logs/LogsPlugin"; import { missingPermissionError } from "../../../utils/missingPermissionError"; import { canAssignRole } from "../../../utils/canAssignRole"; -import { Constants } from "eris"; + import { ignoreRoleChange } from "../functions/ignoredRoleChanges"; import { memberRolesLock } from "../../../utils/lockNameHelpers"; +import { Permissions } from "discord.js"; -const p = Constants.Permissions; +const p = Permissions.FLAGS; export const RemoveRolesAction = automodAction({ configType: t.array(t.string), @@ -21,9 +22,9 @@ export const RemoveRolesAction = automodAction({ async apply({ pluginData, contexts, actionConfig, ruleName }) { const members = unique(contexts.map(c => c.member).filter(nonNullish)); - const me = pluginData.guild.members.get(pluginData.client.user.id)!; + const me = pluginData.guild.members.cache.get(pluginData.client.user!.id)!; - const missingPermissions = getMissingPermissions(me.permission, p.manageRoles); + const missingPermissions = getMissingPermissions(me.permissions, p.MANAGE_ROLES); if (missingPermissions) { const logs = pluginData.getPlugin(LogsPlugin); logs.log(LogType.BOT_ALERT, { @@ -44,7 +45,7 @@ export const RemoveRolesAction = automodAction({ if (rolesWeCannotRemove.length) { const roleNamesWeCannotRemove = rolesWeCannotRemove.map( - roleId => pluginData.guild.roles.get(roleId)?.name || roleId, + roleId => pluginData.guild.roles.cache.get(roleId)?.name || roleId, ); const logs = pluginData.getPlugin(LogsPlugin); logs.log(LogType.BOT_ALERT, { diff --git a/backend/src/plugins/Automod/actions/reply.ts b/backend/src/plugins/Automod/actions/reply.ts index c8291e43..8357edb9 100644 --- a/backend/src/plugins/Automod/actions/reply.ts +++ b/backend/src/plugins/Automod/actions/reply.ts @@ -12,11 +12,12 @@ import { unique, verboseChannelMention, } from "../../../utils"; -import { AdvancedMessageContent, Constants, MessageContent, TextChannel, User } from "eris"; + import { AutomodContext } from "../types"; import { renderTemplate } from "../../../templateFormatter"; import { hasDiscordPermissions } from "../../../utils/hasDiscordPermissions"; import { LogType } from "../../../data/LogType"; +import { TextChannel, User, Constants, MessageOptions, Permissions } from "discord.js"; export const ReplyAction = automodAction({ configType: t.union([ @@ -32,7 +33,7 @@ export const ReplyAction = automodAction({ async apply({ pluginData, contexts, actionConfig, ruleName }) { const contextsWithTextChannels = contexts .filter(c => c.message?.channel_id) - .filter(c => pluginData.guild.channels.get(c.message!.channel_id) instanceof TextChannel); + .filter(c => pluginData.guild.channels.cache.get(c.message!.channel_id) instanceof TextChannel); const contextsByChannelId = contextsWithTextChannels.reduce((map: Map, context) => { if (!map.has(context.message!.channel_id)) { @@ -54,16 +55,16 @@ export const ReplyAction = automodAction({ const formatted = typeof actionConfig === "string" ? await renderReplyText(actionConfig) - : ((await renderRecursively(actionConfig.text, renderReplyText)) as AdvancedMessageContent); + : ((await renderRecursively(actionConfig.text, renderReplyText)) as MessageOptions); if (formatted) { - const channel = pluginData.guild.channels.get(channelId) as TextChannel; + const channel = pluginData.guild.channels.cache.get(channelId) as TextChannel; // Check for basic Send Messages and View Channel permissions if ( !hasDiscordPermissions( - channel.permissionsOf(pluginData.client.user.id), - Constants.Permissions.sendMessages | Constants.Permissions.readMessages, + channel.permissionsFor(pluginData.client.user!.id), + Permissions.FLAGS.SEND_MESSAGES | Permissions.FLAGS.VIEW_CHANNEL, ) ) { pluginData.state.logs.log(LogType.BOT_ALERT, { @@ -75,7 +76,7 @@ export const ReplyAction = automodAction({ // If the message is an embed, check for embed permissions if ( typeof formatted !== "string" && - !hasDiscordPermissions(channel.permissionsOf(pluginData.client.user.id), Constants.Permissions.embedLinks) + !hasDiscordPermissions(channel.permissionsFor(pluginData.client.user!.id), Permissions.FLAGS.EMBED_LINKS) ) { pluginData.state.logs.log(LogType.BOT_ALERT, { body: `Missing permissions to reply **with an embed** in ${verboseChannelMention( @@ -85,12 +86,13 @@ export const ReplyAction = automodAction({ continue; } - const messageContent: StrictMessageContent = typeof formatted === "string" ? { content: formatted } : formatted; - const replyMsg = await channel.createMessage({ + const messageContent: MessageOptions = typeof formatted === "string" ? { content: formatted } : formatted; + const replyMsg = await channel.send({ ...messageContent, allowedMentions: { users: [user.id], }, + split: false, }); if (typeof actionConfig === "object" && actionConfig.auto_delete) { diff --git a/backend/src/plugins/Automod/actions/setSlowmode.ts b/backend/src/plugins/Automod/actions/setSlowmode.ts index 6c69f019..a2bacc38 100644 --- a/backend/src/plugins/Automod/actions/setSlowmode.ts +++ b/backend/src/plugins/Automod/actions/setSlowmode.ts @@ -2,7 +2,8 @@ import * as t from "io-ts"; import { automodAction } from "../helpers"; import { convertDelayStringToMS, isDiscordRESTError, tDelayString, tNullable } from "../../../utils"; import { LogType } from "../../../data/LogType"; -import { Constants, TextChannel } from "eris"; +import { Constants, TextChannel } from "discord.js"; +import { ChannelTypeStrings } from "src/types"; export const SetSlowmodeAction = automodAction({ configType: t.type({ @@ -18,24 +19,22 @@ export const SetSlowmodeAction = automodAction({ const slowmodeMs = Math.max(actionConfig.duration ? convertDelayStringToMS(actionConfig.duration)! : 0, 0); for (const channelId of actionConfig.channels) { - const channel = pluginData.guild.channels.get(channelId); + const channel = pluginData.guild.channels.cache.get(channelId); // Only text channels and text channels within categories support slowmodes - if ( - !channel || - !(channel.type === Constants.ChannelTypes.GUILD_TEXT || channel.type === Constants.ChannelTypes.GUILD_CATEGORY) - ) { + if (!channel || !(channel.type === ChannelTypeStrings.TEXT || ChannelTypeStrings.CATEGORY)) { continue; } let channelsToSlowmode: TextChannel[] = []; - if (channel.type === Constants.ChannelTypes.GUILD_CATEGORY) { + if (channel.type === ChannelTypeStrings.CATEGORY) { // Find all text channels within the category - channelsToSlowmode = pluginData.guild.channels.filter( - ch => ch.parentID === channel.id && ch.type === Constants.ChannelTypes.GUILD_TEXT, - ) as TextChannel[]; + for (const ch of pluginData.guild.channels.cache.values()) { + if (ch.parentID === channel.id && ch.type === ChannelTypeStrings.TEXT) + channelsToSlowmode.push(ch as TextChannel); + } } else { - channelsToSlowmode.push(channel); + channelsToSlowmode.push(channel as TextChannel); } const slowmodeSeconds = Math.ceil(slowmodeMs / 1000); diff --git a/backend/src/plugins/Automod/actions/warn.ts b/backend/src/plugins/Automod/actions/warn.ts index feccf2b0..38f131b8 100644 --- a/backend/src/plugins/Automod/actions/warn.ts +++ b/backend/src/plugins/Automod/actions/warn.ts @@ -25,7 +25,7 @@ export const WarnAction = automodAction({ const contactMethods = actionConfig.notify ? resolveActionContactMethods(pluginData, actionConfig) : undefined; const caseArgs: Partial = { - modId: pluginData.client.user.id, + modId: pluginData.client.user!.id, extraNotes: matchResult.fullSummary ? [matchResult.fullSummary] : [], automatic: true, postInCaseLogOverride: actionConfig.postInCaseLog ?? undefined, diff --git a/backend/src/plugins/Automod/commands/ViewAntiraidCmd.ts b/backend/src/plugins/Automod/commands/ViewAntiraidCmd.ts index 76cf64b1..397e60e1 100644 --- a/backend/src/plugins/Automod/commands/ViewAntiraidCmd.ts +++ b/backend/src/plugins/Automod/commands/ViewAntiraidCmd.ts @@ -10,9 +10,9 @@ export const ViewAntiraidCmd = typedGuildCommand()({ async run({ pluginData, message }) { if (pluginData.state.cachedAntiraidLevel) { - message.channel.createMessage(`Anti-raid is set to **${pluginData.state.cachedAntiraidLevel}**`); + message.channel.send(`Anti-raid is set to **${pluginData.state.cachedAntiraidLevel}**`); } else { - message.channel.createMessage(`Anti-raid is **off**`); + message.channel.send(`Anti-raid is **off**`); } }, }); diff --git a/backend/src/plugins/Automod/events/RunAutomodOnMemberUpdate.ts b/backend/src/plugins/Automod/events/RunAutomodOnMemberUpdate.ts index 275865cf..8ef0b461 100644 --- a/backend/src/plugins/Automod/events/RunAutomodOnMemberUpdate.ts +++ b/backend/src/plugins/Automod/events/RunAutomodOnMemberUpdate.ts @@ -7,19 +7,19 @@ import diff from "lodash.difference"; export const RunAutomodOnMemberUpdate = typedGuildEventListener()({ event: "guildMemberUpdate", - listener({ pluginData, args: { member, oldMember } }) { + listener({ pluginData, args: { oldMember, newMember } }) { if (!oldMember) return; - if (isEqual(oldMember.roles, member.roles)) return; + if (isEqual(oldMember.roles, newMember.roles)) return; - const addedRoles = diff(member.roles, oldMember.roles); - const removedRoles = diff(oldMember.roles, member.roles); + const addedRoles = diff(newMember.roles, oldMember.roles); + const removedRoles = diff(oldMember.roles, newMember.roles); if (addedRoles.length || removedRoles.length) { const context: AutomodContext = { timestamp: Date.now(), - user: member.user, - member, + user: newMember.user, + member: newMember, rolesChanged: { added: addedRoles, removed: removedRoles, diff --git a/backend/src/plugins/Automod/events/runAutomodOnAntiraidLevel.ts b/backend/src/plugins/Automod/events/runAutomodOnAntiraidLevel.ts index f36e1067..4145cb19 100644 --- a/backend/src/plugins/Automod/events/runAutomodOnAntiraidLevel.ts +++ b/backend/src/plugins/Automod/events/runAutomodOnAntiraidLevel.ts @@ -1,7 +1,7 @@ import { GuildPluginData } from "knub"; import { AutomodContext, AutomodPluginType } from "../types"; import { runAutomod } from "../functions/runAutomod"; -import { User } from "eris"; +import { User } from "discord.js"; export async function runAutomodOnAntiraidLevel( pluginData: GuildPluginData, diff --git a/backend/src/plugins/Automod/events/runAutomodOnMessage.ts b/backend/src/plugins/Automod/events/runAutomodOnMessage.ts index 0ae87a6f..a3db2cf4 100644 --- a/backend/src/plugins/Automod/events/runAutomodOnMessage.ts +++ b/backend/src/plugins/Automod/events/runAutomodOnMessage.ts @@ -11,8 +11,8 @@ export function runAutomodOnMessage( message: SavedMessage, isEdit: boolean, ) { - const user = pluginData.client.users.get(message.user_id); - const member = pluginData.guild.members.get(message.user_id); + const user = pluginData.client.users.cache!.get(message.user_id); + const member = pluginData.guild.members.cache.get(message.user_id); const context: AutomodContext = { timestamp: moment.utc(message.posted_at).valueOf(), diff --git a/backend/src/plugins/Automod/functions/getTextMatchPartialSummary.ts b/backend/src/plugins/Automod/functions/getTextMatchPartialSummary.ts index 9a86dc13..37a04fe4 100644 --- a/backend/src/plugins/Automod/functions/getTextMatchPartialSummary.ts +++ b/backend/src/plugins/Automod/functions/getTextMatchPartialSummary.ts @@ -2,7 +2,6 @@ import { MatchableTextType } from "./matchMultipleTextTypesOnMessage"; import { AutomodContext, AutomodPluginType } from "../types"; import { messageSummary, verboseChannelMention } from "../../../utils"; import { GuildPluginData } from "knub"; -import { User } from "eris"; export function getTextMatchPartialSummary( pluginData: GuildPluginData, @@ -11,13 +10,13 @@ export function getTextMatchPartialSummary( ) { if (type === "message") { const message = context.message!; - const channel = pluginData.guild.channels.get(message.channel_id); + const channel = pluginData.guild.channels.cache.get(message.channel_id); const channelMention = channel ? verboseChannelMention(channel) : `\`#${message.channel_id}\``; return `message in ${channelMention}:\n${messageSummary(message)}`; } else if (type === "embed") { const message = context.message!; - const channel = pluginData.guild.channels.get(message.channel_id); + const channel = pluginData.guild.channels.cache.get(message.channel_id); const channelMention = channel ? verboseChannelMention(channel) : `\`#${message.channel_id}\``; return `message embed in ${channelMention}:\n${messageSummary(message)}`; diff --git a/backend/src/plugins/Automod/functions/matchMultipleTextTypesOnMessage.ts b/backend/src/plugins/Automod/functions/matchMultipleTextTypesOnMessage.ts index a51ad74d..2638d677 100644 --- a/backend/src/plugins/Automod/functions/matchMultipleTextTypesOnMessage.ts +++ b/backend/src/plugins/Automod/functions/matchMultipleTextTypesOnMessage.ts @@ -2,6 +2,7 @@ import { SavedMessage } from "../../../data/entities/SavedMessage"; import { resolveMember } from "../../../utils"; import { GuildPluginData } from "knub"; import { AutomodPluginType } from "../types"; +import { Activity, Constants } from "discord.js"; type TextTriggerWithMultipleMatchTypes = { match_messages: boolean; @@ -40,19 +41,21 @@ export async function* matchMultipleTextTypesOnMessage( } if (trigger.match_visible_names) { - yield ["visiblename", member.nick || msg.data.author.username]; + yield ["visiblename", member.nickname || msg.data.author.username]; } if (trigger.match_usernames) { yield ["username", `${msg.data.author.username}#${msg.data.author.discriminator}`]; } - if (trigger.match_nicknames && member.nick) { - yield ["nickname", member.nick]; + if (trigger.match_nicknames && member.nickname) { + yield ["nickname", member.nickname]; } - // type 4 = custom status - if (trigger.match_custom_status && member.game?.type === 4 && member.game?.state) { - yield ["customstatus", member.game.state]; + for (const activity of member.presence.activities) { + if (activity.type === Constants.ActivityTypes[4]) { + yield ["customstatus", `${activity.emoji} ${activity.name}`]; + break; + } } } diff --git a/backend/src/plugins/Automod/functions/resolveActionContactMethods.ts b/backend/src/plugins/Automod/functions/resolveActionContactMethods.ts index 2309a95a..83753a02 100644 --- a/backend/src/plugins/Automod/functions/resolveActionContactMethods.ts +++ b/backend/src/plugins/Automod/functions/resolveActionContactMethods.ts @@ -1,8 +1,9 @@ import { disableUserNotificationStrings, UserNotificationMethod } from "../../../utils"; import { ERRORS, RecoverablePluginError } from "../../../RecoverablePluginError"; -import { TextChannel } from "eris"; + import { GuildPluginData } from "knub"; import { AutomodPluginType } from "../types"; +import { TextChannel } from "discord.js"; export function resolveActionContactMethods( pluginData: GuildPluginData, @@ -18,7 +19,7 @@ export function resolveActionContactMethods( throw new RecoverablePluginError(ERRORS.NO_USER_NOTIFICATION_CHANNEL); } - const channel = pluginData.guild.channels.get(actionConfig.notifyChannel); + const channel = pluginData.guild.channels.cache.get(actionConfig.notifyChannel); if (!(channel instanceof TextChannel)) { throw new RecoverablePluginError(ERRORS.INVALID_USER_NOTIFICATION_CHANNEL); } diff --git a/backend/src/plugins/Automod/functions/runAutomod.ts b/backend/src/plugins/Automod/functions/runAutomod.ts index 0e7ee471..f95a9abf 100644 --- a/backend/src/plugins/Automod/functions/runAutomod.ts +++ b/backend/src/plugins/Automod/functions/runAutomod.ts @@ -5,14 +5,14 @@ import { availableActions } from "../actions/availableActions"; import { AutomodTriggerMatchResult } from "../helpers"; import { CleanAction } from "../actions/clean"; import { checkAndUpdateCooldown } from "./checkAndUpdateCooldown"; -import { TextChannel } from "eris"; +import { TextChannel } from "discord.js"; export async function runAutomod(pluginData: GuildPluginData, context: AutomodContext) { const userId = context.user?.id || context.member?.id || context.message?.user_id; - const user = context.user || (userId && pluginData.client.users.get(userId)); - const member = context.member || (userId && pluginData.guild.members.get(userId)) || null; + const user = context.user || (userId && pluginData.client.users!.cache.get(userId)); + const member = context.member || (userId && pluginData.guild.members.cache.get(userId)) || null; const channelId = context.message?.channel_id; - const channel = channelId ? (pluginData.guild.channels.get(channelId) as TextChannel) : null; + const channel = channelId ? (pluginData.guild.channels.cache.get(channelId) as TextChannel) : null; const categoryId = channel?.parentID; const config = await pluginData.config.getMatchingConfig({ diff --git a/backend/src/plugins/Automod/functions/setAntiraidLevel.ts b/backend/src/plugins/Automod/functions/setAntiraidLevel.ts index eb72c3ec..8d926525 100644 --- a/backend/src/plugins/Automod/functions/setAntiraidLevel.ts +++ b/backend/src/plugins/Automod/functions/setAntiraidLevel.ts @@ -1,10 +1,10 @@ -import { User } from "eris"; import { GuildPluginData } from "knub"; import { AutomodPluginType } from "../types"; import { LogsPlugin } from "../../Logs/LogsPlugin"; import { LogType } from "../../../data/LogType"; import { stripObjectToScalars } from "../../../utils"; import { runAutomodOnAntiraidLevel } from "../events/runAutomodOnAntiraidLevel"; +import { User } from "discord.js"; export async function setAntiraidLevel( pluginData: GuildPluginData, diff --git a/backend/src/plugins/Automod/triggers/anyMessage.ts b/backend/src/plugins/Automod/triggers/anyMessage.ts index 466f0460..4f15c3cb 100644 --- a/backend/src/plugins/Automod/triggers/anyMessage.ts +++ b/backend/src/plugins/Automod/triggers/anyMessage.ts @@ -21,7 +21,7 @@ export const AnyMessageTrigger = automodTrigger()({ }, renderMatchInformation({ pluginData, contexts, matchResult }) { - const channel = pluginData.guild.channels.get(contexts[0].message!.channel_id); + const channel = pluginData.guild.channels.cache.get(contexts[0].message!.channel_id); return `Matched message (\`${contexts[0].message!.id}\`) in ${ channel ? verboseChannelMention(channel) : "Unknown Channel" }`; diff --git a/backend/src/plugins/Automod/triggers/matchAttachmentType.ts b/backend/src/plugins/Automod/triggers/matchAttachmentType.ts index 45f29697..39163095 100644 --- a/backend/src/plugins/Automod/triggers/matchAttachmentType.ts +++ b/backend/src/plugins/Automod/triggers/matchAttachmentType.ts @@ -73,7 +73,7 @@ export const MatchAttachmentTypeTrigger = automodTrigger()({ }, renderMatchInformation({ pluginData, contexts, matchResult }) { - const channel = pluginData.guild.channels.get(contexts[0].message!.channel_id)!; + const channel = pluginData.guild.channels.cache.get(contexts[0].message!.channel_id)!; const prettyChannel = verboseChannelMention(channel); return ( diff --git a/backend/src/plugins/Automod/triggers/roleAdded.ts b/backend/src/plugins/Automod/triggers/roleAdded.ts index d7c97171..f3a4d7cb 100644 --- a/backend/src/plugins/Automod/triggers/roleAdded.ts +++ b/backend/src/plugins/Automod/triggers/roleAdded.ts @@ -33,7 +33,7 @@ export const RoleAddedTrigger = automodTrigger()({ }, renderMatchInformation({ matchResult, pluginData, contexts }) { - const role = pluginData.guild.roles.get(matchResult.extra.matchedRoleId); + const role = pluginData.guild.roles.cache.get(matchResult.extra.matchedRoleId); const roleName = role?.name || "Unknown"; const member = contexts[0].member!; const memberName = `**${member.user.username}#${member.user.discriminator}** (\`${member.id}\`)`; diff --git a/backend/src/plugins/Automod/triggers/roleRemoved.ts b/backend/src/plugins/Automod/triggers/roleRemoved.ts index 1613f91d..430ec746 100644 --- a/backend/src/plugins/Automod/triggers/roleRemoved.ts +++ b/backend/src/plugins/Automod/triggers/roleRemoved.ts @@ -33,7 +33,7 @@ export const RoleRemovedTrigger = automodTrigger()({ }, renderMatchInformation({ matchResult, pluginData, contexts }) { - const role = pluginData.guild.roles.get(matchResult.extra.matchedRoleId); + const role = pluginData.guild.roles.cache.get(matchResult.extra.matchedRoleId); const roleName = role?.name || "Unknown"; const member = contexts[0].member!; const memberName = `**${member.user.username}#${member.user.discriminator}** (\`${member.id}\`)`; diff --git a/backend/src/plugins/Automod/types.ts b/backend/src/plugins/Automod/types.ts index cd7ebacf..08b49ee4 100644 --- a/backend/src/plugins/Automod/types.ts +++ b/backend/src/plugins/Automod/types.ts @@ -4,7 +4,7 @@ import { BasePluginType, CooldownManager } from "knub"; import { GuildSavedMessages } from "../../data/GuildSavedMessages"; import { GuildLogs } from "../../data/GuildLogs"; import { SavedMessage } from "../../data/entities/SavedMessage"; -import { Member, User } from "eris"; + import { AvailableTriggers } from "./triggers/availableTriggers"; import { AvailableActions } from "./actions/availableActions"; import { Queue } from "../../Queue"; @@ -16,6 +16,7 @@ import { RegExpRunner } from "../../RegExpRunner"; import { CounterEvents } from "../Counters/types"; import { ModActionsEvents, ModActionType } from "../ModActions/types"; import { MutesEvents } from "../Mutes/types"; +import { GuildMember, User } from "discord.js"; export const Rule = t.type({ enabled: t.boolean, @@ -113,7 +114,7 @@ export interface AutomodContext { }; user?: User; message?: SavedMessage; - member?: Member; + member?: GuildMember; joined?: boolean; rolesChanged?: { added?: string[]; diff --git a/backend/src/plugins/BotControl/BotControlPlugin.ts b/backend/src/plugins/BotControl/BotControlPlugin.ts index e8151be1..6c5cffc3 100644 --- a/backend/src/plugins/BotControl/BotControlPlugin.ts +++ b/backend/src/plugins/BotControl/BotControlPlugin.ts @@ -1,7 +1,7 @@ import { zeppelinGlobalPlugin } from "../ZeppelinPluginBlueprint"; import { BotControlPluginType, ConfigSchema } from "./types"; import { GuildArchives } from "../../data/GuildArchives"; -import { TextChannel } from "eris"; + import { sendSuccessMessage } from "../../pluginUtils"; import { getActiveReload, resetActiveReload } from "./activeReload"; import { ReloadGlobalPluginsCmd } from "./commands/ReloadGlobalPluginsCmd"; @@ -18,6 +18,7 @@ import { ApiPermissionAssignments } from "../../data/ApiPermissionAssignments"; import { ListDashboardUsersCmd } from "./commands/ListDashboardUsersCmd"; import { ListDashboardPermsCmd } from "./commands/ListDashboardPermsCmd"; import { EligibleCmd } from "./commands/EligibleCmd"; +import { TextChannel } from "discord.js"; const defaultOptions = { config: { @@ -47,7 +48,7 @@ export const BotControlPlugin = zeppelinGlobalPlugin()({ EligibleCmd, ], - afterLoad(pluginData) { + async afterLoad(pluginData) { pluginData.state.archives = new GuildArchives(0); pluginData.state.allowedGuilds = new AllowedGuilds(); pluginData.state.configs = new Configs(); @@ -58,9 +59,9 @@ export const BotControlPlugin = zeppelinGlobalPlugin()({ const [guildId, channelId] = activeReload; resetActiveReload(); - const guild = pluginData.client.guilds.get(guildId); + const guild = await pluginData.client.guilds.fetch(guildId); if (guild) { - const channel = guild.channels.get(channelId); + const channel = guild.channels.cache.get(channelId); if (channel instanceof TextChannel) { sendSuccessMessage(pluginData, channel, "Global plugins reloaded!"); } diff --git a/backend/src/plugins/BotControl/commands/ListDashboardUsersCmd.ts b/backend/src/plugins/BotControl/commands/ListDashboardUsersCmd.ts index f4f89838..5d65525b 100644 --- a/backend/src/plugins/BotControl/commands/ListDashboardUsersCmd.ts +++ b/backend/src/plugins/BotControl/commands/ListDashboardUsersCmd.ts @@ -3,7 +3,6 @@ import { isOwnerPreFilter, sendErrorMessage, sendSuccessMessage } from "../../.. import { commandTypeHelpers as ct } from "../../../commandTypes"; import { ApiPermissions } from "@shared/apiPermissions"; import { resolveUser, UnknownUser } from "../../../utils"; -import { User } from "eris"; export const ListDashboardUsersCmd = botControlCmd({ trigger: ["list_dashboard_users"], diff --git a/backend/src/plugins/BotControl/commands/ReloadGlobalPluginsCmd.ts b/backend/src/plugins/BotControl/commands/ReloadGlobalPluginsCmd.ts index 6abc0c5f..1e341d00 100644 --- a/backend/src/plugins/BotControl/commands/ReloadGlobalPluginsCmd.ts +++ b/backend/src/plugins/BotControl/commands/ReloadGlobalPluginsCmd.ts @@ -1,7 +1,6 @@ import { botControlCmd } from "../types"; import { isOwnerPreFilter } from "../../../pluginUtils"; import { getActiveReload, setActiveReload } from "../activeReload"; -import { TextChannel } from "eris"; export const ReloadGlobalPluginsCmd = botControlCmd({ trigger: "bot_reload_global_plugins", diff --git a/backend/src/plugins/Cases/functions/getCaseEmbed.ts b/backend/src/plugins/Cases/functions/getCaseEmbed.ts index ec92e059..a73c5e15 100644 --- a/backend/src/plugins/Cases/functions/getCaseEmbed.ts +++ b/backend/src/plugins/Cases/functions/getCaseEmbed.ts @@ -1,5 +1,5 @@ import { Case } from "../../../data/entities/Case"; -import { AdvancedMessageContent, MessageContent } from "eris"; + import moment from "moment-timezone"; import { CaseTypes } from "../../../data/CaseTypes"; import { GuildPluginData, helpers } from "knub"; @@ -8,13 +8,14 @@ import { resolveCaseId } from "./resolveCaseId"; import { chunkLines, chunkMessageLines, emptyEmbedValue, messageLink } from "../../../utils"; import { getCaseColor } from "./getCaseColor"; import { TimeAndDatePlugin } from "../../TimeAndDate/TimeAndDatePlugin"; +import { MessageOptions } from "discord.js"; export async function getCaseEmbed( pluginData: GuildPluginData, caseOrCaseId: Case | number, requestMemberId?: string, noOriginalCaseLink?: boolean, -): Promise { +): Promise { const theCase = await pluginData.state.cases.with("notes").find(resolveCaseId(caseOrCaseId)); if (!theCase) { throw new Error("Unknown case"); diff --git a/backend/src/plugins/Cases/functions/postToCaseLogChannel.ts b/backend/src/plugins/Cases/functions/postToCaseLogChannel.ts index 604293e1..6d80698f 100644 --- a/backend/src/plugins/Cases/functions/postToCaseLogChannel.ts +++ b/backend/src/plugins/Cases/functions/postToCaseLogChannel.ts @@ -1,27 +1,30 @@ import { GuildPluginData } from "knub"; import { CasesPluginType } from "../types"; -import { Message, MessageContent, MessageFile, TextChannel } from "eris"; + import { isDiscordRESTError } from "../../../utils"; import { LogType } from "../../../data/LogType"; import { Case } from "../../../data/entities/Case"; import { getCaseEmbed } from "./getCaseEmbed"; import { resolveCaseId } from "./resolveCaseId"; -import { logger } from "../../../logger"; +import { FileOptions, Message, MessageOptions, TextChannel } from "discord.js"; export async function postToCaseLogChannel( pluginData: GuildPluginData, - content: MessageContent, - file?: MessageFile, + content: MessageOptions, + file?: FileOptions[], ): Promise { const caseLogChannelId = pluginData.config.get().case_log_channel; if (!caseLogChannelId) return null; - const caseLogChannel = pluginData.guild.channels.get(caseLogChannelId); + const caseLogChannel = pluginData.guild.channels.cache.get(caseLogChannelId); if (!caseLogChannel || !(caseLogChannel instanceof TextChannel)) return null; let result; try { - result = await caseLogChannel.createMessage(content, file); + if (file != undefined) { + content.files = file; + } + result = await caseLogChannel.send({ ...content, split: false }); } catch (e) { if (isDiscordRESTError(e) && (e.code === 50013 || e.code === 50001)) { pluginData.state.logs.log(LogType.BOT_ALERT, { @@ -50,7 +53,8 @@ export async function postCaseToCaseLogChannel( const [channelId, messageId] = theCase.log_message_id.split("-"); try { - await pluginData.client.editMessage(channelId, messageId, caseEmbed); + const channel = pluginData.guild.channels.resolve(channelId) as TextChannel; + await channel.messages.edit(messageId, caseEmbed); return null; } catch {} // tslint:disable-line:no-empty } diff --git a/backend/src/plugins/Censor/util/applyFiltersToMsg.ts b/backend/src/plugins/Censor/util/applyFiltersToMsg.ts index 4e9f3691..6e83acc6 100644 --- a/backend/src/plugins/Censor/util/applyFiltersToMsg.ts +++ b/backend/src/plugins/Censor/util/applyFiltersToMsg.ts @@ -1,7 +1,7 @@ import { GuildPluginData } from "knub"; import { CensorPluginType } from "../types"; import { SavedMessage } from "../../../data/entities/SavedMessage"; -import { Embed, Invite } from "eris"; + import { ZalgoRegex } from "../../../data/Zalgo"; import { getInviteCodesInString, getUrlsInString, resolveMember, resolveInvite, isGuildInvite } from "../../../utils"; import cloneDeep from "lodash.clonedeep"; diff --git a/backend/src/plugins/Censor/util/censorMessage.ts b/backend/src/plugins/Censor/util/censorMessage.ts index 91302acf..df0011ca 100644 --- a/backend/src/plugins/Censor/util/censorMessage.ts +++ b/backend/src/plugins/Censor/util/censorMessage.ts @@ -19,7 +19,7 @@ export async function censorMessage( } const user = await resolveUser(pluginData.client, savedMessage.user_id); - const channel = pluginData.guild.channels.get(savedMessage.channel_id); + const channel = pluginData.guild.channels.cache.get(savedMessage.channel_id); pluginData.state.serverLogs.log(LogType.CENSOR, { user: stripObjectToScalars(user), diff --git a/backend/src/plugins/ChannelArchiver/rehostAttachment.ts b/backend/src/plugins/ChannelArchiver/rehostAttachment.ts index c0bbd289..09aa338f 100644 --- a/backend/src/plugins/ChannelArchiver/rehostAttachment.ts +++ b/backend/src/plugins/ChannelArchiver/rehostAttachment.ts @@ -1,4 +1,3 @@ -import { Attachment, TextChannel } from "eris"; import { downloadFile } from "../../utils"; import fs from "fs"; const fsp = fs.promises; diff --git a/backend/src/plugins/CompanionChannels/functions/getCompanionChannelOptsForVoiceChannelId.ts b/backend/src/plugins/CompanionChannels/functions/getCompanionChannelOptsForVoiceChannelId.ts index 1090acc4..d0392467 100644 --- a/backend/src/plugins/CompanionChannels/functions/getCompanionChannelOptsForVoiceChannelId.ts +++ b/backend/src/plugins/CompanionChannels/functions/getCompanionChannelOptsForVoiceChannelId.ts @@ -1,4 +1,3 @@ -import { VoiceChannel } from "eris"; import { GuildPluginData } from "knub"; import { CompanionChannelsPluginType, TCompanionChannelOpts } from "../types"; diff --git a/backend/src/plugins/CompanionChannels/functions/handleCompanionPermissions.ts b/backend/src/plugins/CompanionChannels/functions/handleCompanionPermissions.ts index 1dbdfe27..0806da09 100644 --- a/backend/src/plugins/CompanionChannels/functions/handleCompanionPermissions.ts +++ b/backend/src/plugins/CompanionChannels/functions/handleCompanionPermissions.ts @@ -1,7 +1,7 @@ import { CompanionChannelsPluginType, TCompanionChannelOpts } from "../types"; import { getCompanionChannelOptsForVoiceChannelId } from "./getCompanionChannelOptsForVoiceChannelId"; import { GuildPluginData } from "knub"; -import { TextChannel, VoiceChannel } from "eris"; + import { isDiscordRESTError, MINUTES } from "../../../utils"; import { LogsPlugin } from "../../Logs/LogsPlugin"; import { LogType } from "../../../data/LogType"; @@ -63,13 +63,13 @@ export async function handleCompanionPermissions( try { for (const channelId of permsToDelete) { - const channel = pluginData.guild.channels.get(channelId); + const channel = pluginData.guild.channels.cache.get(channelId); if (!channel || !(channel instanceof TextChannel)) continue; await channel.deletePermission(userId, `Companion Channel for ${oldChannel!.id} | User Left`); } for (const [channelId, permissions] of permsToSet) { - const channel = pluginData.guild.channels.get(channelId); + const channel = pluginData.guild.channels.cache.get(channelId); if (!channel || !(channel instanceof TextChannel)) continue; await channel.editPermission( userId, diff --git a/backend/src/plugins/Counters/commands/AddCounterCmd.ts b/backend/src/plugins/Counters/commands/AddCounterCmd.ts index 0119c0cb..f67fd6a6 100644 --- a/backend/src/plugins/Counters/commands/AddCounterCmd.ts +++ b/backend/src/plugins/Counters/commands/AddCounterCmd.ts @@ -3,7 +3,7 @@ import { CountersPluginType } from "../types"; import { commandTypeHelpers as ct } from "../../../commandTypes"; import { sendErrorMessage } from "../../../pluginUtils"; import { resolveChannel, waitForReply } from "knub/dist/helpers"; -import { TextChannel, User } from "eris"; + import { resolveUser, UnknownUser } from "../../../utils"; import { changeCounterValue } from "../functions/changeCounterValue"; diff --git a/backend/src/plugins/Counters/commands/ResetAllCounterValuesCmd.ts b/backend/src/plugins/Counters/commands/ResetAllCounterValuesCmd.ts index 50fa7483..2bf6e714 100644 --- a/backend/src/plugins/Counters/commands/ResetAllCounterValuesCmd.ts +++ b/backend/src/plugins/Counters/commands/ResetAllCounterValuesCmd.ts @@ -3,7 +3,7 @@ import { CountersPluginType } from "../types"; import { commandTypeHelpers as ct } from "../../../commandTypes"; import { sendErrorMessage, sendSuccessMessage } from "../../../pluginUtils"; import { resolveChannel, waitForReply } from "knub/dist/helpers"; -import { TextChannel, User } from "eris"; + import { confirm, MINUTES, noop, resolveUser, trimMultilineString, UnknownUser } from "../../../utils"; import { changeCounterValue } from "../functions/changeCounterValue"; import { setCounterValue } from "../functions/setCounterValue"; diff --git a/backend/src/plugins/Counters/commands/ResetCounterCmd.ts b/backend/src/plugins/Counters/commands/ResetCounterCmd.ts index 166aea66..ed858a0f 100644 --- a/backend/src/plugins/Counters/commands/ResetCounterCmd.ts +++ b/backend/src/plugins/Counters/commands/ResetCounterCmd.ts @@ -3,7 +3,7 @@ import { CountersPluginType } from "../types"; import { commandTypeHelpers as ct } from "../../../commandTypes"; import { sendErrorMessage } from "../../../pluginUtils"; import { resolveChannel, waitForReply } from "knub/dist/helpers"; -import { TextChannel } from "eris"; + import { resolveUser, UnknownUser } from "../../../utils"; import { setCounterValue } from "../functions/setCounterValue"; diff --git a/backend/src/plugins/Counters/commands/SetCounterCmd.ts b/backend/src/plugins/Counters/commands/SetCounterCmd.ts index 9c84e63f..b90bdfb8 100644 --- a/backend/src/plugins/Counters/commands/SetCounterCmd.ts +++ b/backend/src/plugins/Counters/commands/SetCounterCmd.ts @@ -3,7 +3,7 @@ import { CountersPluginType } from "../types"; import { commandTypeHelpers as ct } from "../../../commandTypes"; import { sendErrorMessage } from "../../../pluginUtils"; import { resolveChannel, waitForReply } from "knub/dist/helpers"; -import { TextChannel, User } from "eris"; + import { resolveUser, UnknownUser } from "../../../utils"; import { changeCounterValue } from "../functions/changeCounterValue"; import { setCounterValue } from "../functions/setCounterValue"; diff --git a/backend/src/plugins/Counters/commands/ViewCounterCmd.ts b/backend/src/plugins/Counters/commands/ViewCounterCmd.ts index 2a19c9f7..6fed0607 100644 --- a/backend/src/plugins/Counters/commands/ViewCounterCmd.ts +++ b/backend/src/plugins/Counters/commands/ViewCounterCmd.ts @@ -3,7 +3,7 @@ import { CountersPluginType } from "../types"; import { commandTypeHelpers as ct } from "../../../commandTypes"; import { sendErrorMessage } from "../../../pluginUtils"; import { resolveChannel, waitForReply } from "knub/dist/helpers"; -import { TextChannel, User } from "eris"; + import { resolveUser, UnknownUser } from "../../../utils"; export const ViewCounterCmd = typedGuildCommand()({ diff --git a/backend/src/plugins/CustomEvents/actions/addRoleAction.ts b/backend/src/plugins/CustomEvents/actions/addRoleAction.ts index 77e28878..1780ba60 100644 --- a/backend/src/plugins/CustomEvents/actions/addRoleAction.ts +++ b/backend/src/plugins/CustomEvents/actions/addRoleAction.ts @@ -5,7 +5,6 @@ import { renderTemplate } from "../../../templateFormatter"; import { resolveMember } from "../../../utils"; import { ActionError } from "../ActionError"; import { canActOn } from "../../../pluginUtils"; -import { Message } from "eris"; export const AddRoleAction = t.type({ type: t.literal("add_role"), diff --git a/backend/src/plugins/CustomEvents/actions/makeRoleMentionableAction.ts b/backend/src/plugins/CustomEvents/actions/makeRoleMentionableAction.ts index 90ddd45b..d08abfcb 100644 --- a/backend/src/plugins/CustomEvents/actions/makeRoleMentionableAction.ts +++ b/backend/src/plugins/CustomEvents/actions/makeRoleMentionableAction.ts @@ -18,7 +18,7 @@ export async function makeRoleMentionableAction( event: TCustomEvent, eventData: any, ) { - const role = pluginData.guild.roles.get(action.role); + const role = pluginData.guild.roles.cache.get(action.role); if (!role) { throw new ActionError(`Unknown role: ${role}`); } diff --git a/backend/src/plugins/CustomEvents/actions/makeRoleUnmentionableAction.ts b/backend/src/plugins/CustomEvents/actions/makeRoleUnmentionableAction.ts index 0ceef330..ea75ff12 100644 --- a/backend/src/plugins/CustomEvents/actions/makeRoleUnmentionableAction.ts +++ b/backend/src/plugins/CustomEvents/actions/makeRoleUnmentionableAction.ts @@ -16,7 +16,7 @@ export async function makeRoleUnmentionableAction( event: TCustomEvent, eventData: any, ) { - const role = pluginData.guild.roles.get(action.role); + const role = pluginData.guild.roles.cache.get(action.role); if (!role) { throw new ActionError(`Unknown role: ${role}`); } diff --git a/backend/src/plugins/CustomEvents/actions/messageAction.ts b/backend/src/plugins/CustomEvents/actions/messageAction.ts index f137d6b0..bd4e6300 100644 --- a/backend/src/plugins/CustomEvents/actions/messageAction.ts +++ b/backend/src/plugins/CustomEvents/actions/messageAction.ts @@ -3,7 +3,6 @@ import { CustomEventsPluginType } from "../types"; import * as t from "io-ts"; import { renderTemplate } from "../../../templateFormatter"; import { ActionError } from "../ActionError"; -import { TextChannel } from "eris"; export const MessageAction = t.type({ type: t.literal("message"), @@ -18,7 +17,7 @@ export async function messageAction( values: any, ) { const targetChannelId = await renderTemplate(action.channel, values, false); - const targetChannel = pluginData.guild.channels.get(targetChannelId); + const targetChannel = pluginData.guild.channels.cache.get(targetChannelId); if (!targetChannel) throw new ActionError("Unknown target channel"); if (!(targetChannel instanceof TextChannel)) throw new ActionError("Target channel is not a text channel"); diff --git a/backend/src/plugins/CustomEvents/actions/moveToVoiceChannelAction.ts b/backend/src/plugins/CustomEvents/actions/moveToVoiceChannelAction.ts index d138c61d..33636c5c 100644 --- a/backend/src/plugins/CustomEvents/actions/moveToVoiceChannelAction.ts +++ b/backend/src/plugins/CustomEvents/actions/moveToVoiceChannelAction.ts @@ -5,7 +5,6 @@ import { renderTemplate } from "../../../templateFormatter"; import { resolveMember } from "../../../utils"; import { ActionError } from "../ActionError"; import { canActOn } from "../../../pluginUtils"; -import { Message, VoiceChannel } from "eris"; export const MoveToVoiceChannelAction = t.type({ type: t.literal("move_to_vc"), @@ -30,7 +29,7 @@ export async function moveToVoiceChannelAction( } const targetChannelId = await renderTemplate(action.channel, values, false); - const targetChannel = pluginData.guild.channels.get(targetChannelId); + const targetChannel = pluginData.guild.channels.cache.get(targetChannelId); if (!targetChannel) throw new ActionError("Unknown target channel"); if (!(targetChannel instanceof VoiceChannel)) throw new ActionError("Target channel is not a voice channel"); diff --git a/backend/src/plugins/CustomEvents/actions/setChannelPermissionOverrides.ts b/backend/src/plugins/CustomEvents/actions/setChannelPermissionOverrides.ts index 595a56e2..48114ec0 100644 --- a/backend/src/plugins/CustomEvents/actions/setChannelPermissionOverrides.ts +++ b/backend/src/plugins/CustomEvents/actions/setChannelPermissionOverrides.ts @@ -24,7 +24,7 @@ export async function setChannelPermissionOverridesAction( event: TCustomEvent, eventData: any, ) { - const channel = pluginData.guild.channels.get(action.channel); + const channel = pluginData.guild.channels.cache.get(action.channel); if (!channel) { throw new ActionError(`Unknown channel: ${action.channel}`); } diff --git a/backend/src/plugins/CustomEvents/functions/runEvent.ts b/backend/src/plugins/CustomEvents/functions/runEvent.ts index 3b304ff9..e6e909da 100644 --- a/backend/src/plugins/CustomEvents/functions/runEvent.ts +++ b/backend/src/plugins/CustomEvents/functions/runEvent.ts @@ -2,7 +2,7 @@ import { GuildPluginData } from "knub"; import { CustomEventsPluginType, TCustomEvent } from "../types"; import { sendErrorMessage } from "../../../pluginUtils"; import { ActionError } from "../ActionError"; -import { Message } from "eris"; + import { addRoleAction } from "../actions/addRoleAction"; import { createCaseAction } from "../actions/createCaseAction"; import { moveToVoiceChannelAction } from "../actions/moveToVoiceChannelAction"; diff --git a/backend/src/plugins/GuildAccessMonitor/GuildAccessMonitorPlugin.ts b/backend/src/plugins/GuildAccessMonitor/GuildAccessMonitorPlugin.ts index 62b77c29..5689cd73 100644 --- a/backend/src/plugins/GuildAccessMonitor/GuildAccessMonitorPlugin.ts +++ b/backend/src/plugins/GuildAccessMonitor/GuildAccessMonitorPlugin.ts @@ -2,7 +2,6 @@ import { zeppelinGlobalPlugin } from "../ZeppelinPluginBlueprint"; import { BasePluginType, typedGlobalEventListener, GlobalPluginData } from "knub"; import * as t from "io-ts"; import { AllowedGuilds } from "../../data/AllowedGuilds"; -import { Guild } from "eris"; interface GuildAccessMonitorPluginType extends BasePluginType { config: {}; diff --git a/backend/src/plugins/LocateUser/events/SendAlertsEvts.ts b/backend/src/plugins/LocateUser/events/SendAlertsEvts.ts index e426e704..353a2c26 100644 --- a/backend/src/plugins/LocateUser/events/SendAlertsEvts.ts +++ b/backend/src/plugins/LocateUser/events/SendAlertsEvts.ts @@ -1,6 +1,5 @@ import { locateUserEvt } from "../types"; import { sendAlerts } from "../utils/sendAlerts"; -import { TextableChannel, VoiceChannel } from "eris"; export const ChannelJoinAlertsEvt = locateUserEvt({ event: "voiceChannelJoin", diff --git a/backend/src/plugins/LocateUser/utils/createOrReuseInvite.ts b/backend/src/plugins/LocateUser/utils/createOrReuseInvite.ts index 9f453e21..8ba7f2e1 100644 --- a/backend/src/plugins/LocateUser/utils/createOrReuseInvite.ts +++ b/backend/src/plugins/LocateUser/utils/createOrReuseInvite.ts @@ -1,5 +1,3 @@ -import { VoiceChannel } from "eris"; - export async function createOrReuseInvite(vc: VoiceChannel) { const existingInvites = await vc.getInvites(); diff --git a/backend/src/plugins/LocateUser/utils/moveMember.ts b/backend/src/plugins/LocateUser/utils/moveMember.ts index e3c75b16..6966d10f 100644 --- a/backend/src/plugins/LocateUser/utils/moveMember.ts +++ b/backend/src/plugins/LocateUser/utils/moveMember.ts @@ -1,4 +1,3 @@ -import { Member, TextableChannel } from "eris"; import { GuildPluginData } from "knub"; import { LocateUserPluginType } from "../types"; import { sendErrorMessage } from "../../../pluginUtils"; diff --git a/backend/src/plugins/LocateUser/utils/sendAlerts.ts b/backend/src/plugins/LocateUser/utils/sendAlerts.ts index df49c3d1..bb47168a 100644 --- a/backend/src/plugins/LocateUser/utils/sendAlerts.ts +++ b/backend/src/plugins/LocateUser/utils/sendAlerts.ts @@ -2,7 +2,7 @@ import { GuildPluginData } from "knub"; import { LocateUserPluginType } from "../types"; import { resolveMember } from "../../../utils"; import { sendWhere } from "./sendWhere"; -import { TextableChannel } from "eris"; + import { moveMember } from "./moveMember"; export async function sendAlerts(pluginData: GuildPluginData, userId: string) { diff --git a/backend/src/plugins/LocateUser/utils/sendWhere.ts b/backend/src/plugins/LocateUser/utils/sendWhere.ts index d6667748..8b9678a7 100644 --- a/backend/src/plugins/LocateUser/utils/sendWhere.ts +++ b/backend/src/plugins/LocateUser/utils/sendWhere.ts @@ -1,4 +1,3 @@ -import { Invite, Member, TextableChannel, VoiceChannel } from "eris"; import { getInviteLink } from "knub/dist/helpers"; import { createOrReuseInvite } from "./createOrReuseInvite"; import { GuildPluginData } from "knub"; @@ -12,7 +11,7 @@ export async function sendWhere( prepend: string, ) { const voice = member.voiceState.channelID - ? (pluginData.guild.channels.get(member.voiceState.channelID) as VoiceChannel) + ? (pluginData.guild.channels.cache.get(member.voiceState.channelID) as VoiceChannel) : null; if (voice == null) { diff --git a/backend/src/plugins/Logs/LogsPlugin.ts b/backend/src/plugins/Logs/LogsPlugin.ts index 216be6d6..2d2be7b2 100644 --- a/backend/src/plugins/Logs/LogsPlugin.ts +++ b/backend/src/plugins/Logs/LogsPlugin.ts @@ -14,7 +14,6 @@ import { LogsGuildMemberRemoveEvt } from "./events/LogsGuildMemberRemoveEvt"; import { LogsGuildMemberUpdateEvt } from "./events/LogsUserUpdateEvts"; import { LogsChannelCreateEvt, LogsChannelDeleteEvt } from "./events/LogsChannelModifyEvts"; import { LogsRoleCreateEvt, LogsRoleDeleteEvt } from "./events/LogsRoleModifyEvts"; -import { LogsVoiceJoinEvt, LogsVoiceLeaveEvt, LogsVoiceSwitchEvt } from "./events/LogsVoiceChannelEvts"; import { log } from "./util/log"; import { LogType } from "../../data/LogType"; import { getLogMessage } from "./util/getLogMessage"; @@ -23,6 +22,7 @@ import { disableCodeBlocks } from "../../utils"; import { logger } from "../../logger"; import { CasesPlugin } from "../Cases/CasesPlugin"; import { TimeAndDatePlugin } from "../TimeAndDate/TimeAndDatePlugin"; +import { LogsVoiceStateUpdateEvt } from "./events/LogsVoiceChannelEvts"; const defaultOptions: PluginOptions = { config: { @@ -66,9 +66,7 @@ export const LogsPlugin = zeppelinGuildPlugin()({ LogsChannelDeleteEvt, LogsRoleCreateEvt, LogsRoleDeleteEvt, - LogsVoiceJoinEvt, - LogsVoiceLeaveEvt, - LogsVoiceSwitchEvt, + LogsVoiceStateUpdateEvt, ], public: { diff --git a/backend/src/plugins/Logs/events/LogsGuildBanEvts.ts b/backend/src/plugins/Logs/events/LogsGuildBanEvts.ts index 27bbbe87..ef61f5e3 100644 --- a/backend/src/plugins/Logs/events/LogsGuildBanEvts.ts +++ b/backend/src/plugins/Logs/events/LogsGuildBanEvts.ts @@ -1,7 +1,7 @@ import { logsEvt } from "../types"; import { stripObjectToScalars, UnknownUser } from "../../../utils"; import { LogType } from "../../../data/LogType"; -import { Constants as ErisConstants } from "eris"; + import { safeFindRelevantAuditLogEntry } from "../../../utils/safeFindRelevantAuditLogEntry"; export const LogsGuildBanAddEvt = logsEvt({ diff --git a/backend/src/plugins/Logs/events/LogsRoleModifyEvts.ts b/backend/src/plugins/Logs/events/LogsRoleModifyEvts.ts index a24d7929..48a85448 100644 --- a/backend/src/plugins/Logs/events/LogsRoleModifyEvts.ts +++ b/backend/src/plugins/Logs/events/LogsRoleModifyEvts.ts @@ -3,7 +3,7 @@ import { stripObjectToScalars } from "../../../utils"; import { LogType } from "../../../data/LogType"; export const LogsRoleCreateEvt = logsEvt({ - event: "guildRoleCreate", + event: "roleCreate", async listener(meta) { meta.pluginData.state.guildLogs.log(LogType.ROLE_CREATE, { @@ -13,7 +13,7 @@ export const LogsRoleCreateEvt = logsEvt({ }); export const LogsRoleDeleteEvt = logsEvt({ - event: "guildRoleDelete", + event: "roleDelete", async listener(meta) { meta.pluginData.state.guildLogs.log(LogType.ROLE_DELETE, { diff --git a/backend/src/plugins/Logs/events/LogsUserUpdateEvts.ts b/backend/src/plugins/Logs/events/LogsUserUpdateEvts.ts index 46228646..396cbbc8 100644 --- a/backend/src/plugins/Logs/events/LogsUserUpdateEvts.ts +++ b/backend/src/plugins/Logs/events/LogsUserUpdateEvts.ts @@ -1,6 +1,6 @@ import { logsEvt } from "../types"; import { stripObjectToScalars, UnknownUser } from "../../../utils"; -import { Constants as ErisConstants } from "eris"; + import { LogType } from "../../../data/LogType"; import isEqual from "lodash.isequal"; import diff from "lodash.difference"; @@ -61,11 +61,11 @@ export const LogsGuildMemberUpdateEvt = logsEvt({ { member: logMember, addedRoles: addedRoles - .map(roleId => pluginData.guild.roles.get(roleId) || { id: roleId, name: `Unknown (${roleId})` }) + .map(roleId => pluginData.guild.roles.cache.get(roleId) || { id: roleId, name: `Unknown (${roleId})` }) .map(r => r.name) .join(", "), removedRoles: removedRoles - .map(roleId => pluginData.guild.roles.get(roleId) || { id: roleId, name: `Unknown (${roleId})` }) + .map(roleId => pluginData.guild.roles.cache.get(roleId) || { id: roleId, name: `Unknown (${roleId})` }) .map(r => r.name) .join(", "), mod: stripObjectToScalars(mod), @@ -79,7 +79,7 @@ export const LogsGuildMemberUpdateEvt = logsEvt({ { member: logMember, roles: addedRoles - .map(roleId => pluginData.guild.roles.get(roleId) || { id: roleId, name: `Unknown (${roleId})` }) + .map(roleId => pluginData.guild.roles.cache.get(roleId) || { id: roleId, name: `Unknown (${roleId})` }) .map(r => r.name) .join(", "), mod: stripObjectToScalars(mod), @@ -93,7 +93,7 @@ export const LogsGuildMemberUpdateEvt = logsEvt({ { member: logMember, roles: removedRoles - .map(roleId => pluginData.guild.roles.get(roleId) || { id: roleId, name: `Unknown (${roleId})` }) + .map(roleId => pluginData.guild.roles.cache.get(roleId) || { id: roleId, name: `Unknown (${roleId})` }) .map(r => r.name) .join(", "), mod: stripObjectToScalars(mod), diff --git a/backend/src/plugins/Logs/events/LogsVoiceChannelEvts.ts b/backend/src/plugins/Logs/events/LogsVoiceChannelEvts.ts index a1899d5c..55d115ec 100644 --- a/backend/src/plugins/Logs/events/LogsVoiceChannelEvts.ts +++ b/backend/src/plugins/Logs/events/LogsVoiceChannelEvts.ts @@ -1,7 +1,7 @@ import { logsEvt } from "../types"; import { stripObjectToScalars } from "../../../utils"; import { LogType } from "../../../data/LogType"; - +/** Merge into single event export const LogsVoiceJoinEvt = logsEvt({ event: "voiceChannelJoin", @@ -35,3 +35,12 @@ export const LogsVoiceSwitchEvt = logsEvt({ }); }, }); +**/ + +export const LogsVoiceStateUpdateEvt = logsEvt({ + event: "voiceStateUpdate", + + async listener(meta) { + console.error(`Fixme @LogsVoiceChannelEvts.ts`); + }, +}); diff --git a/backend/src/plugins/Logs/util/getLogMessage.ts b/backend/src/plugins/Logs/util/getLogMessage.ts index d107b7ef..89542467 100644 --- a/backend/src/plugins/Logs/util/getLogMessage.ts +++ b/backend/src/plugins/Logs/util/getLogMessage.ts @@ -14,7 +14,6 @@ import { renderTemplate, TemplateParseError } from "../../../templateFormatter"; import { logger } from "../../../logger"; import moment from "moment-timezone"; import { TimeAndDatePlugin } from "../../TimeAndDate/TimeAndDatePlugin"; -import { MessageContent } from "eris"; export async function getLogMessage( pluginData: GuildPluginData, diff --git a/backend/src/plugins/Logs/util/log.ts b/backend/src/plugins/Logs/util/log.ts index 6072284e..8e4840aa 100644 --- a/backend/src/plugins/Logs/util/log.ts +++ b/backend/src/plugins/Logs/util/log.ts @@ -1,7 +1,7 @@ import { GuildPluginData } from "knub"; import { LogsPluginType, TLogChannelMap } from "../types"; import { LogType } from "../../../data/LogType"; -import { TextChannel } from "eris"; + import { createChunkedMessage, get, noop } from "../../../utils"; import { getLogMessage } from "./getLogMessage"; import { allowTimeout } from "../../../RegExpRunner"; @@ -19,7 +19,7 @@ export async function log(pluginData: GuildPluginData, type: Log const typeStr = LogType[type]; logChannelLoop: for (const [channelId, opts] of Object.entries(logChannels)) { - const channel = pluginData.guild.channels.get(channelId); + const channel = pluginData.guild.channels.cache.get(channelId); if (!channel || !(channel instanceof TextChannel)) continue; if ((opts.include && opts.include.includes(typeStr)) || (opts.exclude && !opts.exclude.includes(typeStr))) { @@ -45,7 +45,7 @@ export async function log(pluginData: GuildPluginData, type: Log if (opts.excluded_roles) { for (const value of Object.values(data || {})) { if (value instanceof SavedMessage) { - const member = pluginData.guild.members.get(value.user_id); + const member = pluginData.guild.members.cache.get(value.user_id); for (const role of member?.roles || []) { if (opts.excluded_roles.includes(role)) { continue logChannelLoop; diff --git a/backend/src/plugins/Logs/util/onMessageDelete.ts b/backend/src/plugins/Logs/util/onMessageDelete.ts index 3319f4f2..eae416fd 100644 --- a/backend/src/plugins/Logs/util/onMessageDelete.ts +++ b/backend/src/plugins/Logs/util/onMessageDelete.ts @@ -1,5 +1,5 @@ import { SavedMessage } from "../../../data/entities/SavedMessage"; -import { Attachment } from "eris"; + import { useMediaUrls, stripObjectToScalars, resolveUser } from "../../../utils"; import { LogType } from "../../../data/LogType"; import moment from "moment-timezone"; @@ -9,7 +9,7 @@ import { TimeAndDatePlugin } from "../../TimeAndDate/TimeAndDatePlugin"; export async function onMessageDelete(pluginData: GuildPluginData, savedMessage: SavedMessage) { const user = await resolveUser(pluginData.client, savedMessage.user_id); - const channel = pluginData.guild.channels.get(savedMessage.channel_id); + const channel = pluginData.guild.channels.cache.get(savedMessage.channel_id); if (user) { // Replace attachment URLs with media URLs diff --git a/backend/src/plugins/Logs/util/onMessageDeleteBulk.ts b/backend/src/plugins/Logs/util/onMessageDeleteBulk.ts index f7b7e571..d0fac9c5 100644 --- a/backend/src/plugins/Logs/util/onMessageDeleteBulk.ts +++ b/backend/src/plugins/Logs/util/onMessageDeleteBulk.ts @@ -5,7 +5,7 @@ import { LogType } from "../../../data/LogType"; import { getBaseUrl } from "../../../pluginUtils"; export async function onMessageDeleteBulk(pluginData: GuildPluginData, savedMessages: SavedMessage[]) { - const channel = pluginData.guild.channels.get(savedMessages[0].channel_id); + const channel = pluginData.guild.channels.cache.get(savedMessages[0].channel_id); const archiveId = await pluginData.state.archives.createFromSavedMessages(savedMessages, pluginData.guild); const archiveUrl = pluginData.state.archives.getUrl(getBaseUrl(pluginData), archiveId); const authorIds = Array.from(new Set(savedMessages.map(item => `\`${item.user_id}\``))).join(", "); diff --git a/backend/src/plugins/Logs/util/onMessageUpdate.ts b/backend/src/plugins/Logs/util/onMessageUpdate.ts index 91eb7abb..87f204a4 100644 --- a/backend/src/plugins/Logs/util/onMessageUpdate.ts +++ b/backend/src/plugins/Logs/util/onMessageUpdate.ts @@ -1,7 +1,7 @@ import { GuildPluginData } from "knub"; import { LogsPluginType } from "../types"; import { SavedMessage } from "../../../data/entities/SavedMessage"; -import { Embed } from "eris"; + import { LogType } from "../../../data/LogType"; import { stripObjectToScalars, resolveUser } from "../../../utils"; import cloneDeep from "lodash.clonedeep"; @@ -47,7 +47,7 @@ export async function onMessageUpdate( } const user = await resolveUser(pluginData.client, savedMessage.user_id); - const channel = pluginData.guild.channels.get(savedMessage.channel_id); + const channel = pluginData.guild.channels.cache.get(savedMessage.channel_id); pluginData.state.guildLogs.log(LogType.MESSAGE_EDIT, { user: stripObjectToScalars(user), diff --git a/backend/src/plugins/MessageSaver/events/SaveMessagesEvts.ts b/backend/src/plugins/MessageSaver/events/SaveMessagesEvts.ts index 00d83fcd..51e34ff1 100644 --- a/backend/src/plugins/MessageSaver/events/SaveMessagesEvts.ts +++ b/backend/src/plugins/MessageSaver/events/SaveMessagesEvts.ts @@ -1,8 +1,7 @@ import { messageSaverEvt } from "../types"; -import { Message } from "eris"; export const MessageCreateEvt = messageSaverEvt({ - event: "messageCreate", + event: "message", allowBots: true, allowSelf: true, diff --git a/backend/src/plugins/MessageSaver/saveMessagesToDB.ts b/backend/src/plugins/MessageSaver/saveMessagesToDB.ts index 13217074..8e1635b9 100644 --- a/backend/src/plugins/MessageSaver/saveMessagesToDB.ts +++ b/backend/src/plugins/MessageSaver/saveMessagesToDB.ts @@ -1,6 +1,5 @@ import { MessageSaverPluginType } from "./types"; import { GuildPluginData } from "knub"; -import { Message, TextChannel } from "eris"; export async function saveMessagesToDB( pluginData: GuildPluginData, diff --git a/backend/src/plugins/ModActions/ModActionsPlugin.ts b/backend/src/plugins/ModActions/ModActionsPlugin.ts index f78f7c37..499f8176 100644 --- a/backend/src/plugins/ModActions/ModActionsPlugin.ts +++ b/backend/src/plugins/ModActions/ModActionsPlugin.ts @@ -30,7 +30,7 @@ import { GuildCases } from "../../data/GuildCases"; import { GuildLogs } from "../../data/GuildLogs"; import { ForceUnmuteCmd } from "./commands/ForceunmuteCmd"; import { warnMember } from "./functions/warnMember"; -import { Member, Message } from "eris"; + import { kickMember } from "./functions/kickMember"; import { banUserId } from "./functions/banUserId"; import { MassmuteCmd } from "./commands/MassmuteCmd"; diff --git a/backend/src/plugins/ModActions/commands/CasesModCmd.ts b/backend/src/plugins/ModActions/commands/CasesModCmd.ts index f9f4667d..8a4d7d79 100644 --- a/backend/src/plugins/ModActions/commands/CasesModCmd.ts +++ b/backend/src/plugins/ModActions/commands/CasesModCmd.ts @@ -4,7 +4,7 @@ import { sendErrorMessage } from "../../../pluginUtils"; import { trimLines, createChunkedMessage, emptyEmbedValue, sorter, resolveUser } from "../../../utils"; import { CasesPlugin } from "../../Cases/CasesPlugin"; import { asyncMap } from "../../../utils/async"; -import { EmbedOptions, User } from "eris"; + import { getChunkedEmbedFields } from "../../../utils/getChunkedEmbedFields"; import { getDefaultPrefix } from "knub/dist/commands/commandUtils"; import { getGuildPrefix } from "../../../utils/getGuildPrefix"; diff --git a/backend/src/plugins/ModActions/commands/CasesUserCmd.ts b/backend/src/plugins/ModActions/commands/CasesUserCmd.ts index b3da7899..8cfade7a 100644 --- a/backend/src/plugins/ModActions/commands/CasesUserCmd.ts +++ b/backend/src/plugins/ModActions/commands/CasesUserCmd.ts @@ -12,7 +12,7 @@ import { chunkArray, } from "../../../utils"; import { getGuildPrefix } from "../../../utils/getGuildPrefix"; -import { EmbedOptions, User } from "eris"; + import { getChunkedEmbedFields } from "../../../utils/getChunkedEmbedFields"; import { asyncMap } from "../../../utils/async"; import { CaseTypes } from "../../../data/CaseTypes"; diff --git a/backend/src/plugins/ModActions/commands/DeleteCaseCmd.ts b/backend/src/plugins/ModActions/commands/DeleteCaseCmd.ts index 519f3a28..1756b2b7 100644 --- a/backend/src/plugins/ModActions/commands/DeleteCaseCmd.ts +++ b/backend/src/plugins/ModActions/commands/DeleteCaseCmd.ts @@ -3,7 +3,7 @@ import { commandTypeHelpers as ct } from "../../../commandTypes"; import { sendErrorMessage, sendSuccessMessage } from "../../../pluginUtils"; import { helpers } from "knub"; import { CasesPlugin } from "../../Cases/CasesPlugin"; -import { TextChannel } from "eris"; + import { SECONDS, stripObjectToScalars, trimLines } from "../../../utils"; import { LogsPlugin } from "../../Logs/LogsPlugin"; import { LogType } from "../../../data/LogType"; diff --git a/backend/src/plugins/ModActions/commands/MassBanCmd.ts b/backend/src/plugins/ModActions/commands/MassBanCmd.ts index 93fa7f9c..73b93174 100644 --- a/backend/src/plugins/ModActions/commands/MassBanCmd.ts +++ b/backend/src/plugins/ModActions/commands/MassBanCmd.ts @@ -7,7 +7,7 @@ import { readContactMethodsFromArgs } from "../functions/readContactMethodsFromA import { formatReasonWithAttachments } from "../functions/formatReasonWithAttachments"; import { banUserId } from "../functions/banUserId"; import { CaseTypes } from "../../../data/CaseTypes"; -import { TextChannel } from "eris"; + import { waitForReply } from "knub/dist/helpers"; import { ignoreEvent } from "../functions/ignoreEvent"; import { CasesPlugin } from "../../../plugins/Cases/CasesPlugin"; @@ -46,7 +46,7 @@ export const MassbanCmd = modActionsCmd({ // Verify we can act on each of the users specified for (const userId of args.userIds) { - const member = pluginData.guild.members.get(userId); // TODO: Get members on demand? + const member = pluginData.guild.members.cache.get(userId); // TODO: Get members on demand? if (member && !canActOn(pluginData, msg.member, member)) { sendErrorMessage(pluginData, msg.channel, "Cannot massban one or more users: insufficient permissions"); return; diff --git a/backend/src/plugins/ModActions/commands/MassUnbanCmd.ts b/backend/src/plugins/ModActions/commands/MassUnbanCmd.ts index e11289c8..ac0b3f39 100644 --- a/backend/src/plugins/ModActions/commands/MassUnbanCmd.ts +++ b/backend/src/plugins/ModActions/commands/MassUnbanCmd.ts @@ -5,7 +5,7 @@ import { stripObjectToScalars } from "../../../utils"; import { isBanned } from "../functions/isBanned"; import { formatReasonWithAttachments } from "../functions/formatReasonWithAttachments"; import { CaseTypes } from "../../../data/CaseTypes"; -import { TextChannel } from "eris"; + import { waitForReply } from "knub/dist/helpers"; import { ignoreEvent } from "../functions/ignoreEvent"; import { CasesPlugin } from "../../Cases/CasesPlugin"; diff --git a/backend/src/plugins/ModActions/commands/MassmuteCmd.ts b/backend/src/plugins/ModActions/commands/MassmuteCmd.ts index 73e329d0..eeceabd3 100644 --- a/backend/src/plugins/ModActions/commands/MassmuteCmd.ts +++ b/backend/src/plugins/ModActions/commands/MassmuteCmd.ts @@ -3,7 +3,7 @@ import { commandTypeHelpers as ct } from "../../../commandTypes"; import { canActOn, sendErrorMessage, sendSuccessMessage } from "../../../pluginUtils"; import { stripObjectToScalars } from "../../../utils"; import { formatReasonWithAttachments } from "../functions/formatReasonWithAttachments"; -import { TextChannel } from "eris"; + import { waitForReply } from "knub/dist/helpers"; import { LogType } from "../../../data/LogType"; import { logger } from "../../../logger"; @@ -43,7 +43,7 @@ export const MassmuteCmd = modActionsCmd({ // Verify we can act upon all users for (const userId of args.userIds) { - const member = pluginData.guild.members.get(userId); + const member = pluginData.guild.members.cache.get(userId); if (member && !canActOn(pluginData, msg.member, member)) { sendErrorMessage(pluginData, msg.channel, "Cannot massmute one or more users: insufficient permissions"); return; diff --git a/backend/src/plugins/ModActions/commands/MuteCmd.ts b/backend/src/plugins/ModActions/commands/MuteCmd.ts index 3aa96c38..c8336aae 100644 --- a/backend/src/plugins/ModActions/commands/MuteCmd.ts +++ b/backend/src/plugins/ModActions/commands/MuteCmd.ts @@ -11,7 +11,7 @@ import { isBanned } from "../functions/isBanned"; import { waitForReaction } from "knub/dist/helpers"; import { readContactMethodsFromArgs } from "../functions/readContactMethodsFromArgs"; import { warnMember } from "../functions/warnMember"; -import { TextChannel } from "eris"; + import { actualMuteUserCmd } from "../functions/actualMuteUserCmd"; const opts = { diff --git a/backend/src/plugins/ModActions/commands/WarnCmd.ts b/backend/src/plugins/ModActions/commands/WarnCmd.ts index 7fc92b49..22e4e660 100644 --- a/backend/src/plugins/ModActions/commands/WarnCmd.ts +++ b/backend/src/plugins/ModActions/commands/WarnCmd.ts @@ -11,7 +11,6 @@ import { isBanned } from "../functions/isBanned"; import { waitForReaction } from "knub/dist/helpers"; import { readContactMethodsFromArgs } from "../functions/readContactMethodsFromArgs"; import { warnMember } from "../functions/warnMember"; -import { TextChannel } from "eris"; export const WarnCmd = modActionsCmd({ trigger: "warn", diff --git a/backend/src/plugins/ModActions/events/CreateBanCaseOnManualBanEvt.ts b/backend/src/plugins/ModActions/events/CreateBanCaseOnManualBanEvt.ts index c3b10cdc..1d206a7c 100644 --- a/backend/src/plugins/ModActions/events/CreateBanCaseOnManualBanEvt.ts +++ b/backend/src/plugins/ModActions/events/CreateBanCaseOnManualBanEvt.ts @@ -1,7 +1,7 @@ import { IgnoredEventType, modActionsEvt } from "../types"; import { isEventIgnored } from "../functions/isEventIgnored"; import { clearIgnoredEvents } from "../functions/clearIgnoredEvents"; -import { Constants as ErisConstants, User } from "eris"; + import { CasesPlugin } from "../../Cases/CasesPlugin"; import { CaseTypes } from "../../../data/CaseTypes"; import { safeFindRelevantAuditLogEntry } from "../../../utils/safeFindRelevantAuditLogEntry"; diff --git a/backend/src/plugins/ModActions/events/CreateKickCaseOnManualKickEvt.ts b/backend/src/plugins/ModActions/events/CreateKickCaseOnManualKickEvt.ts index 65cb7636..07d9f01f 100644 --- a/backend/src/plugins/ModActions/events/CreateKickCaseOnManualKickEvt.ts +++ b/backend/src/plugins/ModActions/events/CreateKickCaseOnManualKickEvt.ts @@ -1,7 +1,7 @@ import { IgnoredEventType, modActionsEvt } from "../types"; import { isEventIgnored } from "../functions/isEventIgnored"; import { clearIgnoredEvents } from "../functions/clearIgnoredEvents"; -import { Constants as ErisConstants, User } from "eris"; + import { CasesPlugin } from "../../Cases/CasesPlugin"; import { CaseTypes } from "../../../data/CaseTypes"; import { logger } from "../../../logger"; diff --git a/backend/src/plugins/ModActions/events/CreateUnbanCaseOnManualUnbanEvt.ts b/backend/src/plugins/ModActions/events/CreateUnbanCaseOnManualUnbanEvt.ts index 52d132f3..00d21ab2 100644 --- a/backend/src/plugins/ModActions/events/CreateUnbanCaseOnManualUnbanEvt.ts +++ b/backend/src/plugins/ModActions/events/CreateUnbanCaseOnManualUnbanEvt.ts @@ -1,7 +1,7 @@ import { IgnoredEventType, modActionsEvt } from "../types"; import { isEventIgnored } from "../functions/isEventIgnored"; import { clearIgnoredEvents } from "../functions/clearIgnoredEvents"; -import { Constants as ErisConstants, User } from "eris"; + import { CasesPlugin } from "../../Cases/CasesPlugin"; import { CaseTypes } from "../../../data/CaseTypes"; import { safeFindRelevantAuditLogEntry } from "../../../utils/safeFindRelevantAuditLogEntry"; diff --git a/backend/src/plugins/ModActions/events/PostAlertOnMemberJoinEvt.ts b/backend/src/plugins/ModActions/events/PostAlertOnMemberJoinEvt.ts index 00b4110e..cef6c2e5 100644 --- a/backend/src/plugins/ModActions/events/PostAlertOnMemberJoinEvt.ts +++ b/backend/src/plugins/ModActions/events/PostAlertOnMemberJoinEvt.ts @@ -1,7 +1,7 @@ import { modActionsEvt } from "../types"; import { LogsPlugin } from "../../Logs/LogsPlugin"; import { LogType } from "../../../data/LogType"; -import { Constants, TextChannel } from "eris"; + import { resolveMember } from "../../../utils"; import { hasDiscordPermissions } from "../../../utils/hasDiscordPermissions"; @@ -22,7 +22,7 @@ export const PostAlertOnMemberJoinEvt = modActionsEvt({ const logs = pluginData.getPlugin(LogsPlugin); if (actions.length) { - const alertChannel = pluginData.guild.channels.get(alertChannelId); + const alertChannel = pluginData.guild.channels.cache.get(alertChannelId); if (!alertChannel) { logs.log(LogType.BOT_ALERT, { body: `Unknown \`alert_channel\` configured for \`mod_actions\`: \`${alertChannelId}\``, @@ -37,8 +37,8 @@ export const PostAlertOnMemberJoinEvt = modActionsEvt({ return; } - const botMember = await resolveMember(pluginData.client, pluginData.guild, pluginData.client.user.id); - const botPerms = alertChannel.permissionsOf(botMember ?? pluginData.client.user.id); + const botMember = await resolveMember(pluginData.client, pluginData.guild, pluginData.client.user!.id); + const botPerms = alertChannel.permissionsOf(botMember ?? pluginData.client.user!.id); if (!hasDiscordPermissions(botPerms, Constants.Permissions.sendMessages)) { logs.log(LogType.BOT_ALERT, { body: `Missing "Send Messages" permissions for the \`alert_channel\` configured in \`mod_actions\`: \`${alertChannelId}\``, diff --git a/backend/src/plugins/ModActions/functions/actualKickMemberCmd.ts b/backend/src/plugins/ModActions/functions/actualKickMemberCmd.ts index bac7fa0a..906cc375 100644 --- a/backend/src/plugins/ModActions/functions/actualKickMemberCmd.ts +++ b/backend/src/plugins/ModActions/functions/actualKickMemberCmd.ts @@ -1,4 +1,3 @@ -import { Member, TextChannel } from "eris"; import { LogType } from "../../../data/LogType"; import { IgnoredEventType, ModActionsPluginType } from "../types"; import { errorMessage, resolveUser, resolveMember } from "../../../utils"; diff --git a/backend/src/plugins/ModActions/functions/actualMuteUserCmd.ts b/backend/src/plugins/ModActions/functions/actualMuteUserCmd.ts index aa5310b7..bbf2ac99 100644 --- a/backend/src/plugins/ModActions/functions/actualMuteUserCmd.ts +++ b/backend/src/plugins/ModActions/functions/actualMuteUserCmd.ts @@ -1,4 +1,3 @@ -import { GuildTextableChannel, Member, Message, TextChannel, User } from "eris"; import { asSingleLine, isDiscordRESTError, UnknownUser } from "../../../utils"; import { hasPermission, sendErrorMessage, sendSuccessMessage } from "../../../pluginUtils"; import { GuildPluginData } from "knub"; diff --git a/backend/src/plugins/ModActions/functions/actualUnmuteUserCmd.ts b/backend/src/plugins/ModActions/functions/actualUnmuteUserCmd.ts index 41a8b1a1..badfccd5 100644 --- a/backend/src/plugins/ModActions/functions/actualUnmuteUserCmd.ts +++ b/backend/src/plugins/ModActions/functions/actualUnmuteUserCmd.ts @@ -1,6 +1,6 @@ import { GuildPluginData } from "knub"; import { ModActionsPluginType } from "../types"; -import { User, Message, Member } from "eris"; + import { UnknownUser, asSingleLine } from "../../../utils"; import { sendErrorMessage, sendSuccessMessage, hasPermission } from "../../../pluginUtils"; import { formatReasonWithAttachments } from "./formatReasonWithAttachments"; diff --git a/backend/src/plugins/ModActions/functions/banUserId.ts b/backend/src/plugins/ModActions/functions/banUserId.ts index 709ba994..f259dca9 100644 --- a/backend/src/plugins/ModActions/functions/banUserId.ts +++ b/backend/src/plugins/ModActions/functions/banUserId.ts @@ -8,7 +8,7 @@ import { ucfirst, UserNotificationResult, } from "../../../utils"; -import { DiscordRESTError, User } from "eris"; + import { renderTemplate } from "../../../templateFormatter"; import { getDefaultContactMethods } from "./getDefaultContactMethods"; import { LogType } from "../../../data/LogType"; @@ -99,7 +99,7 @@ export async function banUserId( const existingTempban = await pluginData.state.tempbans.findExistingTempbanForUserId(user.id); if (banTime && banTime > 0) { - const selfId = pluginData.client.user.id; + const selfId = pluginData.client.user!.id; if (existingTempban) { pluginData.state.tempbans.updateExpiryTime(user.id, banTime, banOptions.modId ?? selfId); } else { @@ -108,7 +108,7 @@ export async function banUserId( } // Create a case for this action - const modId = banOptions.caseArgs?.modId || pluginData.client.user.id; + const modId = banOptions.caseArgs?.modId || pluginData.client.user!.id; const casesPlugin = pluginData.getPlugin(CasesPlugin); const noteDetails: string[] = []; diff --git a/backend/src/plugins/ModActions/functions/formatReasonWithAttachments.ts b/backend/src/plugins/ModActions/functions/formatReasonWithAttachments.ts index d8a6b4e4..abf820c6 100644 --- a/backend/src/plugins/ModActions/functions/formatReasonWithAttachments.ts +++ b/backend/src/plugins/ModActions/functions/formatReasonWithAttachments.ts @@ -1,5 +1,3 @@ -import { Attachment } from "eris"; - export function formatReasonWithAttachments(reason: string, attachments: Attachment[]) { const attachmentUrls = attachments.map(a => a.url); return ((reason || "") + " " + attachmentUrls.join(" ")).trim(); diff --git a/backend/src/plugins/ModActions/functions/getDefaultContactMethods.ts b/backend/src/plugins/ModActions/functions/getDefaultContactMethods.ts index 4ebc4d8d..1d2484c3 100644 --- a/backend/src/plugins/ModActions/functions/getDefaultContactMethods.ts +++ b/backend/src/plugins/ModActions/functions/getDefaultContactMethods.ts @@ -1,7 +1,6 @@ import { GuildPluginData } from "knub"; import { ModActionsPluginType } from "../types"; import { UserNotificationMethod } from "../../../utils"; -import { TextChannel } from "eris"; export function getDefaultContactMethods( pluginData: GuildPluginData, @@ -15,7 +14,7 @@ export function getDefaultContactMethods( } if (config[`message_on_${type}`] && config.message_channel) { - const channel = pluginData.guild.channels.get(config.message_channel); + const channel = pluginData.guild.channels.cache.get(config.message_channel); if (channel instanceof TextChannel) { methods.push({ type: "channel", diff --git a/backend/src/plugins/ModActions/functions/isBanned.ts b/backend/src/plugins/ModActions/functions/isBanned.ts index 7bcd22d8..bac97e91 100644 --- a/backend/src/plugins/ModActions/functions/isBanned.ts +++ b/backend/src/plugins/ModActions/functions/isBanned.ts @@ -4,14 +4,13 @@ import { isDiscordHTTPError, isDiscordRESTError, SECONDS, sleep } from "../../.. import { LogsPlugin } from "../../Logs/LogsPlugin"; import { LogType } from "../../../data/LogType"; import { hasDiscordPermissions } from "../../../utils/hasDiscordPermissions"; -import { Constants } from "eris"; export async function isBanned( pluginData: GuildPluginData, userId: string, timeout: number = 5 * SECONDS, ): Promise { - const botMember = pluginData.guild.members.get(pluginData.client.user.id); + const botMember = pluginData.guild.members.cache.get(pluginData.client.user!.id); if (botMember && !hasDiscordPermissions(botMember.permissions, Constants.Permissions.banMembers)) { pluginData.getPlugin(LogsPlugin).log(LogType.BOT_ALERT, { body: `Missing "Ban Members" permission to check for existing bans`, diff --git a/backend/src/plugins/ModActions/functions/kickMember.ts b/backend/src/plugins/ModActions/functions/kickMember.ts index b682018e..eaaa2f69 100644 --- a/backend/src/plugins/ModActions/functions/kickMember.ts +++ b/backend/src/plugins/ModActions/functions/kickMember.ts @@ -1,6 +1,6 @@ import { GuildPluginData } from "knub"; import { IgnoredEventType, KickOptions, KickResult, ModActionsPluginType } from "../types"; -import { Member } from "eris"; + import { createUserNotificationError, notifyUser, @@ -63,7 +63,7 @@ export async function kickMember( }; } - const modId = kickOptions.caseArgs?.modId || pluginData.client.user.id; + const modId = kickOptions.caseArgs?.modId || pluginData.client.user!.id; // Create a case for this action const casesPlugin = pluginData.getPlugin(CasesPlugin); diff --git a/backend/src/plugins/ModActions/functions/readContactMethodsFromArgs.ts b/backend/src/plugins/ModActions/functions/readContactMethodsFromArgs.ts index c5bc7009..93ae0882 100644 --- a/backend/src/plugins/ModActions/functions/readContactMethodsFromArgs.ts +++ b/backend/src/plugins/ModActions/functions/readContactMethodsFromArgs.ts @@ -1,4 +1,3 @@ -import { TextChannel } from "eris"; import { disableUserNotificationStrings, UserNotificationMethod } from "../../../utils"; export function readContactMethodsFromArgs(args: { diff --git a/backend/src/plugins/ModActions/functions/updateCase.ts b/backend/src/plugins/ModActions/functions/updateCase.ts index 12257269..02b5fab6 100644 --- a/backend/src/plugins/ModActions/functions/updateCase.ts +++ b/backend/src/plugins/ModActions/functions/updateCase.ts @@ -1,4 +1,3 @@ -import { Message } from "eris"; import { CaseTypes } from "../../../data/CaseTypes"; import { Case } from "../../../data/entities/Case"; import { LogType } from "../../../data/LogType"; diff --git a/backend/src/plugins/ModActions/functions/warnMember.ts b/backend/src/plugins/ModActions/functions/warnMember.ts index d61b183d..74d65640 100644 --- a/backend/src/plugins/ModActions/functions/warnMember.ts +++ b/backend/src/plugins/ModActions/functions/warnMember.ts @@ -1,6 +1,6 @@ import { GuildPluginData } from "knub"; import { ModActionsPluginType, WarnOptions, WarnResult } from "../types"; -import { Member } from "eris"; + import { getDefaultContactMethods } from "./getDefaultContactMethods"; import { createUserNotificationError, @@ -62,7 +62,7 @@ export async function warnMember( } } - const modId = warnOptions.caseArgs?.modId ?? pluginData.client.user.id; + const modId = warnOptions.caseArgs?.modId ?? pluginData.client.user!.id; const casesPlugin = pluginData.getPlugin(CasesPlugin); const createdCase = await casesPlugin.createCase({ diff --git a/backend/src/plugins/ModActions/types.ts b/backend/src/plugins/ModActions/types.ts index 61568a78..3ebeacec 100644 --- a/backend/src/plugins/ModActions/types.ts +++ b/backend/src/plugins/ModActions/types.ts @@ -6,7 +6,7 @@ import { GuildCases } from "../../data/GuildCases"; import { GuildLogs } from "../../data/GuildLogs"; import { Case } from "../../data/entities/Case"; import { CaseArgs } from "../Cases/types"; -import { TextChannel } from "eris"; + import { GuildTempbans } from "../../data/GuildTempbans"; import Timeout = NodeJS.Timeout; import { EventEmitter } from "events"; diff --git a/backend/src/plugins/Mutes/MutesPlugin.ts b/backend/src/plugins/Mutes/MutesPlugin.ts index 05671350..5e8c0045 100644 --- a/backend/src/plugins/Mutes/MutesPlugin.ts +++ b/backend/src/plugins/Mutes/MutesPlugin.ts @@ -13,7 +13,7 @@ import { ClearMutesWithoutRoleCmd } from "./commands/ClearMutesWithoutRoleCmd"; import { ClearMutesCmd } from "./commands/ClearMutesCmd"; import { muteUser } from "./functions/muteUser"; import { unmuteUser } from "./functions/unmuteUser"; -import { Member } from "eris"; + import { ClearActiveMuteOnMemberBanEvt } from "./events/ClearActiveMuteOnMemberBanEvt"; import { ReapplyActiveMuteOnJoinEvt } from "./events/ReapplyActiveMuteOnJoinEvt"; import { mapToPublicFn } from "../../pluginUtils"; diff --git a/backend/src/plugins/Mutes/commands/ClearBannedMutesCmd.ts b/backend/src/plugins/Mutes/commands/ClearBannedMutesCmd.ts index b59f1165..37f78f6f 100644 --- a/backend/src/plugins/Mutes/commands/ClearBannedMutesCmd.ts +++ b/backend/src/plugins/Mutes/commands/ClearBannedMutesCmd.ts @@ -1,5 +1,5 @@ import { mutesCmd } from "../types"; -import { User } from "eris"; + import { sendSuccessMessage } from "../../../pluginUtils"; export const ClearBannedMutesCmd = mutesCmd({ diff --git a/backend/src/plugins/Mutes/commands/MutesCmd.ts b/backend/src/plugins/Mutes/commands/MutesCmd.ts index 9636141a..7e52589a 100644 --- a/backend/src/plugins/Mutes/commands/MutesCmd.ts +++ b/backend/src/plugins/Mutes/commands/MutesCmd.ts @@ -4,7 +4,6 @@ import { DBDateFormat, isFullMessage, MINUTES, noop, resolveMember } from "../.. import moment from "moment-timezone"; import { humanizeDurationShort } from "../../../humanizeDurationShort"; import { getBaseUrl } from "../../../pluginUtils"; -import { Member } from "eris"; export const MutesCmd = mutesCmd({ trigger: "mutes", @@ -112,7 +111,7 @@ export const MutesCmd = mutesCmd({ const muteCasesById = muteCases.reduce((map, c) => map.set(c.id, c), new Map()); lines = filteredMutes.map(mute => { - const user = pluginData.client.users.get(mute.user_id); + const user = pluginData.client.user!.get(mute.user_id); const username = user ? `${user.username}#${user.discriminator}` : "Unknown#0000"; const theCase = muteCasesById.get(mute.case_id); const caseName = theCase ? `Case #${theCase.case_number}` : "No case"; diff --git a/backend/src/plugins/Mutes/functions/clearExpiredMutes.ts b/backend/src/plugins/Mutes/functions/clearExpiredMutes.ts index 60395d02..65bd2b72 100644 --- a/backend/src/plugins/Mutes/functions/clearExpiredMutes.ts +++ b/backend/src/plugins/Mutes/functions/clearExpiredMutes.ts @@ -2,7 +2,7 @@ import { GuildPluginData } from "knub"; import { MutesPluginType } from "../types"; import { LogType } from "../../../data/LogType"; import { resolveMember, stripObjectToScalars, UnknownUser } from "../../../utils"; -import { MemberOptions } from "eris"; + import { memberRolesLock } from "../../../utils/lockNameHelpers"; export async function clearExpiredMutes(pluginData: GuildPluginData) { diff --git a/backend/src/plugins/Mutes/functions/memberHasMutedRole.ts b/backend/src/plugins/Mutes/functions/memberHasMutedRole.ts index 21a3bf88..8b296f19 100644 --- a/backend/src/plugins/Mutes/functions/memberHasMutedRole.ts +++ b/backend/src/plugins/Mutes/functions/memberHasMutedRole.ts @@ -1,4 +1,3 @@ -import { Member } from "eris"; import { GuildPluginData } from "knub"; import { MutesPluginType } from "../types"; diff --git a/backend/src/plugins/Mutes/functions/muteUser.ts b/backend/src/plugins/Mutes/functions/muteUser.ts index 046568b2..16ef5479 100644 --- a/backend/src/plugins/Mutes/functions/muteUser.ts +++ b/backend/src/plugins/Mutes/functions/muteUser.ts @@ -12,7 +12,7 @@ import { UserNotificationMethod, } from "../../../utils"; import { renderTemplate } from "../../../templateFormatter"; -import { MemberOptions, TextChannel, User } from "eris"; + import { CasesPlugin } from "../../Cases/CasesPlugin"; import { CaseTypes } from "../../../data/CaseTypes"; import { LogType } from "../../../data/LogType"; @@ -42,7 +42,7 @@ export async function muteUser( // No mod specified -> mark Zeppelin as the mod if (!muteOptions.caseArgs?.modId) { muteOptions.caseArgs = muteOptions.caseArgs ?? {}; - muteOptions.caseArgs.modId = pluginData.client.user.id; + muteOptions.caseArgs.modId = pluginData.client.user!.id; } const user = await resolveUser(pluginData.client, userId); @@ -99,7 +99,7 @@ export async function muteUser( throw new RecoverablePluginError(ERRORS.INVALID_MUTE_ROLE_ID); } - const zep = await resolveMember(pluginData.client, pluginData.guild, pluginData.client.user.id); + const zep = await resolveMember(pluginData.client, pluginData.guild, pluginData.client.user!.id); const zepRoles = pluginData.guild.roles.filter(x => zep!.roles.includes(x.id)); // If we have roles and one of them is above the muted role, throw generic error if (zepRoles.length >= 0 && zepRoles.some(zepRole => zepRole.position > actualMuteRole.position)) { @@ -172,7 +172,7 @@ export async function muteUser( } const useChannel = existingMute ? config.message_on_update : config.message_on_mute; - const channel = config.message_channel && pluginData.guild.channels.get(config.message_channel); + const channel = config.message_channel && pluginData.guild.channels.cache.get(config.message_channel); if (useChannel && channel instanceof TextChannel) { contactMethods.push({ type: "channel", channel }); } diff --git a/backend/src/plugins/Mutes/functions/unmuteUser.ts b/backend/src/plugins/Mutes/functions/unmuteUser.ts index 53b7cabe..c71096be 100644 --- a/backend/src/plugins/Mutes/functions/unmuteUser.ts +++ b/backend/src/plugins/Mutes/functions/unmuteUser.ts @@ -7,7 +7,7 @@ import humanizeDuration from "humanize-duration"; import { CasesPlugin } from "../../Cases/CasesPlugin"; import { CaseTypes } from "../../../data/CaseTypes"; import { LogType } from "../../../data/LogType"; -import { MemberOptions } from "eris"; + import { memberRolesLock } from "../../../utils/lockNameHelpers"; export async function unmuteUser( @@ -19,7 +19,7 @@ export async function unmuteUser( const existingMute = await pluginData.state.mutes.findExistingMuteForUserId(userId); const user = await resolveUser(pluginData.client, userId); const member = await resolveMember(pluginData.client, pluginData.guild, userId); // Grab the fresh member so we don't have stale role info - const modId = caseArgs.modId || pluginData.client.user.id; + const modId = caseArgs.modId || pluginData.client.user!.id; if (!existingMute && member && !memberHasMutedRole(pluginData, member)) return null; @@ -85,7 +85,7 @@ export async function unmuteUser( }); // Log the action - const mod = pluginData.client.users.get(modId); + const mod = pluginData.client.user!.get(modId); if (unmuteTime) { pluginData.state.serverLogs.log(LogType.MEMBER_TIMED_UNMUTE, { mod: stripObjectToScalars(mod), diff --git a/backend/src/plugins/Mutes/types.ts b/backend/src/plugins/Mutes/types.ts index cb0a6820..e87e8a6e 100644 --- a/backend/src/plugins/Mutes/types.ts +++ b/backend/src/plugins/Mutes/types.ts @@ -1,7 +1,7 @@ import * as t from "io-ts"; import { tNullable, UserNotificationMethod, UserNotificationResult } from "../../utils"; import { Mute } from "../../data/entities/Mute"; -import { Member } from "eris"; + import { Case } from "../../data/entities/Case"; import { BasePluginType, typedGuildCommand, typedGuildEventListener } from "knub"; import { GuildLogs } from "../../data/GuildLogs"; diff --git a/backend/src/plugins/NameHistory/commands/NamesCmd.ts b/backend/src/plugins/NameHistory/commands/NamesCmd.ts index 78456820..c47f1912 100644 --- a/backend/src/plugins/NameHistory/commands/NamesCmd.ts +++ b/backend/src/plugins/NameHistory/commands/NamesCmd.ts @@ -29,7 +29,7 @@ export const NamesCmd = nameHistoryCmd({ ); const usernameRows = usernames.map(r => `\`[${r.timestamp}]\` **${disableCodeBlocks(r.username)}**`); - const user = pluginData.client.users.get(args.userId); + const user = pluginData.client.user!.get(args.userId); const currentUsername = user ? `${user.username}#${user.discriminator}` : args.userId; const nicknameDays = Math.round(NICKNAME_RETENTION_PERIOD / DAYS); diff --git a/backend/src/plugins/NameHistory/events/UpdateNameEvts.ts b/backend/src/plugins/NameHistory/events/UpdateNameEvts.ts index dc3d451b..66947b22 100644 --- a/backend/src/plugins/NameHistory/events/UpdateNameEvts.ts +++ b/backend/src/plugins/NameHistory/events/UpdateNameEvts.ts @@ -10,7 +10,7 @@ export const ChannelJoinEvt = nameHistoryEvt({ }); export const MessageCreateEvt = nameHistoryEvt({ - event: "messageCreate", + event: "message", async listener(meta) { meta.pluginData.state.updateQueue.add(() => updateNickname(meta.pluginData, meta.args.message.member!)); diff --git a/backend/src/plugins/NameHistory/updateNickname.ts b/backend/src/plugins/NameHistory/updateNickname.ts index 2ac8471f..290ac4d1 100644 --- a/backend/src/plugins/NameHistory/updateNickname.ts +++ b/backend/src/plugins/NameHistory/updateNickname.ts @@ -1,4 +1,3 @@ -import { Member } from "eris"; import { GuildPluginData } from "knub"; import { NameHistoryPluginType } from "./types"; diff --git a/backend/src/plugins/Persist/events/LoadDataEvt.ts b/backend/src/plugins/Persist/events/LoadDataEvt.ts index cef12dbf..76cf5366 100644 --- a/backend/src/plugins/Persist/events/LoadDataEvt.ts +++ b/backend/src/plugins/Persist/events/LoadDataEvt.ts @@ -1,5 +1,5 @@ import { persistEvt } from "../types"; -import { Constants, MemberOptions } from "eris"; + import intersection from "lodash.intersection"; import { LogType } from "../../../data/LogType"; import { stripObjectToScalars } from "../../../utils"; @@ -31,7 +31,7 @@ export const LoadDataEvt = persistEvt({ const restoredData: string[] = []; // Check permissions - const me = pluginData.guild.members.get(pluginData.client.user.id)!; + const me = pluginData.guild.members.cache.get(pluginData.client.user!.id)!; let requiredPermissions = 0n; if (config.persist_nicknames) requiredPermissions |= p.manageNicknames; if (config.persisted_roles) requiredPermissions |= p.manageRoles; diff --git a/backend/src/plugins/Persist/events/StoreDataEvt.ts b/backend/src/plugins/Persist/events/StoreDataEvt.ts index 66d2c79e..2b9ded49 100644 --- a/backend/src/plugins/Persist/events/StoreDataEvt.ts +++ b/backend/src/plugins/Persist/events/StoreDataEvt.ts @@ -1,6 +1,6 @@ import { persistEvt } from "../types"; import { IPartialPersistData } from "../../../data/GuildPersistedData"; -import { Member } from "eris"; + import intersection from "lodash.intersection"; export const StoreDataEvt = persistEvt({ diff --git a/backend/src/plugins/PingableRoles/events/ChangePingableEvts.ts b/backend/src/plugins/PingableRoles/events/ChangePingableEvts.ts index 82afa7f2..5efbba02 100644 --- a/backend/src/plugins/PingableRoles/events/ChangePingableEvts.ts +++ b/backend/src/plugins/PingableRoles/events/ChangePingableEvts.ts @@ -29,7 +29,7 @@ export const TypingEnablePingableEvt = pingableRolesEvt({ }); export const MessageCreateDisablePingableEvt = pingableRolesEvt({ - event: "messageCreate", + event: "message", async listener(meta) { const pluginData = meta.pluginData; diff --git a/backend/src/plugins/PingableRoles/utils/disablePingableRoles.ts b/backend/src/plugins/PingableRoles/utils/disablePingableRoles.ts index f4d735b1..21e96189 100644 --- a/backend/src/plugins/PingableRoles/utils/disablePingableRoles.ts +++ b/backend/src/plugins/PingableRoles/utils/disablePingableRoles.ts @@ -7,7 +7,7 @@ export function disablePingableRoles( pingableRoles: PingableRole[], ) { for (const pingableRole of pingableRoles) { - const role = pluginData.guild.roles.get(pingableRole.role_id); + const role = pluginData.guild.roles.cache.get(pingableRole.role_id); if (!role) continue; role.edit( diff --git a/backend/src/plugins/PingableRoles/utils/enablePingableRoles.ts b/backend/src/plugins/PingableRoles/utils/enablePingableRoles.ts index f4ab93c9..972495e3 100644 --- a/backend/src/plugins/PingableRoles/utils/enablePingableRoles.ts +++ b/backend/src/plugins/PingableRoles/utils/enablePingableRoles.ts @@ -7,7 +7,7 @@ export function enablePingableRoles( pingableRoles: PingableRole[], ) { for (const pingableRole of pingableRoles) { - const role = pluginData.guild.roles.get(pingableRole.role_id); + const role = pluginData.guild.roles.cache.get(pingableRole.role_id); if (!role) continue; role.edit( diff --git a/backend/src/plugins/Post/commands/EditCmd.ts b/backend/src/plugins/Post/commands/EditCmd.ts index 64f471e2..9cac7d16 100644 --- a/backend/src/plugins/Post/commands/EditCmd.ts +++ b/backend/src/plugins/Post/commands/EditCmd.ts @@ -19,7 +19,7 @@ export const EditCmd = postCmd({ return; } - if (savedMessage.user_id !== pluginData.client.user.id) { + if (savedMessage.user_id !== pluginData.client.user!.id) { sendErrorMessage(pluginData, msg.channel, "Message wasn't posted by me"); return; } diff --git a/backend/src/plugins/Post/commands/EditEmbedCmd.ts b/backend/src/plugins/Post/commands/EditEmbedCmd.ts index edd1a49c..64ec7e81 100644 --- a/backend/src/plugins/Post/commands/EditEmbedCmd.ts +++ b/backend/src/plugins/Post/commands/EditEmbedCmd.ts @@ -1,7 +1,7 @@ import { postCmd } from "../types"; import { commandTypeHelpers as ct } from "../../../commandTypes"; import { sendErrorMessage, sendSuccessMessage } from "../../../pluginUtils"; -import { Embed } from "eris"; + import { trimLines } from "../../../utils"; import { formatContent } from "../util/formatContent"; import { parseColor } from "../../../utils/parseColor"; diff --git a/backend/src/plugins/Post/commands/PostEmbedCmd.ts b/backend/src/plugins/Post/commands/PostEmbedCmd.ts index 324effdd..5868f2b8 100644 --- a/backend/src/plugins/Post/commands/PostEmbedCmd.ts +++ b/backend/src/plugins/Post/commands/PostEmbedCmd.ts @@ -2,7 +2,7 @@ import { postCmd } from "../types"; import { commandTypeHelpers as ct } from "../../../commandTypes"; import { actualPostCmd } from "../util/actualPostCmd"; import { sendErrorMessage } from "../../../pluginUtils"; -import { Embed } from "eris"; + import { isValidEmbed, trimLines } from "../../../utils"; import { formatContent } from "../util/formatContent"; import { parseColor } from "../../../utils/parseColor"; diff --git a/backend/src/plugins/Post/commands/ScheduledPostsShowCmd.ts b/backend/src/plugins/Post/commands/ScheduledPostsShowCmd.ts index 25ecdede..6501f835 100644 --- a/backend/src/plugins/Post/commands/ScheduledPostsShowCmd.ts +++ b/backend/src/plugins/Post/commands/ScheduledPostsShowCmd.ts @@ -3,7 +3,6 @@ import { sorter } from "../../../utils"; import { sendErrorMessage } from "../../../pluginUtils"; import { commandTypeHelpers as ct } from "../../../commandTypes"; import { postMessage } from "../util/postMessage"; -import { TextChannel } from "eris"; export const ScheduledPostsShowCmd = postCmd({ trigger: ["scheduled_posts", "scheduled_posts show"], diff --git a/backend/src/plugins/Post/util/actualPostCmd.ts b/backend/src/plugins/Post/util/actualPostCmd.ts index b8c8cbc8..2adddad2 100644 --- a/backend/src/plugins/Post/util/actualPostCmd.ts +++ b/backend/src/plugins/Post/util/actualPostCmd.ts @@ -1,4 +1,3 @@ -import { Message, Channel, TextChannel } from "eris"; import { StrictMessageContent, errorMessage, stripObjectToScalars, MINUTES, DBDateFormat } from "../../../utils"; import moment from "moment-timezone"; import { LogType } from "../../../data/LogType"; diff --git a/backend/src/plugins/Post/util/postMessage.ts b/backend/src/plugins/Post/util/postMessage.ts index 97726869..fc31b063 100644 --- a/backend/src/plugins/Post/util/postMessage.ts +++ b/backend/src/plugins/Post/util/postMessage.ts @@ -1,6 +1,6 @@ import { GuildPluginData } from "knub"; import { PostPluginType } from "../types"; -import { Attachment, Message, MessageContent, TextChannel } from "eris"; + import { downloadFile } from "../../../utils"; import fs from "fs"; import { formatContent } from "./formatContent"; diff --git a/backend/src/plugins/Post/util/scheduledPostLoop.ts b/backend/src/plugins/Post/util/scheduledPostLoop.ts index 08ebd516..ac2f2519 100644 --- a/backend/src/plugins/Post/util/scheduledPostLoop.ts +++ b/backend/src/plugins/Post/util/scheduledPostLoop.ts @@ -4,7 +4,7 @@ import { logger } from "../../../logger"; import { stripObjectToScalars, SECONDS, DBDateFormat } from "../../../utils"; import { LogType } from "../../../data/LogType"; import moment from "moment-timezone"; -import { TextChannel, User } from "eris"; + import { postMessage } from "./postMessage"; const SCHEDULED_POST_CHECK_INTERVAL = 5 * SECONDS; @@ -12,10 +12,10 @@ const SCHEDULED_POST_CHECK_INTERVAL = 5 * SECONDS; export async function scheduledPostLoop(pluginData: GuildPluginData) { const duePosts = await pluginData.state.scheduledPosts.getDueScheduledPosts(); for (const post of duePosts) { - const channel = pluginData.guild.channels.get(post.channel_id); + const channel = pluginData.guild.channels.cache.get(post.channel_id); if (channel instanceof TextChannel) { const [username, discriminator] = post.author_name.split("#"); - const author: Partial = pluginData.client.users.get(post.author_id) || { + const author: Partial = pluginData.client.user!.get(post.author_id) || { id: post.author_id, username, discriminator, diff --git a/backend/src/plugins/ReactionRoles/commands/ClearReactionRolesCmd.ts b/backend/src/plugins/ReactionRoles/commands/ClearReactionRolesCmd.ts index b5f78fe7..828ba54e 100644 --- a/backend/src/plugins/ReactionRoles/commands/ClearReactionRolesCmd.ts +++ b/backend/src/plugins/ReactionRoles/commands/ClearReactionRolesCmd.ts @@ -1,7 +1,7 @@ import { reactionRolesCmd } from "../types"; import { commandTypeHelpers as ct } from "../../../commandTypes"; import { sendErrorMessage, sendSuccessMessage } from "../../../pluginUtils"; -import { Message, TextChannel } from "eris"; + import { isDiscordRESTError } from "../../../utils"; export const ClearReactionRolesCmd = reactionRolesCmd({ diff --git a/backend/src/plugins/ReactionRoles/commands/InitReactionRolesCmd.ts b/backend/src/plugins/ReactionRoles/commands/InitReactionRolesCmd.ts index 119b7b27..8518518f 100644 --- a/backend/src/plugins/ReactionRoles/commands/InitReactionRolesCmd.ts +++ b/backend/src/plugins/ReactionRoles/commands/InitReactionRolesCmd.ts @@ -1,7 +1,7 @@ import { reactionRolesCmd, TReactionRolePair } from "../types"; import { commandTypeHelpers as ct } from "../../../commandTypes"; import { sendErrorMessage, sendSuccessMessage } from "../../../pluginUtils"; -import { TextChannel } from "eris"; + import { RecoverablePluginError, ERRORS } from "../../../RecoverablePluginError"; import { canUseEmoji, isDiscordRESTError, isValidEmoji, noop, trimPluginDescription } from "../../../utils"; import { applyReactionRoleReactionsToMessage } from "../util/applyReactionRoleReactionsToMessage"; diff --git a/backend/src/plugins/ReactionRoles/events/AddReactionRoleEvt.ts b/backend/src/plugins/ReactionRoles/events/AddReactionRoleEvt.ts index b93c9456..63fef94f 100644 --- a/backend/src/plugins/ReactionRoles/events/AddReactionRoleEvt.ts +++ b/backend/src/plugins/ReactionRoles/events/AddReactionRoleEvt.ts @@ -1,7 +1,7 @@ import { reactionRolesEvt } from "../types"; import { noop, resolveMember, sleep } from "../../../utils"; import { addMemberPendingRoleChange } from "../util/addMemberPendingRoleChange"; -import { DiscordRESTError, Message } from "eris"; + import { LogsPlugin } from "../../Logs/LogsPlugin"; import { LogType } from "../../../data/LogType"; @@ -16,7 +16,7 @@ export const AddReactionRoleEvt = reactionRolesEvt({ const emoji = meta.args.emoji; const userId = meta.args.member.id; - if (userId === pluginData.client.user.id) { + if (userId === pluginData.client.user!.id) { // Don't act on own reactions // FIXME: This may not be needed? Knub currently requires the *member* to be found for the user to be resolved as well. Need to look into it more. return; diff --git a/backend/src/plugins/ReactionRoles/util/applyReactionRoleReactionsToMessage.ts b/backend/src/plugins/ReactionRoles/util/applyReactionRoleReactionsToMessage.ts index 7de45269..63421863 100644 --- a/backend/src/plugins/ReactionRoles/util/applyReactionRoleReactionsToMessage.ts +++ b/backend/src/plugins/ReactionRoles/util/applyReactionRoleReactionsToMessage.ts @@ -1,7 +1,7 @@ import { GuildPluginData } from "knub"; import { ReactionRolesPluginType } from "../types"; import { ReactionRole } from "../../../data/entities/ReactionRole"; -import { TextChannel } from "eris"; + import { isDiscordRESTError, sleep, isSnowflake } from "../../../utils"; import { logger } from "../../../logger"; import { LogsPlugin } from "../../Logs/LogsPlugin"; @@ -18,7 +18,7 @@ export async function applyReactionRoleReactionsToMessage( messageId: string, reactionRoles: ReactionRole[], ): Promise { - const channel = pluginData.guild.channels.get(channelId) as TextChannel; + const channel = pluginData.guild.channels.cache.get(channelId) as TextChannel; if (!channel) return; const errors: string[] = []; diff --git a/backend/src/plugins/Reminders/utils/postDueRemindersLoop.ts b/backend/src/plugins/Reminders/utils/postDueRemindersLoop.ts index 36c2fb5e..d0c4765d 100644 --- a/backend/src/plugins/Reminders/utils/postDueRemindersLoop.ts +++ b/backend/src/plugins/Reminders/utils/postDueRemindersLoop.ts @@ -1,4 +1,3 @@ -import { TextChannel } from "eris"; import { GuildPluginData } from "knub"; import { RemindersPluginType } from "../types"; import moment from "moment-timezone"; @@ -12,7 +11,7 @@ const MAX_TRIES = 3; export async function postDueRemindersLoop(pluginData: GuildPluginData) { const pendingReminders = await pluginData.state.reminders.getDueReminders(); for (const reminder of pendingReminders) { - const channel = pluginData.guild.channels.get(reminder.channel_id); + const channel = pluginData.guild.channels.cache.get(reminder.channel_id); if (channel && channel instanceof TextChannel) { try { // Only show created at date if one exists diff --git a/backend/src/plugins/Roles/commands/AddRoleCmd.ts b/backend/src/plugins/Roles/commands/AddRoleCmd.ts index 49a69b08..e49b6d7f 100644 --- a/backend/src/plugins/Roles/commands/AddRoleCmd.ts +++ b/backend/src/plugins/Roles/commands/AddRoleCmd.ts @@ -3,7 +3,6 @@ import { sendErrorMessage, sendSuccessMessage, canActOn } from "../../../pluginU import { rolesCmd } from "../types"; import { resolveRoleId, stripObjectToScalars, verboseUserMention } from "../../../utils"; import { LogType } from "../../../data/LogType"; -import { GuildChannel } from "eris"; export const AddRoleCmd = rolesCmd({ trigger: "addrole", diff --git a/backend/src/plugins/Roles/commands/MassAddRoleCmd.ts b/backend/src/plugins/Roles/commands/MassAddRoleCmd.ts index d709edde..32b953a7 100644 --- a/backend/src/plugins/Roles/commands/MassAddRoleCmd.ts +++ b/backend/src/plugins/Roles/commands/MassAddRoleCmd.ts @@ -4,7 +4,6 @@ import { rolesCmd } from "../types"; import { resolveMember, resolveRoleId, stripObjectToScalars, successMessage } from "../../../utils"; import { LogType } from "../../../data/LogType"; import { logger } from "../../../logger"; -import { Member } from "eris"; export const MassAddRoleCmd = rolesCmd({ trigger: "massaddrole", @@ -49,7 +48,7 @@ export const MassAddRoleCmd = rolesCmd({ return; } - const role = pluginData.guild.roles.get(roleId); + const role = pluginData.guild.roles.cache.get(roleId); if (!role) { pluginData.state.logs.log(LogType.BOT_ALERT, { body: `Unknown role configured for 'roles' plugin: ${roleId}`, diff --git a/backend/src/plugins/Roles/commands/MassRemoveRoleCmd.ts b/backend/src/plugins/Roles/commands/MassRemoveRoleCmd.ts index 8253b4ed..b9d085f1 100644 --- a/backend/src/plugins/Roles/commands/MassRemoveRoleCmd.ts +++ b/backend/src/plugins/Roles/commands/MassRemoveRoleCmd.ts @@ -4,7 +4,6 @@ import { rolesCmd } from "../types"; import { resolveMember, stripObjectToScalars, successMessage, resolveRoleId } from "../../../utils"; import { LogType } from "../../../data/LogType"; import { logger } from "../../../logger"; -import { Member } from "eris"; export const MassRemoveRoleCmd = rolesCmd({ trigger: "massremoverole", @@ -49,7 +48,7 @@ export const MassRemoveRoleCmd = rolesCmd({ return; } - const role = pluginData.guild.roles.get(roleId); + const role = pluginData.guild.roles.cache.get(roleId); if (!role) { pluginData.state.logs.log(LogType.BOT_ALERT, { body: `Unknown role configured for 'roles' plugin: ${roleId}`, diff --git a/backend/src/plugins/Roles/commands/RemoveRoleCmd.ts b/backend/src/plugins/Roles/commands/RemoveRoleCmd.ts index 107b88e4..12f5b640 100644 --- a/backend/src/plugins/Roles/commands/RemoveRoleCmd.ts +++ b/backend/src/plugins/Roles/commands/RemoveRoleCmd.ts @@ -1,7 +1,7 @@ import { commandTypeHelpers as ct } from "../../../commandTypes"; import { sendErrorMessage, sendSuccessMessage, canActOn } from "../../../pluginUtils"; import { rolesCmd } from "../types"; -import { GuildChannel } from "eris"; + import { LogType } from "../../../data/LogType"; import { stripObjectToScalars, verboseUserMention, resolveRoleId } from "../../../utils"; diff --git a/backend/src/plugins/SelfGrantableRoles/commands/RoleAddCmd.ts b/backend/src/plugins/SelfGrantableRoles/commands/RoleAddCmd.ts index 34c660a7..3f165e4e 100644 --- a/backend/src/plugins/SelfGrantableRoles/commands/RoleAddCmd.ts +++ b/backend/src/plugins/SelfGrantableRoles/commands/RoleAddCmd.ts @@ -5,7 +5,7 @@ import { sendErrorMessage, sendSuccessMessage } from "../../../pluginUtils"; import { splitRoleNames } from "../util/splitRoleNames"; import { normalizeRoleNames } from "../util/normalizeRoleNames"; import { findMatchingRoles } from "../util/findMatchingRoles"; -import { Role } from "eris"; + import { memberRolesLock } from "../../../utils/lockNameHelpers"; export const RoleAddCmd = selfGrantableRolesCmd({ @@ -31,7 +31,7 @@ export const RoleAddCmd = selfGrantableRolesCmd({ const hasUnknownRoles = matchedRoleIds.length !== roleNames.length; const rolesToAdd: Map = Array.from(matchedRoleIds.values()) - .map(id => pluginData.guild.roles.get(id)!) + .map(id => pluginData.guild.roles.cache.get(id)!) .filter(Boolean) .reduce((map, role) => { map.set(role.id, role); @@ -69,9 +69,9 @@ export const RoleAddCmd = selfGrantableRolesCmd({ rolesToAdd.delete(roleId); if (msg.member.roles.includes(roleId)) { - removed.add(pluginData.guild.roles.get(roleId)!); + removed.add(pluginData.guild.roles.cache.get(roleId)!); } else { - skipped.add(pluginData.guild.roles.get(roleId)!); + skipped.add(pluginData.guild.roles.cache.get(roleId)!); } } } diff --git a/backend/src/plugins/SelfGrantableRoles/commands/RoleRemoveCmd.ts b/backend/src/plugins/SelfGrantableRoles/commands/RoleRemoveCmd.ts index 3462d86f..ba4240f6 100644 --- a/backend/src/plugins/SelfGrantableRoles/commands/RoleRemoveCmd.ts +++ b/backend/src/plugins/SelfGrantableRoles/commands/RoleRemoveCmd.ts @@ -27,7 +27,7 @@ export const RoleRemoveCmd = selfGrantableRolesCmd({ const roleNames = normalizeRoleNames(splitRoleNames(args.roleNames)); const matchedRoleIds = findMatchingRoles(roleNames, applyingEntries); - const rolesToRemove = Array.from(matchedRoleIds.values()).map(id => pluginData.guild.roles.get(id)!); + const rolesToRemove = Array.from(matchedRoleIds.values()).map(id => pluginData.guild.roles.cache.get(id)!); const roleIdsToRemove = rolesToRemove.map(r => r.id); // Remove the roles diff --git a/backend/src/plugins/Slowmode/commands/SlowmodeClearCmd.ts b/backend/src/plugins/Slowmode/commands/SlowmodeClearCmd.ts index c650cd8c..f8da441e 100644 --- a/backend/src/plugins/Slowmode/commands/SlowmodeClearCmd.ts +++ b/backend/src/plugins/Slowmode/commands/SlowmodeClearCmd.ts @@ -25,7 +25,7 @@ export const SlowmodeClearCmd = slowmodeCmd({ return; } - const me = pluginData.guild.members.get(pluginData.client.user.id)!; + const me = pluginData.guild.members.cache.get(pluginData.client.user!.id)!; const missingPermissions = getMissingChannelPermissions(me, args.channel, BOT_SLOWMODE_CLEAR_PERMISSIONS); if (missingPermissions) { sendErrorMessage( diff --git a/backend/src/plugins/Slowmode/commands/SlowmodeGetCmd.ts b/backend/src/plugins/Slowmode/commands/SlowmodeGetCmd.ts index e9ffe108..567a2da9 100644 --- a/backend/src/plugins/Slowmode/commands/SlowmodeGetCmd.ts +++ b/backend/src/plugins/Slowmode/commands/SlowmodeGetCmd.ts @@ -1,6 +1,6 @@ import { commandTypeHelpers as ct } from "../../../commandTypes"; import { slowmodeCmd } from "../types"; -import { TextChannel } from "eris"; + import humanizeDuration from "humanize-duration"; export const SlowmodeGetCmd = slowmodeCmd({ diff --git a/backend/src/plugins/Slowmode/commands/SlowmodeListCmd.ts b/backend/src/plugins/Slowmode/commands/SlowmodeListCmd.ts index 136ff277..7571b358 100644 --- a/backend/src/plugins/Slowmode/commands/SlowmodeListCmd.ts +++ b/backend/src/plugins/Slowmode/commands/SlowmodeListCmd.ts @@ -1,5 +1,5 @@ import { slowmodeCmd } from "../types"; -import { GuildChannel, TextChannel } from "eris"; + import { createChunkedMessage } from "knub/dist/helpers"; import { errorMessage } from "../../../utils"; import humanizeDuration from "humanize-duration"; diff --git a/backend/src/plugins/Slowmode/commands/SlowmodeSetCmd.ts b/backend/src/plugins/Slowmode/commands/SlowmodeSetCmd.ts index 7039b7e7..aeebeb35 100644 --- a/backend/src/plugins/Slowmode/commands/SlowmodeSetCmd.ts +++ b/backend/src/plugins/Slowmode/commands/SlowmodeSetCmd.ts @@ -1,6 +1,6 @@ import { commandTypeHelpers as ct } from "../../../commandTypes"; import { slowmodeCmd } from "../types"; -import { TextChannel } from "eris"; + import humanizeDuration from "humanize-duration"; import { sendErrorMessage, sendSuccessMessage } from "../../../pluginUtils"; import { asSingleLine, DAYS, disableInlineCode, HOURS, MINUTES } from "../../../utils"; @@ -84,7 +84,7 @@ export const SlowmodeSetCmd = slowmodeCmd({ } // Verify permissions - const channelPermissions = channel.permissionsOf(pluginData.client.user.id); + const channelPermissions = channel.permissionsOf(pluginData.client.user!.id); if (mode === "native") { const missingPermissions = getMissingPermissions(channelPermissions, NATIVE_SLOWMODE_PERMISSIONS); diff --git a/backend/src/plugins/Slowmode/requiredPermissions.ts b/backend/src/plugins/Slowmode/requiredPermissions.ts index 7b1b52f5..bee1a4bc 100644 --- a/backend/src/plugins/Slowmode/requiredPermissions.ts +++ b/backend/src/plugins/Slowmode/requiredPermissions.ts @@ -1,5 +1,3 @@ -import { Constants } from "eris"; - const p = Constants.Permissions; export const NATIVE_SLOWMODE_PERMISSIONS = p.readMessages | p.manageChannels; diff --git a/backend/src/plugins/Slowmode/util/actualDisableSlowmodeCmd.ts b/backend/src/plugins/Slowmode/util/actualDisableSlowmodeCmd.ts index cd29bc08..41e5660e 100644 --- a/backend/src/plugins/Slowmode/util/actualDisableSlowmodeCmd.ts +++ b/backend/src/plugins/Slowmode/util/actualDisableSlowmodeCmd.ts @@ -1,4 +1,3 @@ -import { Message } from "eris"; import { sendErrorMessage, sendSuccessMessage } from "../../../pluginUtils"; import { disableBotSlowmodeForChannel } from "./disableBotSlowmodeForChannel"; import { noop } from "../../../utils"; @@ -15,7 +14,7 @@ export async function actualDisableSlowmodeCmd(msg: Message, args, pluginData) { return; } - const me = pluginData.guild.members.get(pluginData.client.user.id); + const me = pluginData.guild.members.cache.get(pluginData.client.user!.id); const missingPermissions = getMissingChannelPermissions(me, args.channel, BOT_SLOWMODE_DISABLE_PERMISSIONS); if (missingPermissions) { sendErrorMessage( diff --git a/backend/src/plugins/Slowmode/util/applyBotSlowmodeToUserId.ts b/backend/src/plugins/Slowmode/util/applyBotSlowmodeToUserId.ts index 356f0bdb..775a29a3 100644 --- a/backend/src/plugins/Slowmode/util/applyBotSlowmodeToUserId.ts +++ b/backend/src/plugins/Slowmode/util/applyBotSlowmodeToUserId.ts @@ -1,6 +1,6 @@ import { SlowmodePluginType } from "../types"; import { GuildPluginData } from "knub"; -import { Constants, GuildChannel, TextChannel } from "eris"; + import { isDiscordRESTError, stripObjectToScalars, UnknownUser } from "../../../utils"; import { LogType } from "../../../data/LogType"; import { logger } from "../../../logger"; @@ -18,7 +18,7 @@ export async function applyBotSlowmodeToUserId( try { await channel.editPermission(userId, newAllowedPermissions, newDeniedPermissions, "member"); } catch (e) { - const user = pluginData.client.users.get(userId) || new UnknownUser({ id: userId }); + const user = pluginData.client.user!.get(userId) || new UnknownUser({ id: userId }); if (isDiscordRESTError(e) && e.code === 50013) { logger.warn( diff --git a/backend/src/plugins/Slowmode/util/clearBotSlowmodeFromUserId.ts b/backend/src/plugins/Slowmode/util/clearBotSlowmodeFromUserId.ts index 7a33d4aa..c44e1754 100644 --- a/backend/src/plugins/Slowmode/util/clearBotSlowmodeFromUserId.ts +++ b/backend/src/plugins/Slowmode/util/clearBotSlowmodeFromUserId.ts @@ -1,6 +1,5 @@ import { GuildPluginData } from "knub"; import { SlowmodePluginType } from "../types"; -import { GuildChannel, TextChannel } from "eris"; export async function clearBotSlowmodeFromUserId( pluginData: GuildPluginData, diff --git a/backend/src/plugins/Slowmode/util/clearExpiredSlowmodes.ts b/backend/src/plugins/Slowmode/util/clearExpiredSlowmodes.ts index 5bf650c2..51764846 100644 --- a/backend/src/plugins/Slowmode/util/clearExpiredSlowmodes.ts +++ b/backend/src/plugins/Slowmode/util/clearExpiredSlowmodes.ts @@ -2,14 +2,14 @@ import { GuildPluginData } from "knub"; import { SlowmodePluginType } from "../types"; import { LogType } from "../../../data/LogType"; import { logger } from "../../../logger"; -import { GuildChannel, TextChannel } from "eris"; + import { stripObjectToScalars, UnknownUser } from "../../../utils"; import { clearBotSlowmodeFromUserId } from "./clearBotSlowmodeFromUserId"; export async function clearExpiredSlowmodes(pluginData: GuildPluginData) { const expiredSlowmodeUsers = await pluginData.state.slowmodes.getExpiredSlowmodeUsers(); for (const user of expiredSlowmodeUsers) { - const channel = pluginData.guild.channels.get(user.channel_id); + const channel = pluginData.guild.channels.cache.get(user.channel_id); if (!channel) { await pluginData.state.slowmodes.clearSlowmodeUser(user.channel_id, user.user_id); continue; @@ -20,7 +20,7 @@ export async function clearExpiredSlowmodes(pluginData: GuildPluginData, msg: SavedMessage) { if (msg.is_bot) return; - const channel = pluginData.guild.channels.get(msg.channel_id) as TextChannel; + const channel = pluginData.guild.channels.cache.get(msg.channel_id) as TextChannel; if (!channel) return; // Don't apply slowmode if the lock was interrupted earlier (e.g. the message was caught by word filters) @@ -36,7 +36,7 @@ export async function onMessageCreate(pluginData: GuildPluginData, savedMessage: SavedMessage) { - const member = pluginData.guild.members.get(savedMessage.user_id); + const member = pluginData.guild.members.cache.get(savedMessage.user_id); const config = await pluginData.config.getMatchingConfig({ userId: savedMessage.user_id, channelId: savedMessage.channel_id, diff --git a/backend/src/plugins/Spam/util/onMessageCreate.ts b/backend/src/plugins/Spam/util/onMessageCreate.ts index 71e1bb3f..cedb0616 100644 --- a/backend/src/plugins/Spam/util/onMessageCreate.ts +++ b/backend/src/plugins/Spam/util/onMessageCreate.ts @@ -7,7 +7,7 @@ import { logAndDetectMessageSpam } from "./logAndDetectMessageSpam"; export async function onMessageCreate(pluginData: GuildPluginData, savedMessage: SavedMessage) { if (savedMessage.is_bot) return; - const member = pluginData.guild.members.get(savedMessage.user_id); + const member = pluginData.guild.members.cache.get(savedMessage.user_id); const config = await pluginData.config.getMatchingConfig({ userId: savedMessage.user_id, channelId: savedMessage.channel_id, diff --git a/backend/src/plugins/Starboard/commands/MigratePinsCmd.ts b/backend/src/plugins/Starboard/commands/MigratePinsCmd.ts index f109150a..990ccd06 100644 --- a/backend/src/plugins/Starboard/commands/MigratePinsCmd.ts +++ b/backend/src/plugins/Starboard/commands/MigratePinsCmd.ts @@ -1,7 +1,7 @@ import { commandTypeHelpers as ct } from "../../../commandTypes"; import { starboardCmd } from "../types"; import { sendSuccessMessage, sendErrorMessage } from "../../../pluginUtils"; -import { TextChannel } from "eris"; + import { saveMessageToStarboard } from "../util/saveMessageToStarboard"; export const MigratePinsCmd = starboardCmd({ @@ -23,7 +23,7 @@ export const MigratePinsCmd = starboardCmd({ return; } - const starboardChannel = pluginData.guild.channels.get(starboard.channel_id); + const starboardChannel = pluginData.guild.channels.cache.get(starboard.channel_id); if (!starboardChannel || !(starboardChannel instanceof TextChannel)) { sendErrorMessage(pluginData, msg.channel, "Starboard has an unknown/invalid channel id"); return; diff --git a/backend/src/plugins/Starboard/events/StarboardReactionAddEvt.ts b/backend/src/plugins/Starboard/events/StarboardReactionAddEvt.ts index 4c123ac8..4356a1f8 100644 --- a/backend/src/plugins/Starboard/events/StarboardReactionAddEvt.ts +++ b/backend/src/plugins/Starboard/events/StarboardReactionAddEvt.ts @@ -1,5 +1,5 @@ import { starboardEvt } from "../types"; -import { Message, TextChannel } from "eris"; + import { UnknownUser, resolveMember, noop, resolveUser } from "../../../utils"; import { saveMessageToStarboard } from "../util/saveMessageToStarboard"; import { updateStarboardMessageStarCount } from "../util/updateStarboardMessageStarCount"; diff --git a/backend/src/plugins/Starboard/util/createStarboardEmbedFromMessage.ts b/backend/src/plugins/Starboard/util/createStarboardEmbedFromMessage.ts index 9625556c..304bb410 100644 --- a/backend/src/plugins/Starboard/util/createStarboardEmbedFromMessage.ts +++ b/backend/src/plugins/Starboard/util/createStarboardEmbedFromMessage.ts @@ -1,5 +1,5 @@ import { EmbedWith, EMPTY_CHAR, messageLink } from "../../../utils"; -import { EmbedOptions, GuildChannel, Message } from "eris"; + import path from "path"; const imageAttachmentExtensions = ["jpeg", "jpg", "png", "gif", "webp"]; diff --git a/backend/src/plugins/Starboard/util/createStarboardPseudoFooterForMessage.ts b/backend/src/plugins/Starboard/util/createStarboardPseudoFooterForMessage.ts index 08172831..d33413c0 100644 --- a/backend/src/plugins/Starboard/util/createStarboardPseudoFooterForMessage.ts +++ b/backend/src/plugins/Starboard/util/createStarboardPseudoFooterForMessage.ts @@ -1,4 +1,3 @@ -import { EmbedField, EmojiOptions, GuildChannel, Message } from "eris"; import { EMPTY_CHAR, messageLink } from "../../../utils"; import { TStarboardOpts } from "../types"; diff --git a/backend/src/plugins/Starboard/util/saveMessageToStarboard.ts b/backend/src/plugins/Starboard/util/saveMessageToStarboard.ts index e7587abd..99c74ad0 100644 --- a/backend/src/plugins/Starboard/util/saveMessageToStarboard.ts +++ b/backend/src/plugins/Starboard/util/saveMessageToStarboard.ts @@ -1,6 +1,6 @@ import { GuildPluginData } from "knub"; import { StarboardPluginType, TStarboardOpts } from "../types"; -import { Message, GuildChannel, TextChannel, Embed } from "eris"; + import moment from "moment-timezone"; import { EmbedWith, EMPTY_CHAR, messageLink } from "../../../utils"; import path from "path"; @@ -12,7 +12,7 @@ export async function saveMessageToStarboard( msg: Message, starboard: TStarboardOpts, ) { - const channel = pluginData.guild.channels.get(starboard.channel_id); + const channel = pluginData.guild.channels.cache.get(starboard.channel_id); if (!channel) return; const starCount = (await pluginData.state.starboardReactions.getAllReactionsForMessageId(msg.id)).length; diff --git a/backend/src/plugins/Starboard/util/updateStarboardMessageStarCount.ts b/backend/src/plugins/Starboard/util/updateStarboardMessageStarCount.ts index f476444e..0d26f7c1 100644 --- a/backend/src/plugins/Starboard/util/updateStarboardMessageStarCount.ts +++ b/backend/src/plugins/Starboard/util/updateStarboardMessageStarCount.ts @@ -1,4 +1,3 @@ -import { Client, GuildTextableChannel, Message } from "eris"; import { noop } from "../../../utils"; import { createStarboardPseudoFooterForMessage } from "./createStarboardPseudoFooterForMessage"; import { TStarboardOpts } from "../types"; diff --git a/backend/src/plugins/Tags/TagsPlugin.ts b/backend/src/plugins/Tags/TagsPlugin.ts index 5a26af84..a17f9345 100644 --- a/backend/src/plugins/Tags/TagsPlugin.ts +++ b/backend/src/plugins/Tags/TagsPlugin.ts @@ -214,7 +214,7 @@ export const TagsPlugin = zeppelinGuildPlugin()({ return input; } - if (pluginData.guild.members.has(input) || pluginData.client.users.has(input)) { + if (pluginData.guild.members.has(input) || pluginData.client.user!.has(input)) { return `<@!${input}>`; } diff --git a/backend/src/plugins/Tags/commands/TagEvalCmd.ts b/backend/src/plugins/Tags/commands/TagEvalCmd.ts index 61dbea9e..1569aeed 100644 --- a/backend/src/plugins/Tags/commands/TagEvalCmd.ts +++ b/backend/src/plugins/Tags/commands/TagEvalCmd.ts @@ -1,6 +1,6 @@ import { tagsCmd } from "../types"; import { commandTypeHelpers as ct } from "../../../commandTypes"; -import { MessageContent } from "eris"; + import { TemplateParseError } from "../../../templateFormatter"; import { sendErrorMessage } from "../../../pluginUtils"; import { renderTagBody } from "../util/renderTagBody"; diff --git a/backend/src/plugins/Tags/util/matchAndRenderTagFromString.ts b/backend/src/plugins/Tags/util/matchAndRenderTagFromString.ts index bddc41cc..d44415fc 100644 --- a/backend/src/plugins/Tags/util/matchAndRenderTagFromString.ts +++ b/backend/src/plugins/Tags/util/matchAndRenderTagFromString.ts @@ -4,7 +4,6 @@ import { TagsPluginType, TTagCategory } from "../types"; import { renderTagFromString } from "./renderTagFromString"; import { convertDelayStringToMS, StrictMessageContent } from "../../../utils"; import escapeStringRegexp from "escape-string-regexp"; -import { Member } from "eris"; interface BaseResult { renderedContent: StrictMessageContent; diff --git a/backend/src/plugins/Tags/util/onMessageCreate.ts b/backend/src/plugins/Tags/util/onMessageCreate.ts index 4a58e5a6..1171216c 100644 --- a/backend/src/plugins/Tags/util/onMessageCreate.ts +++ b/backend/src/plugins/Tags/util/onMessageCreate.ts @@ -4,7 +4,7 @@ import { GuildPluginData } from "knub"; import { convertDelayStringToMS, noop, resolveMember, tStrictMessageContent } from "../../../utils"; import { validate } from "../../../validatorUtils"; import { LogType } from "../../../data/LogType"; -import { TextChannel } from "eris"; + import { matchAndRenderTagFromString } from "./matchAndRenderTagFromString"; import { messageIsEmpty } from "../../../utils/messageIsEmpty"; @@ -15,7 +15,7 @@ export async function onMessageCreate(pluginData: GuildPluginData, msg: SavedMessage) { // Command message was deleted -> delete the response as well const commandMsgResponse = await pluginData.state.tags.findResponseByCommandMessageId(msg.id); if (commandMsgResponse) { - const channel = pluginData.guild.channels.get(msg.channel_id) as TextChannel; + const channel = pluginData.guild.channels.cache.get(msg.channel_id) as TextChannel; if (!channel) return; const responseMsg = await pluginData.state.savedMessages.find(commandMsgResponse.response_message_id); @@ -20,7 +19,7 @@ export async function onMessageDelete(pluginData: GuildPluginData delete the command message as well const responseMsgResponse = await pluginData.state.tags.findResponseByResponseMessageId(msg.id); if (responseMsgResponse) { - const channel = pluginData.guild.channels.get(msg.channel_id) as TextChannel; + const channel = pluginData.guild.channels.cache.get(msg.channel_id) as TextChannel; if (!channel) return; const commandMsg = await pluginData.state.savedMessages.find(responseMsgResponse.command_message_id); diff --git a/backend/src/plugins/Tags/util/renderTagFromString.ts b/backend/src/plugins/Tags/util/renderTagFromString.ts index 5c9986ac..86e2f842 100644 --- a/backend/src/plugins/Tags/util/renderTagFromString.ts +++ b/backend/src/plugins/Tags/util/renderTagFromString.ts @@ -1,5 +1,5 @@ import { Tag, TagsPluginType } from "../types"; -import { Member } from "eris"; + import * as t from "io-ts"; import { renderRecursively, StrictMessageContent, stripObjectToScalars } from "../../../utils"; import { parseArguments } from "knub-command-manager"; diff --git a/backend/src/plugins/UsernameSaver/events/UpdateUsernameEvts.ts b/backend/src/plugins/UsernameSaver/events/UpdateUsernameEvts.ts index 8b8a8fb8..9165952e 100644 --- a/backend/src/plugins/UsernameSaver/events/UpdateUsernameEvts.ts +++ b/backend/src/plugins/UsernameSaver/events/UpdateUsernameEvts.ts @@ -2,7 +2,7 @@ import { usernameSaverEvt } from "../types"; import { updateUsername } from "../updateUsername"; export const MessageCreateUpdateUsernameEvt = usernameSaverEvt({ - event: "messageCreate", + event: "message", async listener(meta) { if (meta.args.message.author.bot) return; diff --git a/backend/src/plugins/UsernameSaver/updateUsername.ts b/backend/src/plugins/UsernameSaver/updateUsername.ts index 5e0a3288..f29ed600 100644 --- a/backend/src/plugins/UsernameSaver/updateUsername.ts +++ b/backend/src/plugins/UsernameSaver/updateUsername.ts @@ -1,4 +1,3 @@ -import { User } from "eris"; import { GuildPluginData } from "knub"; import { UsernameSaverPluginType } from "./types"; diff --git a/backend/src/plugins/Utility/commands/AboutCmd.ts b/backend/src/plugins/Utility/commands/AboutCmd.ts index e3f968ae..264723b8 100644 --- a/backend/src/plugins/Utility/commands/AboutCmd.ts +++ b/backend/src/plugins/Utility/commands/AboutCmd.ts @@ -1,6 +1,7 @@ import { utilityCmd } from "../types"; import { EmbedWith, multiSorter, resolveMember, sorter } from "../../../utils"; -import { GuildChannel, MessageContent, Role } from "eris"; + + import { getCurrentUptime } from "../../../uptime"; import humanizeDuration from "humanize-duration"; import LCL from "last-commit-log"; @@ -66,7 +67,7 @@ export const AboutCmd = utilityCmd({ const aboutContent: MessageContent & { embed: EmbedWith<"title" | "fields"> } = { embed: { - title: `About ${pluginData.client.user.username}`, + title: `About ${pluginData.client.user!.username}`, fields: [ { name: "Status", @@ -100,7 +101,7 @@ export const AboutCmd = utilityCmd({ } // For the embed color, find the highest colored role the bot has - this is their color on the server as well - const botMember = await resolveMember(pluginData.client, pluginData.guild, pluginData.client.user.id); + const botMember = await resolveMember(pluginData.client, pluginData.guild, pluginData.client.user!.id); let botRoles = botMember?.roles.map(r => (msg.channel as GuildChannel).guild.roles.get(r)!) || []; botRoles = botRoles.filter(r => !!r); // Drop any unknown roles botRoles = botRoles.filter(r => r.color); // Filter to those with a color @@ -110,8 +111,8 @@ export const AboutCmd = utilityCmd({ } // Use the bot avatar as the embed image - if (pluginData.client.user.avatarURL) { - aboutContent.embed.thumbnail = { url: pluginData.client.user.avatarURL }; + if (pluginData.client.user!avatarURL) { + aboutContent.embed.thumbnail = { url: pluginData.client.user!.avatarURL }; } msg.channel.createMessage(aboutContent); diff --git a/backend/src/plugins/Utility/commands/AvatarCmd.ts b/backend/src/plugins/Utility/commands/AvatarCmd.ts index 7ab1fac8..51814d9e 100644 --- a/backend/src/plugins/Utility/commands/AvatarCmd.ts +++ b/backend/src/plugins/Utility/commands/AvatarCmd.ts @@ -2,7 +2,6 @@ import { utilityCmd } from "../types"; import { commandTypeHelpers as ct } from "../../../commandTypes"; import { UnknownUser } from "../../../utils"; import { sendErrorMessage } from "../../../pluginUtils"; -import { EmbedOptions } from "eris"; export const AvatarCmd = utilityCmd({ trigger: ["avatar", "av"], diff --git a/backend/src/plugins/Utility/commands/CleanCmd.ts b/backend/src/plugins/Utility/commands/CleanCmd.ts index 992a8b8a..72287c56 100644 --- a/backend/src/plugins/Utility/commands/CleanCmd.ts +++ b/backend/src/plugins/Utility/commands/CleanCmd.ts @@ -2,7 +2,7 @@ import { utilityCmd, UtilityPluginType } from "../types"; import { commandTypeHelpers as ct } from "../../../commandTypes"; import { DAYS, getInviteCodesInString, noop, SECONDS, stripObjectToScalars } from "../../../utils"; import { getBaseUrl, sendErrorMessage, sendSuccessMessage } from "../../../pluginUtils"; -import { Message, TextChannel, User } from "eris"; + import moment from "moment-timezone"; import { GuildPluginData } from "knub"; import { SavedMessage } from "../../../data/entities/SavedMessage"; @@ -87,7 +87,7 @@ export const CleanCmd = utilityCmd({ return; } - const targetChannel = args.channel ? pluginData.guild.channels.get(args.channel) : msg.channel; + const targetChannel = args.channel ? pluginData.guild.channels.cache.get(args.channel) : msg.channel; if (!targetChannel || !(targetChannel instanceof TextChannel)) { sendErrorMessage(pluginData, msg.channel, `Invalid channel specified`); return; diff --git a/backend/src/plugins/Utility/commands/ContextCmd.ts b/backend/src/plugins/Utility/commands/ContextCmd.ts index 81a488b3..1ab2269d 100644 --- a/backend/src/plugins/Utility/commands/ContextCmd.ts +++ b/backend/src/plugins/Utility/commands/ContextCmd.ts @@ -2,7 +2,7 @@ import { utilityCmd } from "../types"; import { commandTypeHelpers as ct } from "../../../commandTypes"; import { messageLink } from "../../../utils"; import { sendErrorMessage } from "../../../pluginUtils"; -import { TextChannel } from "eris"; + import { canReadChannel } from "../../../utils/canReadChannel"; export const ContextCmd = utilityCmd({ diff --git a/backend/src/plugins/Utility/commands/InfoCmd.ts b/backend/src/plugins/Utility/commands/InfoCmd.ts index 6e84e3d3..19870f25 100644 --- a/backend/src/plugins/Utility/commands/InfoCmd.ts +++ b/backend/src/plugins/Utility/commands/InfoCmd.ts @@ -38,7 +38,7 @@ export const InfoCmd = utilityCmd({ // 1. Channel if (userCfg.can_channelinfo) { const channelId = getChannelId(value); - const channel = channelId && pluginData.guild.channels.get(channelId); + const channel = channelId && pluginData.guild.channels.cache.get(channelId); if (channel) { const embed = await getChannelInfoEmbed(pluginData, channelId!, message.author.id); if (embed) { @@ -121,7 +121,7 @@ export const InfoCmd = utilityCmd({ // 7. Role if (userCfg.can_roleinfo) { const roleId = getRoleId(value); - const role = roleId && pluginData.guild.roles.get(roleId); + const role = roleId && pluginData.guild.roles.cache.get(roleId); if (role) { const embed = await getRoleInfoEmbed(pluginData, role, message.author.id); message.channel.createMessage({ embed }); diff --git a/backend/src/plugins/Utility/commands/PingCmd.ts b/backend/src/plugins/Utility/commands/PingCmd.ts index b8304182..0bf671bc 100644 --- a/backend/src/plugins/Utility/commands/PingCmd.ts +++ b/backend/src/plugins/Utility/commands/PingCmd.ts @@ -1,6 +1,5 @@ import { utilityCmd } from "../types"; import { noop, trimLines } from "../../../utils"; -import { Message } from "eris"; const { performance } = require("perf_hooks"); diff --git a/backend/src/plugins/Utility/commands/ReloadGuildCmd.ts b/backend/src/plugins/Utility/commands/ReloadGuildCmd.ts index e6a3074d..d7abeac8 100644 --- a/backend/src/plugins/Utility/commands/ReloadGuildCmd.ts +++ b/backend/src/plugins/Utility/commands/ReloadGuildCmd.ts @@ -1,5 +1,5 @@ import { utilityCmd } from "../types"; -import { TextChannel } from "eris"; + import { activeReloads } from "../guildReloads"; export const ReloadGuildCmd = utilityCmd({ diff --git a/backend/src/plugins/Utility/commands/RolesCmd.ts b/backend/src/plugins/Utility/commands/RolesCmd.ts index 5aa52452..e98c46e7 100644 --- a/backend/src/plugins/Utility/commands/RolesCmd.ts +++ b/backend/src/plugins/Utility/commands/RolesCmd.ts @@ -1,6 +1,6 @@ import { utilityCmd } from "../types"; import { commandTypeHelpers as ct } from "../../../commandTypes"; -import { Role, TextChannel } from "eris"; + import { chunkArray, sorter, trimLines } from "../../../utils"; import { refreshMembersIfNeeded } from "../refreshMembers"; import { sendErrorMessage } from "../../../pluginUtils"; diff --git a/backend/src/plugins/Utility/commands/SourceCmd.ts b/backend/src/plugins/Utility/commands/SourceCmd.ts index 47ae3658..83e76e15 100644 --- a/backend/src/plugins/Utility/commands/SourceCmd.ts +++ b/backend/src/plugins/Utility/commands/SourceCmd.ts @@ -3,7 +3,7 @@ import { commandTypeHelpers as ct } from "../../../commandTypes"; import { errorMessage } from "../../../utils"; import { getBaseUrl, sendErrorMessage } from "../../../pluginUtils"; import moment from "moment-timezone"; -import { Constants, TextChannel } from "eris"; + import { canReadChannel } from "../../../utils/canReadChannel"; export const SourceCmd = utilityCmd({ diff --git a/backend/src/plugins/Utility/commands/VcdisconnectCmd.ts b/backend/src/plugins/Utility/commands/VcdisconnectCmd.ts index abd988ab..c0e0cf63 100644 --- a/backend/src/plugins/Utility/commands/VcdisconnectCmd.ts +++ b/backend/src/plugins/Utility/commands/VcdisconnectCmd.ts @@ -8,7 +8,7 @@ import { stripObjectToScalars, } from "../../../utils"; import { canActOn, sendErrorMessage, sendSuccessMessage } from "../../../pluginUtils"; -import { VoiceChannel } from "eris"; + import { LogType } from "../../../data/LogType"; import { resolveChannel } from "knub/dist/helpers"; diff --git a/backend/src/plugins/Utility/commands/VcmoveCmd.ts b/backend/src/plugins/Utility/commands/VcmoveCmd.ts index eb85ef71..ae28f873 100644 --- a/backend/src/plugins/Utility/commands/VcmoveCmd.ts +++ b/backend/src/plugins/Utility/commands/VcmoveCmd.ts @@ -9,7 +9,7 @@ import { stripObjectToScalars, } from "../../../utils"; import { canActOn, sendErrorMessage, sendSuccessMessage } from "../../../pluginUtils"; -import { Member, VoiceChannel } from "eris"; + import { LogType } from "../../../data/LogType"; export const VcmoveCmd = utilityCmd({ @@ -28,7 +28,7 @@ export const VcmoveCmd = utilityCmd({ if (isSnowflake(args.channel)) { // Snowflake -> resolve channel directly - const potentialChannel = pluginData.guild.channels.get(args.channel); + const potentialChannel = pluginData.guild.channels.cache.get(args.channel); if (!potentialChannel || !(potentialChannel instanceof VoiceChannel)) { sendErrorMessage(pluginData, msg.channel, "Unknown or non-voice channel"); return; @@ -38,7 +38,7 @@ export const VcmoveCmd = utilityCmd({ } else if (channelMentionRegex.test(args.channel)) { // Channel mention -> parse channel id and resolve channel from that const channelId = args.channel.match(channelMentionRegex)![1]; - const potentialChannel = pluginData.guild.channels.get(channelId); + const potentialChannel = pluginData.guild.channels.cache.get(channelId); if (!potentialChannel || !(potentialChannel instanceof VoiceChannel)) { sendErrorMessage(pluginData, msg.channel, "Unknown or non-voice channel"); return; @@ -69,7 +69,7 @@ export const VcmoveCmd = utilityCmd({ return; } - const oldVoiceChannel = pluginData.guild.channels.get(args.member.voiceState.channelID); + const oldVoiceChannel = pluginData.guild.channels.cache.get(args.member.voiceState.channelID); try { await args.member.edit({ @@ -111,7 +111,7 @@ export const VcmoveAllCmd = utilityCmd({ if (isSnowflake(args.channel)) { // Snowflake -> resolve channel directly - const potentialChannel = pluginData.guild.channels.get(args.channel); + const potentialChannel = pluginData.guild.channels.cache.get(args.channel); if (!potentialChannel || !(potentialChannel instanceof VoiceChannel)) { sendErrorMessage(pluginData, msg.channel, "Unknown or non-voice channel"); return; @@ -121,7 +121,7 @@ export const VcmoveAllCmd = utilityCmd({ } else if (channelMentionRegex.test(args.channel)) { // Channel mention -> parse channel id and resolve channel from that const channelId = args.channel.match(channelMentionRegex)![1]; - const potentialChannel = pluginData.guild.channels.get(channelId); + const potentialChannel = pluginData.guild.channels.cache.get(channelId); if (!potentialChannel || !(potentialChannel instanceof VoiceChannel)) { sendErrorMessage(pluginData, msg.channel, "Unknown or non-voice channel"); return; diff --git a/backend/src/plugins/Utility/functions/getChannelInfoEmbed.ts b/backend/src/plugins/Utility/functions/getChannelInfoEmbed.ts index c2f41f74..45756642 100644 --- a/backend/src/plugins/Utility/functions/getChannelInfoEmbed.ts +++ b/backend/src/plugins/Utility/functions/getChannelInfoEmbed.ts @@ -1,6 +1,6 @@ import { GuildPluginData } from "knub"; import { UtilityPluginType } from "../types"; -import { Constants, EmbedOptions } from "eris"; + import moment from "moment-timezone"; import humanizeDuration from "humanize-duration"; import { EmbedWith, formatNumber, preEmbedPadding, trimLines } from "../../../utils"; @@ -20,7 +20,7 @@ export async function getChannelInfoEmbed( channelId: string, requestMemberId?: string, ): Promise { - const channel = pluginData.guild.channels.get(channelId); + const channel = pluginData.guild.channels.cache.get(channelId); if (!channel) { return null; } diff --git a/backend/src/plugins/Utility/functions/getEmojiInfoEmbed.ts b/backend/src/plugins/Utility/functions/getEmojiInfoEmbed.ts index 28ee5712..b1e8297e 100644 --- a/backend/src/plugins/Utility/functions/getEmojiInfoEmbed.ts +++ b/backend/src/plugins/Utility/functions/getEmojiInfoEmbed.ts @@ -1,4 +1,3 @@ -import { EmbedOptions } from "eris"; import { GuildPluginData } from "knub"; import { UtilityPluginType } from "../types"; import { trimLines, preEmbedPadding, EmbedWith } from "../../../utils"; diff --git a/backend/src/plugins/Utility/functions/getGuildPreview.ts b/backend/src/plugins/Utility/functions/getGuildPreview.ts index a72be048..34d7f73c 100644 --- a/backend/src/plugins/Utility/functions/getGuildPreview.ts +++ b/backend/src/plugins/Utility/functions/getGuildPreview.ts @@ -1,4 +1,3 @@ -import { Client, GuildPreview } from "eris"; import { memoize, MINUTES } from "../../../utils"; /** diff --git a/backend/src/plugins/Utility/functions/getInviteInfoEmbed.ts b/backend/src/plugins/Utility/functions/getInviteInfoEmbed.ts index 84760b1f..dff670b5 100644 --- a/backend/src/plugins/Utility/functions/getInviteInfoEmbed.ts +++ b/backend/src/plugins/Utility/functions/getInviteInfoEmbed.ts @@ -1,6 +1,6 @@ import { GuildPluginData } from "knub"; import { UtilityPluginType } from "../types"; -import { Constants, EmbedOptions } from "eris"; + import { snowflakeToTimestamp } from "../../../utils/snowflakeToTimestamp"; import moment from "moment-timezone"; import humanizeDuration from "humanize-duration"; diff --git a/backend/src/plugins/Utility/functions/getMessageInfoEmbed.ts b/backend/src/plugins/Utility/functions/getMessageInfoEmbed.ts index 3c74fc3a..798ec63a 100644 --- a/backend/src/plugins/Utility/functions/getMessageInfoEmbed.ts +++ b/backend/src/plugins/Utility/functions/getMessageInfoEmbed.ts @@ -1,6 +1,6 @@ import { GuildPluginData } from "knub"; import { UtilityPluginType } from "../types"; -import { Constants, EmbedOptions } from "eris"; + import moment from "moment-timezone"; import humanizeDuration from "humanize-duration"; import { chunkMessageLines, EmbedWith, messageLink, preEmbedPadding, trimEmptyLines, trimLines } from "../../../utils"; diff --git a/backend/src/plugins/Utility/functions/getRoleInfoEmbed.ts b/backend/src/plugins/Utility/functions/getRoleInfoEmbed.ts index 5dcfcb26..e5dff015 100644 --- a/backend/src/plugins/Utility/functions/getRoleInfoEmbed.ts +++ b/backend/src/plugins/Utility/functions/getRoleInfoEmbed.ts @@ -1,4 +1,3 @@ -import { EmbedOptions, Role } from "eris"; import { GuildPluginData } from "knub"; import { UtilityPluginType } from "../types"; import { trimLines, preEmbedPadding, EmbedWith } from "../../../utils"; diff --git a/backend/src/plugins/Utility/functions/getServerInfoEmbed.ts b/backend/src/plugins/Utility/functions/getServerInfoEmbed.ts index 0a7564cc..a49deea6 100644 --- a/backend/src/plugins/Utility/functions/getServerInfoEmbed.ts +++ b/backend/src/plugins/Utility/functions/getServerInfoEmbed.ts @@ -12,7 +12,7 @@ import { resolveUser, trimLines, } from "../../../utils"; -import { CategoryChannel, EmbedOptions, Guild, TextChannel, VoiceChannel } from "eris"; + import moment from "moment-timezone"; import humanizeDuration from "humanize-duration"; import { getGuildPreview } from "./getGuildPreview"; diff --git a/backend/src/plugins/Utility/functions/getSnowflakeInfoEmbed.ts b/backend/src/plugins/Utility/functions/getSnowflakeInfoEmbed.ts index 5a9e9dc4..bd0e39fc 100644 --- a/backend/src/plugins/Utility/functions/getSnowflakeInfoEmbed.ts +++ b/backend/src/plugins/Utility/functions/getSnowflakeInfoEmbed.ts @@ -1,4 +1,3 @@ -import { Message, GuildTextableChannel, EmbedOptions } from "eris"; import { GuildPluginData } from "knub"; import { UtilityPluginType } from "../types"; import { diff --git a/backend/src/plugins/Utility/functions/getUserInfoEmbed.ts b/backend/src/plugins/Utility/functions/getUserInfoEmbed.ts index c3acdda3..d6c2a0be 100644 --- a/backend/src/plugins/Utility/functions/getUserInfoEmbed.ts +++ b/backend/src/plugins/Utility/functions/getUserInfoEmbed.ts @@ -1,4 +1,3 @@ -import { Message, GuildTextableChannel, EmbedOptions, Role } from "eris"; import { GuildPluginData } from "knub"; import { UtilityPluginType } from "../types"; import { @@ -102,7 +101,7 @@ export async function getUserInfoEmbed( largest: 2, round: true, }); - const roles = member.roles.map(id => pluginData.guild.roles.get(id)).filter(r => r != null) as Role[]; + const roles = member.roles.map(id => pluginData.guild.roles.cache.get(id)).filter(r => r != null) as Role[]; roles.sort(sorter("position", "DESC")); embed.fields.push({ @@ -114,7 +113,7 @@ export async function getUserInfoEmbed( }); const voiceChannel = member.voiceState.channelID - ? pluginData.guild.channels.get(member.voiceState.channelID) + ? pluginData.guild.channels.cache.get(member.voiceState.channelID) : null; if (voiceChannel || member.voiceState.mute || member.voiceState.deaf) { embed.fields.push({ diff --git a/backend/src/plugins/Utility/guildReloads.ts b/backend/src/plugins/Utility/guildReloads.ts index 3de20bb8..a44b514d 100644 --- a/backend/src/plugins/Utility/guildReloads.ts +++ b/backend/src/plugins/Utility/guildReloads.ts @@ -1,3 +1 @@ -import { TextChannel } from "eris"; - export const activeReloads: Map = new Map(); diff --git a/backend/src/plugins/Utility/refreshMembers.ts b/backend/src/plugins/Utility/refreshMembers.ts index 50803e69..a0ffc09f 100644 --- a/backend/src/plugins/Utility/refreshMembers.ts +++ b/backend/src/plugins/Utility/refreshMembers.ts @@ -1,4 +1,3 @@ -import { Guild } from "eris"; import { HOURS, noop } from "../../utils"; const MEMBER_REFRESH_FREQUENCY = 1 * HOURS; // How often to do a full member refresh when using commands that need it diff --git a/backend/src/plugins/Utility/search.ts b/backend/src/plugins/Utility/search.ts index 751d42ad..4900d0ce 100644 --- a/backend/src/plugins/Utility/search.ts +++ b/backend/src/plugins/Utility/search.ts @@ -1,4 +1,3 @@ -import { Constants, Member, Message, User } from "eris"; import moment from "moment-timezone"; import escapeStringRegexp from "escape-string-regexp"; import { isFullMessage, MINUTES, multiSorter, noop, sorter, trimLines } from "../../utils"; @@ -396,7 +395,7 @@ async function performBanSearch( page = 1, perPage = SEARCH_RESULTS_PER_PAGE, ): Promise<{ results: User[]; totalResults: number; page: number; lastPage: number; from: number; to: number }> { - const member = pluginData.guild.members.get(pluginData.client.user.id); + const member = pluginData.guild.members.cache.get(pluginData.client.user!.id); if (member && !hasDiscordPermissions(member.permissions, Constants.Permissions.banMembers)) { throw new SearchError(`Unable to search bans: missing "Ban Members" permission`); } diff --git a/backend/src/plugins/WelcomeMessage/events/SendWelcomeMessageEvt.ts b/backend/src/plugins/WelcomeMessage/events/SendWelcomeMessageEvt.ts index 9ae1e85f..7317aaac 100644 --- a/backend/src/plugins/WelcomeMessage/events/SendWelcomeMessageEvt.ts +++ b/backend/src/plugins/WelcomeMessage/events/SendWelcomeMessageEvt.ts @@ -2,7 +2,7 @@ import { welcomeMessageEvt } from "../types"; import { renderTemplate, TemplateParseError } from "../../../templateFormatter"; import { createChunkedMessage, stripObjectToScalars } from "../../../utils"; import { LogType } from "../../../data/LogType"; -import { TextChannel } from "eris"; + import { sendDM } from "../../../utils/sendDM"; export const SendWelcomeMessageEvt = welcomeMessageEvt({ @@ -55,7 +55,7 @@ export const SendWelcomeMessageEvt = welcomeMessageEvt({ } if (config.send_to_channel) { - const channel = meta.args.guild.channels.get(config.send_to_channel); + const channel = meta.args.guild.channels.cache.get(config.send_to_channel); if (!channel || !(channel instanceof TextChannel)) return; try { diff --git a/backend/src/utils/erisAllowedMentionsToDjsMentionOptions.ts b/backend/src/utils/erisAllowedMentionsToDjsMentionOptions.ts new file mode 100644 index 00000000..776871d4 --- /dev/null +++ b/backend/src/utils/erisAllowedMentionsToDjsMentionOptions.ts @@ -0,0 +1,43 @@ +import { MessageMentionOptions, MessageMentionTypes } from "discord.js"; + +export function erisAllowedMentionsToDjsMentionOptions( + allowedMentions: erisAllowedMentionFormat | undefined, +): MessageMentionOptions | undefined { + if (allowedMentions === undefined) return undefined; + + let parse: MessageMentionTypes[] = []; + let users: string[] | undefined = undefined; + let roles: string[] | undefined = undefined; + + if (Array.isArray(allowedMentions.users)) { + users = allowedMentions.users; + } else if (allowedMentions.users === true) { + parse.push("users"); + } + + if (Array.isArray(allowedMentions.roles)) { + roles = allowedMentions.roles; + } else if (allowedMentions.roles === true) { + parse.push("roles"); + } + + if (allowedMentions.everyone === true) { + parse.push("everyone"); + } + + const mentions: MessageMentionOptions = { + parse, + users, + roles, + repliedUser: allowedMentions.repliedUser, + }; + + return mentions; +} + +export interface erisAllowedMentionFormat { + everyone: boolean | undefined; + users: boolean | string[] | undefined; + roles: boolean | string[] | undefined; + repliedUser: boolean | undefined; +} diff --git a/backend/src/utils/hasDiscordPermissions.ts b/backend/src/utils/hasDiscordPermissions.ts index 34b6d9e1..7cbe8750 100644 --- a/backend/src/utils/hasDiscordPermissions.ts +++ b/backend/src/utils/hasDiscordPermissions.ts @@ -5,7 +5,7 @@ import { Permissions } from "discord.js"; * @param requiredPermissions Bitmask of required permissions */ export function hasDiscordPermissions( - resolvedPermissions: Permissions | Readonly, + resolvedPermissions: Permissions | Readonly | null, requiredPermissions: number | bigint, ) { const allowedPermissions = BigInt(resolvedPermissions);