///
import * as log4js from "log4js";
import { BaseClient, Domain, Platform } from "./core";
import { Gender, OnlineStatus } from "./common";
import { FriendInfo, GroupInfo, MemberInfo, StrangerInfo } from "./entities";
import { EventMap, GroupInviteEvent, GroupMessageEvent, PrivateMessageEvent } from "./events";
import { Friend, User } from "./friend";
import { Discuss, Group } from "./group";
import { Member } from "./member";
import { Forwardable, ImageElem, Quotable, Sendable } from "./message";
import { Listener, Matcher, ToDispose } from "triptrap";
import { Guild } from "./guild";
import { Configuration } from "log4js";
/** 事件接口 */
export interface Client extends BaseClient {
on(event: T, listener: EventMap[T]): ToDispose;
on(event: S & Exclude, listener: Listener): ToDispose;
once(event: T, listener: EventMap[T]): ToDispose;
once(event: S & Exclude, listener: Listener): ToDispose;
trap(event: T, listener: EventMap[T]): ToDispose;
trap(event: S & Exclude, listener: Listener): ToDispose;
trip(event: E, ...args: Parameters): boolean;
trip(event: S & Exclude, ...args: any[]): boolean;
trapOnce(event: T, listener: EventMap[T]): ToDispose;
trapOnce(event: S & Exclude, listener: Listener): ToDispose;
off(event: T): void;
off(event: S & Exclude): void;
}
/** 一个客户端 */
export declare class Client extends BaseClient {
/**
* 得到一个群对象, 通常不会重复创建、调用
* @param gid 群号
* @param strict 严格模式,若群不存在会抛出异常
* @returns 一个`Group`对象
*/
readonly pickGroup: (gid: number, strict?: boolean | undefined) => Group;
/**
* 得到一个好友对象, 通常不会重复创建、调用
* @param uid 好友账号
* @param strict 严格模式,若好友不存在会抛出异常
* @returns 一个`Friend`对象
*/
readonly pickFriend: (uid: number, strict?: boolean | undefined) => Friend;
/**
* 得到一个群员对象, 通常不会重复创建、调用
* @param gid 群员所在的群号
* @param uid 群员的账号
* @param strict 严格模式,若群员不存在会抛出异常
* @returns 一个`Member`对象
*/
readonly pickMember: (gid: number, uid: number, strict?: boolean | undefined) => Member;
/**
* 创建一个用户对象
* @param uid 用户的账号
* @returns 一个`User`对象
*/
readonly pickUser: (uid: number) => User;
/**
* 创建一个讨论组对象
* @param gid 讨论组号
* @returns 一个`Discuss`对象
*/
readonly pickDiscuss: (gid: number) => Discuss;
/**
* 创建一个频道对象,通常不会重复创建、调用
* @param guild_id 频道号
* @returns 一个`Guild`对象
*/
readonly pickGuild: (guild_id: string) => Guild;
/** 日志记录器,初始情况下是`log4js.Logger` */
logger: Logger | log4js.Logger;
/** 账号本地数据存储目录 */
readonly dir: string;
/** 配置 */
readonly config: Required;
protected readonly _cache: Map>;
protected _sync_cookie?: Uint8Array;
/** 密码的md5值,调用 {@link login} 后会保存在这里,用于`token`过期时恢复登录 */
password_md5?: Buffer;
get [Symbol.toStringTag](): string;
/** 好友列表 */
readonly fl: Map;
/** 陌生人列表 */
readonly sl: Map;
/** 群列表 */
readonly gl: Map;
/** 群员列表缓存 */
readonly gml: Map>;
/** 我加入的频道列表 */
readonly guilds: Map;
/** 黑名单列表 */
readonly blacklist: Set;
/** 好友分组 */
readonly classes: Map;
/** 勿手动修改这些属性 */
/** 在线状态 */
status: OnlineStatus;
/** 昵称 */
nickname: string;
/** 性别 */
sex: Gender;
/** 年龄 */
age: number;
/** @todo 未知属性 */
bid: string;
/** 漫游表情缓存 */
stamp: Set;
/** 相当于频道中的qq号 */
tiny_id: string;
/** csrf token */
get bkn(): number;
/** @todo 未知属性 */
readonly cookies: {
[domain in Domain]: string;
};
/** 数据统计 */
get stat(): {
start_time: number;
lost_times: number;
recv_pkt_cnt: number;
sent_pkt_cnt: number;
lost_pkt_cnt: number;
recv_msg_cnt: number;
sent_msg_cnt: number;
msg_cnt_per_min: number;
remote_ip: string;
remote_port: number;
ver: string;
};
/** 修改日志级别 */
set log_level(level: LogLevel);
/**
* 继承原版`oicq`的构造方式,建议使用另一个构造函数
* @param uin 账号
* @param conf 配置
*/
constructor(uin: number, conf?: Config);
/**
* 账号在调用 {@link login} 时传入
* @param conf 配置
*/
constructor(conf?: Config);
/**
* 只能在初始化Client时传了`uin`或扫码登录,才能调用
* * 传了`password`则尝试密码登录
* * 不传`password`则尝试扫码登录
* 未传任何参数 则尝试扫码登录
* 掉线重连时也是自动调用此函数,走相同逻辑
* 你也可以在配置中修改`reconn_interval`,关闭掉线重连并自行处理
* @param password 可以为密码原文,或密码的md5值
*/
login(password?: string | Buffer): Promise;
/**
* 传了`uin`,未传`password`
* 会优先尝试使用token登录 (token在上次登录成功后存放在`this.dir`的`${uin}_token`中)
* 传了`uin`无token或token失效时:
* * 传了`password`则尝试密码登录
* * 不传`password`则尝试扫码登录
* 未传任何参数 则尝试扫码登录
* 掉线重连时也是自动调用此函数,走相同逻辑
* 你也可以在配置中修改`reconn_interval`,关闭掉线重连并自行处理
* @param uin 登录账号
* @param password 可以为密码原文,或密码的md5值
*/
login(uin?: number, password?: string | Buffer): Promise;
/** 设置在线状态 */
setOnlineStatus(status?: OnlineStatus.Online | OnlineStatus.Absent | OnlineStatus.Invisible | OnlineStatus.Busy | OnlineStatus.Qme | OnlineStatus.DontDisturb): Promise;
/** 设置昵称 */
setNickname(nickname: string): Promise;
/**
* 设置性别
* @param gender 0:未知,1:男,2:女
*/
setGender(gender: 0 | 1 | 2): Promise;
/**
* 设置生日
* @param birthday `YYYYMMDD`格式的`string`(会过滤非数字字符)或`number`
* */
setBirthday(birthday: string | number): Promise;
/** 设置个人说明 */
setDescription(description?: string): Promise;
/** 设置个性签名 */
setSignature(signature?: string): Promise;
/** 获取个性签名 */
getSignature(): Promise;
/** 设置头像 */
setAvatar(file: ImageElem["file"]): Promise;
/** 获取漫游表情 */
getRoamingStamp(no_cache?: boolean): Promise;
/** 删除表情(支持批量) */
deleteStamp(id: string | string[]): Promise;
/** 获取系统消息 */
getSystemMsg(): Promise<(import("./events").FriendRequestEvent | GroupInviteEvent | import("./events").GroupRequestEvent)[]>;
/** 添加好友分组 */
addClass(name: string): Promise;
/** 删除好友分组 */
deleteClass(id: number): Promise;
/** 重命名好友分组 */
renameClass(id: number, name: string): Promise;
/** 重载好友列表 */
reloadFriendList(): Promise;
/** 重载陌生人列表 */
reloadStrangerList(): Promise;
/** 重新加载频道列表 */
reloadGuilds(): Promise;
/** 重载群列表 */
reloadGroupList(): Promise;
/** 重载黑名单 */
reloadBlackList(): Promise;
/** 清空缓存文件 fs.rm need v14.14 */
cleanCache(): void;
/**
* 获取视频下载地址
* use {@link Friend.getVideoUrl}
*/
getVideoUrl(fid: string, md5: string | Buffer): Promise;
/**
* 获取转发消息
* use {@link Friend.getForwardMsg}
*/
getForwardMsg(resid: string, fileName?: string, nt?: boolean): Promise;
/**
* 制作转发消息
* use {@link Friend.makeForwardMsg} or {@link Group.makeForwardMsg}
*/
makeForwardMsg(fake: Forwardable[], dm?: boolean, nt?: boolean): Promise;
/** Ocr图片转文字 */
imageOcr(file: ImageElem["file"]): Promise;
/** @cqhttp (cqhttp遗留方法) use {@link cookies[domain]} */
getCookies(domain?: Domain): string;
/** @cqhttp use {@link bkn} */
getCsrfToken(): number;
/** @cqhttp use {@link fl} */
getFriendList(): Map;
/** @cqhttp use {@link gl} */
getGroupList(): Map;
/** @cqhttp use {@link guilds} */
getGuildList(): {
guild_id: string;
guild_name: string;
}[];
/** @cqhttp use {@link Guild.info} */
getGuildInfo(guild_id: string): {
guild_id: string;
guild_name: string;
} | null;
getChannelInfo(guild_id: string, channel_id: string): {
guild_id: string;
channel_id: string;
channel_name: string;
channel_type: import("./channel").ChannelType;
} | null;
/**
* 添加群精华消息
* use {@link Group.addEssence}
* @param message_id 消息id
*/
setEssenceMessage(message_id: string): Promise;
/**
* 移除群精华消息
* use {@link Group.removeEssence}
* @param message_id 消息id
*/
removeEssenceMessage(message_id: string): Promise;
/**
* 获取子频道列表
* use {@link Guild.channels}
*/
getChannelList(guild_id: string): {
guild_id: string;
channel_id: string;
channel_name: string;
channel_type: import("./channel").ChannelType;
}[];
/**
* 获取频道成员列表
* use {@link Guild.getMemberList}
*/
getGuildMemberList(guild_id: string): never[] | Promise;
/** @cqhttp use {@link sl} */
getStrangerList(): Map;
/** @cqhttp use {@link User.getSimpleInfo} */
getStrangerInfo(user_id: number): Promise<{
user_id: number; /** 黑名单列表 */
nickname: string;
sex: Gender;
age: number;
area: string; /** 漫游表情缓存 */
}>;
/** @cqhttp use {@link Group.info} or {@link Group.renew} */
getGroupInfo(group_id: number, no_cache?: boolean): Promise;
/** @cqhttp use {@link Group.getMemberMap} */
getGroupMemberList(group_id: number, no_cache?: boolean): Promise