import { RequestTypes } from 'detritus-client-rest';
import { ShardClient } from '../client';
import { BaseCollection } from '../collections/basecollection';
import { BaseSet } from '../collections/baseset';
import { PermissionTools, UrlQuery } from '../utils';
import { BaseStructureData } from './basestructure';
import { Channel, ChannelGuildStageVoice, ChannelGuildVoice } from './channel';
import { Guild } from './guild';
import { Role } from './role';
import { User, UserMixin } from './user';
import { VoiceState } from './voicestate';
export declare type MemberOrUser = Member | User;
/**
 * Guild Member Structure
 * @category Structure
 */
export declare class Member extends UserMixin {
    readonly _keys: BaseSet<string>;
    readonly _keysMerge: BaseSet<string>;
    readonly _keysSkipDifference: BaseSet<string>;
    _avatar: null | string;
    _roles?: Array<string>;
    _permissions?: bigint;
    deaf: boolean;
    guildId: string;
    hoistedRoleId: null | string;
    isPending: boolean;
    joinedAtUnix: number;
    left: boolean;
    mute: boolean;
    nick: null | string;
    pending: boolean;
    premiumSinceUnix: number;
    user: User;
    constructor(client: ShardClient, data?: BaseStructureData, isClone?: boolean);
    get avatar(): null | string;
    get canAdministrator(): boolean;
    get canBanMembers(): boolean;
    get canChangeNickname(): boolean;
    get canChangeNicknames(): boolean;
    get canCreateInstantInvite(): boolean;
    get canKickMembers(): boolean;
    get canManageChannels(): boolean;
    get canManageEmojis(): boolean;
    get canManageGuild(): boolean;
    get canManageMessages(): boolean;
    get canManageRoles(): boolean;
    get canManageThreads(): boolean;
    get canManageWebhooks(): boolean;
    get canRequestToSpeak(): boolean;
    get canUseApplicationCommands(): boolean;
    get canUsePrivateThreads(): boolean;
    get canUsePublicThreads(): boolean;
    get canViewAuditLogs(): boolean;
    get color(): number;
    get colorRole(): null | Role;
    get guild(): Guild | null;
    get hasGuildAvatar(): boolean;
    get highestRole(): null | Role;
    get hoistedRole(): null | Role;
    get isBoosting(): boolean;
    get isOffline(): boolean;
    get isOwner(): boolean;
    get isPartial(): boolean;
    get joinedAt(): Date | null;
    get mention(): string;
    get name(): string;
    get names(): Array<string>;
    get permissions(): bigint;
    get premiumSince(): Date | null;
    get roles(): BaseCollection<string, null | Role>;
    get voiceChannel(): ChannelGuildStageVoice | ChannelGuildVoice | null;
    get voiceState(): null | VoiceState;
    avatarUrlFormat(format?: null | string, query?: UrlQuery): string;
    can(permissions: PermissionTools.PermissionChecks, options?: {
        ignoreAdministrator?: boolean;
        ignoreOwner?: boolean;
    }): boolean;
    canEdit(member: Member): boolean;
    canEditRole(roleId: Role | string): boolean;
    permissionsIn(channelId: Channel | string): bigint;
    addRole(roleId: string, options?: RequestTypes.AddGuildMemberRole): Promise<any>;
    ban(options?: RequestTypes.CreateGuildBan): Promise<any>;
    edit(options?: RequestTypes.EditGuildMember): Promise<any>;
    editNick(nick: string, options?: RequestTypes.EditGuildNick): Promise<any>;
    editVoiceState(options: RequestTypes.EditGuildVoiceState): Promise<any>;
    move(channelId: null | string, options?: RequestTypes.EditGuildMember): Promise<any>;
    remove(options?: RequestTypes.RemoveGuildMember): Promise<any>;
    removeBan(options?: RequestTypes.RemoveGuildBan): Promise<any>;
    removeRole(roleId: string, options?: RequestTypes.RemoveGuildMemberRole): Promise<any>;
    setDeaf(deaf: boolean, options?: RequestTypes.EditGuildMember): Promise<any>;
    setMute(mute: boolean, options?: RequestTypes.EditGuildMember): Promise<any>;
    difference(key: string, value: any): [boolean, any];
    hasDifference(key: string, value: any): boolean;
    mergeValue(key: string, value: any): void;
    toJSON(withRoles?: boolean): any;
}
