mirror of
https://github.com/LLOneBot/LLOneBot.git
synced 2024-11-22 01:56:33 +00:00
refactor
This commit is contained in:
@@ -1,15 +1,19 @@
|
||||
import {BrowserWindow} from 'electron';
|
||||
import {getConfigUtil, log} from "../common/utils";
|
||||
import {NTQQApiClass} from "./ntcall";
|
||||
import {RawMessage} from "../common/types";
|
||||
import {msgHistory} from "../common/data";
|
||||
import {NTQQApiClass, sendMessagePool} from "./ntcall";
|
||||
import { Group } from "./types";
|
||||
import { RawMessage } from "./types";
|
||||
import {groups, msgHistory} from "../common/data";
|
||||
|
||||
export let hookApiCallbacks: Record<string, (apiReturn: any)=>void>={}
|
||||
|
||||
export enum ReceiveCmd {
|
||||
UPDATE_MSG = "nodeIKernelMsgListener/onMsgInfoListUpdate",
|
||||
NEW_MSG = "nodeIKernelMsgListener/onRecvMsg",
|
||||
SELF_SEND_MSG = "nodeIKernelMsgListener/onAddSendMsg"
|
||||
SELF_SEND_MSG = "nodeIKernelMsgListener/onAddSendMsg",
|
||||
USER_INFO = "nodeIKernelProfileListener/onProfileDetailInfoChanged",
|
||||
GROUPS = "nodeIKernelGroupListener/onGroupListUpdate",
|
||||
GROUPS_UNIX = "onGroupListUpdate"
|
||||
}
|
||||
|
||||
interface NTQQApiReturnData<PayloadType=unknown> extends Array<any> {
|
||||
@@ -28,13 +32,14 @@ interface NTQQApiReturnData<PayloadType=unknown> extends Array<any> {
|
||||
|
||||
let receiveHooks: Array<{
|
||||
method: ReceiveCmd,
|
||||
hookFunc: (payload: unknown) => void
|
||||
hookFunc: (payload: any) => void
|
||||
}> = []
|
||||
|
||||
export function hookNTQQApiReceive(window: BrowserWindow) {
|
||||
const originalSend = window.webContents.send;
|
||||
const patchSend = (channel: string, ...args: NTQQApiReturnData) => {
|
||||
// 判断是否是列表
|
||||
log(`received ntqq api message: ${channel}`, JSON.stringify(args))
|
||||
if (args?.[1] instanceof Array) {
|
||||
for (let receiveData of args?.[1]) {
|
||||
const ntQQApiMethodName = receiveData.cmdName;
|
||||
@@ -75,6 +80,25 @@ export function registerReceiveHook<PayloadType>(method: ReceiveCmd, hookFunc: (
|
||||
})
|
||||
}
|
||||
|
||||
function updateGroups(_groups: Group[]){
|
||||
for(let group of _groups){
|
||||
let existGroup = groups.find(g=>g.groupCode == group.groupCode)
|
||||
if (!existGroup){
|
||||
groups.push(group)
|
||||
}
|
||||
else{
|
||||
Object.assign(existGroup, group);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
registerReceiveHook<{groupList: Group[]}>(ReceiveCmd.GROUPS, (payload)=>updateGroups(payload.groupList))
|
||||
registerReceiveHook<{groupList: Group[]}>(ReceiveCmd.GROUPS_UNIX, (payload)=>updateGroups(payload.groupList))
|
||||
|
||||
registerReceiveHook<any>(ReceiveCmd.USER_INFO, (payload)=>{
|
||||
log("user info", payload);
|
||||
})
|
||||
|
||||
registerReceiveHook<{ msgList: Array<RawMessage> }>(ReceiveCmd.UPDATE_MSG, (payload) => {
|
||||
for (const message of payload.msgList) {
|
||||
msgHistory[message.msgId] = message;
|
||||
@@ -84,7 +108,25 @@ registerReceiveHook<{ msgList: Array<RawMessage> }>(ReceiveCmd.UPDATE_MSG, (payl
|
||||
registerReceiveHook<{ msgList: Array<RawMessage> }>(ReceiveCmd.NEW_MSG, (payload) => {
|
||||
for (const message of payload.msgList) {
|
||||
log("收到新消息,push到历史记录", message)
|
||||
msgHistory[message.msgId] = message;
|
||||
if (!msgHistory[message.msgId]){
|
||||
msgHistory[message.msgId] = message
|
||||
}
|
||||
else{
|
||||
Object.assign(msgHistory[message.msgId], message)
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
registerReceiveHook<{msgRecord: RawMessage}>(ReceiveCmd.SELF_SEND_MSG, ({msgRecord})=>{
|
||||
const message = msgRecord;
|
||||
const peerUid = message.peerUid;
|
||||
// log("收到自己发送成功的消息", Object.keys(sendMessagePool), message);
|
||||
const sendCallback = sendMessagePool[peerUid];
|
||||
if (sendCallback){
|
||||
try{
|
||||
sendCallback(message);
|
||||
}catch(e){
|
||||
log("receive self msg error", e.stack)
|
||||
}
|
||||
}
|
||||
})
|
||||
|
Reference in New Issue
Block a user