import type { ActivityStore } from "./activity-log.js"; import { type BulkMemberRoleAuthority } from "./bulk-member-role-authority.js"; import { type MemberRoleAction } from "./constants.js"; import { type DiscordClient } from "./discord-client.js"; import type { GatewayChannelLayoutSource } from "./gateway-channel-layout.js"; import { type GuildChannelEvidenceView } from "./guild-channel-evidence.js"; import { type OperationStore } from "./operation-store.js"; import { type DiscordPermissionName } from "./permissions.js"; import type { ScopePolicy } from "./policy.js"; import { type NormalizedDiscordRole } from "./role-administration-service.js"; import type { RequestOptions } from "./types.js"; export declare const MEMBER_ROLE_IMPACT_PERMISSIONS: readonly ("ADD_REACTIONS" | "ATTACH_FILES" | "BYPASS_SLOWMODE" | "CONNECT" | "CREATE_EVENTS" | "CREATE_INSTANT_INVITE" | "CREATE_PRIVATE_THREADS" | "CREATE_PUBLIC_THREADS" | "DEAFEN_MEMBERS" | "EMBED_LINKS" | "MANAGE_CHANNELS" | "MANAGE_EVENTS" | "MANAGE_MESSAGES" | "MANAGE_ROLES" | "MANAGE_THREADS" | "MANAGE_WEBHOOKS" | "MENTION_EVERYONE" | "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_CHANNEL")[]; export type MemberRolePermissionDecision = "allowed" | "denied" | "ineffective"; export interface MemberRoleChangeRequest { action: MemberRoleAction; auditReason: string; guildId: string; operationKey: string; roleId: string; userId: string; } export interface NormalizedMemberRoleChangeRequest { action: MemberRoleAction; auditReason: string; guildId: string; operationKey: string; operationKeyHash: string; roleId: string; userId: string; } export interface MemberRolePermissionChange { after: MemberRolePermissionDecision; before: MemberRolePermissionDecision; permission: DiscordPermissionName; } export interface MemberRoleChannelImpact { channelId: string; channelType: number; changes: MemberRolePermissionChange[]; } export interface MemberRoleGuildPermissionImpact { added: DiscordPermissionName[]; after: DiscordPermissionName[]; before: DiscordPermissionName[]; removed: DiscordPermissionName[]; } export interface MemberRoleChangePlan { action: MemberRoleAction | "none"; applicationId: string; auditReason: string; botId: string; channelEvidence: GuildChannelEvidenceView; commonEvidenceDigest: string; createdAt: string; digest: string; guild: { id: string; name: string; ownerId: string; }; highRiskPermissions: DiscordPermissionName[]; highRiskPermissionGains: DiscordPermissionName[]; impact: { changedChannels: number; channels: MemberRoleChannelImpact[]; evaluatedChannels: number; guildPermissions: MemberRoleGuildPermissionImpact; permissions: DiscordPermissionName[]; }; member: { afterRoleIds: string[]; beforeRoleIds: string[]; id: string; username: string; }; operationKeyHash: string; permission: { botAdministrator: boolean; botEffectivePermissionNames: DiscordPermissionName[]; botEffectivePermissions: string; botHighestRoleIds: string[]; botHighestRolePosition: number; channelPermissionEscalationSubset: boolean; channelOverwriteUnknownPermissionBits: string; guildRoleUnknownPermissionBits: string; guildManageRoles: boolean; roleBelowBot: boolean; roleOverwriteUnknownPermissionBits: string; rolePermissionsSubset: boolean; targetBelowBot: boolean; targetHighestRoleIds: string[]; targetHighestRolePosition: number; }; requestedAction: MemberRoleAction; role: NormalizedDiscordRole; schemaVersion: number; status: "already-current" | "planned"; warnings: string[]; } export interface MemberRoleChangeResult { action: MemberRoleAction; activityId: string | null; guildId: string; observedRoleIds: string[]; operationKeyHash: string; planDigest: string; roleId: string; rolePresent: boolean; roleSnapshotMatched: boolean; schemaVersion: number; status: "already-current" | "completed" | "completed-with-drift"; userId: string; } export interface MemberRoleBatchPlanningResult { baselineCommonEvidenceDigest: string; plans: MemberRoleChangePlan[]; } export interface MemberRoleServiceOptions { activityStore: ActivityStore; client: Pick; clock?: () => Date; layoutSource: GatewayChannelLayoutSource; operationStore: OperationStore; planKey?: Uint8Array; policy: ScopePolicy; randomId?: () => string; } export declare function normalizeMemberRoleChangeRequest(request: MemberRoleChangeRequest): NormalizedMemberRoleChangeRequest; export declare class MemberRoleService { #private; constructor(options: MemberRoleServiceOptions); plan(applicationId: string, botId: string, request: MemberRoleChangeRequest, options?: RequestOptions): Promise; planForBulk(authority: BulkMemberRoleAuthority, applicationId: string, botId: string, request: MemberRoleChangeRequest, options?: RequestOptions): Promise; planBatchForBulk(authority: BulkMemberRoleAuthority, applicationId: string, botId: string, requests: readonly MemberRoleChangeRequest[], options?: RequestOptions): Promise; execute(applicationId: string, botId: string, request: MemberRoleChangeRequest, expectedDigest: string, options?: RequestOptions): Promise; executeForBulk(authority: BulkMemberRoleAuthority, applicationId: string, botId: string, request: MemberRoleChangeRequest, expectedDigest: string, options?: RequestOptions): Promise; } //# sourceMappingURL=member-role-service.d.ts.map