icqq
Version:
QQ protocol for NodeJS!
250 lines (249 loc) • 9.17 kB
TypeScript
/// <reference types="node" />
import { Contactable } from "./internal";
import { Sendable, GroupMessage, ImageElem, Anonymous, Quotable } from "./message";
import { Gfs } from "./gfs";
import { DiscussMessageEvent, GroupAdminEvent, GroupInviteEvent, GroupSignEvent, GroupMessageEvent, GroupMuteEvent, GroupPokeEvent, GroupRecallEvent, GroupRequestEvent, GroupTransferEvent, MemberDecreaseEvent, MemberIncreaseEvent, MessageRet } from "./events";
import { GroupInfo, MemberInfo } from "./entities";
type Client = import("./client").Client;
export declare namespace Discuss {
interface EventMap {
message(e: DiscussMessageEvent): void;
}
}
/** 讨论组 */
export declare class Discuss extends Contactable {
readonly gid: number;
static as(this: Client, gid: number): Discuss;
/** {@link gid} 的别名 */
get group_id(): number;
protected constructor(c: Client, gid: number);
/** 发送一条消息 */
sendMsg(content: Sendable): Promise<MessageRet>;
}
/** 群聊消息事件 */
export interface GroupMessageEventMap {
"message"(event: GroupMessageEvent): void;
/** 普通消息 */
"message.normal"(event: GroupMessageEvent): void;
/** 匿名消息 */
"message.anonymous"(event: GroupMessageEvent): void;
}
/** 群聊通知事件 */
export interface GroupNoticeEventMap {
"notice"(event: MemberIncreaseEvent | GroupSignEvent | MemberDecreaseEvent | GroupRecallEvent | GroupAdminEvent | GroupMuteEvent | GroupTransferEvent | GroupPokeEvent): void;
/** 群员新增 */
"notice.increase"(event: MemberIncreaseEvent): void;
/** 群员减少 */
"notice.decrease"(event: MemberDecreaseEvent): void;
/** 消息撤回 */
"notice.recall"(event: GroupRecallEvent): void;
/** 管理员变更 */
"notice.admin"(event: GroupAdminEvent): void;
/** 群禁言 */
"notice.ban"(event: GroupMuteEvent): void;
/** 群打卡 */
"notice.sign"(event: GroupSignEvent): void;
/** 群转让 */
"notice.transfer"(event: GroupTransferEvent): void;
/** 戳一戳 */
"notice.poke"(event: GroupPokeEvent): void;
}
/** 群聊申请事件 */
export interface GroupRequestEventMap {
"request"(event: GroupRequestEvent | GroupInviteEvent): void;
/** 加群申请 */
"request.add"(event: GroupRequestEvent): void;
/** 群邀请 */
"request.invite"(event: GroupInviteEvent): void;
}
/** 所有的群聊事件 */
export interface GroupEventMap extends GroupMessageEventMap, GroupNoticeEventMap, GroupRequestEventMap {
}
/** 群 */
export interface Group {
/** 撤回消息 */
recallMsg(msg: GroupMessage): Promise<boolean>;
recallMsg(msgid: string): Promise<boolean>;
recallMsg(seq: number, rand: number, pktnum?: number): Promise<boolean>;
}
/** 群 */
export declare class Group extends Discuss {
private _info?;
static as(this: Client, gid: number, strict?: boolean): Group;
/** 群资料 */
get info(): GroupInfo | undefined;
/** 群名 */
get name(): string | undefined;
/** 我是否是群主 */
get is_owner(): boolean;
/** 我是否是管理 */
get is_admin(): boolean;
/** 是否全员禁言 */
get all_muted(): boolean;
/** 我的禁言剩余时间 */
get mute_left(): number;
/** 群文件系统 */
readonly fs: Gfs;
protected constructor(c: Client, gid: number, _info?: GroupInfo | undefined);
/**
* 获取群员实例
* @param uid 群员账号
* @param strict 严格模式,若群员不存在会抛出异常
*/
pickMember(uid: number, strict?: boolean): import("./member").Member;
/**
* 获取群头像url
* @param size 头像大小,默认`0`
* @param history 历史头像记录,默认`0`,若要获取历史群头像则填写1,2,3...
* @returns 头像的url地址
*/
getAvatarUrl(size?: 0 | 40 | 100 | 140, history?: number): string;
/** 强制刷新群资料 */
renew(): Promise<GroupInfo>;
private _fetchMembers;
/** 获取群员列表 */
getMemberMap(no_cache?: boolean): Promise<Map<number, MemberInfo>>;
/**
* 添加精华消息
* @param seq 消息序号
* @param rand 消息的随机值
*/
addEssence(seq: number, rand: number): Promise<string>;
/**
* 移除精华消息
* @param seq 消息序号
* @param rand 消息的随机值
*/
removeEssence(seq: number, rand: number): Promise<string>;
/**
* 发送一个文件
* @param file `string`表示从该本地文件路径上传,`Buffer`表示直接上传这段内容
* @param pid 上传的目标目录id,默认根目录
* @param name 上传的文件名,`file`为`Buffer`时,若留空则自动以md5命名
* @param callback 监控上传进度的回调函数,拥有一个"百分比进度"的参数
* @returns 上传的文件属性
*/
sendFile(file: string | Buffer | Uint8Array, pid?: string, name?: string, callback?: (percentage: string) => void): Promise<import("./gfs").GfsFileStat>;
/**
* 发送一条消息
* @param content 消息内容
* @param source 引用回复的消息
* @param anony 是否匿名
*/
sendMsg(content: Sendable, source?: Quotable, anony?: Omit<Anonymous, "flag"> | boolean): Promise<MessageRet>;
private _sendMsgByFrag;
/**
* 设置当前群成员消息屏蔽状态
* @param member_id
* @param isScreen
*/
setScreenMemberMsg(member_id: number, isScreen?: boolean): Promise<boolean>;
/**
* 撤回消息,cqhttp方法用
*/
recallMsg(param: number, rand: number, pktnum: number): Promise<boolean>;
/**
* 撤回消息
* @param message_id 消息id
*/
recallMsg(message_id: string): Promise<boolean>;
/**
* 撤回消息
* @param message 群聊消息对象
*/
recallMsg(message: GroupMessage): Promise<boolean>;
/** 设置群名 */
setName(name: string): Promise<boolean>;
/** 全员禁言 */
muteAll(yes?: boolean): Promise<boolean>;
/** 发送简易群公告 */
announce(content: string): Promise<boolean>;
private _setting;
/** 允许/禁止匿名 */
allowAnony(yes?: boolean): Promise<boolean>;
/** 设置群备注 */
setRemark(remark?: string): Promise<void>;
/** 禁言匿名群员,默认1800秒 */
muteAnony(flag: string, duration?: number): Promise<void>;
/** 获取自己的匿名情报 */
getAnonyInfo(): Promise<Omit<Anonymous, "flag">>;
/** 获取 @全体成员 的剩余次数 */
getAtAllRemainder(): Promise<number>;
private _getLastSeq;
/**
* 标记`seq`之前的消息为已读
* @param seq 消息序号,默认为`0`,表示标记所有消息
*/
markRead(seq?: number): Promise<void>;
/**
* 获取`seq`之前的`cnt`条聊天记录,默认从最后一条发言往前,`cnt`默认20不能超过20
* @param seq 消息序号,默认为`0`,表示从最后一条发言往前
* @param cnt 聊天记录条数,默认`20`,超过`20`按`20`处理
* @returns 群聊消息列表,服务器记录不足`cnt`条则返回能获取到的最多消息记录
*/
getChatHistory(seq?: number, cnt?: number): Promise<GroupMessage[]>;
/**
* 获取群文件下载地址
* @param fid 文件id
*/
getFileUrl(fid: string): Promise<string>;
/** 设置群头像 */
setAvatar(file: ImageElem["file"]): Promise<void>;
/**
* 邀请好友入群
* @param uid 好友账号
*/
invite(uid: number): Promise<boolean>;
/** 打卡 */
sign(): Promise<{
result: number;
}>;
/** 退群,若为群主则解散该群 */
quit(): Promise<boolean>;
/**
* 设置管理员,use {@link Member.setAdmin}
* @param uid 群员账号
* @param yes 是否设为管理员
*/
setAdmin(uid: number, yes?: boolean): Promise<boolean>;
/**
* 设置头衔,use {@link Member.setTitle}
* @param uid 群员账号
* @param title 头衔名
* @param duration 持续时间,默认`-1`,表示永久
*/
setTitle(uid: number, title?: string, duration?: number): Promise<boolean>;
/**
* 设置名片,use {@link Member.setCard}
* @param uid 群员账号
* @param card 名片
*/
setCard(uid: number, card?: string): Promise<boolean>;
/**
* 踢出此群,use {@link Member.kick}
* @param uid 群员账号
* @param msg @todo 未知参数
* @param block 是否屏蔽群员
*/
kickMember(uid: number, msg?: string, block?: boolean): Promise<boolean>;
/**
* 禁言群员,use {@link Member.mute}
* @param uid 群员账号
* @param duration 禁言时长(秒),默认`600`
*/
muteMember(uid: number, duration?: number): Promise<void>;
/**
* 戳一戳
* @param uid 群员账号
*/
pokeMember(uid: number): Promise<boolean>;
/**
* 获取群内被禁言人
* @returns
*/
getMuteMemberList(): Promise<({
uin: number | null;
unMuteTime: string | null;
} | null)[]>;
}
export {};