import { MessageElem, Parser, Sendable } from "./elements";
import { Client } from "./client";
import { Dict } from "./types";
import { OriginMessage } from "./core/constanst";
export declare class Message {
    c: Client;
    private original;
    message_id: string;
    raw_message: string;
    message: MessageElem[];
    create_time: number;
    time: number;
    parser: Parser;
    static genMsgId(): number;
    constructor(c: Client, original: Message.Original);
    parse(): Promise<void>;
    forward(user_id: string): Promise<string | string[]>;
    [Symbol.unscopables](): {
        parser: boolean;
        c: boolean;
    };
    static from(this: Client, original: Message.Original): GroupMessageEvent | PrivateMessageEvent;
}
export declare namespace Message {
    interface Sender {
        user_id: string;
        nickname: string;
        card?: string;
    }
    interface Original {
        MsgId: string;
        FromUserName: string;
        ToUserName: string;
        MsgType: OriginMessage;
        Content: string;
        Status: number;
        ImgStatus: number;
        CreateTime: number;
        VoiceLength: number;
        PlayLength: number;
        FineName: string;
        FileSize: string;
        MediaId: string;
        Url: string;
        AppMsgType: number;
        StatusNotifyCode: number;
        StatusNotifyUserName: string;
        RecommendInfo: Dict;
        ForwardFlag: number;
        AppInfo: Dict;
        HasProductId: number;
        Ticket: string;
        ImgHeight: number;
        ImgWidth: number;
        SubMsgType: number;
        NewMsgId: number;
        OriContent: string;
        EncryFileName: string;
    }
}
export interface Message {
    toJSON(): any;
}
export interface MessageEvent {
    c: Client;
    sender: Message.Sender;
    post_type: 'message';
    message_type: 'group' | 'private';
    reply(message: Sendable): Promise<string | string[]>;
    recall(message_id: string): Promise<boolean>;
}
export declare class PrivateMessageEvent extends Message implements MessageEvent {
    c: Client;
    post_type: "message";
    message_type: "private";
    get user_id(): string;
    is_self: boolean;
    sender: Message.Sender;
    constructor(c: Client, original: Message.Original);
    reply(message: Sendable): Promise<string | string[]>;
    recall(): Promise<boolean>;
}
export declare class GroupMessageEvent extends Message implements MessageEvent {
    c: Client;
    group_id: string;
    get group_name(): string;
    post_type: "message";
    message_type: "group";
    sender: Message.Sender;
    get group(): import(".").Group;
    get member(): any;
    constructor(c: Client, original: Message.Original);
    reply(message: Sendable): Promise<string | string[]>;
    recall(): Promise<boolean>;
}
