import { TLObject } from '../TL.js';
import { Raw } from '../../platform.node.js';
import { User } from '../Advanced/User.js';
import { Chat } from '../Advanced/Chat.js';
import type { Snake } from '../../Client/index.js';
export type TypeChatMember = ChatMemberOwner | ChatMemberAdministrator | ChatMemberMember | ChatMemberRestricted | ChatMemberLeft | ChatMemberBanned;
export interface TypeChatMemberUpdated {
    chat: Chat;
    from: User;
    date: Date;
    viaChatFolderInviteLink: boolean;
    oldChatMember?: TypeChatMember;
    newChatMember?: TypeChatMember;
    inviteLink?: string;
}
export declare class ChatMemberUpdated extends TLObject {
    chat: Chat;
    from: User;
    date: Date;
    viaChatFolderInviteLink: boolean;
    oldChatMember?: TypeChatMember;
    newChatMember?: TypeChatMember;
    inviteLink?: string;
    constructor({ chat, from, date, viaChatFolderInviteLink, oldChatMember, newChatMember, inviteLink, }: TypeChatMemberUpdated, client: Snake);
    static parse(client: Snake, update: Raw.UpdateChannelParticipant | Raw.UpdateChatParticipant, chats: Array<Raw.TypeChat>, users: Array<Raw.TypeUser>): ChatMemberUpdated;
}
export interface TypeChatMemberOwner {
    status: 'creator';
    user: User;
    isAnonymous: boolean;
    customTitle?: string;
}
export declare class ChatMemberOwner extends TLObject {
    status: 'creator';
    user: User;
    isAnonymous: boolean;
    customTitle?: string;
    constructor({ status, user, isAnonymous, customTitle }: TypeChatMemberOwner, client: Snake);
    static parse(client: Snake, member: Raw.ChannelParticipantCreator | Raw.ChatParticipantCreator, users: Array<Raw.TypeUser>): ChatMemberOwner;
}
export interface TypeChatMemberAdministrator {
    status: 'administrator';
    user: User;
    canBeEdited: boolean;
    isAnonymous: boolean;
    canManageChat: boolean;
    canDeleteMessages: boolean;
    canRestrictMembers: boolean;
    canManageVideoChats: boolean;
    canPromoteMembers: boolean;
    canChangeInfo: boolean;
    canInviteUsers: boolean;
    joinedDate: Date;
    canPostMessages?: boolean;
    canEditMessages?: boolean;
    canPinMessages?: boolean;
    canManageTopics?: boolean;
    customTitle?: string;
}
export declare class ChatMemberAdministrator extends TLObject {
    status: 'administrator';
    user: User;
    canBeEdited: boolean;
    isAnonymous: boolean;
    canManageChat: boolean;
    canDeleteMessages: boolean;
    canRestrictMembers: boolean;
    canManageVideoChats: boolean;
    canPromoteMembers: boolean;
    canChangeInfo: boolean;
    canInviteUsers: boolean;
    joinedDate: Date;
    canPostMessages?: boolean;
    canEditMessages?: boolean;
    canPinMessages?: boolean;
    canManageTopics?: boolean;
    customTitle?: string;
    constructor({ status, user, canBeEdited, isAnonymous, canManageChat, canDeleteMessages, canRestrictMembers, canManageVideoChats, canPromoteMembers, canChangeInfo, canInviteUsers, joinedDate, canPostMessages, canEditMessages, canPinMessages, canManageTopics, customTitle, }: TypeChatMemberAdministrator, client: Snake);
    static parse(client: Snake, member: Raw.ChatParticipantAdmin | Raw.ChannelParticipantAdmin, users: Array<Raw.TypeUser>): ChatMemberAdministrator;
}
export interface TypeChatMemberMember {
    status: 'member';
    user: User;
    joinedDate: Date;
}
export declare class ChatMemberMember extends TLObject {
    status: 'member';
    user: User;
    joinedDate: Date;
    constructor({ status, user, joinedDate }: TypeChatMemberMember, client: Snake);
    static parse(client: Snake, member: Raw.ChatParticipant | Raw.ChannelParticipant | Raw.ChannelParticipantSelf, users: Array<Raw.TypeUser>): ChatMemberMember;
}
export interface TypeChatMemberRestricted {
    status: 'restricted';
    user: User;
    isMember: boolean;
    canSendMessages: boolean;
    canSendAudios: boolean;
    canSendDocument: boolean;
    canSendPhotos: boolean;
    canSendVideos: boolean;
    canSendVideoNotes: boolean;
    canSendVoiceNotes: boolean;
    canSendPolls: boolean;
    canSendOtherMessages: boolean;
    canAddWebPagePreviews: boolean;
    canChangeInfo: boolean;
    canInviteUsers: boolean;
    canPinMessages: boolean;
    canManageTopics: boolean;
    untilDate: typeof Infinity | Date;
    joinedDate: Date;
}
export declare class ChatMemberRestricted extends TLObject {
    status: 'restricted';
    user: User;
    isMember: boolean;
    canSendMessages: boolean;
    canSendAudios: boolean;
    canSendDocument: boolean;
    canSendPhotos: boolean;
    canSendVideos: boolean;
    canSendVideoNotes: boolean;
    canSendVoiceNotes: boolean;
    canSendPolls: boolean;
    canSendOtherMessages: boolean;
    canAddWebPagePreviews: boolean;
    canChangeInfo: boolean;
    canInviteUsers: boolean;
    canPinMessages: boolean;
    canManageTopics: boolean;
    untilDate: typeof Infinity | Date;
    joinedDate: Date;
    constructor({ status, user, isMember, canSendMessages, canSendAudios, canSendDocument, canSendPhotos, canSendVideos, canSendVideoNotes, canSendVoiceNotes, canSendPolls, canSendOtherMessages, canAddWebPagePreviews, canChangeInfo, canInviteUsers, canPinMessages, canManageTopics, untilDate, joinedDate, }: TypeChatMemberRestricted, client: Snake);
    static parse(client: Snake, member: Raw.ChannelParticipantBanned, users: Array<Raw.TypeUser>): ChatMemberRestricted;
}
export interface TypeChatMemberLeft {
    status: 'left';
    user: User;
}
export declare class ChatMemberLeft extends TLObject {
    status: 'left';
    user: User;
    constructor({ status, user }: TypeChatMemberLeft, client: Snake);
    static parse(client: Snake, member: Raw.ChannelParticipantLeft, users: Array<Raw.TypeUser>): ChatMemberLeft;
}
export interface TypeChatMemberBanned {
    status: 'kicked' | 'banned';
    user: User;
    untilDate: typeof Infinity | Date;
    joinedDate: Date;
}
export declare class ChatMemberBanned extends TLObject {
    status: 'kicked' | 'banned';
    user: User;
    untilDate: typeof Infinity | Date;
    joinedDate: Date;
    constructor({ status, user, untilDate, joinedDate }: TypeChatMemberBanned, client: Snake);
    static parse(client: Snake, member: Raw.ChannelParticipantBanned, users: Array<Raw.TypeUser>): ChatMemberBanned;
}
export declare function ChatMember(client: Snake, users: Array<Raw.TypeUser>, member?: Raw.TypeChatParticipant | Raw.TypeChannelParticipant): TypeChatMember | undefined;
