import { FriendDecreaseEvent, FriendIncreaseEvent, FriendPokeEvent, FriendRecallEvent, FriendRequestEvent, GroupInviteEvent, PrivateMessageEvent } from "../events";
import { User } from "./user";
type Client = import("../client").Client;
/** 私聊消息事件 */
export interface PrivateMessageEventMap {
    "message"(event: PrivateMessageEvent): void;
    /** 好友的消息 */
    "message.friend"(event: PrivateMessageEvent): void;
    /** 群临时对话 */
    "message.group"(event: PrivateMessageEvent): void;
    /** 其他途径 */
    "message.other"(event: PrivateMessageEvent): void;
    /** 我的设备 */
    "message.self"(event: PrivateMessageEvent): void;
}
/** 好友通知事件 */
export interface FriendNoticeEventMap {
    "notice"(event: FriendIncreaseEvent | FriendDecreaseEvent | FriendRecallEvent | FriendPokeEvent): void;
    /** 新增好友 */
    "notice.increase"(event: FriendIncreaseEvent): void;
    /** 好友减少 */
    "notice.decrease"(event: FriendDecreaseEvent): void;
    /** 撤回消息 */
    "notice.recall"(event: FriendRecallEvent): void;
    /** 戳一戳 */
    "notice.poke"(event: FriendPokeEvent): void;
}
/** 好友申请事件 */
export interface FriendRequestEventMap {
    "request"(event: FriendRequestEvent): void;
    /** 群邀请 */
    "request.invite"(event: GroupInviteEvent): void;
    /** 添加好友 */
    "request.add"(event: FriendRequestEvent): void;
    /** 单向好友 */
    "request.single"(event: FriendRequestEvent): void;
}
/** 所有的好友事件 */
export interface FriendEventMap extends PrivateMessageEventMap, FriendNoticeEventMap, FriendRequestEventMap {
}
/** 好友 */
export declare class Friend extends User {
    private _info?;
    uid: string;
    static as(this: Client, uin: number, strict?: boolean): Friend;
    /** 好友资料 */
    get info(): Friend.Info | undefined;
    /** 昵称 */
    get nickname(): string | undefined;
    /** 性别 */
    get sex(): import("../common").Gender | undefined;
    /** 备注 */
    get remark(): string | undefined;
    /** 分组id */
    get class_id(): number | undefined;
    protected constructor(c: Client, uin: number, _info?: Friend.Info | undefined);
    /** 设置备注 */
    setRemark(remark: string): Promise<void>;
    /** 设置分组(注意：如果分组id不存在也会成功) */
    setClass(id: number): Promise<void>;
    /** 戳一戳 */
    poke(self?: boolean): Promise<boolean>;
    /**
     * 删除好友
     * @param block 屏蔽此好友的申请，默认为`true`
     */
    delete(block?: boolean): Promise<void>;
    /**
     * 发送离线文件
     * @param file `string`表示从该本地文件路径获取，`Buffer`表示直接发送这段内容
     * @param filename 对方看到的文件名，`file`为`Buffer`时，若留空则自动以md5命名
     * @param callback 监控上传进度的回调函数，拥有一个"百分比进度"的参数
     * @returns 文件id(撤回时使用)
     */
    sendFile(file: string | Buffer | Uint8Array, filename?: string, callback?: (percentage: string) => void): Promise<string>;
    /**
     * 撤回离线文件
     * @param fid 文件id
     */
    recallFile(fid: string): Promise<boolean>;
    /**
     * 转发离线文件
     * @param fid 文件fid
     * @param group_id 群号，转发群文件时填写
     * @returns 转发成功后新文件的id
     */
    forwardFile(fid: string, group_id?: number): Promise<string>;
    /**
     * 查找机器人与这个人的共群
     * @returns
     */
    searchSameGroup(): Promise<any>;
}
export declare namespace Friend {
    interface Info extends User.Info {
        /** 备注 */
        remark: string;
        /** 分组id */
        class_id: number;
    }
}
export {};
