mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-10 17:34:58 +00:00
Discord: honor Administrator in permission checks
This commit is contained in:
@@ -10,6 +10,8 @@ import { normalizeDiscordToken } from "./token.js";
|
||||
const PERMISSION_ENTRIES = Object.entries(PermissionFlagsBits).filter(
|
||||
([, value]) => typeof value === "bigint",
|
||||
);
|
||||
const ALL_PERMISSIONS = PERMISSION_ENTRIES.reduce((acc, [, value]) => acc | value, 0n);
|
||||
const ADMINISTRATOR_BIT = PermissionFlagsBits.Administrator;
|
||||
|
||||
type DiscordClientOpts = {
|
||||
token?: string;
|
||||
@@ -68,6 +70,10 @@ function bitfieldToPermissions(bitfield: bigint) {
|
||||
.toSorted();
|
||||
}
|
||||
|
||||
function hasAdministrator(bitfield: bigint) {
|
||||
return (bitfield & ADMINISTRATOR_BIT) === ADMINISTRATOR_BIT;
|
||||
}
|
||||
|
||||
export function isThreadChannelType(channelType?: number) {
|
||||
return (
|
||||
channelType === ChannelType.GuildNewsThread ||
|
||||
@@ -121,6 +127,17 @@ export async function fetchChannelPermissionsDiscord(
|
||||
}
|
||||
}
|
||||
|
||||
if (hasAdministrator(base)) {
|
||||
return {
|
||||
channelId,
|
||||
guildId,
|
||||
permissions: bitfieldToPermissions(ALL_PERMISSIONS),
|
||||
raw: ALL_PERMISSIONS.toString(),
|
||||
isDm: false,
|
||||
channelType,
|
||||
};
|
||||
}
|
||||
|
||||
let permissions = base;
|
||||
const overwrites =
|
||||
"permission_overwrites" in channel ? (channel.permission_overwrites ?? []) : [];
|
||||
|
||||
Reference in New Issue
Block a user