mirror of
https://github.com/ZeppelinBot/Zeppelin.git
synced 2025-03-15 05:41:51 +00:00
migrate permissions
Signed-off-by: GitHub <noreply@github.com>
This commit is contained in:
parent
8281299369
commit
fda9a35f29
23 changed files with 75 additions and 70 deletions
|
@ -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";
|
||||
|
||||
|
|
|
@ -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<AutoDeletePlugi
|
|||
const logs = pluginData.getPlugin(LogsPlugin);
|
||||
const perms = channel.permissionsFor(pluginData.client.user!.id);
|
||||
|
||||
if (!hasDiscordPermissions(perms, Permissions.FLAGS.VIEW_CHANNEL | Permissions.FLAGS.READ_MESSAGE_HISTORY)) {
|
||||
if (
|
||||
!hasDiscordPermissions(perms, PermissionsBitField.Flags.ViewChannel | PermissionsBitField.Flags.ReadMessageHistory)
|
||||
) {
|
||||
logs.logBotAlert({
|
||||
body: `Missing permissions to read messages or message history in auto-delete channel ${verboseChannelMention(
|
||||
channel,
|
||||
|
@ -35,7 +37,7 @@ export async function deleteNextItem(pluginData: GuildPluginData<AutoDeletePlugi
|
|||
return;
|
||||
}
|
||||
|
||||
if (!hasDiscordPermissions(perms, Permissions.FLAGS.MANAGE_MESSAGES)) {
|
||||
if (!hasDiscordPermissions(perms, PermissionsBitField.Flags.ManageMessages)) {
|
||||
logs.logBotAlert({
|
||||
body: `Missing permissions to delete messages in auto-delete channel ${verboseChannelMention(channel)}`,
|
||||
});
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
import { GuildChannel, Permissions } from "discord.js";
|
||||
import { GuildChannel, PermissionsBitField } from "discord.js";
|
||||
import { commandTypeHelpers as ct } from "../../../commandTypes";
|
||||
import { sendErrorMessage, sendSuccessMessage } from "../../../pluginUtils";
|
||||
import { canUseEmoji, customEmojiRegex, isEmoji } from "../../../utils";
|
||||
|
@ -7,7 +7,7 @@ import { missingPermissionError } from "../../../utils/missingPermissionError";
|
|||
import { readChannelPermissions } from "../../../utils/readChannelPermissions";
|
||||
import { autoReactionsCmd } from "../types";
|
||||
|
||||
const requiredPermissions = readChannelPermissions | Permissions.FLAGS.ADD_REACTIONS;
|
||||
const requiredPermissions = readChannelPermissions | PermissionsBitField.Flags.AddReactions;
|
||||
|
||||
export const NewAutoReactionsCmd = autoReactionsCmd({
|
||||
trigger: "auto_reactions",
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
import { GuildChannel, GuildTextBasedChannel, Permissions } from "discord.js";
|
||||
import { GuildChannel, GuildTextBasedChannel, PermissionsBitField } from "discord.js";
|
||||
import { LogType } from "../../../data/LogType";
|
||||
import { isDiscordAPIError } from "../../../utils";
|
||||
import { getMissingChannelPermissions } from "../../../utils/getMissingChannelPermissions";
|
||||
|
@ -8,7 +8,7 @@ import { LogsPlugin } from "../../Logs/LogsPlugin";
|
|||
import { autoReactionsEvt } from "../types";
|
||||
import { AutoReaction } from "../../../data/entities/AutoReaction";
|
||||
|
||||
const p = Permissions.FLAGS;
|
||||
const p = PermissionsBitField.Flags;
|
||||
|
||||
export const AddReactionsEvt = autoReactionsEvt({
|
||||
event: "messageCreate",
|
||||
|
@ -40,7 +40,7 @@ export const AddReactionsEvt = autoReactionsEvt({
|
|||
|
||||
const me = pluginData.guild.members.cache.get(pluginData.client.user!.id)!;
|
||||
if (me) {
|
||||
const missingPermissions = getMissingChannelPermissions(me, channel, readChannelPermissions | p.ADD_REACTIONS);
|
||||
const missingPermissions = getMissingChannelPermissions(me, channel, readChannelPermissions | p.AddReactions);
|
||||
if (missingPermissions) {
|
||||
const logs = pluginData.getPlugin(LogsPlugin);
|
||||
logs.logBotAlert({
|
||||
|
|
|
@ -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 AddRolesAction = automodAction({
|
||||
configType: t.array(t.string),
|
||||
|
@ -20,7 +20,7 @@ export const AddRolesAction = 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({
|
||||
|
|
|
@ -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<Record<PermissionString, boolean | null>> = {};
|
||||
const allow = new PermissionsBitField(overwrite?.allow ?? 0n).serialize();
|
||||
const deny = new PermissionsBitField(overwrite?.deny ?? 0n).serialize();
|
||||
const newPerms: Partial<Record<PermissionsString, boolean | null>> = {};
|
||||
|
||||
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 = <PermissionString[]>Object.keys(perms).filter((key) => perms[key]);
|
||||
await role.setPermissions(new Permissions(permsArray)).catch(noop);
|
||||
const permsArray = <PermissionsString[]>Object.keys(perms).filter((key) => perms[key]);
|
||||
await role.setPermissions(new PermissionsBitField(permsArray)).catch(noop);
|
||||
},
|
||||
});
|
||||
|
|
|
@ -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({
|
||||
|
|
|
@ -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(
|
||||
|
|
|
@ -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`,
|
||||
|
|
|
@ -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<Record<PermissionString, boolean | null>> = {};
|
||||
const allow = new PermissionsBitField(BigInt(override.allow)).serialize();
|
||||
const deny = new PermissionsBitField(BigInt(override.deny)).serialize();
|
||||
const perms: Partial<Record<PermissionsString, boolean | null>> = {};
|
||||
for (const key in allow) {
|
||||
if (allow[key]) {
|
||||
perms[key] = true;
|
||||
|
|
|
@ -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({
|
||||
|
|
|
@ -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}\``,
|
||||
});
|
||||
|
|
|
@ -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<boolean> {
|
||||
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`,
|
||||
});
|
||||
|
|
|
@ -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({
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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`);
|
||||
}
|
||||
|
||||
|
|
|
@ -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<Role | null>((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;
|
||||
|
|
|
@ -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<Permissions>,
|
||||
resolvedPermissions: PermissionsBitField | Readonly<PermissionsBitField>,
|
||||
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);
|
||||
}
|
||||
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
import { Permissions } from "discord.js";
|
||||
import { PermissionsBitField } from "discord.js";
|
||||
|
||||
const permissionNumberToName: Map<bigint, string> = 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);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -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<Permissions> | null,
|
||||
resolvedPermissions: PermissionsBitField | Readonly<PermissionsBitField> | null,
|
||||
requiredPermissions: number | bigint,
|
||||
) {
|
||||
if (resolvedPermissions == null) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (resolvedPermissions.has(Permissions.FLAGS.ADMINISTRATOR)) {
|
||||
if (resolvedPermissions.has(PermissionsBitField.Flags.Administrator)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Add table
Reference in a new issue