import type { ActivityStore } from "./activity-log.js"; import { type MemberVoiceAction } from "./constants.js"; import { type DiscordClient } from "./discord-client.js"; import { type OperationStore } from "./operation-store.js"; import { type DiscordPermissionName } from "./permissions.js"; import type { ScopePolicy } from "./policy.js"; import type { RequestOptions } from "./types.js"; interface MemberVoiceRequestBase { action: MemberVoiceAction; auditReason: string; guildId: string; operationKey: string; userId: string; } export type MemberVoiceChangeRequest = MemberVoiceRequestBase & ({ action: "disconnect"; } | { action: "move"; destinationChannelId: string; } | { action: "set-server-deafen"; enabled: boolean; } | { action: "set-server-mute"; enabled: boolean; }); interface NormalizedMemberVoiceRequestBase { action: MemberVoiceAction; auditReason: string; guildId: string; operationKeyHash: string; userId: string; } export type NormalizedMemberVoiceChangeRequest = NormalizedMemberVoiceRequestBase & ({ action: "disconnect"; } | { action: "move"; destinationChannelId: string; } | { action: "set-server-deafen"; enabled: boolean; } | { action: "set-server-mute"; enabled: boolean; }); export interface MemberVoiceChannelView { guildId: string; id: string; name: string; type: "stage" | "voice"; } export interface MemberVoiceStateView { channel: MemberVoiceChannelView | null; connected: boolean; serverDeafened: boolean | null; serverMuted: boolean | null; unknownFieldCount: number; userId: string; } export interface MemberVoicePermissionEvidence { administrator: boolean; allowed: true; appliedRoleIds: string[]; effectivePermissionNames: DiscordPermissionName[]; effectivePermissions: string; guildOwner: boolean; requiredPermissions: DiscordPermissionName[]; unknownPermissionBits: "0"; warnings: string[]; } export interface MemberVoiceHierarchyEvidence { botHighestRoleIds: string[]; botHighestRolePosition: number; targetAdministrator: false; targetBelowBot: true; targetHighestRoleIds: string[]; targetHighestRolePosition: number; } export interface MemberVoicePrivacyProjection { enumeration: "none"; omittedFields: readonly string[]; persistence: "content-free-outcomes-only"; rawPayloadExposed: false; } export interface MemberVoiceAuditResult { applicationId: string; botId: string; guild: { id: string; name: string; ownerId: string; }; member: { id: string; username: string; }; permission: MemberVoicePermissionEvidence | null; privacy: MemberVoicePrivacyProjection; schemaVersion: number; state: MemberVoiceStateView; status: "ok"; warnings: string[]; } export interface MemberVoiceChangePlan extends Omit { action: MemberVoiceAction; auditReason: string; createdAt: string; destination: MemberVoiceChannelView | null; destinationBotPermission: MemberVoicePermissionEvidence | null; destinationTargetPermission: MemberVoicePermissionEvidence | null; digest: string; hierarchy: MemberVoiceHierarchyEvidence; operationKeyHash: string; requestedEnabled: boolean | null; risks: string[]; status: "already-current" | "planned"; writeRequired: boolean; } export interface MemberVoiceChangeResult { action: MemberVoiceAction; activityId: string | null; guildId: string; observed: MemberVoiceStateView; operationKeyHash: string; planDigest: string; schemaVersion: number; status: "already-current" | "completed" | "completed-with-drift"; userId: string; verification: "drift" | "match" | "not-required"; } export interface MemberVoiceServiceOptions { activityStore: ActivityStore; client: Pick; clock?: () => Date; operationStore: OperationStore; planKey?: Uint8Array; policy: ScopePolicy; randomId?: () => string; } export declare function normalizeMemberVoiceChangeRequest(request: MemberVoiceChangeRequest): NormalizedMemberVoiceChangeRequest; export declare function assertMemberVoiceGetInput(guildId: string, userId: string): void; export declare class MemberVoiceService { #private; constructor(options: MemberVoiceServiceOptions); get(applicationId: string, botId: string, guildId: string, userId: string, options?: RequestOptions): Promise; plan(applicationId: string, botId: string, request: MemberVoiceChangeRequest, options?: RequestOptions): Promise; execute(applicationId: string, botId: string, request: MemberVoiceChangeRequest, expectedDigest: string, options?: RequestOptions): Promise; } export {}; //# sourceMappingURL=member-voice-service.d.ts.map