import type { DiscordChannel, DiscordGuildMember, DiscordRole } from "./types.js"; export declare const DISCORD_PERMISSIONS: Readonly<{ CREATE_INSTANT_INVITE: bigint; KICK_MEMBERS: bigint; BAN_MEMBERS: bigint; ADMINISTRATOR: bigint; MANAGE_CHANNELS: bigint; MANAGE_GUILD: bigint; ADD_REACTIONS: bigint; VIEW_AUDIT_LOG: bigint; PRIORITY_SPEAKER: bigint; STREAM: bigint; VIEW_CHANNEL: bigint; SEND_MESSAGES: bigint; SEND_TTS_MESSAGES: bigint; MANAGE_MESSAGES: bigint; EMBED_LINKS: bigint; ATTACH_FILES: bigint; READ_MESSAGE_HISTORY: bigint; MENTION_EVERYONE: bigint; USE_EXTERNAL_EMOJIS: bigint; VIEW_GUILD_INSIGHTS: bigint; CONNECT: bigint; SPEAK: bigint; MUTE_MEMBERS: bigint; DEAFEN_MEMBERS: bigint; MOVE_MEMBERS: bigint; USE_VAD: bigint; CHANGE_NICKNAME: bigint; MANAGE_NICKNAMES: bigint; MANAGE_ROLES: bigint; MANAGE_WEBHOOKS: bigint; MANAGE_GUILD_EXPRESSIONS: bigint; USE_APPLICATION_COMMANDS: bigint; REQUEST_TO_SPEAK: bigint; MANAGE_EVENTS: bigint; MANAGE_THREADS: bigint; CREATE_PUBLIC_THREADS: bigint; CREATE_PRIVATE_THREADS: bigint; USE_EXTERNAL_STICKERS: bigint; SEND_MESSAGES_IN_THREADS: bigint; USE_EMBEDDED_ACTIVITIES: bigint; MODERATE_MEMBERS: bigint; VIEW_CREATOR_MONETIZATION_ANALYTICS: bigint; USE_SOUNDBOARD: bigint; CREATE_GUILD_EXPRESSIONS: bigint; CREATE_EVENTS: bigint; USE_EXTERNAL_SOUNDS: bigint; SEND_VOICE_MESSAGES: bigint; SET_VOICE_CHANNEL_STATUS: bigint; SEND_POLLS: bigint; USE_EXTERNAL_APPS: bigint; PIN_MESSAGES: bigint; BYPASS_SLOWMODE: bigint; }>; export type DiscordPermissionName = keyof typeof DISCORD_PERMISSIONS; export declare const DISCORD_PERMISSION_NAMES: readonly ("ADD_REACTIONS" | "ADMINISTRATOR" | "ATTACH_FILES" | "BAN_MEMBERS" | "BYPASS_SLOWMODE" | "CHANGE_NICKNAME" | "CONNECT" | "CREATE_EVENTS" | "CREATE_GUILD_EXPRESSIONS" | "CREATE_INSTANT_INVITE" | "CREATE_PRIVATE_THREADS" | "CREATE_PUBLIC_THREADS" | "DEAFEN_MEMBERS" | "EMBED_LINKS" | "KICK_MEMBERS" | "MANAGE_CHANNELS" | "MANAGE_EVENTS" | "MANAGE_GUILD" | "MANAGE_GUILD_EXPRESSIONS" | "MANAGE_MESSAGES" | "MANAGE_NICKNAMES" | "MANAGE_ROLES" | "MANAGE_THREADS" | "MANAGE_WEBHOOKS" | "MENTION_EVERYONE" | "MODERATE_MEMBERS" | "MOVE_MEMBERS" | "MUTE_MEMBERS" | "PIN_MESSAGES" | "PRIORITY_SPEAKER" | "READ_MESSAGE_HISTORY" | "REQUEST_TO_SPEAK" | "SEND_MESSAGES" | "SEND_MESSAGES_IN_THREADS" | "SEND_POLLS" | "SEND_TTS_MESSAGES" | "SEND_VOICE_MESSAGES" | "SET_VOICE_CHANNEL_STATUS" | "SPEAK" | "STREAM" | "USE_APPLICATION_COMMANDS" | "USE_EMBEDDED_ACTIVITIES" | "USE_EXTERNAL_APPS" | "USE_EXTERNAL_EMOJIS" | "USE_EXTERNAL_SOUNDS" | "USE_EXTERNAL_STICKERS" | "USE_SOUNDBOARD" | "USE_VAD" | "VIEW_AUDIT_LOG" | "VIEW_CHANNEL" | "VIEW_CREATOR_MONETIZATION_ANALYTICS" | "VIEW_GUILD_INSIGHTS")[]; export declare const DISCORD_CHANNEL_PERMISSION_NAMES: readonly ["CREATE_INSTANT_INVITE", "MANAGE_CHANNELS", "ADD_REACTIONS", "PRIORITY_SPEAKER", "STREAM", "VIEW_CHANNEL", "SEND_MESSAGES", "SEND_TTS_MESSAGES", "MANAGE_MESSAGES", "EMBED_LINKS", "ATTACH_FILES", "READ_MESSAGE_HISTORY", "MENTION_EVERYONE", "USE_EXTERNAL_EMOJIS", "CONNECT", "SPEAK", "MUTE_MEMBERS", "DEAFEN_MEMBERS", "MOVE_MEMBERS", "USE_VAD", "MANAGE_ROLES", "MANAGE_WEBHOOKS", "USE_APPLICATION_COMMANDS", "REQUEST_TO_SPEAK", "MANAGE_EVENTS", "MANAGE_THREADS", "CREATE_PUBLIC_THREADS", "CREATE_PRIVATE_THREADS", "USE_EXTERNAL_STICKERS", "SEND_MESSAGES_IN_THREADS", "USE_EMBEDDED_ACTIVITIES", "USE_SOUNDBOARD", "CREATE_EVENTS", "USE_EXTERNAL_SOUNDS", "SEND_VOICE_MESSAGES", "SET_VOICE_CHANNEL_STATUS", "SEND_POLLS", "USE_EXTERNAL_APPS", "PIN_MESSAGES", "BYPASS_SLOWMODE"]; export type DiscordChannelPermissionName = typeof DISCORD_CHANNEL_PERMISSION_NAMES[number]; export declare const ALL_KNOWN_PERMISSION_BITS: bigint; export interface PermissionDecisionTrace { after: string; allow: string; before: string; deny: string; note: string; stage: string; } export interface BotChannelPermissionResult { administrator: boolean; appliedRoleIds: string[]; basePermissions: string; canReadMessages: boolean | null; confidence: "complete" | "partial"; decisionTrace: PermissionDecisionTrace[]; effectivePermissionNames: DiscordPermissionName[]; effectivePermissions: string; missingReadPermissions: DiscordPermissionName[]; permissionSourceChannelId: string; privateThreadAccess: "lookup-succeeded" | "not-applicable"; requiredReadPermissions: DiscordPermissionName[]; unknownPermissionBits: string; warnings: string[]; } export interface EvaluateBotChannelPermissionsOptions { botId: string; channel: DiscordChannel; guildId: string; member: DiscordGuildMember; permissionChannel: DiscordChannel; roles: readonly PermissionRoleEvidence[]; } export type PermissionRoleEvidence = Pick; export type GuildPermissionRoleEvidence = Pick & Partial>; export interface EvaluateGuildMemberPermissionsOptions { guildId: string; member: DiscordGuildMember; roles: readonly GuildPermissionRoleEvidence[]; } export interface GuildMemberPermissionResult { administrator: boolean; appliedRoleIds: string[]; complete: boolean; effectivePermissionNames: DiscordPermissionName[]; effectivePermissions: string; highestRoleIds: string[]; highestRolePosition: number; warnings: string[]; } export declare function parseDiscordPermissionBits(value: string, description?: string): bigint; export declare function discordPermissionNames(bits: bigint): DiscordPermissionName[]; export declare function discordPermissionBitfield(names: readonly DiscordPermissionName[]): bigint; export declare function unknownDiscordPermissionBits(bits: bigint): bigint; export declare function evaluateGuildMemberPermissions(options: EvaluateGuildMemberPermissionsOptions): GuildMemberPermissionResult; export declare function hasGuildPermission(result: GuildMemberPermissionResult, permission: DiscordPermissionName): boolean; export declare function evaluateBotChannelPermissions(options: EvaluateBotChannelPermissionsOptions): BotChannelPermissionResult; export declare const DISCORD_PERMISSION_ACTIONS: readonly ["view-channel", "read-messages", "send-message", "attach-file", "add-reaction", "delete-message", "pin-message", "manage-channel", "assign-role", "remove-role", "kick-member", "ban-member", "timeout-member"]; export type DiscordPermissionAction = typeof DISCORD_PERMISSION_ACTIONS[number]; export declare const DISCORD_CHANNEL_PERMISSION_ACTIONS: readonly ["view-channel", "read-messages", "send-message", "attach-file", "add-reaction", "delete-message", "pin-message", "manage-channel"]; export type DiscordChannelPermissionAction = typeof DISCORD_CHANNEL_PERMISSION_ACTIONS[number]; export declare const DEFAULT_DISCORD_CHANNEL_PERMISSION_ACTIONS: readonly ["view-channel", "read-messages", "send-message"]; export type PrincipalPermissionSubject = { id: string; kind: "connector" | "member"; member: DiscordGuildMember; } | { id: string; kind: "role"; }; export type PrincipalPermissionTarget = { id: string; kind: "member"; member: DiscordGuildMember; } | { id: string; kind: "role"; }; export type PrivateThreadMembershipEvidence = "member" | "not-member" | "unknown"; export type PrivateThreadAccess = "member" | "moderator" | "not-applicable" | "not-member" | "unknown"; export interface RoleHierarchyCheck { actorHighestRoleIds: string[]; actorHighestRolePosition: number | null; allowed: boolean | null; reason: string; status: "allowed" | "denied" | "not-applicable" | "unknown"; targetHighestRoleIds: string[]; targetHighestRolePosition: number | null; } export interface ImplicitPermissionDeny { missingPrerequisites: DiscordPermissionName[]; permission: DiscordPermissionName; reason: string; } export interface PrincipalPermissionResult { action: DiscordPermissionAction | null; administrator: boolean; allowed: boolean | null; appliedRoleIds: string[]; basePermissions: string; confidence: "complete" | "partial"; decisionTrace: PermissionDecisionTrace[]; effectivePermissionNames: DiscordPermissionName[]; effectivePermissions: string; guildOwner: boolean; hierarchy: RoleHierarchyCheck; ignoredMemberOverwriteCount: number; implicitDenies: ImplicitPermissionDeny[]; ineffectivePermissions: DiscordPermissionName[]; memberOverwriteCount: number; missingPermissions: DiscordPermissionName[]; permissionSourceChannelId: string | null; privateThreadAccess: PrivateThreadAccess; requestedPermissions: DiscordPermissionName[]; subjectId: string; subjectKind: PrincipalPermissionSubject["kind"]; subjectTimedOut: boolean; unknownPermissionBits: string; warnings: string[]; } export interface EvaluatePrincipalPermissionsOptions { action?: DiscordPermissionAction; channel?: DiscordChannel; guildId: string; guildOwnerId: string; now?: Date; permissionChannel?: DiscordChannel; privateThreadMembership?: PrivateThreadMembershipEvidence; requestedPermissions?: readonly DiscordPermissionName[]; roles: readonly PermissionRoleEvidence[]; subject: PrincipalPermissionSubject; target?: PrincipalPermissionTarget; } export declare function evaluatePrincipalPermissions(options: EvaluatePrincipalPermissionsOptions): PrincipalPermissionResult; //# sourceMappingURL=permissions.d.ts.map