diff --git a/backend/src/data/ApiPermissionAssignments.ts b/backend/src/data/ApiPermissionAssignments.ts index a83a91f9..71ad1c57 100644 --- a/backend/src/data/ApiPermissionAssignments.ts +++ b/backend/src/data/ApiPermissionAssignments.ts @@ -2,7 +2,6 @@ import { ApiPermissions } from "@shared/apiPermissions"; import { getRepository, Repository } from "typeorm"; import { BaseRepository } from "./BaseRepository"; import { ApiPermissionAssignment } from "./entities/ApiPermissionAssignment"; -import { Permissions } from "discord.js"; import { ApiAuditLog } from "./ApiAuditLog"; import { AuditLogEventTypes } from "./apiAuditLogTypes"; diff --git a/backend/src/plugins/AutoDelete/util/deleteNextItem.ts b/backend/src/plugins/AutoDelete/util/deleteNextItem.ts index 9ff6a8f0..408e100f 100644 --- a/backend/src/plugins/AutoDelete/util/deleteNextItem.ts +++ b/backend/src/plugins/AutoDelete/util/deleteNextItem.ts @@ -1,4 +1,4 @@ -import { Permissions, Snowflake, TextChannel } from "discord.js"; +import { PermissionsBitField, Snowflake, TextChannel } from "discord.js"; import { GuildPluginData } from "knub"; import moment from "moment-timezone"; import { channelToTemplateSafeChannel, userToTemplateSafeUser } from "../../../utils/templateSafeObjects"; @@ -26,7 +26,9 @@ export async function deleteNextItem(pluginData: GuildPluginData c.member).filter(nonNullish)); const me = pluginData.guild.members.cache.get(pluginData.client.user!.id)!; - const missingPermissions = getMissingPermissions(me.permissions, p.MANAGE_ROLES); + const missingPermissions = getMissingPermissions(me.permissions, p.ManageRoles); if (missingPermissions) { const logs = pluginData.getPlugin(LogsPlugin); logs.logBotAlert({ diff --git a/backend/src/plugins/Automod/actions/changePerms.ts b/backend/src/plugins/Automod/actions/changePerms.ts index ad060879..0ec0ead1 100644 --- a/backend/src/plugins/Automod/actions/changePerms.ts +++ b/backend/src/plugins/Automod/actions/changePerms.ts @@ -1,4 +1,4 @@ -import { Permissions, PermissionString } from "discord.js"; +import { PermissionsBitField, PermissionsString } from "discord.js"; import * as t from "io-ts"; import { automodAction } from "../helpers"; import { tNullable, isValidSnowflake, tPartialDictionary } from "../../../utils"; @@ -14,7 +14,7 @@ export const ChangePermsAction = automodAction({ configType: t.type({ target: t.string, channel: tNullable(t.string), - perms: tPartialDictionary(t.keyof(Permissions.FLAGS), tNullable(t.boolean)), + perms: tPartialDictionary(t.keyof(PermissionsBitField.Flags), tNullable(t.boolean)), }), defaultConfig: {}, @@ -52,9 +52,9 @@ export const ChangePermsAction = automodAction({ const channel = pluginData.guild.channels.resolve(channelId); if (!channel || channel.isThread()) return; const overwrite = channel.permissionOverwrites.cache.find((pw) => pw.id === target); - const allow = new Permissions(overwrite?.allow ?? 0n).serialize(); - const deny = new Permissions(overwrite?.deny ?? 0n).serialize(); - const newPerms: Partial> = {}; + const allow = new PermissionsBitField(overwrite?.allow ?? 0n).serialize(); + const deny = new PermissionsBitField(overwrite?.deny ?? 0n).serialize(); + const newPerms: Partial> = {}; for (const key in allow) { if (typeof actionConfig.perms[key] !== "undefined") { @@ -86,11 +86,11 @@ export const ChangePermsAction = automodAction({ if (!role) return; - const perms = new Permissions(role.permissions).serialize(); + const perms = new PermissionsBitField(role.permissions).serialize(); for (const key in actionConfig.perms) { perms[key] = actionConfig.perms[key]; } - const permsArray = Object.keys(perms).filter((key) => perms[key]); - await role.setPermissions(new Permissions(permsArray)).catch(noop); + const permsArray = Object.keys(perms).filter((key) => perms[key]); + await role.setPermissions(new PermissionsBitField(permsArray)).catch(noop); }, }); diff --git a/backend/src/plugins/Automod/actions/removeRoles.ts b/backend/src/plugins/Automod/actions/removeRoles.ts index 62b71480..6c8c12aa 100644 --- a/backend/src/plugins/Automod/actions/removeRoles.ts +++ b/backend/src/plugins/Automod/actions/removeRoles.ts @@ -1,4 +1,4 @@ -import { Permissions, Snowflake } from "discord.js"; +import { PermissionsBitField, Snowflake } from "discord.js"; import * as t from "io-ts"; import { LogType } from "../../../data/LogType"; import { nonNullish, unique } from "../../../utils"; @@ -10,7 +10,7 @@ import { LogsPlugin } from "../../Logs/LogsPlugin"; import { ignoreRoleChange } from "../functions/ignoredRoleChanges"; import { automodAction } from "../helpers"; -const p = Permissions.FLAGS; +const p = PermissionsBitField.Flags; export const RemoveRolesAction = automodAction({ configType: t.array(t.string), @@ -21,7 +21,7 @@ export const RemoveRolesAction = automodAction({ const members = unique(contexts.map((c) => c.member).filter(nonNullish)); const me = pluginData.guild.members.cache.get(pluginData.client.user!.id)!; - const missingPermissions = getMissingPermissions(me.permissions, p.MANAGE_ROLES); + const missingPermissions = getMissingPermissions(me.permissions, p.ManageRoles); if (missingPermissions) { const logs = pluginData.getPlugin(LogsPlugin); logs.logBotAlert({ diff --git a/backend/src/plugins/Automod/actions/reply.ts b/backend/src/plugins/Automod/actions/reply.ts index b40e744b..81104fc4 100644 --- a/backend/src/plugins/Automod/actions/reply.ts +++ b/backend/src/plugins/Automod/actions/reply.ts @@ -1,4 +1,4 @@ -import { MessageOptions, Permissions, Snowflake, TextChannel, ThreadChannel, User } from "discord.js"; +import { MessageOptions, PermissionsBitField, Snowflake, TextChannel, ThreadChannel, User } from "discord.js"; import * as t from "io-ts"; import { userToTemplateSafeUser } from "../../../utils/templateSafeObjects"; import { renderTemplate, TemplateSafeValueContainer } from "../../../templateFormatter"; @@ -72,7 +72,7 @@ export const ReplyAction = automodAction({ if ( !hasDiscordPermissions( channel.permissionsFor(pluginData.client.user!.id), - Permissions.FLAGS.SEND_MESSAGES | Permissions.FLAGS.VIEW_CHANNEL, + PermissionsBitField.Flags.SendMessages | PermissionsBitField.Flags.ViewChannel, ) ) { pluginData.getPlugin(LogsPlugin).logBotAlert({ @@ -84,7 +84,10 @@ export const ReplyAction = automodAction({ // If the message is an embed, check for embed permissions if ( typeof formatted !== "string" && - !hasDiscordPermissions(channel.permissionsFor(pluginData.client.user!.id), Permissions.FLAGS.EMBED_LINKS) + !hasDiscordPermissions( + channel.permissionsFor(pluginData.client.user!.id), + PermissionsBitField.Flags.EmbedLinks, + ) ) { pluginData.getPlugin(LogsPlugin).logBotAlert({ body: `Missing permissions to reply **with an embed** in ${verboseChannelMention( diff --git a/backend/src/plugins/CompanionChannels/functions/handleCompanionPermissions.ts b/backend/src/plugins/CompanionChannels/functions/handleCompanionPermissions.ts index ea09b548..cdefd637 100644 --- a/backend/src/plugins/CompanionChannels/functions/handleCompanionPermissions.ts +++ b/backend/src/plugins/CompanionChannels/functions/handleCompanionPermissions.ts @@ -1,4 +1,4 @@ -import { Permissions, Snowflake, StageChannel, TextChannel, VoiceChannel } from "discord.js"; +import { PermissionsBitField, Snowflake, StageChannel, TextChannel, VoiceChannel } from "discord.js"; import { GuildPluginData } from "knub"; import { LogType } from "../../../data/LogType"; import { isDiscordAPIError, MINUTES } from "../../../utils"; @@ -64,7 +64,7 @@ export async function handleCompanionPermissions( const channel = pluginData.guild.channels.cache.get(channelId as Snowflake); if (!channel || !(channel instanceof TextChannel)) continue; pluginData.state.serverLogs.ignoreLog(LogType.CHANNEL_UPDATE, channelId, 3 * 1000); - const fullSerialized = new Permissions(BigInt(permissions)).serialize(); + const fullSerialized = new PermissionsBitField(BigInt(permissions)).serialize(); const onlyAllowed = filterObject(fullSerialized, (v) => v === true); await channel.permissionOverwrites.create(userId, onlyAllowed, { reason: `Companion Channel for ${voiceChannel!.id} | User Joined`, diff --git a/backend/src/plugins/CustomEvents/actions/setChannelPermissionOverrides.ts b/backend/src/plugins/CustomEvents/actions/setChannelPermissionOverrides.ts index 6b9e9b1b..a1aa2e09 100644 --- a/backend/src/plugins/CustomEvents/actions/setChannelPermissionOverrides.ts +++ b/backend/src/plugins/CustomEvents/actions/setChannelPermissionOverrides.ts @@ -1,4 +1,4 @@ -import { Permissions, Snowflake, TextChannel, PermissionString } from "discord.js"; +import { Snowflake, TextChannel, PermissionsString, PermissionsBitField } from "discord.js"; import * as t from "io-ts"; import { GuildPluginData } from "knub"; import { ActionError } from "../ActionError"; @@ -32,9 +32,9 @@ export async function setChannelPermissionOverridesAction( } for (const override of action.overrides) { - const allow = new Permissions(BigInt(override.allow)).serialize(); - const deny = new Permissions(BigInt(override.deny)).serialize(); - const perms: Partial> = {}; + const allow = new PermissionsBitField(BigInt(override.allow)).serialize(); + const deny = new PermissionsBitField(BigInt(override.deny)).serialize(); + const perms: Partial> = {}; for (const key in allow) { if (allow[key]) { perms[key] = true; diff --git a/backend/src/plugins/InternalPoster/functions/getOrCreateWebhookForChannel.ts b/backend/src/plugins/InternalPoster/functions/getOrCreateWebhookForChannel.ts index 9785271e..d0652f3b 100644 --- a/backend/src/plugins/InternalPoster/functions/getOrCreateWebhookForChannel.ts +++ b/backend/src/plugins/InternalPoster/functions/getOrCreateWebhookForChannel.ts @@ -1,6 +1,6 @@ import { GuildPluginData } from "knub"; import { InternalPosterPluginType } from "../types"; -import { AnyChannel, GuildChannel, MessageManager, NewsChannel, Permissions, TextChannel } from "discord.js"; +import { AnyChannel, GuildChannel, MessageManager, NewsChannel, PermissionsBitField, TextChannel } from "discord.js"; import { isDiscordAPIError } from "../../../utils"; type WebhookInfo = [id: string, token: string]; @@ -27,7 +27,7 @@ export async function getOrCreateWebhookForChannel( // Create new webhook const member = pluginData.client.user && pluginData.guild.members.cache.get(pluginData.client.user.id); - if (!member || member.permissions.has(Permissions.FLAGS.MANAGE_WEBHOOKS)) { + if (!member || member.permissions.has(PermissionsBitField.Flags.ManageWebhooks)) { try { const webhook = await channel.createWebhook(`Zephook ${channel.id}`); await pluginData.state.webhooks.create({ diff --git a/backend/src/plugins/ModActions/events/PostAlertOnMemberJoinEvt.ts b/backend/src/plugins/ModActions/events/PostAlertOnMemberJoinEvt.ts index 39a11c25..73a8b3ec 100644 --- a/backend/src/plugins/ModActions/events/PostAlertOnMemberJoinEvt.ts +++ b/backend/src/plugins/ModActions/events/PostAlertOnMemberJoinEvt.ts @@ -1,4 +1,4 @@ -import { Permissions, Snowflake, TextChannel } from "discord.js"; +import { PermissionsBitField, Snowflake, TextChannel } from "discord.js"; import { LogType } from "../../../data/LogType"; import { resolveMember } from "../../../utils"; import { hasDiscordPermissions } from "../../../utils/hasDiscordPermissions"; @@ -39,7 +39,7 @@ export const PostAlertOnMemberJoinEvt = modActionsEvt({ const botMember = await resolveMember(pluginData.client, pluginData.guild, pluginData.client.user!.id); const botPerms = alertChannel.permissionsFor(botMember ?? pluginData.client.user!.id); - if (!hasDiscordPermissions(botPerms, Permissions.FLAGS.SEND_MESSAGES)) { + if (!hasDiscordPermissions(botPerms, PermissionsBitField.Flags.SendMessages)) { logs.logBotAlert({ body: `Missing "Send Messages" permissions for the \`alert_channel\` configured in \`mod_actions\`: \`${alertChannelId}\``, }); diff --git a/backend/src/plugins/ModActions/functions/isBanned.ts b/backend/src/plugins/ModActions/functions/isBanned.ts index 57ea8bf4..819c3a85 100644 --- a/backend/src/plugins/ModActions/functions/isBanned.ts +++ b/backend/src/plugins/ModActions/functions/isBanned.ts @@ -1,4 +1,4 @@ -import { Permissions, Snowflake } from "discord.js"; +import { PermissionsBitField, Snowflake } from "discord.js"; import { GuildPluginData } from "knub"; import { LogType } from "../../../data/LogType"; import { isDiscordAPIError, isDiscordHTTPError, SECONDS, sleep } from "../../../utils"; @@ -12,7 +12,7 @@ export async function isBanned( timeout: number = 5 * SECONDS, ): Promise { const botMember = pluginData.guild.members.cache.get(pluginData.client.user!.id); - if (botMember && !hasDiscordPermissions(botMember.permissions, Permissions.FLAGS.BAN_MEMBERS)) { + if (botMember && !hasDiscordPermissions(botMember.permissions, PermissionsBitField.Flags.BanMembers)) { pluginData.getPlugin(LogsPlugin).logBotAlert({ body: `Missing "Ban Members" permission to check for existing bans`, }); diff --git a/backend/src/plugins/Persist/events/LoadDataEvt.ts b/backend/src/plugins/Persist/events/LoadDataEvt.ts index 699fb703..7052f74b 100644 --- a/backend/src/plugins/Persist/events/LoadDataEvt.ts +++ b/backend/src/plugins/Persist/events/LoadDataEvt.ts @@ -1,4 +1,4 @@ -import { GuildMemberEditData, Permissions } from "discord.js"; +import { GuildMemberEditData, PermissionsBitField } from "discord.js"; import intersection from "lodash.intersection"; import { memberToTemplateSafeMember } from "../../../utils/templateSafeObjects"; import { LogType } from "../../../data/LogType"; @@ -9,7 +9,7 @@ import { missingPermissionError } from "../../../utils/missingPermissionError"; import { LogsPlugin } from "../../Logs/LogsPlugin"; import { persistEvt } from "../types"; -const p = Permissions.FLAGS; +const p = PermissionsBitField.Flags; export const LoadDataEvt = persistEvt({ event: "guildMemberAdd", @@ -33,8 +33,8 @@ export const LoadDataEvt = persistEvt({ // Check permissions const me = pluginData.guild.members.cache.get(pluginData.client.user!.id)!; let requiredPermissions = 0n; - if (config.persist_nicknames) requiredPermissions |= p.MANAGE_NICKNAMES; - if (config.persisted_roles) requiredPermissions |= p.MANAGE_ROLES; + if (config.persist_nicknames) requiredPermissions |= p.ManageNicknames; + if (config.persisted_roles) requiredPermissions |= p.ManageRoles; const missingPermissions = getMissingPermissions(me.permissions, requiredPermissions); if (missingPermissions) { pluginData.getPlugin(LogsPlugin).logBotAlert({ diff --git a/backend/src/plugins/Slowmode/commands/SlowmodeSetCmd.ts b/backend/src/plugins/Slowmode/commands/SlowmodeSetCmd.ts index 11dd8d4e..d86a59f0 100644 --- a/backend/src/plugins/Slowmode/commands/SlowmodeSetCmd.ts +++ b/backend/src/plugins/Slowmode/commands/SlowmodeSetCmd.ts @@ -1,4 +1,4 @@ -import { ChannelType, GuildTextBasedChannel, Permissions, TextChannel, ThreadChannel, Util } from "discord.js"; +import { ChannelType, GuildTextBasedChannel, PermissionsBitField, TextChannel, ThreadChannel, Util } from "discord.js"; import humanizeDuration from "humanize-duration"; import { commandTypeHelpers as ct } from "../../../commandTypes"; import { sendErrorMessage, sendSuccessMessage } from "../../../pluginUtils"; @@ -88,7 +88,7 @@ export const SlowmodeSetCmd = slowmodeCmd({ if (mode === "native") { const missingPermissions = getMissingPermissions( - channelPermissions ?? new Permissions(), + channelPermissions ?? new PermissionsBitField(), NATIVE_SLOWMODE_PERMISSIONS, ); if (missingPermissions) { @@ -103,7 +103,7 @@ export const SlowmodeSetCmd = slowmodeCmd({ if (mode === "bot") { const missingPermissions = getMissingPermissions( - channelPermissions ?? new Permissions(), + channelPermissions ?? new PermissionsBitField(), BOT_SLOWMODE_PERMISSIONS, ); if (missingPermissions) { diff --git a/backend/src/plugins/Slowmode/requiredPermissions.ts b/backend/src/plugins/Slowmode/requiredPermissions.ts index ea9065be..1a8ac41d 100644 --- a/backend/src/plugins/Slowmode/requiredPermissions.ts +++ b/backend/src/plugins/Slowmode/requiredPermissions.ts @@ -1,8 +1,8 @@ -import { Permissions } from "discord.js"; +import { PermissionsBitField } from "discord.js"; -const p = Permissions.FLAGS; +const p = PermissionsBitField.Flags; -export const NATIVE_SLOWMODE_PERMISSIONS = p.VIEW_CHANNEL | p.MANAGE_CHANNELS; -export const BOT_SLOWMODE_PERMISSIONS = p.VIEW_CHANNEL | p.MANAGE_ROLES | p.MANAGE_MESSAGES; -export const BOT_SLOWMODE_CLEAR_PERMISSIONS = p.VIEW_CHANNEL | p.MANAGE_ROLES; -export const BOT_SLOWMODE_DISABLE_PERMISSIONS = p.VIEW_CHANNEL | p.MANAGE_ROLES; +export const NATIVE_SLOWMODE_PERMISSIONS = p.ViewChannel | p.ManageChannels; +export const BOT_SLOWMODE_PERMISSIONS = p.ViewChannel | p.ManageRoles | p.ManageMessages; +export const BOT_SLOWMODE_CLEAR_PERMISSIONS = p.ViewChannel | p.ManageRoles; +export const BOT_SLOWMODE_DISABLE_PERMISSIONS = p.ViewChannel | p.ManageRoles; diff --git a/backend/src/plugins/Utility/functions/getRoleInfoEmbed.ts b/backend/src/plugins/Utility/functions/getRoleInfoEmbed.ts index f58f61be..7edab97d 100644 --- a/backend/src/plugins/Utility/functions/getRoleInfoEmbed.ts +++ b/backend/src/plugins/Utility/functions/getRoleInfoEmbed.ts @@ -1,4 +1,4 @@ -import { MessageEmbedOptions, Permissions, Role } from "discord.js"; +import { MessageEmbedOptions, PermissionsBitField, Role } from "discord.js"; import humanizeDuration from "humanize-duration"; import { GuildPluginData } from "knub"; import moment from "moment-timezone"; @@ -36,8 +36,8 @@ export async function getRoleInfoEmbed( round: true, }); - const rolePerms = role.permissions.has(Permissions.FLAGS.ADMINISTRATOR) - ? [PERMISSION_NAMES.ADMINISTRATOR] + const rolePerms = role.permissions.has(PermissionsBitField.Flags.Administrator) + ? [PERMISSION_NAMES.Administrator] : role.permissions.toArray().map((p) => PERMISSION_NAMES[p]); // -1 because of the @everyone role diff --git a/backend/src/plugins/Utility/search.ts b/backend/src/plugins/Utility/search.ts index 440652b5..7fcccb99 100644 --- a/backend/src/plugins/Utility/search.ts +++ b/backend/src/plugins/Utility/search.ts @@ -4,7 +4,7 @@ import { MessageActionRow, MessageButton, MessageComponentInteraction, - Permissions, + PermissionsBitField, Snowflake, TextChannel, User, @@ -430,7 +430,7 @@ async function performBanSearch( perPage = SEARCH_RESULTS_PER_PAGE, ): Promise<{ results: User[]; totalResults: number; page: number; lastPage: number; from: number; to: number }> { const member = pluginData.guild.members.cache.get(pluginData.client.user!.id); - if (member && !hasDiscordPermissions(member.permissions, Permissions.FLAGS.BAN_MEMBERS)) { + if (member && !hasDiscordPermissions(member.permissions, PermissionsBitField.Flags.BanMembers)) { throw new SearchError(`Unable to search bans: missing "Ban Members" permission`); } diff --git a/backend/src/utils/canAssignRole.ts b/backend/src/utils/canAssignRole.ts index a88a61e9..96ec92e4 100644 --- a/backend/src/utils/canAssignRole.ts +++ b/backend/src/utils/canAssignRole.ts @@ -1,9 +1,9 @@ -import { Guild, GuildMember, Permissions, Role, Snowflake } from "discord.js"; +import { Guild, GuildMember, PermissionsBitField, Role, Snowflake } from "discord.js"; import { getMissingPermissions } from "./getMissingPermissions"; import { hasDiscordPermissions } from "./hasDiscordPermissions"; export function canAssignRole(guild: Guild, member: GuildMember, roleId: string) { - if (getMissingPermissions(member.permissions, Permissions.FLAGS.MANAGE_ROLES)) { + if (getMissingPermissions(member.permissions, PermissionsBitField.Flags.ManageRoles)) { return false; } @@ -18,7 +18,7 @@ export function canAssignRole(guild: Guild, member: GuildMember, roleId: string) const memberRoles = member.roles.cache; const highestRoleWithManageRoles = memberRoles.reduce((highest, role) => { - if (!hasDiscordPermissions(role.permissions, Permissions.FLAGS.MANAGE_ROLES)) return highest; + if (!hasDiscordPermissions(role.permissions, PermissionsBitField.Flags.ManageRoles)) return highest; if (highest == null) return role; if (role.position > highest.position) return role; return highest; diff --git a/backend/src/utils/getMissingPermissions.ts b/backend/src/utils/getMissingPermissions.ts index 3b1adf45..14ac7e03 100644 --- a/backend/src/utils/getMissingPermissions.ts +++ b/backend/src/utils/getMissingPermissions.ts @@ -1,4 +1,4 @@ -import { Permissions } from "discord.js"; +import { PermissionsBitField } from "discord.js"; /** * @param resolvedPermissions A Permission object from e.g. GuildChannel#permissionsFor() or Member#permission @@ -6,13 +6,13 @@ import { Permissions } from "discord.js"; * @return Bitmask of missing permissions */ export function getMissingPermissions( - resolvedPermissions: Permissions | Readonly, + resolvedPermissions: PermissionsBitField | Readonly, requiredPermissions: number | bigint, ): bigint { const allowedPermissions = resolvedPermissions; const nRequiredPermissions = requiredPermissions; - if (Boolean(allowedPermissions.bitfield & Permissions.FLAGS.ADMINISTRATOR)) { + if (Boolean(allowedPermissions.bitfield & PermissionsBitField.Flags.Administrator)) { return BigInt(0); } diff --git a/backend/src/utils/getPermissionNames.ts b/backend/src/utils/getPermissionNames.ts index bc05ee64..e0dd105c 100644 --- a/backend/src/utils/getPermissionNames.ts +++ b/backend/src/utils/getPermissionNames.ts @@ -1,11 +1,11 @@ -import { Permissions } from "discord.js"; +import { PermissionsBitField } from "discord.js"; const permissionNumberToName: Map = new Map(); const ignoredPermissionConstants = ["all", "allGuild", "allText", "allVoice"]; -for (const key in Permissions.FLAGS) { +for (const key in PermissionsBitField.Flags) { if (ignoredPermissionConstants.includes(key)) continue; - permissionNumberToName.set(BigInt(Permissions.FLAGS[key]), key); + permissionNumberToName.set(BigInt(PermissionsBitField.Flags[key]), key); } /** diff --git a/backend/src/utils/hasDiscordPermissions.ts b/backend/src/utils/hasDiscordPermissions.ts index fbf81506..e56b4fbb 100644 --- a/backend/src/utils/hasDiscordPermissions.ts +++ b/backend/src/utils/hasDiscordPermissions.ts @@ -1,18 +1,18 @@ -import { Permissions, PermissionString } from "discord.js"; +import { PermissionsBitField } from "discord.js"; /** * @param resolvedPermissions A Permission object from e.g. GuildChannel#permissionsOf() or Member#permission * @param requiredPermissions Bitmask of required permissions */ export function hasDiscordPermissions( - resolvedPermissions: Permissions | Readonly | null, + resolvedPermissions: PermissionsBitField | Readonly | null, requiredPermissions: number | bigint, ) { if (resolvedPermissions == null) { return false; } - if (resolvedPermissions.has(Permissions.FLAGS.ADMINISTRATOR)) { + if (resolvedPermissions.has(PermissionsBitField.Flags.Administrator)) { return true; } diff --git a/backend/src/utils/readChannelPermissions.ts b/backend/src/utils/readChannelPermissions.ts index 16dae413..643b9c9d 100644 --- a/backend/src/utils/readChannelPermissions.ts +++ b/backend/src/utils/readChannelPermissions.ts @@ -1,9 +1,10 @@ -import { Permissions } from "discord.js"; +import { PermissionsBitField } from "discord.js"; /** * Bitmask of permissions required to read messages in a channel */ -export const readChannelPermissions = Permissions.FLAGS.VIEW_CHANNEL | Permissions.FLAGS.READ_MESSAGE_HISTORY; +export const readChannelPermissions = + PermissionsBitField.Flags.ViewChannel | PermissionsBitField.Flags.ReadMessageHistory; /** * Bitmask of permissions required to read messages in a channel (bigint)