xinc
Version:
基于napcat,node-napcat-ts的bot框架
1,865 lines (1,864 loc) • 48.7 kB
TypeScript
import { Receive, Send } from './Structs.js';
export interface NCWebsocketOptionsBaseUrl {
baseUrl: string;
accessToken?: string;
throwPromise?: boolean;
reconnection?: {
enable?: boolean;
attempts?: number;
delay?: number;
};
}
export interface NCWebsocketOptionsHost {
protocol: 'ws' | 'wss';
host: string;
port: number;
accessToken?: string;
throwPromise?: boolean;
reconnection?: {
enable?: boolean;
attempts?: number;
delay?: number;
};
}
export type NCWebsocketOptions = NCWebsocketOptionsBaseUrl | NCWebsocketOptionsHost;
export interface WSReconnection {
enable: boolean;
attempts: number;
delay: number;
nowAttempts: number;
}
export interface WSConnecting {
reconnection: WSReconnection;
}
export interface WSOpenRes {
reconnection: WSReconnection;
}
export interface WSCloseRes {
code: number;
reason: string;
reconnection: WSReconnection;
}
export type WSErrorRes = {
reconnection: WSReconnection;
} & ({
error_type: 'response_error';
info: {
errno: number;
message: string;
url: string;
};
} | {
error_type: 'connect_error';
errors: ({
errno: number;
code: string;
syscall: string;
address: string;
port: number;
} | null)[];
});
export interface SocketHandler {
'socket.connecting': WSConnecting;
'socket.open': WSOpenRes;
'socket.close': WSCloseRes;
'socket.error': WSErrorRes;
socket: SocketHandler['socket.connecting'] | SocketHandler['socket.open'] | SocketHandler['socket.close'] | SocketHandler['socket.error'];
}
export interface APIRequest<T extends keyof WSSendParam> {
action: T;
params: WSSendParam[T];
echo: string;
}
export interface APISuccessResponse<T extends keyof WSSendReturn> {
status: 'ok';
retcode: 0;
data: WSSendReturn[T];
message: string;
wording: string;
echo: string;
}
export interface APIErrorResponse {
status: 'failed';
retcode: 0;
data: null;
message: string;
wording: string;
echo: string;
}
export interface ResponseHandler {
onSuccess: (response: APISuccessResponse<keyof WSSendReturn>) => void;
onFailure: (reason: APIErrorResponse) => void;
message: APIRequest<keyof WSSendParam>;
}
export interface ApiHandler {
'api.preSend': APIRequest<keyof WSSendParam>;
'api.response': ApiHandler['api.response.success'] | ApiHandler['api.response.failure'];
'api.response.success': APISuccessResponse<keyof WSSendReturn>;
'api.response.failure': APIErrorResponse;
api: ApiHandler['api.preSend'] | ApiHandler['api.response'];
}
export interface HeartBeat {
time: number;
self_id: number;
post_type: 'meta_event';
meta_event_type: 'heartbeat';
status: {
online: boolean | undefined;
good: boolean;
};
interval: number;
}
export interface LifeCycleEnable {
time: number;
self_id: number;
post_type: 'meta_event';
meta_event_type: 'lifecycle';
sub_type: 'enable';
}
export interface LifeCycleDisable {
time: number;
self_id: number;
post_type: 'meta_event';
meta_event_type: 'lifecycle';
sub_type: 'disable';
}
export interface LifeCycleConnect {
time: number;
self_id: number;
post_type: 'meta_event';
meta_event_type: 'lifecycle';
sub_type: 'connect';
}
export interface MetaEventHandler {
'meta_event.lifecycle': MetaEventHandler['meta_event.lifecycle.enable'] | MetaEventHandler['meta_event.lifecycle.disable'] | MetaEventHandler['meta_event.lifecycle.connect'];
'meta_event.lifecycle.enable': LifeCycleEnable;
'meta_event.lifecycle.disable': LifeCycleDisable;
'meta_event.lifecycle.connect': LifeCycleConnect;
'meta_event.heartbeat': HeartBeat;
meta_event: MetaEventHandler['meta_event.lifecycle'] | MetaEventHandler['meta_event.heartbeat'];
}
export type MessageType = {
message_format: 'array';
message: Receive[keyof Receive][];
};
export type PrivateFriendMessage = {
self_id: number;
user_id: number;
time: number;
message_id: number;
message_seq: number;
real_id: number;
message_type: 'private';
sender: {
user_id: number;
nickname: string;
card: string;
};
raw_message: string;
font: number;
sub_type: 'friend';
post_type: 'message';
reply: (message: string | any[], quote?: boolean) => Promise<{
message_id: number;
}>;
quick_action?: (reply: any[]) => Promise<any>;
} & MessageType;
export type PrivateGroupMessage = {
self_id: number;
user_id: number;
time: number;
message_id: number;
message_seq: number;
real_id: number;
message_type: 'private';
sender: {
user_id: number;
nickname: string;
card: string;
};
raw_message: string;
font: number;
sub_type: 'group';
post_type: 'message';
reply: (message: string | any[], quote?: boolean) => Promise<{
message_id: number;
}>;
quick_action?: (reply: any[]) => Promise<any>;
} & MessageType;
export type GroupMessage = {
self_id: number;
user_id: number;
time: number;
message_id: number;
message_seq: number;
real_id: number;
message_type: 'group';
sender: {
user_id: number;
nickname: string;
card: string;
role: 'owner' | 'admin' | 'member';
};
raw_message: string;
font: number;
sub_type: 'normal';
post_type: 'message';
group_id: number;
reply: (message: string | any[], quote?: boolean) => Promise<{
message_id: number;
}>;
quick_action?: (reply: any[], at_sender?: boolean) => Promise<any>;
} & MessageType;
export interface MessageHandler {
'message.private': MessageHandler['message.private.friend'] | MessageHandler['message.private.group'];
'message.private.friend': PrivateFriendMessage;
'message.private.group': PrivateGroupMessage;
'message.group': MessageHandler['message.group.normal'];
'message.group.normal': GroupMessage;
message: MessageHandler['message.private'] | MessageHandler['message.group'];
}
export type PrivateFriendMessageSelf = {
self_id: number;
user_id: number;
time: number;
message_id: number;
message_seq: number;
real_id: number;
message_type: 'private';
sender: {
user_id: number;
nickname: string;
card: string;
};
raw_message: string;
font: number;
sub_type: 'friend';
post_type: 'message_sent';
} & MessageType;
export type PrivateGroupMessageSelf = {
self_id: number;
user_id: number;
time: number;
message_id: number;
message_seq: number;
real_id: number;
message_type: 'private';
sender: {
user_id: number;
nickname: string;
card: string;
};
raw_message: string;
font: number;
sub_type: 'group';
post_type: 'message_sent';
} & MessageType;
export type GroupMessageSelf = {
self_id: number;
user_id: number;
time: number;
message_id: number;
message_seq: number;
real_id: number;
message_type: 'group';
sender: {
user_id: number;
nickname: string;
card: string;
role: 'owner' | 'admin' | 'member';
};
raw_message: string;
font: number;
sub_type: 'normal';
post_type: 'message_sent';
group_id: number;
} & MessageType;
export interface MessageSentHandler {
'message_sent.private': MessageSentHandler['message_sent.private.friend'] | MessageSentHandler['message_sent.private.group'];
'message_sent.private.friend': PrivateFriendMessageSelf;
'message_sent.private.group': PrivateGroupMessageSelf;
'message_sent.group': MessageSentHandler['message_sent.group.normal'];
'message_sent.group.normal': GroupMessageSelf;
message_sent: MessageSentHandler['message_sent.private'] | MessageSentHandler['message_sent.group'];
}
export interface RequestGroupAdd {
time: number;
self_id: number;
post_type: 'request';
group_id: number;
user_id: number;
request_type: 'group';
comment: string;
flag: string;
sub_type: 'add';
quick_action: (approve?: boolean, reason?: string) => Promise<null>;
}
export interface RequestGroupInvite {
time: number;
self_id: number;
post_type: 'request';
group_id: number;
user_id: number;
request_type: 'group';
comment: string;
flag: string;
sub_type: 'invite';
quick_action: (approve?: boolean, reason?: string) => Promise<null>;
}
export interface RequestFriend {
time: number;
self_id: number;
post_type: 'request';
request_type: 'friend';
user_id: number;
comment: string;
flag: string;
quick_action: (approve?: boolean) => Promise<null>;
}
export interface RequestHandler {
'request.friend': RequestFriend;
'request.group': RequestHandler['request.group.invte'] | RequestHandler['request.group.add'];
'request.group.invte': RequestGroupInvite;
'request.group.add': RequestGroupAdd;
request: RequestHandler['request.friend'] | RequestHandler['request.group'];
}
export interface BotOffline {
time: number;
self_id: number;
post_type: 'notice';
notice_type: 'bot_offline';
user_id: number;
tag: string;
message: string;
}
export interface FriendAdd {
time: number;
self_id: number;
post_type: 'notice';
notice_type: 'friend_add';
user_id: number;
}
export interface FriendRecall {
time: number;
self_id: number;
post_type: 'notice';
notice_type: 'friend_recall';
user_id: number;
message_id: number;
}
export interface GroupAdminSet {
time: number;
self_id: number;
post_type: 'notice';
group_id: number;
user_id: number;
notice_type: 'group_admin';
sub_type: 'set';
}
export interface GroupAdminUnset {
time: number;
self_id: number;
post_type: 'notice';
group_id: number;
user_id: number;
notice_type: 'group_admin';
sub_type: 'unset';
}
export interface GroupBanBan {
time: number;
self_id: number;
post_type: 'notice';
group_id: number;
user_id: number;
notice_type: 'group_ban';
operator_id: number;
duration: number;
sub_type: 'ban';
}
export interface GroupBanLiftBan {
time: number;
self_id: number;
post_type: 'notice';
group_id: number;
user_id: number;
notice_type: 'group_ban';
operator_id: number;
duration: number;
sub_type: 'lift_ban';
}
export interface GroupCard {
time: number;
self_id: number;
post_type: 'notice';
group_id: number;
user_id: number;
notice_type: 'group_card';
card_new: string;
card_old: string;
}
export interface GroupDecreaseLeave {
time: number;
self_id: number;
post_type: 'notice';
group_id: number;
user_id: number;
notice_type: 'group_decrease';
sub_type: 'leave';
operator_id: number;
}
export interface GroupDecreaseKick {
time: number;
self_id: number;
post_type: 'notice';
group_id: number;
user_id: number;
notice_type: 'group_decrease';
sub_type: 'kick';
operator_id: number;
}
export interface GroupDecreaseKickMe {
time: number;
self_id: number;
post_type: 'notice';
group_id: number;
user_id: number;
notice_type: 'group_decrease';
sub_type: 'kick_me';
operator_id: number;
}
export interface GroupEssenceAdd {
time: number;
self_id: number;
post_type: 'notice';
group_id: number;
user_id: number;
notice_type: 'essence';
message_id: number;
sender_id: number;
sub_type: 'add';
}
export interface GroupEssenceDelete {
time: number;
self_id: number;
post_type: 'notice';
group_id: number;
user_id: number;
notice_type: 'essence';
message_id: number;
sender_id: number;
sub_type: 'delete';
}
export interface GroupIncreaseApprove {
time: number;
self_id: number;
post_type: 'notice';
notice_type: 'group_increase';
sub_type: 'approve';
group_id: number;
operator_id: number;
user_id: number;
}
export interface GroupIncreaseInvite {
time: number;
self_id: number;
post_type: 'notice';
notice_type: 'group_increase';
sub_type: 'invite';
group_id: number;
operator_id: number;
user_id: number;
}
export interface NotifyGroupName {
time: number;
self_id: number;
post_type: 'notice';
group_id: number;
user_id: number;
notice_type: 'notify';
sub_type: 'group_name';
name_new: string;
}
export interface GroupRecall {
time: number;
self_id: number;
post_type: 'notice';
group_id: number;
user_id: number;
notice_type: 'group_recall';
operator_id: number;
message_id: number;
}
export interface NotifyTitle {
time: number;
self_id: number;
post_type: 'notice';
group_id: number;
user_id: number;
notice_type: 'notify';
sub_type: 'title';
title: string;
}
export interface GroupUpload {
time: number;
self_id: number;
post_type: 'notice';
group_id: number;
user_id: number;
notice_type: 'group_upload';
file: {
id: string;
name: string;
size: number;
busid: number;
};
}
export interface NotifyInputStatusGroup {
time: number;
self_id: number;
post_type: 'notice';
notice_type: 'notify';
sub_type: 'input_status';
status_text: string;
event_type: number;
user_id: number;
group_id: number;
}
export interface NotifyInputStatusFriend {
time: number;
self_id: number;
post_type: 'notice';
notice_type: 'notify';
sub_type: 'input_status';
status_text: string;
event_type: number;
user_id: number;
group_id: 0;
}
export interface GroupMsgEmojiLike {
time: number;
self_id: number;
post_type: 'notice';
notice_type: 'group_msg_emoji_like';
group_id: number;
user_id: number;
message_id: number;
likes: {
emoji_id: string;
count: number;
}[];
}
export interface NotifyPokeFriend {
time: number;
self_id: number;
post_type: 'notice';
notice_type: 'notify';
sub_type: 'poke';
target_id: number;
user_id: number;
raw_info: [{
col: string;
nm: string;
type: 'qq';
uid: string;
}, {
col: string;
nm: string;
tp: string;
type: 'qq';
uid: string;
}];
}
export interface NotifyPokeGroup {
time: number;
self_id: number;
post_type: 'notice';
notice_type: 'notify';
sub_type: 'poke';
target_id: number;
user_id: number;
group_id: number;
raw_info: [
{
col: string;
nm: string;
type: 'qq';
uid: string;
},
{
jp: string;
src: string;
type: 'img';
},
{
txt: string;
type: 'nor';
},
{
col: string;
nm: string;
tp: string;
type: 'qq';
uid: string;
},
{
txt: string;
type: 'nor';
}
];
}
export interface NotifyProfileLike {
time: number;
self_id: number;
post_type: 'notice';
notice_type: 'notify';
sub_type: 'profile_like';
operator_id: number;
operator_nick: string;
}
export interface NoticeHandler {
'notice.bot_offline': BotOffline;
'notice.friend_add': FriendAdd;
'notice.friend_recall': FriendRecall;
'notice.group_admin': NoticeHandler['notice.group_admin.set'] | NoticeHandler['notice.group_admin.unset'];
'notice.group_admin.set': GroupAdminSet;
'notice.group_admin.unset': GroupAdminUnset;
'notice.group_ban': NoticeHandler['notice.group_ban.ban'] | NoticeHandler['notice.group_ban.lift_ban'];
'notice.group_ban.ban': GroupBanBan;
'notice.group_ban.lift_ban': GroupBanLiftBan;
'notice.group_card': GroupCard;
'notice.group_decrease': NoticeHandler['notice.group_decrease.leave'] | NoticeHandler['notice.group_decrease.kick'] | NoticeHandler['notice.group_decrease.kick_me'];
'notice.group_decrease.leave': GroupDecreaseLeave;
'notice.group_decrease.kick': GroupDecreaseKick;
'notice.group_decrease.kick_me': GroupDecreaseKickMe;
'notice.essence': NoticeHandler['notice.essence.add'] | NoticeHandler['notice.essence.delete'];
'notice.essence.add': GroupEssenceAdd;
'notice.essence.delete': GroupEssenceDelete;
'notice.group_increase': NoticeHandler['notice.group_increase.approve'] | NoticeHandler['notice.group_increase.invite'];
'notice.group_increase.approve': GroupIncreaseApprove;
'notice.group_increase.invite': GroupIncreaseInvite;
'notice.notify': NoticeHandler['notice.notify.group_name'] | NoticeHandler['notice.notify.title'] | NoticeHandler['notice.notify.input_status.group'] | NoticeHandler['notice.notify.input_status.friend'] | NoticeHandler['notice.notify.poke.friend'] | NoticeHandler['notice.notify.poke.group'] | NoticeHandler['notice.notify.profile_like'];
'notice.notify.group_name': NotifyGroupName;
'notice.notify.title': NotifyTitle;
'notice.notify.input_status': NoticeHandler['notice.notify.input_status.group'] | NoticeHandler['notice.notify.input_status.friend'];
'notice.notify.input_status.group': NotifyInputStatusGroup;
'notice.notify.input_status.friend': NotifyInputStatusFriend;
'notice.notify.poke': NoticeHandler['notice.notify.poke.friend'] | NoticeHandler['notice.notify.poke.group'];
'notice.notify.poke.friend': NotifyPokeFriend;
'notice.notify.poke.group': NotifyPokeGroup;
'notice.notify.profile_like': NotifyProfileLike;
'notice.group_recall': GroupRecall;
'notice.group_upload': GroupUpload;
'notice.group_msg_emoji_like': GroupMsgEmojiLike;
notice: NoticeHandler['notice.bot_offline'] | NoticeHandler['notice.friend_add'] | NoticeHandler['notice.friend_recall'] | NoticeHandler['notice.group_admin'] | NoticeHandler['notice.group_ban'] | NoticeHandler['notice.group_card'] | NoticeHandler['notice.group_decrease'] | NoticeHandler['notice.essence'] | NoticeHandler['notice.group_increase'] | NoticeHandler['notice.notify'] | NoticeHandler['notice.group_recall'] | NoticeHandler['notice.group_upload'] | NoticeHandler['notice.group_msg_emoji_like'];
}
export type AllHandlers = SocketHandler & ApiHandler & MessageHandler & MessageSentHandler & MetaEventHandler & RequestHandler & NoticeHandler;
export type WSReceiveHandler = MessageHandler & MessageSentHandler & MetaEventHandler & RequestHandler & NoticeHandler;
export type EventKey = keyof AllHandlers;
export type HandlerResMap = {
[K in EventKey]: AllHandlers[K];
};
export type EventHandleMap = {
[K in EventKey]: (context: HandlerResMap[K]) => void;
};
export type WSSendParam = {
send_private_msg: {
user_id: number;
message: Send[keyof Send][];
};
send_group_msg: {
group_id: number;
message: Send[keyof Send][];
};
send_msg: ({
user_id: number;
} | {
group_id: number;
}) & {
message: Send[keyof Send][];
};
delete_msg: {
message_id: number;
};
get_msg: {
message_id: number;
};
get_forward_msg: {
message_id: string;
};
send_like: {
user_id: number;
times?: number;
};
set_group_kick: {
group_id: number;
user_id: number;
reject_add_request?: boolean;
};
set_group_ban: {
group_id: number;
user_id: number;
duration?: number;
};
set_group_whole_ban: {
group_id: number;
enable?: boolean;
};
set_group_admin: {
group_id: number;
user_id: number;
enable?: boolean;
};
set_group_card: {
group_id: number;
user_id: number;
card: string;
};
set_group_name: {
group_id: number;
group_name: string;
};
set_group_leave: {
group_id: number;
is_dismiss?: boolean;
};
set_group_special_title: {
group_id: number;
user_id: number;
special_title: string;
};
set_friend_add_request: {
flag: string;
approve?: boolean;
remark?: string;
};
set_group_add_request: {
flag: string;
approve?: boolean;
reason?: string;
};
get_login_info: {};
get_stranger_info: {
user_id: number;
};
get_friend_list: {};
get_group_info: {
group_id: number;
};
get_group_list: {
no_cache?: boolean;
};
get_group_member_info: {
group_id: number;
user_id: number;
no_cache?: boolean;
};
get_group_member_list: {
group_id: number;
no_cache?: boolean;
};
get_group_honor_info: {
group_id: number;
type?: 'all' | 'talkative' | 'performer' | 'legend' | 'strong_newbie' | 'emotion';
};
get_cookies: {
domain: string;
};
get_csrf_token: {};
get_credentials: {};
get_record: {
file: string;
out_format?: 'mp3' | 'amr' | 'wma' | 'm4a' | 'spx' | 'ogg' | 'wav' | 'flac';
};
get_image: {
file: string;
};
can_send_image: {};
can_send_record: {};
get_status: {};
get_version_info: {};
bot_exit: {};
set_qq_profile: {
nickname: string;
personal_note?: string;
sex?: number;
};
_get_model_show: {
model: string;
};
delete_friend: {
user_id: number;
temp_block?: boolean;
temp_both_del?: boolean;
};
mark_msg_as_read: {
user_id: number;
} | {
group_id: number;
} | {
message_id: number;
};
send_group_forward_msg: {
group_id: number;
message: Send['node'][];
};
send_private_forward_msg: {
user_id: number;
message: Send['node'][];
};
get_group_msg_history: {
group_id: number;
message_seq?: number;
count?: number;
reverseOrder?: boolean;
};
ocr_image: {
image: string;
};
get_group_system_msg: {};
get_essence_msg_list: {
group_id: number;
};
get_group_at_all_remain: {
group_id: number;
};
set_group_portrait: {
file: string;
group_id: number;
};
set_essence_msg: {
message_id: number;
};
delete_essence_msg: {
message_id: number;
};
_send_group_notice: {
group_id: number;
content: string;
image?: string;
pinned?: number;
type?: number;
confirm_required?: number;
is_show_edit_card?: number;
tip_window_type?: number;
};
_get_group_notice: {
group_id: number;
};
upload_group_file: {
group_id: number;
file: string;
name: string;
folder_id?: string;
};
delete_group_file: {
group_id: number;
file_id: string;
};
create_group_file_folder: {
group_id: number;
folder_name: string;
};
delete_group_folder: {
group_id: number;
folder_id: string;
};
get_group_file_system_info: {
group_id: number;
};
get_group_root_files: {
group_id: number;
file_count?: number;
};
get_group_files_by_folder: {
group_id: number;
file_count?: number;
folder_id?: string;
};
get_group_file_url: {
group_id: number;
file_id: string;
};
upload_private_file: {
user_id: number;
file: string;
name: string;
};
download_file: ({
base64: string;
} | {
url: string;
headers?: string | string[];
}) & {
name?: string;
};
'.handle_quick_operation': {
context: MessageHandler['message.private'];
operation: {
reply?: Send[keyof Send][];
};
} | {
context: MessageHandler['message.group'];
operation: {
reply?: Send[keyof Send][];
at_sender?: boolean;
};
} | {
context: RequestHandler['request.friend'];
operation: {
approve?: boolean;
};
} | {
context: RequestHandler['request.group'];
operation: {
approve?: boolean;
reason?: string;
};
};
set_diy_online_status: {
face_id: number;
face_type: number;
wording: string;
};
ArkSharePeer: {
group_id: string;
} | {
user_id: string;
phoneNumber?: string;
};
ArkShareGroup: {
group_id: string;
};
get_robot_uin_range: {};
set_online_status: {
status: number;
ext_status: number;
battery_status: number;
};
get_friends_with_category: {};
set_qq_avatar: {
file: string;
};
get_file: {
file: string;
};
forward_friend_single_msg: {
message_id: number;
user_id: number;
};
forward_group_single_msg: {
message_id: number;
group_id: number;
};
translate_en2zh: {
words: string[];
};
set_msg_emoji_like: {
message_id: number;
emoji_id: string;
set?: boolean;
};
send_forward_msg: ({
user_id: number;
} | {
group_id: number;
}) & {
message: Send['node'][];
};
mark_private_msg_as_read: {
user_id: number;
};
mark_group_msg_as_read: {
group_id: number;
};
get_friend_msg_history: {
user_id: number;
message_seq?: number;
count?: number;
reverseOrder?: boolean;
};
create_collection: {
rawData: string;
brief: string;
};
set_self_longnick: {
longNick: string;
};
get_recent_contact: {
count?: number;
};
_mark_all_as_read: {};
get_profile_like: {};
fetch_custom_face: {
count?: number;
};
fetch_emoji_like: {
emojiId: string;
emojiType: string;
message_id: number;
count?: number;
};
set_input_status: {
user_id: string;
event_type: number;
};
get_group_info_ex: {
group_id: number;
};
_del_group_notice: {
group_id: number;
notice_id: string;
};
friend_poke: {
user_id: number;
};
group_poke: {
group_id: number;
user_id: number;
};
nc_get_packet_status: {};
nc_get_user_status: {
user_id: number;
};
nc_get_rkey: {};
get_group_shut_list: {
group_id: number;
};
get_group_ignored_notifies: {
group_id: number;
};
set_group_sign: {
group_id: number;
};
send_group_sign: WSSendParam['set_group_sign'];
send_packet: {
cmd: string;
data: string;
rsp: boolean;
};
get_mini_app_ark: {
type: 'bili' | 'weibo';
title: string;
desc: string;
picUrl: string;
jumpUrl: string;
webUrl?: string;
rawArkData?: string;
} | {
title: string;
desc: string;
picUrl: string;
jumpUrl: string;
iconUrl: string;
webUrl?: string;
appId: string;
scene: number;
templateType: number;
businessType: number;
verType: number;
shareType: number;
versionId: string;
sdkId: string;
withShareTicket: number;
rawArkData?: string;
};
get_ai_record: {
character: string;
group_id: number;
text: string;
};
get_ai_characters: {
group_id: number;
char_type?: number;
};
send_group_ai_record: {
character: string;
group_id: number;
text: string;
};
get_clientkey: {};
send_poke: {
group_id: number;
user_id: number;
} | {
user_id: number;
};
get_private_file_url: {
file_id: string;
};
click_inline_keyboard_button: {
group_id: number;
bot_appid: string;
button_id?: string;
callback_data?: string;
msg_seq?: string;
};
};
export type WSSendReturn = {
send_private_msg: WSSendReturn['send_msg'];
send_group_msg: WSSendReturn['send_msg'];
send_msg: {
message_id: number;
};
delete_msg: null;
get_msg: ({
message_type: 'private';
sender: {
user_id: number;
nickname: string;
card: string;
};
sub_type: 'friend';
} | {
message_type: 'group';
group_id: number;
sender: {
user_id: number;
nickname: string;
card: string;
role: 'owner' | 'admin' | 'member';
};
sub_type: 'normal';
}) & {
self_id: number;
user_id: number;
time: number;
message_id: number;
message_seq: number;
real_id: number;
raw_message: string;
font: number;
post_type: 'message' | 'message_sent';
} & MessageType;
get_forward_msg: {
messages: WSSendReturn['get_msg'][];
};
send_like: null;
set_group_kick: null;
set_group_ban: null;
set_group_whole_ban: null;
set_group_admin: null;
set_group_card: null;
set_group_name: null;
set_group_leave: null;
set_group_special_title: null;
set_friend_add_request: null;
set_group_add_request: null;
get_login_info: {
user_id: number;
nickname: string;
};
get_stranger_info: {
uid: string;
uin: string;
nick: string;
remark: string;
constellation: number;
shengXiao: number;
kBloodType: number;
homeTown: string;
makeFriendCareer: number;
pos: string;
college: string;
country: string;
province: string;
city: string;
postCode: string;
address: string;
regTime: number;
interest: string;
labels: string[];
qqLevel: number;
qid: string;
longNick: string;
birthday_year: number;
birthday_month: number;
birthday_day: number;
age: number;
sex: 'male' | 'female' | 'unknown';
eMail: string;
phoneNum: string;
categoryId: number;
richTime: number;
richBuffer: string | {};
topTime: string;
isBlock: boolean;
isMsgDisturb: boolean;
isSpecialCareOpen: boolean;
isSpecialCareZone: boolean;
ringId: string;
isBlocked: boolean;
recommendImgFlag: number;
disableEmojiShortCuts: number;
qidianMasterFlag: number;
qidianCrewFlag: number;
qidianCrewFlag2: number;
isHideQQLevel: number;
isHidePrivilegeIcon: number;
status: number;
extStatus: number;
batteryStatus: number;
termType: number;
netType: number;
iconType: number;
customStatus: unknown;
setTime: string;
specialFlag: number;
abiFlag: number;
eNetworkType: number;
showName: string;
termDesc: string;
musicInfo: {
buf: string | {};
};
extOnlineBusinessInfo: {
buf: string | {};
customStatus: unknown;
videoBizInfo: {
cid: string;
tvUrl: string;
synchType: string;
};
videoInfo: {
name: string;
};
};
extBuffer: {
buf: string | {};
};
user_id: number;
nickname: string;
long_nick: string;
reg_time: number;
is_vip: boolean;
is_years_vip: boolean;
vip_level: number;
login_days: number;
};
get_friend_list: {
qid: string;
longNick: string;
birthday_year: number;
birthday_month: number;
birthday_day: number;
age: number;
sex: string;
eMail: string;
phoneNum: string;
categoryId: number;
richTime: number;
richBuffer: {
[key: string]: number;
};
uid: string;
uin: string;
nick: string;
remark: string;
user_id: number;
nickname: string;
level: number;
}[];
get_group_info: {
group_id: number;
group_name: string;
member_count: number;
max_member_count: number;
};
get_group_list: WSSendReturn['get_group_info'][];
get_group_member_info: {
group_id: number;
user_id: number;
nickname: string;
card: string;
sex: 'unknown' | 'male' | 'female';
age: number;
area: string;
level: string;
qq_level: number;
join_time: number;
last_sent_time: number;
title_expire_time: number;
unfriendly: boolean;
card_changeable: boolean;
is_robot: boolean;
shut_up_timestamp: number;
role: 'owner' | 'admin' | 'member';
title: string;
};
get_group_member_list: WSSendReturn['get_group_info'][];
get_group_honor_info: {
group_id: string;
current_talkative: {
user_id: number;
avatar: string;
nickname: string;
day_count: number;
description: string;
};
talkative_list: {
user_id: number;
avatar: string;
description: string;
day_count: number;
nickname: string;
}[];
performer_list: {
user_id: number;
avatar: string;
description: string;
day_count: number;
nickname: string;
}[];
legend_list: {
user_id: number;
avatar: string;
description: string;
day_count: number;
nickname: string;
}[];
emotion_list: {
user_id: number;
avatar: string;
description: string;
day_count: number;
nickname: string;
}[];
strong_newbie_list: {
user_id: number;
avatar: string;
description: string;
day_count: number;
nickname: string;
}[];
};
get_cookies: {
cookies: string;
bkn: string;
};
get_csrf_token: {
token: string;
};
get_credentials: {
cookies: string;
token: string;
};
get_record: {
file: string;
url: string;
file_size: string;
file_name: string;
base64?: string;
};
get_image: WSSendReturn['get_record'];
can_send_image: {
yes: true;
};
can_send_record: {
yes: true;
};
get_status: {
online: boolean;
good: true;
stat: {};
};
get_version_info: {
app_name: 'NapCat.Onebot';
protocol_version: 'v11';
app_version: string;
};
bot_exit: null;
set_qq_profile: {
result: 0;
errMsg: '';
};
_get_model_show: {
variants: {
model_show: string;
need_pay: boolean;
};
}[];
delete_friend: {
result: 0;
errMsg: 'success';
};
mark_msg_as_read: null;
send_group_forward_msg: WSSendReturn['send_msg'];
send_private_forward_msg: WSSendReturn['send_msg'];
get_group_msg_history: {
messages: WSSendReturn['get_msg'][];
};
ocr_image: {
text: string;
pt1: {
x: string;
y: string;
};
pt2: {
x: string;
y: string;
};
pt3: {
x: string;
y: string;
};
pt4: {
x: string;
y: string;
};
charBox: {
charText: string;
charBox: {
pt1: {
x: string;
y: string;
};
pt2: {
x: string;
y: string;
};
pt3: {
x: string;
y: string;
};
pt4: {
x: string;
y: string;
};
};
}[];
score: string;
}[];
get_group_system_msg: {
InvitedRequest: {
request_id: number;
invitor_uin: number;
invitor_nick: string;
group_id: number;
group_name: string;
checked: boolean;
actor: number;
}[];
join_requests: {
request_id: number;
invitor_uin: number;
invitor_nick: string;
group_id: number;
group_name: string;
checked: boolean;
actor: number;
}[];
};
get_essence_msg_list: {
msg_seq: number;
msg_random: number;
sender_id: number;
sender_nick: string;
operator_id: number;
operator_nick: string;
message_id: number;
operator_time: number;
content: Receive[keyof Receive][];
}[];
get_group_at_all_remain: {
can_at_all: boolean;
remain_at_all_count_for_group: number;
remain_at_all_count_for_uin: number;
};
set_group_portrait: {
result: 0;
errMsg: 'success';
};
set_essence_msg: {
errCode: 0;
errMsg: 'success';
};
delete_essence_msg: {
errCode: 0;
errMsg: 'success';
};
_send_group_notice: null;
_get_group_notice: {
notice_id: string;
sender_id: number;
publish_time: number;
message: {
text: string;
image: {
id: string;
height: string;
width: string;
}[];
};
}[];
upload_group_file: null;
delete_group_file: {
result: 0;
errMsg: 'ok';
transGroupFileResult: {
result: {
retCode: 0;
retMsg: 'ok';
clientWording: '';
};
successFileIdList: string[];
failFileIdList: string[];
};
};
create_group_file_folder: {
result: {
retCode: 0;
retMsg: 'ok';
clientWording: '';
};
groupItem: {
peerId: string;
type: number;
folderInfo: {
folderId: string;
parentFolderId: string;
folderName: string;
createTime: number;
modifyTime: number;
createUin: string;
creatorName: string;
totalFileCount: number;
modifyUin: string;
modifyName: string;
usedSpace: string;
};
fileInfo: null;
};
};
delete_group_folder: {
retCode: 0;
retMsg: 'ok';
clientWording: '';
};
get_group_file_system_info: {
file_count: number;
limit_count: 10000;
used_space: 0;
total_space: 10737418240;
};
get_group_root_files: {
files: {
group_id: number;
file_id: string;
file_name: string;
busid: number;
size: number;
upload_time: number;
dead_time: number;
modify_time: number;
download_times: number;
uploader: number;
uploader_name: string;
}[];
folders: {
group_id: number;
folder_id: string;
folder: string;
folder_name: string;
create_time: number;
creator: number;
creator_name: string;
total_file_count: number;
}[];
};
get_group_files_by_folder: WSSendReturn['get_group_root_files'];
get_group_file_url: {
url: string;
};
upload_private_file: null;
download_file: {
file: string;
};
'.handle_quick_operation': null;
set_diy_online_status: string;
ArkSharePeer: {
errCode: 0;
errMsg: '';
arkJson: string;
};
ArkShareGroup: string;
get_robot_uin_range: {
minUin: string;
maxUin: string;
}[];
set_online_status: null;
get_friends_with_category: {
categoryId: number;
categorySortId: number;
categoryName: string;
categoryMbCount: number;
onlineCount: number;
buddyList: WSSendReturn['get_friend_list'];
}[];
set_qq_avatar: null;
get_file: WSSendReturn['get_record'];
forward_friend_single_msg: null;
forward_group_single_msg: null;
translate_en2zh: string[];
set_msg_emoji_like: null;
send_forward_msg: {
message_id: number;
res_id: string;
};
mark_private_msg_as_read: null;
mark_group_msg_as_read: null;
get_friend_msg_history: {
messages: WSSendReturn['get_msg'][];
};
create_collection: {
result: 0;
errMsg: '';
};
set_self_longnick: {
result: 0;
errMsg: '';
};
get_recent_contact: ({
lastestMsg: WSSendReturn['get_msg'];
peerUin: string;
remark: string;
msgTime: string;
chatType: number;
msgId: string;
sendNickName: string;
sendMemberName: string;
peerName: string;
} | {
peerUin: string;
remark: string;
msgTime: number;
chatType: number;
msgId: string;
sendNickName: string;
sendMemberName: string;
peerName: string;
})[];
_mark_all_as_read: null;
get_profile_like: {
uid: string;
time: number;
favoriteInfo: {
total_count: number;
last_time: number;
today_count: number;
userInfos: {
age: number;
bAvailableCnt: number;
bTodayVotedCnt: number;
count: number;
customId: number;
gender: number;
giftCount: number;
isFriend: boolean;
isSvip: boolean;
isvip: boolean;
lastCharged: number;
latestTime: number;
nick: string;
src: number;
uid: string;
uin: number;
}[];
};
voteInfo: {
total_count: number;
new_count: number;
new_nearby_count: number;
last_visit_time: number;
userInfos: {
age: number;
bAvailableCnt: number;
bTodayVotedCnt: number;
count: number;
customId: number;
gender: number;
giftCount: number;
isFriend: boolean;
isSvip: boolean;
isvip: boolean;
lastCharged: number;
latestTime: number;
nick: string;
src: number;
uid: string;
uin: number;
}[];
};
}[];
fetch_custom_face: string[];
fetch_emoji_like: {
result: 0;
errMsg: '';
emojiLikesList: {
tinyId: string;
nickName: string;
headUrl: string;
}[];
cookie: '';
isLastPage: boolean;
isFirstPage: boolean;
};
set_input_status: {
result: 0;
errMsg: 'success';
};
get_group_info_ex: {
groupCode: string;
resultCode: 0;
extInfo: {
groupInfoExtSeq: number;
reserve: number;
luckyWordId: string;
lightCharNum: number;
luckyWord: string;
starId: number;
essentialMsgSwitch: number;
todoSeq: number;
blacklistExpireTime: number;
isLimitGroupRtc: number;
companyId: number;
hasGroupCustomPortrait: number;
bindGuildId: string;
groupOwnerId: {
memberUin: string;
memberUid: string;
memberQid: string;
};
essentialMsgPrivilege: number;
msgEventSeq: string;
inviteRobotSwitch: number;
gangUpId: string;
qqMusicMedalSwitch: number;
showPlayTogetherSwitch: number;
groupFlagPro1: string;
groupBindGuildIds: {
guildIds: string[];
};
viewedMsgDisappearTime: string;
groupExtFlameData: {
switchState: number;
state: number;
dayNums: string[];
version: number;
updateTime: string;
isDisplayDayNum: false;
};
groupBindGuildSwitch: number;
groupAioBindGuildId: string;
groupExcludeGuildIds: {
guildIds: string[];
};
fullGroupExpansionSwitch: number;
fullGroupExpansionSeq: string;
inviteRobotMemberSwitch: number;
inviteRobotMemberExamine: number;
groupSquareSwitch: number;
};
};
_del_group_notice: null;
friend_poke: null;
group_poke: null;
nc_get_packet_status: undefined;
nc_get_user_status: {
status: number;
ext_status: number;
};
nc_get_rkey: {
rkey: string;
ttl: string;
time: number;
type: number;
}[];
get_group_shut_list: {
uid: string;
qid: string;
uin: string;
nick: string;
remark: string;
cardType: number;
cardName: string;
role: number;
avatarPath: string;
shutUpTime: number;
isDelete: boolean;
isSpecialConcerned: boolean;
isSpecialShield: boolean;
isRobot: boolean;
groupHonor: {
[key: string]: number;
};
memberRealLevel: number;
memberLevel: number;
globalGroupLevel: number;
globalGroupPoint: number;
memberTitleId: number;
memberSpecialTitle: string;
specialTitleExpireTime: string;
userShowFlag: number;
userShowFlagNew: number;
richFlag: number;
mssVipType: number;
bigClubLevel: number;
bigClubFlag: number;
autoRemark: string;
creditLevel: number;
joinTime: number;
lastSpeakTime: number;
memberFlag: number;
memberFlagExt: number;
memberMobileFlag: number;
memberFlagExt2: number;
isSpecialShielded: boolean;
cardNameId: number;
}[];
get_group_ignored_notifies: WSSendReturn['get_group_system_msg'];
set_group_sign: null;
send_group_sign: WSSendReturn['set_group_sign'];
send_packet: string;
get_mini_app_ark: {
title: string;
desc: string;
picUrl: string;
jumpUrl: string;
webUrl?: string;
sdkId: string;
appId: string;
scene: number;
iconUrl: string;
templateType: number;
businessType: number;
verType: number;
shareType: number;
versionId: string;
withShareTicket: number;
};
get_ai_record: string;
get_ai_characters: {
type: string;
characters: {
character_id: string;
character_name: string;
preview_url: string;
}[];
}[];
send_group_ai_record: null;
get_clientkey: {
clientkey: string;
};
send_poke: null;
get_private_file_url: {
url: string;
};
click_inline_keyboard_button: {
result: 0;
errMsg: '';
status: number;
promptText: string;
promptType: number;
promptIcon: number;
};
};