import { FileElem, PrivateMessage, Quotable, Sendable } from "../message";
import { Contactable } from "../internal";
import { pb } from "../core";
import { Client } from "../client";
import { Gender } from "../common";
import { MessageRet } from "../events";
export interface User {
    /** 撤回消息 */
    recallMsg(time: number): Promise<boolean>;
}
/** 用户 */
export declare class User extends Contactable {
    readonly uin: number;
    /** `this.uin`的别名 */
    get user_id(): number;
    get is_friend(): boolean;
    static as(this: Client, uid: number): User;
    protected constructor(c: Client, uin: number);
    /** 返回作为好友的实例 */
    asFriend(strict?: boolean): import("./friend").Friend;
    /** 返回作为某群群员的实例 */
    asMember(gid: number, strict?: boolean): import("./groupMember").GroupMember;
    /**
     * 获取头像url
     * @param size 头像大小，默认`0`
     * @returns 头像的url地址
     */
    getAvatarUrl(size?: 0 | 40 | 100 | 140): string;
    getAddFriendSetting(): Promise<void>;
    /**
     * 点赞，支持陌生人点赞
     * @param times 点赞次数，默认1次
     */
    thumbUp(times?: number): Promise<void>;
    /** 查看资料 */
    getSimpleInfo(): Promise<void>;
    /**
     * 获取`time`往前的`cnt`条聊天记录
     * @param time 默认当前时间，为时间戳的分钟数（`Date.now() / 1000`）
     * @param cnt 聊天记录条数，默认`20`，超过`20`按`20`处理
     * @returns 私聊消息列表，服务器记录不足`cnt`条则返回能获取到的最多消息记录
     */
    getChatHistory(time?: number, cnt?: number): Promise<PrivateMessage[]>;
    /**
     * 标记`time`之前为已读
     * @param time 默认当前时间，为时间戳的分钟数（`Date.now() / 1000`）
     */
    markRead(time?: number): Promise<void>;
    private _getRouting;
    /**
     * 发送一条消息
     * @param content 消息内容
     * @param source 引用回复的消息
     */
    sendMsg(content: Sendable, source?: Quotable): Promise<MessageRet>;
    protected _sendMsg(proto3: pb.Encodable, brief: string, file?: boolean): Promise<{
        user_id: number;
        seq: number;
        time: number;
    }>;
    /**
     * 回添双向好友
     * @param seq 申请消息序号
     * @param remark 好友备注
     */
    addFriendBack(seq: number, remark?: string): Promise<boolean>;
    /**
     * 处理好友申请
     * @param seq 申请消息序号
     * @param yes 是否同意
     * @param remark 好友备注
     * @param block 是否屏蔽来自此用户的申请
     */
    setFriendReq(seq: number, yes?: boolean, remark?: string, block?: boolean): Promise<boolean>;
    /**
     * 处理入群申请
     * @param gid 群号
     * @param seq 申请消息序号
     * @param yes 是否同意
     * @param reason 若拒绝，拒绝的原因
     * @param block 是否屏蔽来自此用户的申请
     */
    setGroupReq(gid: number, seq: number, yes?: boolean, reason?: string, block?: boolean): Promise<boolean>;
    /**
     * 处理群邀请
     * @param gid 群号
     * @param seq 申请消息序号
     * @param yes 是否同意
     * @param block 是否屏蔽来自此群的邀请
     */
    setGroupInvite(gid: number, seq: number, yes?: boolean, block?: boolean): Promise<boolean>;
    /**
     * 获取文件信息
     * @param fid 文件id
     */
    getFileInfo(fid: string): Promise<Omit<FileElem, "type"> & Record<"url", string>>;
    /**
     * 获取离线文件下载地址
     * @param fid 文件id
     */
    getFileUrl(fid: string): Promise<string>;
}
export declare class UserMap<K = string | symbol, T extends User.Info = any> extends Map<K, T> {
    getByUid(uid: string): T | undefined;
}
export declare namespace User {
    interface Info {
        /** 用户qq */
        user_id: number;
        /** uid */
        uid: string;
        /** 昵称 */
        nickname: string;
        /** 性别 */
        sex?: Gender;
    }
}
