mirror of
https://github.com/NapNeko/NapCatQQ.git
synced 2025-07-19 12:03:37 +00:00
chore: reformat code style
This commit is contained in:
@@ -6,6 +6,7 @@ export type ListenerClassBase = Record<string, string>;
|
|||||||
export interface ListenerIBase {
|
export interface ListenerIBase {
|
||||||
// eslint-disable-next-line @typescript-eslint/no-misused-new
|
// eslint-disable-next-line @typescript-eslint/no-misused-new
|
||||||
new(listener: any): ListenerClassBase;
|
new(listener: any): ListenerClassBase;
|
||||||
|
|
||||||
[key: string]: any;
|
[key: string]: any;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -122,7 +123,7 @@ export class NTEventChannel extends EventEmitter {
|
|||||||
|
|
||||||
async callEvent<EventType extends (...args: any[]) => Promise<any> | any>(
|
async callEvent<EventType extends (...args: any[]) => Promise<any> | any>(
|
||||||
EventName = '', timeout: number = 3000, ...args: Parameters<EventType>) {
|
EventName = '', timeout: number = 3000, ...args: Parameters<EventType>) {
|
||||||
return new Promise<Awaited<ReturnType<EventType>>>(async (resolve, reject) => {
|
return new Promise<Awaited<ReturnType<EventType>>>(async (resolve) => {
|
||||||
const EventFunc = this.createEventFunction<EventType>(EventName);
|
const EventFunc = this.createEventFunction<EventType>(EventName);
|
||||||
const retData = await EventFunc!(...args);
|
const retData = await EventFunc!(...args);
|
||||||
resolve(retData);
|
resolve(retData);
|
||||||
|
@@ -13,6 +13,7 @@ export function isGIF(path: string) {
|
|||||||
fs.closeSync(fd);
|
fs.closeSync(fd);
|
||||||
return buffer.toString() === 'GIF8';
|
return buffer.toString() === 'GIF8';
|
||||||
}
|
}
|
||||||
|
|
||||||
// 定义一个异步函数来检查文件是否存在
|
// 定义一个异步函数来检查文件是否存在
|
||||||
export function checkFileReceived(path: string, timeout: number = 3000): Promise<void> {
|
export function checkFileReceived(path: string, timeout: number = 3000): Promise<void> {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
@@ -123,15 +124,14 @@ export interface HttpDownloadOptions {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export async function httpDownload(options: string | HttpDownloadOptions): Promise<Buffer> {
|
export async function httpDownload(options: string | HttpDownloadOptions): Promise<Buffer> {
|
||||||
const chunks: Buffer[] = [];
|
// const chunks: Buffer[] = [];
|
||||||
let url: string;
|
let url: string;
|
||||||
let headers: Record<string, string> = {
|
let headers: Record<string, string> = {
|
||||||
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.71 Safari/537.36',
|
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.71 Safari/537.36',
|
||||||
};
|
};
|
||||||
if (typeof options === 'string') {
|
if (typeof options === 'string') {
|
||||||
url = options;
|
url = options;
|
||||||
const host = new URL(url).hostname;
|
headers['Host'] = new URL(url).hostname;
|
||||||
headers['Host'] = host;
|
|
||||||
} else {
|
} else {
|
||||||
url = options.url;
|
url = options.url;
|
||||||
if (options.headers) {
|
if (options.headers) {
|
||||||
|
@@ -18,11 +18,12 @@ export async function solveAsyncProblem<T extends (...args: any[]) => Promise<an
|
|||||||
return new Promise<Awaited<ReturnType<T>> | undefined>((resolve) => {
|
return new Promise<Awaited<ReturnType<T>> | undefined>((resolve) => {
|
||||||
func(...args).then((result) => {
|
func(...args).then((result) => {
|
||||||
resolve(result);
|
resolve(result);
|
||||||
}).catch((e) => {
|
}).catch(() => {
|
||||||
resolve(undefined);
|
resolve(undefined);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
//下面这个类是用于将uid+msgid合并的类
|
//下面这个类是用于将uid+msgid合并的类
|
||||||
export class UUIDConverter {
|
export class UUIDConverter {
|
||||||
static encode(highStr: string, lowStr: string): string {
|
static encode(highStr: string, lowStr: string): string {
|
||||||
@@ -31,11 +32,10 @@ export class UUIDConverter {
|
|||||||
const highHex = high.toString(16).padStart(16, '0');
|
const highHex = high.toString(16).padStart(16, '0');
|
||||||
const lowHex = low.toString(16).padStart(16, '0');
|
const lowHex = low.toString(16).padStart(16, '0');
|
||||||
const combinedHex = highHex + lowHex;
|
const combinedHex = highHex + lowHex;
|
||||||
const uuid = `${combinedHex.substring(0, 8)}-${combinedHex.substring(8, 12)}-${combinedHex.substring(
|
return `${combinedHex.substring(0, 8)}-${combinedHex.substring(8, 12)}-${combinedHex.substring(
|
||||||
12,
|
12,
|
||||||
16,
|
16,
|
||||||
)}-${combinedHex.substring(16, 20)}-${combinedHex.substring(20)}`;
|
)}-${combinedHex.substring(16, 20)}-${combinedHex.substring(20)}`;
|
||||||
return uuid;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static decode(uuid: string): { high: string; low: string } {
|
static decode(uuid: string): { high: string; low: string } {
|
||||||
|
@@ -177,7 +177,7 @@ export function rawMessageToText(msg: RawMessage, recursiveLevel = 0): string {
|
|||||||
|
|
||||||
if (element.replyElement) {
|
if (element.replyElement) {
|
||||||
const recordMsgOrNull = msg.records.find(
|
const recordMsgOrNull = msg.records.find(
|
||||||
record => element.replyElement!.sourceMsgIdInRecords === record.msgId
|
record => element.replyElement!.sourceMsgIdInRecords === record.msgId,
|
||||||
);
|
);
|
||||||
return `[回复消息 ${
|
return `[回复消息 ${
|
||||||
recordMsgOrNull &&
|
recordMsgOrNull &&
|
||||||
|
File diff suppressed because one or more lines are too long
@@ -97,9 +97,13 @@ export class NTQQFileApi {
|
|||||||
async createValidSendFileElement(
|
async createValidSendFileElement(
|
||||||
filePath: string,
|
filePath: string,
|
||||||
fileName: string = '',
|
fileName: string = '',
|
||||||
folderId: string = ''
|
folderId: string = '',
|
||||||
): Promise<SendFileElement> {
|
): Promise<SendFileElement> {
|
||||||
const { fileName: _fileName, path, fileSize } = await this.core.apis.FileApi.uploadFile(filePath, ElementType.FILE);
|
const {
|
||||||
|
fileName: _fileName,
|
||||||
|
path,
|
||||||
|
fileSize,
|
||||||
|
} = await this.core.apis.FileApi.uploadFile(filePath, ElementType.FILE);
|
||||||
if (fileSize === 0) {
|
if (fileSize === 0) {
|
||||||
throw new Error('文件异常,大小为0');
|
throw new Error('文件异常,大小为0');
|
||||||
}
|
}
|
||||||
@@ -118,9 +122,14 @@ export class NTQQFileApi {
|
|||||||
async createValidSendPicElement(
|
async createValidSendPicElement(
|
||||||
picPath: string,
|
picPath: string,
|
||||||
summary: string = '',
|
summary: string = '',
|
||||||
subType: 0 | 1 = 0
|
subType: 0 | 1 = 0,
|
||||||
): Promise<SendPicElement> {
|
): Promise<SendPicElement> {
|
||||||
const { md5, fileName, path, fileSize } = await this.core.apis.FileApi.uploadFile(picPath, ElementType.PIC, subType);
|
const {
|
||||||
|
md5,
|
||||||
|
fileName,
|
||||||
|
path,
|
||||||
|
fileSize,
|
||||||
|
} = await this.core.apis.FileApi.uploadFile(picPath, ElementType.PIC, subType);
|
||||||
if (fileSize === 0) {
|
if (fileSize === 0) {
|
||||||
throw new Error('文件异常,大小为0');
|
throw new Error('文件异常,大小为0');
|
||||||
}
|
}
|
||||||
@@ -153,7 +162,12 @@ export class NTQQFileApi {
|
|||||||
diyThumbPath: string = '',
|
diyThumbPath: string = '',
|
||||||
): Promise<SendVideoElement> {
|
): Promise<SendVideoElement> {
|
||||||
const logger = this.core.context.logger;
|
const logger = this.core.context.logger;
|
||||||
const { fileName: _fileName, path, fileSize, md5 } = await this.core.apis.FileApi.uploadFile(filePath, ElementType.VIDEO);
|
const {
|
||||||
|
fileName: _fileName,
|
||||||
|
path,
|
||||||
|
fileSize,
|
||||||
|
md5,
|
||||||
|
} = await this.core.apis.FileApi.uploadFile(filePath, ElementType.VIDEO);
|
||||||
if (fileSize === 0) {
|
if (fileSize === 0) {
|
||||||
throw new Error('文件异常,大小为0');
|
throw new Error('文件异常,大小为0');
|
||||||
}
|
}
|
||||||
@@ -200,7 +214,7 @@ export class NTQQFileApi {
|
|||||||
const thumbSize = _thumbPath ? (await fsPromises.stat(_thumbPath)).size : 0;
|
const thumbSize = _thumbPath ? (await fsPromises.stat(_thumbPath)).size : 0;
|
||||||
// log("生成缩略图", _thumbPath)
|
// log("生成缩略图", _thumbPath)
|
||||||
thumbPath.set(0, _thumbPath);
|
thumbPath.set(0, _thumbPath);
|
||||||
const thumbMd5 = _thumbPath ? await calculateFileMD5(_thumbPath) : "";
|
const thumbMd5 = _thumbPath ? await calculateFileMD5(_thumbPath) : '';
|
||||||
// "fileElement": {
|
// "fileElement": {
|
||||||
// "fileMd5": "",
|
// "fileMd5": "",
|
||||||
// "fileName": "1.mp4",
|
// "fileName": "1.mp4",
|
||||||
@@ -459,8 +473,7 @@ export class NTQQFileApi {
|
|||||||
|
|
||||||
const Event = this.core.eventWrapper.createEventFunction<EventType>('NodeIKernelSearchService/searchFileWithKeywords');
|
const Event = this.core.eventWrapper.createEventFunction<EventType>('NodeIKernelSearchService/searchFileWithKeywords');
|
||||||
let id = '';
|
let id = '';
|
||||||
const Listener = this.core.eventWrapper.RegisterListen<(params: OnListener) => void>
|
const Listener = this.core.eventWrapper.RegisterListen<(params: OnListener) => void>(
|
||||||
(
|
|
||||||
'NodeIKernelSearchListener/onSearchFileKeywordsResult',
|
'NodeIKernelSearchListener/onSearchFileKeywordsResult',
|
||||||
1,
|
1,
|
||||||
20000,
|
20000,
|
||||||
|
@@ -19,6 +19,7 @@ export class NTQQGroupApi {
|
|||||||
groupCache: Map<string, Group> = new Map<string, Group>();
|
groupCache: Map<string, Group> = new Map<string, Group>();
|
||||||
groupMemberCache: Map<string, Map<string, GroupMember>> = new Map<string, Map<string, GroupMember>>();
|
groupMemberCache: Map<string, Map<string, GroupMember>> = new Map<string, Map<string, GroupMember>>();
|
||||||
groups: Group[] = [];
|
groups: Group[] = [];
|
||||||
|
|
||||||
constructor(context: InstanceContext, core: NapCatCore) {
|
constructor(context: InstanceContext, core: NapCatCore) {
|
||||||
this.context = context;
|
this.context = context;
|
||||||
this.core = core;
|
this.core = core;
|
||||||
@@ -26,6 +27,7 @@ export class NTQQGroupApi {
|
|||||||
this.initCache().then().catch(context.logger.logError);
|
this.initCache().then().catch(context.logger.logError);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
async initCache() {
|
async initCache() {
|
||||||
this.groups = await this.getGroups();
|
this.groups = await this.getGroups();
|
||||||
for (const group of this.groups) {
|
for (const group of this.groups) {
|
||||||
@@ -35,6 +37,7 @@ export class NTQQGroupApi {
|
|||||||
}
|
}
|
||||||
this.context.logger.logDebug(`加载${this.groups.length}个群组缓存完成`);
|
this.context.logger.logDebug(`加载${this.groups.length}个群组缓存完成`);
|
||||||
}
|
}
|
||||||
|
|
||||||
async setGroupAvatar(gc: string, filePath: string) {
|
async setGroupAvatar(gc: string, filePath: string) {
|
||||||
return this.context.session.getGroupService().setHeader(gc, filePath);
|
return this.context.session.getGroupService().setHeader(gc, filePath);
|
||||||
}
|
}
|
||||||
@@ -135,8 +138,7 @@ export class NTQQGroupApi {
|
|||||||
members = await this.getGroupMembers(groupCodeStr);
|
members = await this.getGroupMembers(groupCodeStr);
|
||||||
// 更新群成员列表
|
// 更新群成员列表
|
||||||
this.groupMemberCache.set(groupCodeStr, members);
|
this.groupMemberCache.set(groupCodeStr, members);
|
||||||
}
|
} catch (e) {
|
||||||
catch (e) {
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -215,21 +217,25 @@ export class NTQQGroupApi {
|
|||||||
// GetMsgByShoretID(ShoretID); -> MsgService.getMsgs(Peer,MsgId,1,false); -> 组出参数
|
// GetMsgByShoretID(ShoretID); -> MsgService.getMsgs(Peer,MsgId,1,false); -> 组出参数
|
||||||
return this.context.session.getGroupService().addGroupEssence(param);
|
return this.context.session.getGroupService().addGroupEssence(param);
|
||||||
}
|
}
|
||||||
|
|
||||||
async kickMemberV2Inner(param: KickMemberV2Req) {
|
async kickMemberV2Inner(param: KickMemberV2Req) {
|
||||||
return this.context.session.getGroupService().kickMemberV2(param);
|
return this.context.session.getGroupService().kickMemberV2(param);
|
||||||
}
|
}
|
||||||
|
|
||||||
async deleteGroupBulletin(GroupCode: string, noticeId: string) {
|
async deleteGroupBulletin(GroupCode: string, noticeId: string) {
|
||||||
const _Pskey = (await this.core.apis.UserApi.getPSkey(['qun.qq.com'])).domainPskeyMap.get('qun.qq.com')!;
|
const _Pskey = (await this.core.apis.UserApi.getPSkey(['qun.qq.com'])).domainPskeyMap.get('qun.qq.com')!;
|
||||||
return this.context.session.getGroupService().deleteGroupBulletin(GroupCode, _Pskey, noticeId);
|
return this.context.session.getGroupService().deleteGroupBulletin(GroupCode, _Pskey, noticeId);
|
||||||
}
|
}
|
||||||
|
|
||||||
async quitGroupV2(GroupCode: string, needDeleteLocalMsg: boolean) {
|
async quitGroupV2(GroupCode: string, needDeleteLocalMsg: boolean) {
|
||||||
const param = {
|
const param = {
|
||||||
groupCode: GroupCode,
|
groupCode: GroupCode,
|
||||||
needDeleteLocalMsg: needDeleteLocalMsg
|
needDeleteLocalMsg: needDeleteLocalMsg,
|
||||||
};
|
};
|
||||||
//应该是直接返回不需要Listener的 未经测试 需测试再发布
|
//应该是直接返回不需要Listener的 未经测试 需测试再发布
|
||||||
return this.context.session.getGroupService().quitGroupV2(param);
|
return this.context.session.getGroupService().quitGroupV2(param);
|
||||||
}
|
}
|
||||||
|
|
||||||
async removeGroupEssence(GroupCode: string, msgId: string) {
|
async removeGroupEssence(GroupCode: string, msgId: string) {
|
||||||
// 代码没测过
|
// 代码没测过
|
||||||
// 需要 ob11msgid->msgId + (peer) -> msgSeq + msgRandom
|
// 需要 ob11msgid->msgId + (peer) -> msgSeq + msgRandom
|
||||||
@@ -254,7 +260,7 @@ export class NTQQGroupApi {
|
|||||||
[
|
[
|
||||||
false,
|
false,
|
||||||
'',
|
'',
|
||||||
num
|
num,
|
||||||
],
|
],
|
||||||
);
|
);
|
||||||
return notifies;
|
return notifies;
|
||||||
|
@@ -18,6 +18,7 @@ export class NTQQMsgApi {
|
|||||||
async sendShowInputStatusReq(peer: Peer, eventType: number) {
|
async sendShowInputStatusReq(peer: Peer, eventType: number) {
|
||||||
return this.context.session.getMsgService().sendShowInputStatusReq(peer.chatType, eventType, peer.peerUid);
|
return this.context.session.getMsgService().sendShowInputStatusReq(peer.chatType, eventType, peer.peerUid);
|
||||||
}
|
}
|
||||||
|
|
||||||
async getMsgEmojiLikesList(peer: Peer, msgSeq: string, emojiId: string, emojiType: string, count: number = 20) {
|
async getMsgEmojiLikesList(peer: Peer, msgSeq: string, emojiId: string, emojiType: string, count: number = 20) {
|
||||||
//console.log(peer, msgSeq, emojiId, emojiType, count);
|
//console.log(peer, msgSeq, emojiId, emojiType, count);
|
||||||
//注意此处emojiType 可选值一般为1-2 2好像是unicode表情dec值 大部分情况 Taged M likiowa
|
//注意此处emojiType 可选值一般为1-2 2好像是unicode表情dec值 大部分情况 Taged M likiowa
|
||||||
@@ -39,6 +40,7 @@ export class NTQQMsgApi {
|
|||||||
emojiId = emojiId.toString();
|
emojiId = emojiId.toString();
|
||||||
return this.context.session.getMsgService().setMsgEmojiLikes(peer, msgSeq, emojiId, emojiId.length > 3 ? '2' : '1', set);
|
return this.context.session.getMsgService().setMsgEmojiLikes(peer, msgSeq, emojiId, emojiId.length > 3 ? '2' : '1', set);
|
||||||
}
|
}
|
||||||
|
|
||||||
async getMultiMsg(peer: Peer, rootMsgId: string, parentMsgId: string): Promise<GeneralCallResult & {
|
async getMultiMsg(peer: Peer, rootMsgId: string, parentMsgId: string): Promise<GeneralCallResult & {
|
||||||
msgList: RawMessage[]
|
msgList: RawMessage[]
|
||||||
} | undefined> {
|
} | undefined> {
|
||||||
@@ -93,6 +95,7 @@ export class NTQQMsgApi {
|
|||||||
async getMsgsBySeqAndCount(peer: Peer, seq: string, count: number, desc: boolean, z: boolean) {
|
async getMsgsBySeqAndCount(peer: Peer, seq: string, count: number, desc: boolean, z: boolean) {
|
||||||
return await this.context.session.getMsgService().getMsgsBySeqAndCount(peer, seq, count, desc, z);
|
return await this.context.session.getMsgService().getMsgsBySeqAndCount(peer, seq, count, desc, z);
|
||||||
}
|
}
|
||||||
|
|
||||||
async getMsgExBySeq(peer: Peer, msgSeq: string) {
|
async getMsgExBySeq(peer: Peer, msgSeq: string) {
|
||||||
const DateNow = Math.floor(Date.now() / 1000);
|
const DateNow = Math.floor(Date.now() / 1000);
|
||||||
const filterMsgFromTime = (DateNow - 300).toString();
|
const filterMsgFromTime = (DateNow - 300).toString();
|
||||||
@@ -108,6 +111,7 @@ export class NTQQMsgApi {
|
|||||||
pageLimit: 100,
|
pageLimit: 100,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
async setMsgRead(peer: Peer) {
|
async setMsgRead(peer: Peer) {
|
||||||
return this.context.session.getMsgService().setMsgRead(peer);
|
return this.context.session.getMsgService().setMsgRead(peer);
|
||||||
}
|
}
|
||||||
@@ -118,7 +122,7 @@ export class NTQQMsgApi {
|
|||||||
'NodeIKernelMsgListener/onGroupFileInfoUpdate',
|
'NodeIKernelMsgListener/onGroupFileInfoUpdate',
|
||||||
[
|
[
|
||||||
GroupCode,
|
GroupCode,
|
||||||
params
|
params,
|
||||||
],
|
],
|
||||||
() => true,
|
() => true,
|
||||||
( /* groupFileListResult: GroupFileInfoUpdateParamType */) => {
|
( /* groupFileListResult: GroupFileInfoUpdateParamType */) => {
|
||||||
@@ -142,29 +146,32 @@ export class NTQQMsgApi {
|
|||||||
peerUid: peer.peerUid,
|
peerUid: peer.peerUid,
|
||||||
}, msgIds);
|
}, msgIds);
|
||||||
}
|
}
|
||||||
|
|
||||||
async PrepareTempChat(toUserUid: string, GroupCode: string, nickname: string) {
|
async PrepareTempChat(toUserUid: string, GroupCode: string, nickname: string) {
|
||||||
//By Jadx/Ida Mlikiowa
|
//By Jadx/Ida Mlikiowa
|
||||||
const TempGameSession = {
|
const TempGameSession = {
|
||||||
nickname: "",
|
nickname: '',
|
||||||
gameAppId: "",
|
gameAppId: '',
|
||||||
selfTinyId: "",
|
selfTinyId: '',
|
||||||
peerRoleId: "",
|
peerRoleId: '',
|
||||||
peerOpenId: "",
|
peerOpenId: '',
|
||||||
};
|
};
|
||||||
return this.context.session.getMsgService().prepareTempChat({
|
return this.context.session.getMsgService().prepareTempChat({
|
||||||
chatType: ChatType.KCHATTYPETEMPC2CFROMGROUP,
|
chatType: ChatType.KCHATTYPETEMPC2CFROMGROUP,
|
||||||
peerUid: toUserUid,
|
peerUid: toUserUid,
|
||||||
peerNickname: nickname,
|
peerNickname: nickname,
|
||||||
fromGroupCode: GroupCode,
|
fromGroupCode: GroupCode,
|
||||||
sig: "",
|
sig: '',
|
||||||
selfPhone: "",
|
selfPhone: '',
|
||||||
selfUid: this.core.selfInfo.uid,
|
selfUid: this.core.selfInfo.uid,
|
||||||
gameSession: TempGameSession
|
gameSession: TempGameSession,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
async getTempChatInfo(chatType: ChatType, peerUid: string) {
|
async getTempChatInfo(chatType: ChatType, peerUid: string) {
|
||||||
return this.context.session.getMsgService().getTempChatInfo(chatType, peerUid);
|
return this.context.session.getMsgService().getTempChatInfo(chatType, peerUid);
|
||||||
}
|
}
|
||||||
|
|
||||||
async sendMsg(peer: Peer, msgElements: SendMessageElement[], waitComplete = true, timeout = 10000) {
|
async sendMsg(peer: Peer, msgElements: SendMessageElement[], waitComplete = true, timeout = 10000) {
|
||||||
//唉? !我有个想法
|
//唉? !我有个想法
|
||||||
if (peer.chatType === ChatType.KCHATTYPETEMPC2CFROMGROUP && peer.guildId && peer.guildId !== '') {
|
if (peer.chatType === ChatType.KCHATTYPETEMPC2CFROMGROUP && peer.guildId && peer.guildId !== '') {
|
||||||
@@ -182,7 +189,7 @@ export class NTQQMsgApi {
|
|||||||
'0',
|
'0',
|
||||||
peer,
|
peer,
|
||||||
msgElements,
|
msgElements,
|
||||||
new Map()
|
new Map(),
|
||||||
],
|
],
|
||||||
() => true,
|
() => true,
|
||||||
msgRecords => {
|
msgRecords => {
|
||||||
@@ -244,7 +251,7 @@ export class NTQQMsgApi {
|
|||||||
if (!arkElement) {
|
if (!arkElement) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
const forwardData: any = JSON.parse(arkElement.arkElement?.bytesData ?? "");
|
const forwardData: any = JSON.parse(arkElement.arkElement?.bytesData ?? '');
|
||||||
if (forwardData.app != 'com.tencent.multimsg') {
|
if (forwardData.app != 'com.tencent.multimsg') {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
@@ -28,18 +28,14 @@ export class NTQQSystemApi {
|
|||||||
|
|
||||||
//1-2-162b9b42-65b9-4405-a8ed-2e256ec8aa50
|
//1-2-162b9b42-65b9-4405-a8ed-2e256ec8aa50
|
||||||
async getArkJsonCollection(cid: string) {
|
async getArkJsonCollection(cid: string) {
|
||||||
const ret = await this.core.eventWrapper.callNoListenerEvent<(cid: string) => Promise<GeneralCallResult & {
|
return await this.core.eventWrapper.callNoListenerEvent<(cid: string) => Promise<GeneralCallResult & {
|
||||||
arkJson: string
|
arkJson: string
|
||||||
}>>(
|
}>>('NodeIKernelCollectionService/collectionArkShare', '1717662698058');
|
||||||
'NodeIKernelCollectionService/collectionArkShare',
|
|
||||||
'1717662698058',
|
|
||||||
);
|
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
async BootMiniApp(appfile: string, params: string) {
|
async BootMiniApp(appfile: string, params: string) {
|
||||||
await this.context.session.getNodeMiscService().setMiniAppVersion('2.16.4');
|
await this.context.session.getNodeMiscService().setMiniAppVersion('2.16.4');
|
||||||
const c = await this.context.session.getNodeMiscService().getMiniAppPath();
|
// const c = await this.context.session.getNodeMiscService().getMiniAppPath();
|
||||||
|
|
||||||
return this.context.session.getNodeMiscService().startNewMiniApp(appfile, params);
|
return this.context.session.getNodeMiscService().startNewMiniApp(appfile, params);
|
||||||
}
|
}
|
||||||
|
@@ -73,7 +73,7 @@ export class NTQQUserApi {
|
|||||||
'BuddyProfileStore',
|
'BuddyProfileStore',
|
||||||
uids,
|
uids,
|
||||||
UserDetailSource.KSERVER,
|
UserDetailSource.KSERVER,
|
||||||
[ProfileBizType.KALL]
|
[ProfileBizType.KALL],
|
||||||
],
|
],
|
||||||
() => true,
|
() => true,
|
||||||
(profile) => {
|
(profile) => {
|
||||||
@@ -106,7 +106,7 @@ export class NTQQUserApi {
|
|||||||
'BuddyProfileStore',
|
'BuddyProfileStore',
|
||||||
[uid],
|
[uid],
|
||||||
mode,
|
mode,
|
||||||
[ProfileBizType.KALL]
|
[ProfileBizType.KALL],
|
||||||
],
|
],
|
||||||
() => true,
|
() => true,
|
||||||
(profile) => profile.uid === uid,
|
(profile) => profile.uid === uid,
|
||||||
|
@@ -3,7 +3,7 @@ import path from 'node:path';
|
|||||||
import fs from 'node:fs';
|
import fs from 'node:fs';
|
||||||
import { InstanceContext } from './wrapper';
|
import { InstanceContext } from './wrapper';
|
||||||
import { proxiedListenerOf } from '@/common/utils/proxy-handler';
|
import { proxiedListenerOf } from '@/common/utils/proxy-handler';
|
||||||
import { NodeIKernelMsgListener, NodeIKernelGroupListener, NodeIKernelProfileListener } from './listeners';
|
import { NodeIKernelGroupListener, NodeIKernelMsgListener, NodeIKernelProfileListener } from './listeners';
|
||||||
import { DataSource, GroupMember, SelfInfo } from './entities';
|
import { DataSource, GroupMember, SelfInfo } from './entities';
|
||||||
import { LegacyNTEventWrapper } from '@/common/framework/event-legacy';
|
import { LegacyNTEventWrapper } from '@/common/framework/event-legacy';
|
||||||
import { NTQQFileApi, NTQQFriendApi, NTQQGroupApi, NTQQMsgApi, NTQQSystemApi, NTQQUserApi, NTQQWebApi } from './apis';
|
import { NTQQFileApi, NTQQFriendApi, NTQQGroupApi, NTQQMsgApi, NTQQSystemApi, NTQQUserApi, NTQQWebApi } from './apis';
|
||||||
@@ -98,7 +98,7 @@ export class NapCatCore {
|
|||||||
};
|
};
|
||||||
//await sleep(2500);
|
//await sleep(2500);
|
||||||
this.context.session.getMsgService().addKernelMsgListener(
|
this.context.session.getMsgService().addKernelMsgListener(
|
||||||
proxiedListenerOf(msgListener, this.context.logger) as any
|
proxiedListenerOf(msgListener, this.context.logger) as any,
|
||||||
);
|
);
|
||||||
|
|
||||||
const profileListener = new NodeIKernelProfileListener();
|
const profileListener = new NodeIKernelProfileListener();
|
||||||
@@ -125,8 +125,7 @@ export class NapCatCore {
|
|||||||
//群成员数量变化 应该刷新缓存
|
//群成员数量变化 应该刷新缓存
|
||||||
if (existGroup && g.memberCount === existGroup.memberCount) {
|
if (existGroup && g.memberCount === existGroup.memberCount) {
|
||||||
Object.assign(existGroup, g);
|
Object.assign(existGroup, g);
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
this.apis.GroupApi.groupCache.set(g.groupCode, g);
|
this.apis.GroupApi.groupCache.set(g.groupCode, g);
|
||||||
// 获取群成员
|
// 获取群成员
|
||||||
}
|
}
|
||||||
@@ -149,8 +148,7 @@ export class NapCatCore {
|
|||||||
const existMember = existMembers.get(uid);
|
const existMember = existMembers.get(uid);
|
||||||
if (existMember) {
|
if (existMember) {
|
||||||
Object.assign(existMember, member);
|
Object.assign(existMember, member);
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
existMembers!.set(uid, member);
|
existMembers!.set(uid, member);
|
||||||
}
|
}
|
||||||
//移除成员
|
//移除成员
|
||||||
@@ -158,8 +156,7 @@ export class NapCatCore {
|
|||||||
existMembers.delete(uid);
|
existMembers.delete(uid);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
this.apis.GroupApi.groupMemberCache.set(groupCode, arg.infos);
|
this.apis.GroupApi.groupMemberCache.set(groupCode, arg.infos);
|
||||||
}
|
}
|
||||||
// console.log('onMemberListChange', groupCode, arg);
|
// console.log('onMemberListChange', groupCode, arg);
|
||||||
@@ -182,8 +179,7 @@ export class NapCatCore {
|
|||||||
member.isChangeRole = this.checkAdminEvent(groupCode, member, existMember);
|
member.isChangeRole = this.checkAdminEvent(groupCode, member, existMember);
|
||||||
// 更新成员信息
|
// 更新成员信息
|
||||||
Object.assign(existMember, member);
|
Object.assign(existMember, member);
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
existMembers.set(uid, member);
|
existMembers.set(uid, member);
|
||||||
}
|
}
|
||||||
//移除成员
|
//移除成员
|
||||||
@@ -191,15 +187,15 @@ export class NapCatCore {
|
|||||||
existMembers.delete(uid);
|
existMembers.delete(uid);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
this.apis.GroupApi.groupMemberCache.set(groupCode, members);
|
this.apis.GroupApi.groupMemberCache.set(groupCode, members);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
this.context.session.getGroupService().addKernelGroupListener(
|
this.context.session.getGroupService().addKernelGroupListener(
|
||||||
proxiedListenerOf(groupListener, this.context.logger) as any
|
proxiedListenerOf(groupListener, this.context.logger) as any,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
checkAdminEvent(groupCode: string, memberNew: GroupMember, memberOld: GroupMember | undefined): boolean {
|
checkAdminEvent(groupCode: string, memberNew: GroupMember, memberOld: GroupMember | undefined): boolean {
|
||||||
if (memberNew.role !== memberOld?.role) {
|
if (memberNew.role !== memberOld?.role) {
|
||||||
this.context.logger.logDebug(`群 ${groupCode} ${memberNew.nick} 角色变更为 ${memberNew.role === 3 ? '管理员' : '群员'}`);
|
this.context.logger.logDebug(`群 ${groupCode} ${memberNew.nick} 角色变更为 ${memberNew.role === 3 ? '管理员' : '群员'}`);
|
||||||
|
@@ -1,10 +1,12 @@
|
|||||||
import { QQLevel, Sex, User } from './user';
|
import { QQLevel, Sex } from './user';
|
||||||
|
|
||||||
export interface KickMemberInfo {
|
export interface KickMemberInfo {
|
||||||
optFlag: number,
|
optFlag: number,
|
||||||
optOperate: number,
|
optOperate: number,
|
||||||
optMemberUid: string,
|
optMemberUid: string,
|
||||||
optBytesMsg: string,
|
optBytesMsg: string,
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface KickMemberV2Req {
|
export interface KickMemberV2Req {
|
||||||
groupCode: string,
|
groupCode: string,
|
||||||
kickFlag: number,
|
kickFlag: number,
|
||||||
@@ -12,23 +14,27 @@ export interface KickMemberV2Req{
|
|||||||
kickListUids: Array<string>,
|
kickListUids: Array<string>,
|
||||||
kickMsg: string
|
kickMsg: string
|
||||||
}
|
}
|
||||||
|
|
||||||
export enum DataSource {
|
export enum DataSource {
|
||||||
LOCAL,
|
LOCAL,
|
||||||
REMOTE
|
REMOTE
|
||||||
}
|
}
|
||||||
|
|
||||||
export enum GroupListUpdateType {
|
export enum GroupListUpdateType {
|
||||||
REFRESHALL,
|
REFRESHALL,
|
||||||
GETALL,
|
GETALL,
|
||||||
MODIFIED,
|
MODIFIED,
|
||||||
REMOVE
|
REMOVE
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface GroupMemberCache {
|
export interface GroupMemberCache {
|
||||||
group: {
|
group: {
|
||||||
data: GroupMember[];
|
data: GroupMember[];
|
||||||
isExpired: boolean;
|
isExpired: boolean;
|
||||||
}
|
};
|
||||||
isExpired: boolean;
|
isExpired: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface Group {
|
export interface Group {
|
||||||
groupCode: string,
|
groupCode: string,
|
||||||
createTime?: string,//高版本才有
|
createTime?: string,//高版本才有
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
import { GroupMemberRole } from './group';
|
import { GroupMemberRole } from '@/core';
|
||||||
|
|
||||||
export interface Peer {
|
export interface Peer {
|
||||||
chatType: ChatType;
|
chatType: ChatType;
|
||||||
@@ -145,6 +145,7 @@ export interface TaskTopMsgElement {
|
|||||||
iconUrl: string;
|
iconUrl: string;
|
||||||
topMsgType: number;
|
topMsgType: number;
|
||||||
}
|
}
|
||||||
|
|
||||||
export enum NTMsgType {
|
export enum NTMsgType {
|
||||||
KMSGTYPEARKSTRUCT = 11,
|
KMSGTYPEARKSTRUCT = 11,
|
||||||
KMSGTYPEFACEBUBBLE = 24,
|
KMSGTYPEFACEBUBBLE = 24,
|
||||||
@@ -168,6 +169,7 @@ export enum NTMsgType {
|
|||||||
KMSGTYPEVIDEO = 7,
|
KMSGTYPEVIDEO = 7,
|
||||||
KMSGTYPEWALLET = 10
|
KMSGTYPEWALLET = 10
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface SendTaskTopMsgElement {
|
export interface SendTaskTopMsgElement {
|
||||||
elementType: ElementType.TASKTOPMSG;
|
elementType: ElementType.TASKTOPMSG;
|
||||||
elementId: string;
|
elementId: string;
|
||||||
@@ -355,6 +357,7 @@ export enum NTMsgAtType {
|
|||||||
ATTYPESUMMONROLE = 256,
|
ATTYPESUMMONROLE = 256,
|
||||||
ATTYPEUNKNOWN = 0
|
ATTYPEUNKNOWN = 0
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface SendPicElement {
|
export interface SendPicElement {
|
||||||
elementType: ElementType.PIC;
|
elementType: ElementType.PIC;
|
||||||
elementId: string;
|
elementId: string;
|
||||||
@@ -511,6 +514,7 @@ export enum AtType {
|
|||||||
atAll = 1,
|
atAll = 1,
|
||||||
atUser = 2
|
atUser = 2
|
||||||
}
|
}
|
||||||
|
|
||||||
// 来自Android分析
|
// 来自Android分析
|
||||||
export enum ChatType {
|
export enum ChatType {
|
||||||
KCHATTYPEADELIE = 42,
|
KCHATTYPEADELIE = 42,
|
||||||
@@ -626,6 +630,7 @@ export enum NTGrayTipElementSubTypeV2 {
|
|||||||
GRAYTIP_ELEMENT_SUBTYPE_WALLET = 16,
|
GRAYTIP_ELEMENT_SUBTYPE_WALLET = 16,
|
||||||
GRAYTIP_ELEMENT_SUBTYPE_XMLMSG = 12,
|
GRAYTIP_ELEMENT_SUBTYPE_XMLMSG = 12,
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface GrayTipElement {
|
export interface GrayTipElement {
|
||||||
subElementType: NTGrayTipElementSubTypeV2;
|
subElementType: NTGrayTipElementSubTypeV2;
|
||||||
revokeElement: {
|
revokeElement: {
|
||||||
@@ -848,12 +853,14 @@ export interface MultiForwardMsgElement {
|
|||||||
resId: string;
|
resId: string;
|
||||||
fileName: string;
|
fileName: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
export enum SendStatusType {
|
export enum SendStatusType {
|
||||||
KSEND_STATUS_FAILED = 0,
|
KSEND_STATUS_FAILED = 0,
|
||||||
KSEND_STATUS_SENDING = 1,
|
KSEND_STATUS_SENDING = 1,
|
||||||
KSEND_STATUS_SUCCESS = 2,
|
KSEND_STATUS_SUCCESS = 2,
|
||||||
KSEND_STATUS_SUCCESS_NOSEQ = 3
|
KSEND_STATUS_SUCCESS_NOSEQ = 3
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface RawMessage {
|
export interface RawMessage {
|
||||||
parentMsgPeer: Peer;
|
parentMsgPeer: Peer;
|
||||||
|
|
||||||
|
@@ -16,6 +16,7 @@ export enum GroupNotifyMsgType {
|
|||||||
TRANSFER_GROUP_NOTIFY_OLDOWNER,
|
TRANSFER_GROUP_NOTIFY_OLDOWNER,
|
||||||
TRANSFER_GROUP_NOTIFY_ADMIN
|
TRANSFER_GROUP_NOTIFY_ADMIN
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface GroupNotifies {
|
export interface GroupNotifies {
|
||||||
doubt: boolean;
|
doubt: boolean;
|
||||||
nextStartSeq: string;
|
nextStartSeq: string;
|
||||||
@@ -29,17 +30,20 @@ export enum GroupNotifyMsgStatus {
|
|||||||
KREFUSED,//拒绝
|
KREFUSED,//拒绝
|
||||||
KIGNORED//忽略
|
KIGNORED//忽略
|
||||||
}
|
}
|
||||||
|
|
||||||
export enum GroupInviteStatus {
|
export enum GroupInviteStatus {
|
||||||
INIT,
|
INIT,
|
||||||
WAIT_TO_APPROVE,
|
WAIT_TO_APPROVE,
|
||||||
JOINED,
|
JOINED,
|
||||||
REFUSED_BY_ADMINI_STRATOR
|
REFUSED_BY_ADMINI_STRATOR
|
||||||
}
|
}
|
||||||
|
|
||||||
export enum GroupInviteType {
|
export enum GroupInviteType {
|
||||||
BYBUDDY,
|
BYBUDDY,
|
||||||
BYGROUPMEMBER,
|
BYGROUPMEMBER,
|
||||||
BYDISCUSSMEMBER
|
BYDISCUSSMEMBER
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface GroupNotify {
|
export interface GroupNotify {
|
||||||
seq: string; // 通知序列号
|
seq: string; // 通知序列号
|
||||||
type: GroupNotifyMsgType;
|
type: GroupNotifyMsgType;
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
import { ConfigBase } from "@/common/utils/config-base";
|
import { ConfigBase } from '@/common/utils/config-base';
|
||||||
import napCatDefaultConfig from '@/core/external/napcat.json';
|
import napCatDefaultConfig from '@/core/external/napcat.json';
|
||||||
import { NapCatCore } from '@/core';
|
import { NapCatCore } from '@/core';
|
||||||
|
|
||||||
|
@@ -1,4 +1,3 @@
|
|||||||
|
|
||||||
export class NodeIKernelFileAssistantListener {
|
export class NodeIKernelFileAssistantListener {
|
||||||
onFileStatusChanged(...args: unknown[]) {
|
onFileStatusChanged(...args: unknown[]) {
|
||||||
}
|
}
|
||||||
|
@@ -1,4 +1,3 @@
|
|||||||
|
|
||||||
export class NodeIKernelLoginListener {
|
export class NodeIKernelLoginListener {
|
||||||
onLoginConnected(...args: any[]): void {
|
onLoginConnected(...args: any[]): void {
|
||||||
}
|
}
|
||||||
|
@@ -11,16 +11,16 @@ export * from './NodeIKernelStorageCleanListener';
|
|||||||
export * from './NodeIKernelFileAssistantListener';
|
export * from './NodeIKernelFileAssistantListener';
|
||||||
|
|
||||||
import type {
|
import type {
|
||||||
NodeIKernelSessionListener,
|
NodeIKernelBuddyListener,
|
||||||
|
NodeIKernelFileAssistantListener,
|
||||||
|
NodeIKernelGroupListener,
|
||||||
NodeIKernelLoginListener,
|
NodeIKernelLoginListener,
|
||||||
NodeIKernelMsgListener,
|
NodeIKernelMsgListener,
|
||||||
NodeIKernelGroupListener,
|
|
||||||
NodeIKernelBuddyListener,
|
|
||||||
NodeIKernelProfileListener,
|
NodeIKernelProfileListener,
|
||||||
NodeIKernelRobotListener,
|
NodeIKernelRobotListener,
|
||||||
NodeIKernelTicketListener,
|
NodeIKernelSessionListener,
|
||||||
NodeIKernelStorageCleanListener,
|
NodeIKernelStorageCleanListener,
|
||||||
NodeIKernelFileAssistantListener,
|
NodeIKernelTicketListener,
|
||||||
} from '.';
|
} from '.';
|
||||||
|
|
||||||
export type ListenerNamingMapping = {
|
export type ListenerNamingMapping = {
|
||||||
|
@@ -5,7 +5,7 @@ import {
|
|||||||
GroupMemberRole,
|
GroupMemberRole,
|
||||||
GroupNotifyMsgType,
|
GroupNotifyMsgType,
|
||||||
GroupRequestOperateTypes,
|
GroupRequestOperateTypes,
|
||||||
KickMemberV2Req
|
KickMemberV2Req,
|
||||||
} from '@/core/entities';
|
} from '@/core/entities';
|
||||||
import { GeneralCallResult } from '@/core/services/common';
|
import { GeneralCallResult } from '@/core/services/common';
|
||||||
|
|
||||||
@@ -13,6 +13,7 @@ import { GeneralCallResult } from '@/core/services/common';
|
|||||||
|
|
||||||
export interface NodeIKernelGroupService {
|
export interface NodeIKernelGroupService {
|
||||||
kickMemberV2(param: KickMemberV2Req): Promise<GeneralCallResult>;
|
kickMemberV2(param: KickMemberV2Req): Promise<GeneralCallResult>;
|
||||||
|
|
||||||
quitGroupV2(param: { groupCode: string; needDeleteLocalMsg: boolean; }): Promise<GeneralCallResult>;
|
quitGroupV2(param: { groupCode: string; needDeleteLocalMsg: boolean; }): Promise<GeneralCallResult>;
|
||||||
|
|
||||||
getMemberCommonInfo(Req: {
|
getMemberCommonInfo(Req: {
|
||||||
|
@@ -12,6 +12,7 @@ export interface QueryMsgsParams {
|
|||||||
isReverseOrder: boolean,
|
isReverseOrder: boolean,
|
||||||
isIncludeCurrent: boolean
|
isIncludeCurrent: boolean
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface TmpChatInfoApi {
|
export interface TmpChatInfoApi {
|
||||||
errMsg: string;
|
errMsg: string;
|
||||||
result: number;
|
result: number;
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
import { AnyCnameRecord } from 'node:dns';
|
import { AnyCnameRecord } from 'node:dns';
|
||||||
import { BizKey, ModifyProfileParams, SimpleInfo, UserDetailInfoByUin } from '../entities';
|
import { BizKey, ModifyProfileParams, SimpleInfo, UserDetailInfoByUin } from '@/core';
|
||||||
import { NodeIKernelProfileListener } from '../listeners';
|
import { NodeIKernelProfileListener } from '@/core';
|
||||||
import { GeneralCallResult } from '@/core/services/common';
|
import { GeneralCallResult } from '@/core/services/common';
|
||||||
|
|
||||||
export enum UserDetailSource {
|
export enum UserDetailSource {
|
||||||
|
@@ -1,7 +1,5 @@
|
|||||||
import { NodeIDependsAdapter, NodeIDispatcherAdapter, NodeIGlobalAdapter } from '../adapters';
|
import { NodeIDependsAdapter, NodeIDispatcherAdapter, NodeIGlobalAdapter } from '../adapters';
|
||||||
import {
|
import { NodeIKernelSessionListener } from '@/core';
|
||||||
NodeIKernelSessionListener
|
|
||||||
} from '../listeners';
|
|
||||||
import {
|
import {
|
||||||
NodeIKernelAvatarService,
|
NodeIKernelAvatarService,
|
||||||
NodeIKernelBuddyService,
|
NodeIKernelBuddyService,
|
||||||
@@ -13,9 +11,9 @@ import {
|
|||||||
NodeIKernelRichMediaService,
|
NodeIKernelRichMediaService,
|
||||||
NodeIKernelTicketService,
|
NodeIKernelTicketService,
|
||||||
NodeIKernelTipOffService,
|
NodeIKernelTipOffService,
|
||||||
} from '../services';
|
} from '@/core';
|
||||||
import { NodeIKernelStorageCleanService } from '../services/NodeIKernelStorageCleanService';
|
import { NodeIKernelStorageCleanService } from '@/core';
|
||||||
import { NodeIKernelRobotService } from '../services/NodeIKernelRobotService';
|
import { NodeIKernelRobotService } from '@/core';
|
||||||
import { NodeIKernelNodeMiscService } from '../services/NodeIKernelNodeMiscService';
|
import { NodeIKernelNodeMiscService } from '../services/NodeIKernelNodeMiscService';
|
||||||
import { NodeIKernelUixConvertService } from '../services/NodeIKernelUixConvertService';
|
import { NodeIKernelUixConvertService } from '../services/NodeIKernelUixConvertService';
|
||||||
import { NodeIKernelMsgBackupService } from '../services/NodeIKernelMsgBackupService';
|
import { NodeIKernelMsgBackupService } from '../services/NodeIKernelMsgBackupService';
|
||||||
@@ -31,6 +29,7 @@ import { NodeIKernelECDHService } from '../services/NodeIKernelECDHService';
|
|||||||
|
|
||||||
export interface NodeQQNTWrapperUtil {
|
export interface NodeQQNTWrapperUtil {
|
||||||
get(): unknown;
|
get(): unknown;
|
||||||
|
|
||||||
// eslint-disable-next-line @typescript-eslint/no-misused-new
|
// eslint-disable-next-line @typescript-eslint/no-misused-new
|
||||||
new(): NodeQQNTWrapperUtil;
|
new(): NodeQQNTWrapperUtil;
|
||||||
|
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
//LiteLoader需要提供部分IPC接口,以便于其他插件调用
|
//LiteLoader需要提供部分IPC接口,以便于其他插件调用
|
||||||
const { ipcMain } = require('electron');
|
const { ipcMain } = require('electron');
|
||||||
const napcat = require('./napcat.cjs');
|
const napcat = require('./napcat.cjs');
|
||||||
ipcMain.handle("napcat_get_webtoken", async (event, arg) => {
|
ipcMain.handle('napcat_get_webtoken', async (event, arg) => {
|
||||||
return napcat.NCgetWebUiUrl();
|
return napcat.NCgetWebUiUrl();
|
||||||
});
|
});
|
||||||
|
@@ -14,8 +14,9 @@ import { NapCatOneBot11Adapter } from '@/onebot';
|
|||||||
//Framework ES入口文件
|
//Framework ES入口文件
|
||||||
export async function getWebUiUrl() {
|
export async function getWebUiUrl() {
|
||||||
const WebUiConfigData = (await WebUiConfig.GetWebUIConfig());
|
const WebUiConfigData = (await WebUiConfig.GetWebUIConfig());
|
||||||
return "http://127.0.0.1:" + WebUiConfigData.port + '/webui/?token=' + WebUiConfigData.token;
|
return 'http://127.0.0.1:' + WebUiConfigData.port + '/webui/?token=' + WebUiConfigData.token;
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function NCoreInitFramework(
|
export async function NCoreInitFramework(
|
||||||
session: NodeIQQNTWrapperSession,
|
session: NodeIQQNTWrapperSession,
|
||||||
loginService: NodeIKernelLoginService,
|
loginService: NodeIKernelLoginService,
|
||||||
|
@@ -1,11 +1,10 @@
|
|||||||
|
const { contextBridge } = require('electron');
|
||||||
const { contextBridge } = require('electron')
|
const { ipcRenderer } = require('electron');
|
||||||
const { ipcRenderer } = require('electron')
|
|
||||||
|
|
||||||
const napcat = {
|
const napcat = {
|
||||||
getWebUiUrl: async () => {
|
getWebUiUrl: async () => {
|
||||||
return ipcRenderer.invoke("napcat_get_webtoken")
|
return ipcRenderer.invoke('napcat_get_webtoken');
|
||||||
}
|
},
|
||||||
}
|
};
|
||||||
// 在window对象下导出只读对象
|
// 在window对象下导出只读对象
|
||||||
contextBridge.exposeInMainWorld('napcat', napcat)
|
contextBridge.exposeInMainWorld('napcat', napcat);
|
||||||
|
@@ -1,4 +1,3 @@
|
|||||||
|
|
||||||
export const onSettingWindowCreated = async (view) => {
|
export const onSettingWindowCreated = async (view) => {
|
||||||
|
|
||||||
// view.style.width = "100%";
|
// view.style.width = "100%";
|
||||||
@@ -14,7 +13,7 @@ export const onSettingWindowCreated = async (view) => {
|
|||||||
// //有滚动条何尝不是一种美
|
// //有滚动条何尝不是一种美
|
||||||
// view.appendChild(iframe);
|
// view.appendChild(iframe);
|
||||||
let webui = await window.napcat.getWebUiUrl();
|
let webui = await window.napcat.getWebUiUrl();
|
||||||
let panel = `
|
view.innerHTML = `
|
||||||
<setting-section data-title="">
|
<setting-section data-title="">
|
||||||
<setting-panel>
|
<setting-panel>
|
||||||
<setting-list data-direction="column">
|
<setting-list data-direction="column">
|
||||||
@@ -30,9 +29,8 @@ export const onSettingWindowCreated = async (view) => {
|
|||||||
</setting-panel>
|
</setting-panel>
|
||||||
</setting-section>
|
</setting-section>
|
||||||
`;
|
`;
|
||||||
view.innerHTML = panel;
|
view.querySelector('.nc_openwebui').addEventListener('click', () => {
|
||||||
view.querySelector(".nc_openwebui").addEventListener("click", () => {
|
window.open(webui, '_blank');
|
||||||
window.open(webui, "_blank");
|
|
||||||
});
|
});
|
||||||
view.querySelector(".nc_webui").innerText = webui;
|
view.querySelector('.nc_webui').innerText = webui;
|
||||||
};
|
};
|
@@ -1,4 +1,7 @@
|
|||||||
# NewWebui
|
# NewWebui
|
||||||
|
|
||||||
基于Vue3实现的现代化轻量化NapCat管理面板
|
基于Vue3实现的现代化轻量化NapCat管理面板
|
||||||
|
|
||||||
## 进度
|
## 进度
|
||||||
|
|
||||||
画饼
|
画饼
|
@@ -22,6 +22,7 @@ type Payload = FromSchema<typeof SchemaData>;
|
|||||||
export class FetchEmojiLike extends BaseAction<Payload, any> {
|
export class FetchEmojiLike extends BaseAction<Payload, any> {
|
||||||
actionName = ActionName.FetchEmojiLike;
|
actionName = ActionName.FetchEmojiLike;
|
||||||
payloadSchema = SchemaData;
|
payloadSchema = SchemaData;
|
||||||
|
|
||||||
async _handle(payload: Payload) {
|
async _handle(payload: Payload) {
|
||||||
const NTQQMsgApi = this.core.apis.MsgApi;
|
const NTQQMsgApi = this.core.apis.MsgApi;
|
||||||
const msgIdPeer = MessageUnique.getMsgIdAndPeerByShortId(parseInt(payload.message_id.toString()));
|
const msgIdPeer = MessageUnique.getMsgIdAndPeerByShortId(parseInt(payload.message_id.toString()));
|
||||||
|
@@ -16,6 +16,7 @@ type Payload = FromSchema<typeof SchemaData>;
|
|||||||
export class GetCollectionList extends BaseAction<Payload, any> {
|
export class GetCollectionList extends BaseAction<Payload, any> {
|
||||||
actionName = ActionName.GetCollectionList;
|
actionName = ActionName.GetCollectionList;
|
||||||
payloadSchema = SchemaData;
|
payloadSchema = SchemaData;
|
||||||
|
|
||||||
async _handle(payload: Payload) {
|
async _handle(payload: Payload) {
|
||||||
const NTQQCollectionApi = this.core.apis.CollectionApi;
|
const NTQQCollectionApi = this.core.apis.CollectionApi;
|
||||||
return await NTQQCollectionApi.getAllCollection(parseInt(payload.category.toString()), +(payload.count ?? 1));
|
return await NTQQCollectionApi.getAllCollection(parseInt(payload.category.toString()), +(payload.count ?? 1));
|
||||||
|
@@ -4,6 +4,7 @@ import { ActionName } from '../types';
|
|||||||
|
|
||||||
export class GetFriendWithCategory extends BaseAction<void, any> {
|
export class GetFriendWithCategory extends BaseAction<void, any> {
|
||||||
actionName = ActionName.GetFriendsWithCategory;
|
actionName = ActionName.GetFriendsWithCategory;
|
||||||
|
|
||||||
async _handle(payload: void) {
|
async _handle(payload: void) {
|
||||||
return (await this.core.apis.FriendApi.getBuddyV2ExWithCate(true)).map(category => ({
|
return (await this.core.apis.FriendApi.getBuddyV2ExWithCate(true)).map(category => ({
|
||||||
...category,
|
...category,
|
||||||
|
@@ -3,6 +3,7 @@ import { ActionName } from '../types';
|
|||||||
import { FromSchema, JSONSchema } from 'json-schema-to-ts';
|
import { FromSchema, JSONSchema } from 'json-schema-to-ts';
|
||||||
import { checkFileReceived, uri2local } from '@/common/utils/file';
|
import { checkFileReceived, uri2local } from '@/common/utils/file';
|
||||||
import fs from 'fs';
|
import fs from 'fs';
|
||||||
|
|
||||||
const SchemaData = {
|
const SchemaData = {
|
||||||
type: 'object',
|
type: 'object',
|
||||||
properties: {
|
properties: {
|
||||||
@@ -19,7 +20,7 @@ export class OCRImage extends BaseAction<Payload, any> {
|
|||||||
|
|
||||||
async _handle(payload: Payload) {
|
async _handle(payload: Payload) {
|
||||||
const NTQQSystemApi = this.core.apis.SystemApi;
|
const NTQQSystemApi = this.core.apis.SystemApi;
|
||||||
const { path, isLocal, errMsg, success } = (await uri2local(this.core.NapCatTempPath, payload.image));
|
const { path, isLocal, success } = (await uri2local(this.core.NapCatTempPath, payload.image));
|
||||||
if (!success) {
|
if (!success) {
|
||||||
throw `OCR ${payload.image}失败,image字段可能格式不正确`;
|
throw `OCR ${payload.image}失败,image字段可能格式不正确`;
|
||||||
}
|
}
|
||||||
|
@@ -8,7 +8,7 @@ const SchemaData = {
|
|||||||
properties: {
|
properties: {
|
||||||
eventType: { type: 'string' },
|
eventType: { type: 'string' },
|
||||||
group_id: { type: 'string' },
|
group_id: { type: 'string' },
|
||||||
user_id: { type: 'string' }
|
user_id: { type: 'string' },
|
||||||
},
|
},
|
||||||
required: ['eventType'],
|
required: ['eventType'],
|
||||||
} as const satisfies JSONSchema;
|
} as const satisfies JSONSchema;
|
||||||
@@ -25,20 +25,19 @@ export class SetInputStatus extends BaseAction<Payload, any> {
|
|||||||
if (payload.group_id) {
|
if (payload.group_id) {
|
||||||
peer = {
|
peer = {
|
||||||
chatType: ChatType.KCHATTYPEGROUP,
|
chatType: ChatType.KCHATTYPEGROUP,
|
||||||
peerUid: payload.group_id
|
peerUid: payload.group_id,
|
||||||
};
|
};
|
||||||
} else if (payload.user_id) {
|
} else if (payload.user_id) {
|
||||||
const uid = await NTQQUserApi.getUidByUinV2(payload.user_id);
|
const uid = await NTQQUserApi.getUidByUinV2(payload.user_id);
|
||||||
if (!uid) throw new Error('uid is empty');
|
if (!uid) throw new Error('uid is empty');
|
||||||
peer = {
|
peer = {
|
||||||
chatType: ChatType.KCHATTYPEC2C,
|
chatType: ChatType.KCHATTYPEC2C,
|
||||||
peerUid: uid
|
peerUid: uid,
|
||||||
};
|
};
|
||||||
} else {
|
} else {
|
||||||
throw new Error('请指定 group_id 或 user_id');
|
throw new Error('请指定 group_id 或 user_id');
|
||||||
}
|
}
|
||||||
|
|
||||||
const ret = await NTQQMsgApi.sendShowInputStatusReq(peer, parseInt(payload.eventType));
|
return await NTQQMsgApi.sendShowInputStatusReq(peer, parseInt(payload.eventType));
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -24,7 +24,7 @@ export class SetOnlineStatus extends BaseAction<Payload, null> {
|
|||||||
const ret = await NTQQUserApi.setSelfOnlineStatus(
|
const ret = await NTQQUserApi.setSelfOnlineStatus(
|
||||||
parseInt(payload.status.toString()),
|
parseInt(payload.status.toString()),
|
||||||
parseInt(payload.extStatus.toString()),
|
parseInt(payload.extStatus.toString()),
|
||||||
parseInt(payload.batteryStatus.toString())
|
parseInt(payload.batteryStatus.toString()),
|
||||||
);
|
);
|
||||||
if (ret.result !== 0) {
|
if (ret.result !== 0) {
|
||||||
throw new Error('设置在线状态失败');
|
throw new Error('设置在线状态失败');
|
||||||
|
@@ -24,7 +24,7 @@ export default class GoCQHTTPGetStrangerInfo extends BaseAction<Payload, OB11Use
|
|||||||
const extendData = await NTQQUserApi.getUserDetailInfoByUinV2(user_id);
|
const extendData = await NTQQUserApi.getUserDetailInfoByUinV2(user_id);
|
||||||
const uid = (await NTQQUserApi.getUidByUinV2(user_id))!;
|
const uid = (await NTQQUserApi.getUidByUinV2(user_id))!;
|
||||||
if (!uid || uid.indexOf('*') != -1) {
|
if (!uid || uid.indexOf('*') != -1) {
|
||||||
const ret = {
|
return {
|
||||||
...extendData.detail.simpleInfo.coreInfo,
|
...extendData.detail.simpleInfo.coreInfo,
|
||||||
...extendData.detail.commonExt,
|
...extendData.detail.commonExt,
|
||||||
...extendData.detail.simpleInfo.baseInfo,
|
...extendData.detail.simpleInfo.baseInfo,
|
||||||
@@ -36,9 +36,8 @@ export default class GoCQHTTPGetStrangerInfo extends BaseAction<Payload, OB11Use
|
|||||||
qid: extendData.detail.simpleInfo.baseInfo.qid,
|
qid: extendData.detail.simpleInfo.baseInfo.qid,
|
||||||
level: calcQQLevel(extendData.detail.commonExt?.qqLevel ?? 0) || 0,
|
level: calcQQLevel(extendData.detail.commonExt?.qqLevel ?? 0) || 0,
|
||||||
login_days: 0,
|
login_days: 0,
|
||||||
uid: ''
|
uid: '',
|
||||||
};
|
};
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
const data = { ...extendData, ...(await NTQQUserApi.getUserDetailInfo(uid)) };
|
const data = { ...extendData, ...(await NTQQUserApi.getUserDetailInfo(uid)) };
|
||||||
return OB11Entities.stranger(data);
|
return OB11Entities.stranger(data);
|
||||||
|
@@ -22,13 +22,16 @@ export class SetQQProfile extends BaseAction<Payload, any | null> {
|
|||||||
const NTQQUserApi = this.core.apis.UserApi;
|
const NTQQUserApi = this.core.apis.UserApi;
|
||||||
const self = this.core.selfInfo;
|
const self = this.core.selfInfo;
|
||||||
const OldProfile = await NTQQUserApi.getUserDetailInfo(self.uid);
|
const OldProfile = await NTQQUserApi.getUserDetailInfo(self.uid);
|
||||||
const ret = await NTQQUserApi.modifySelfProfile({
|
return await NTQQUserApi.modifySelfProfile({
|
||||||
nick: payload.nickname,
|
nick: payload.nickname,
|
||||||
longNick: (payload?.personal_note ?? OldProfile?.longNick) || '',
|
longNick: (payload?.personal_note ?? OldProfile?.longNick) || '',
|
||||||
sex: parseInt(payload?.sex ? payload?.sex.toString() : OldProfile?.sex!.toString()),
|
sex: parseInt(payload?.sex ? payload?.sex.toString() : OldProfile?.sex!.toString()),
|
||||||
birthday: { birthday_year: OldProfile?.birthday_year!.toString(), birthday_month: OldProfile?.birthday_month!.toString(), birthday_day: OldProfile?.birthday_day!.toString() },
|
birthday: {
|
||||||
|
birthday_year: OldProfile?.birthday_year!.toString(),
|
||||||
|
birthday_month: OldProfile?.birthday_month!.toString(),
|
||||||
|
birthday_day: OldProfile?.birthday_day!.toString(),
|
||||||
|
},
|
||||||
location: undefined,
|
location: undefined,
|
||||||
});
|
});
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1,4 +1,3 @@
|
|||||||
import { WebApiGroupNoticeFeed } from '@/core';
|
|
||||||
import BaseAction from '../BaseAction';
|
import BaseAction from '../BaseAction';
|
||||||
import { ActionName } from '../types';
|
import { ActionName } from '../types';
|
||||||
import { FromSchema, JSONSchema } from 'json-schema-to-ts';
|
import { FromSchema, JSONSchema } from 'json-schema-to-ts';
|
||||||
|
@@ -33,7 +33,7 @@ class GetGroupMemberInfo extends BaseAction<Payload, OB11GroupMember> {
|
|||||||
]);
|
]);
|
||||||
if (member.status !== 'fulfilled') throw new Error(`群(${payload.group_id})成员${payload.user_id}不存在 ${member.reason}`);
|
if (member.status !== 'fulfilled') throw new Error(`群(${payload.group_id})成员${payload.user_id}不存在 ${member.reason}`);
|
||||||
if (info.status === 'fulfilled') {
|
if (info.status === 'fulfilled') {
|
||||||
this.core.context.logger.logDebug("群成员详细信息结果", info.value);
|
this.core.context.logger.logDebug('群成员详细信息结果', info.value);
|
||||||
Object.assign(member, info.value);
|
Object.assign(member, info.value);
|
||||||
} else {
|
} else {
|
||||||
this.core.context.logger.logDebug(`获取群成员详细信息失败, 只能返回基础信息 ${info.reason}`);
|
this.core.context.logger.logDebug(`获取群成员详细信息失败, 只能返回基础信息 ${info.reason}`);
|
||||||
|
@@ -32,7 +32,7 @@ class DeleteMsg extends BaseAction<Payload, void> {
|
|||||||
'NodeIKernelMsgListener/onMsgInfoListUpdate',
|
'NodeIKernelMsgListener/onMsgInfoListUpdate',
|
||||||
1,
|
1,
|
||||||
5000,
|
5000,
|
||||||
(msgs) => !!msgs.find(m => m.msgId === msg.MsgId && m.recallTime !== '0')
|
(msgs) => !!msgs.find(m => m.msgId === msg.MsgId && m.recallTime !== '0'),
|
||||||
).catch(() => new Promise<undefined>((resolve) => {
|
).catch(() => new Promise<undefined>((resolve) => {
|
||||||
resolve(undefined);
|
resolve(undefined);
|
||||||
}));
|
}));
|
||||||
|
@@ -113,7 +113,7 @@ export class SendMsg extends BaseAction<OB11PostSendMsg, ReturnDataType> {
|
|||||||
|
|
||||||
const messages = normalize(
|
const messages = normalize(
|
||||||
payload.message,
|
payload.message,
|
||||||
typeof payload.auto_escape === 'string' ? payload.auto_escape === 'true' : !!payload.auto_escape
|
typeof payload.auto_escape === 'string' ? payload.auto_escape === 'true' : !!payload.auto_escape,
|
||||||
);
|
);
|
||||||
|
|
||||||
if (getSpecialMsgNum(payload, OB11MessageDataType.node)) {
|
if (getSpecialMsgNum(payload, OB11MessageDataType.node)) {
|
||||||
|
@@ -4,6 +4,7 @@ import CanSendRecord from './CanSendRecord';
|
|||||||
interface ReturnType {
|
interface ReturnType {
|
||||||
yes: boolean;
|
yes: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
export default class CanSendImage extends CanSendRecord {
|
export default class CanSendImage extends CanSendRecord {
|
||||||
actionName = ActionName.CanSendImage;
|
actionName = ActionName.CanSendImage;
|
||||||
}
|
}
|
||||||
|
@@ -6,7 +6,7 @@ export class GetCSRF extends BaseAction<any, any> {
|
|||||||
|
|
||||||
async _handle(payload: any) {
|
async _handle(payload: any) {
|
||||||
return {
|
return {
|
||||||
token: "",
|
token: '',
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -105,9 +105,9 @@ export enum ActionName {
|
|||||||
GOCQHTTP_UploadPrivateFile = 'upload_private_file',
|
GOCQHTTP_UploadPrivateFile = 'upload_private_file',
|
||||||
TestApi01 = 'test_api_01',
|
TestApi01 = 'test_api_01',
|
||||||
FetchEmojiLike = 'fetch_emoji_like',
|
FetchEmojiLike = 'fetch_emoji_like',
|
||||||
GetGuildProfile = "get_guild_service_profile",
|
GetGuildProfile = 'get_guild_service_profile',
|
||||||
SetModelShow = "_set_model_show",
|
SetModelShow = '_set_model_show',
|
||||||
SetInputStatus = "set_input_status",
|
SetInputStatus = 'set_input_status',
|
||||||
GetCSRF = "get_csrf_token",
|
GetCSRF = 'get_csrf_token',
|
||||||
DelGroupNotice = "_del_group_notice",
|
DelGroupNotice = '_del_group_notice',
|
||||||
}
|
}
|
||||||
|
@@ -11,6 +11,7 @@ export class OneBotFriendApi {
|
|||||||
this.obContext = obContext;
|
this.obContext = obContext;
|
||||||
this.core = core;
|
this.core = core;
|
||||||
}
|
}
|
||||||
|
|
||||||
//使用前预先判断 busiId 1061
|
//使用前预先判断 busiId 1061
|
||||||
async parsePrivatePokeEvent(grayTipElement: GrayTipElement) {
|
async parsePrivatePokeEvent(grayTipElement: GrayTipElement) {
|
||||||
const NTQQUserApi = this.core.apis.UserApi;
|
const NTQQUserApi = this.core.apis.UserApi;
|
||||||
@@ -24,7 +25,7 @@ export class OneBotFriendApi {
|
|||||||
this.core,
|
this.core,
|
||||||
parseInt((await NTQQUserApi.getUinByUidV2(pokedetail[0].uid))!),
|
parseInt((await NTQQUserApi.getUinByUidV2(pokedetail[0].uid))!),
|
||||||
parseInt((await NTQQUserApi.getUinByUidV2(pokedetail[1].uid))!),
|
parseInt((await NTQQUserApi.getUinByUidV2(pokedetail[1].uid))!),
|
||||||
pokedetail
|
pokedetail,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
return undefined;
|
return undefined;
|
||||||
|
@@ -15,6 +15,7 @@ export class OneBotGroupApi {
|
|||||||
this.obContext = obContext;
|
this.obContext = obContext;
|
||||||
this.core = core;
|
this.core = core;
|
||||||
}
|
}
|
||||||
|
|
||||||
async parseGroupBanEvent(GroupCode: string, grayTipElement: GrayTipElement) {
|
async parseGroupBanEvent(GroupCode: string, grayTipElement: GrayTipElement) {
|
||||||
const groupElement = grayTipElement?.groupElement;
|
const groupElement = grayTipElement?.groupElement;
|
||||||
const NTQQGroupApi = this.core.apis.GroupApi;
|
const NTQQGroupApi = this.core.apis.GroupApi;
|
||||||
@@ -40,11 +41,12 @@ export class OneBotGroupApi {
|
|||||||
parseInt(memberUin),
|
parseInt(memberUin),
|
||||||
parseInt(adminUin),
|
parseInt(adminUin),
|
||||||
duration,
|
duration,
|
||||||
subType
|
subType,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
return undefined;
|
return undefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
async parseGroupIncreaseEvent(GroupCode: string, grayTipElement: GrayTipElement) {
|
async parseGroupIncreaseEvent(GroupCode: string, grayTipElement: GrayTipElement) {
|
||||||
this.core.context.logger.logDebug('收到新人被邀请进群消息', grayTipElement);
|
this.core.context.logger.logDebug('收到新人被邀请进群消息', grayTipElement);
|
||||||
const xmlElement = grayTipElement.xmlElement;
|
const xmlElement = grayTipElement.xmlElement;
|
||||||
@@ -65,12 +67,13 @@ export class OneBotGroupApi {
|
|||||||
parseInt(GroupCode),
|
parseInt(GroupCode),
|
||||||
parseInt(invitee),
|
parseInt(invitee),
|
||||||
parseInt(inviter),
|
parseInt(inviter),
|
||||||
'invite'
|
'invite',
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return undefined;
|
return undefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
async parseGroupMemberIncreaseEvent(GroupCode: string, grayTipElement: GrayTipElement) {
|
async parseGroupMemberIncreaseEvent(GroupCode: string, grayTipElement: GrayTipElement) {
|
||||||
const NTQQGroupApi = this.core.apis.GroupApi;
|
const NTQQGroupApi = this.core.apis.GroupApi;
|
||||||
const groupElement = grayTipElement?.groupElement;
|
const groupElement = grayTipElement?.groupElement;
|
||||||
@@ -84,11 +87,12 @@ export class OneBotGroupApi {
|
|||||||
this.core,
|
this.core,
|
||||||
parseInt(GroupCode),
|
parseInt(GroupCode),
|
||||||
parseInt(memberUin),
|
parseInt(memberUin),
|
||||||
parseInt(operatorUin)
|
parseInt(operatorUin),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
return undefined;
|
return undefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
async parseGroupKickEvent(GroupCode: string, grayTipElement: GrayTipElement) {
|
async parseGroupKickEvent(GroupCode: string, grayTipElement: GrayTipElement) {
|
||||||
const NTQQGroupApi = this.core.apis.GroupApi;
|
const NTQQGroupApi = this.core.apis.GroupApi;
|
||||||
const NTQQUserApi = this.core.apis.UserApi;
|
const NTQQUserApi = this.core.apis.UserApi;
|
||||||
@@ -101,11 +105,12 @@ export class OneBotGroupApi {
|
|||||||
parseInt(GroupCode),
|
parseInt(GroupCode),
|
||||||
parseInt(this.core.selfInfo.uin),
|
parseInt(this.core.selfInfo.uin),
|
||||||
parseInt(adminUin),
|
parseInt(adminUin),
|
||||||
'kick_me'
|
'kick_me',
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
return undefined;
|
return undefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
async parseGroupEmjioLikeEvent(GroupCode: string, grayTipElement: GrayTipElement) {
|
async parseGroupEmjioLikeEvent(GroupCode: string, grayTipElement: GrayTipElement) {
|
||||||
const NTQQMsgApi = this.core.apis.MsgApi;
|
const NTQQMsgApi = this.core.apis.MsgApi;
|
||||||
const emojiLikeData = new fastXmlParser.XMLParser({
|
const emojiLikeData = new fastXmlParser.XMLParser({
|
||||||
@@ -120,7 +125,7 @@ export class OneBotGroupApi {
|
|||||||
const peer = {
|
const peer = {
|
||||||
chatType: ChatType.KCHATTYPEGROUP,
|
chatType: ChatType.KCHATTYPEGROUP,
|
||||||
guildId: '',
|
guildId: '',
|
||||||
peerUid: GroupCode
|
peerUid: GroupCode,
|
||||||
};
|
};
|
||||||
const replyMsgList = (await NTQQMsgApi.getMsgExBySeq(peer, msgSeq)).msgList;
|
const replyMsgList = (await NTQQMsgApi.getMsgExBySeq(peer, msgSeq)).msgList;
|
||||||
if (replyMsgList.length < 1) {
|
if (replyMsgList.length < 1) {
|
||||||
|
@@ -36,7 +36,7 @@ type RawToOb11Converters = {
|
|||||||
[Key in keyof MessageElement as Key extends `${string}Element` ? Key : never]: (
|
[Key in keyof MessageElement as Key extends `${string}Element` ? Key : never]: (
|
||||||
element: Exclude<MessageElement[Key], null | undefined>,
|
element: Exclude<MessageElement[Key], null | undefined>,
|
||||||
msg: RawMessage,
|
msg: RawMessage,
|
||||||
elementWrapper: MessageElement
|
elementWrapper: MessageElement,
|
||||||
) => PromiseLike<OB11MessageData | null>
|
) => PromiseLike<OB11MessageData | null>
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -73,12 +73,12 @@ export class OneBotMsgApi {
|
|||||||
}
|
}
|
||||||
return {
|
return {
|
||||||
type: OB11MessageDataType.text,
|
type: OB11MessageDataType.text,
|
||||||
data: { text }
|
data: { text },
|
||||||
};
|
};
|
||||||
} else {
|
} else {
|
||||||
let qq: string = 'all';
|
let qq: string = 'all';
|
||||||
if (element.atType !== AtType.atAll) {
|
if (element.atType !== AtType.atAll) {
|
||||||
const { atNtUid, /* content */ } = element;
|
const { atNtUid /* content */ } = element;
|
||||||
let atQQ = element.atUid;
|
let atQQ = element.atUid;
|
||||||
if (!atQQ || atQQ === '0') {
|
if (!atQQ || atQQ === '0') {
|
||||||
atQQ = await this.core.apis.UserApi.getUinByUidV2(atNtUid);
|
atQQ = await this.core.apis.UserApi.getUinByUidV2(atNtUid);
|
||||||
@@ -138,7 +138,7 @@ export class OneBotMsgApi {
|
|||||||
url: element.filePath,
|
url: element.filePath,
|
||||||
file_id: UUIDConverter.encode(msg.peerUin, msg.msgId),
|
file_id: UUIDConverter.encode(msg.peerUin, msg.msgId),
|
||||||
file_size: element.fileSize,
|
file_size: element.fileSize,
|
||||||
}
|
},
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -149,21 +149,21 @@ export class OneBotMsgApi {
|
|||||||
type: OB11MessageDataType.dice,
|
type: OB11MessageDataType.dice,
|
||||||
data: {
|
data: {
|
||||||
result: element.resultId!,
|
result: element.resultId!,
|
||||||
}
|
},
|
||||||
};
|
};
|
||||||
} else if (faceIndex === FaceIndex.RPS) {
|
} else if (faceIndex === FaceIndex.RPS) {
|
||||||
return {
|
return {
|
||||||
type: OB11MessageDataType.RPS,
|
type: OB11MessageDataType.RPS,
|
||||||
data: {
|
data: {
|
||||||
result: element.resultId!,
|
result: element.resultId!,
|
||||||
}
|
},
|
||||||
};
|
};
|
||||||
} else {
|
} else {
|
||||||
return {
|
return {
|
||||||
type: OB11MessageDataType.face,
|
type: OB11MessageDataType.face,
|
||||||
data: {
|
data: {
|
||||||
id: element.faceIndex.toString()
|
id: element.faceIndex.toString(),
|
||||||
}
|
},
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -190,7 +190,7 @@ export class OneBotMsgApi {
|
|||||||
file_id: UUIDConverter.encode(msg.peerUin, msg.msgId),
|
file_id: UUIDConverter.encode(msg.peerUin, msg.msgId),
|
||||||
path: elementWrapper.elementId,
|
path: elementWrapper.elementId,
|
||||||
url: elementWrapper.elementId,
|
url: elementWrapper.elementId,
|
||||||
}
|
},
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -239,8 +239,8 @@ export class OneBotMsgApi {
|
|||||||
peerUid: msg.peerUid,
|
peerUid: msg.peerUid,
|
||||||
guildId: '',
|
guildId: '',
|
||||||
chatType: msg.chatType,
|
chatType: msg.chatType,
|
||||||
}, replyMsg.msgId).toString()
|
}, replyMsg.msgId).toString(),
|
||||||
}
|
},
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -303,7 +303,7 @@ export class OneBotMsgApi {
|
|||||||
url: videoDownUrl,
|
url: videoDownUrl,
|
||||||
file_id: UUIDConverter.encode(msg.peerUin, msg.msgId),
|
file_id: UUIDConverter.encode(msg.peerUin, msg.msgId),
|
||||||
file_size: element.fileSize,
|
file_size: element.fileSize,
|
||||||
}
|
},
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -329,7 +329,7 @@ export class OneBotMsgApi {
|
|||||||
path: element.filePath,
|
path: element.filePath,
|
||||||
file_id: UUIDConverter.encode(msg.peerUin, msg.msgId),
|
file_id: UUIDConverter.encode(msg.peerUin, msg.msgId),
|
||||||
file_size: element.fileSize,
|
file_size: element.fileSize,
|
||||||
}
|
},
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -366,9 +366,9 @@ export class OneBotMsgApi {
|
|||||||
multiMsgItem.parentMsgIdList = msg.parentMsgIdList;
|
multiMsgItem.parentMsgIdList = msg.parentMsgIdList;
|
||||||
multiMsgItem.id = MessageUnique.createMsg(parentMsgPeer, multiMsgItem.msgId); //该ID仅用查看 无法调用
|
multiMsgItem.id = MessageUnique.createMsg(parentMsgPeer, multiMsgItem.msgId); //该ID仅用查看 无法调用
|
||||||
return await this.parseMessage(multiMsgItem);
|
return await this.parseMessage(multiMsgItem);
|
||||||
}
|
},
|
||||||
))).filter(item => item !== undefined),
|
))).filter(item => item !== undefined),
|
||||||
}
|
},
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -376,8 +376,8 @@ export class OneBotMsgApi {
|
|||||||
return {
|
return {
|
||||||
type: OB11MessageDataType.json,
|
type: OB11MessageDataType.json,
|
||||||
data: {
|
data: {
|
||||||
data: element.bytesData
|
data: element.bytesData,
|
||||||
}
|
},
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -385,10 +385,10 @@ export class OneBotMsgApi {
|
|||||||
return {
|
return {
|
||||||
type: OB11MessageDataType.markdown,
|
type: OB11MessageDataType.markdown,
|
||||||
data: {
|
data: {
|
||||||
content: element.content
|
content: element.content,
|
||||||
}
|
},
|
||||||
};
|
};
|
||||||
}
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
ob11ToRawConverters: Ob11ToRawConverters = {
|
ob11ToRawConverters: Ob11ToRawConverters = {
|
||||||
@@ -716,11 +716,11 @@ export class OneBotMsgApi {
|
|||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
element[key],
|
element[key],
|
||||||
msg,
|
msg,
|
||||||
element
|
element,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
},
|
||||||
))).filter(entry => {
|
))).filter(entry => {
|
||||||
if (entry.status === 'fulfilled') {
|
if (entry.status === 'fulfilled') {
|
||||||
return !!entry.value;
|
return !!entry.value;
|
||||||
@@ -822,7 +822,7 @@ export class OneBotMsgApi {
|
|||||||
this.core.context.logger.logError('文件消息缺少参数', inputdata);
|
this.core.context.logger.logError('文件消息缺少参数', inputdata);
|
||||||
throw Error('文件消息缺少参数');
|
throw Error('文件消息缺少参数');
|
||||||
}
|
}
|
||||||
const fileOrUrl = (isBlankUrl ? inputdata.file : inputdata.url) ?? "";
|
const fileOrUrl = (isBlankUrl ? inputdata.file : inputdata.url) ?? '';
|
||||||
const {
|
const {
|
||||||
path,
|
path,
|
||||||
isLocal,
|
isLocal,
|
||||||
|
@@ -1,10 +1,14 @@
|
|||||||
import {
|
import {
|
||||||
NapCatOneBot11Adapter,
|
NapCatOneBot11Adapter,
|
||||||
OB11Message, OB11MessageAt,
|
OB11Message,
|
||||||
|
OB11MessageAt,
|
||||||
OB11MessageData,
|
OB11MessageData,
|
||||||
OB11MessageReply,
|
OB11MessageReply,
|
||||||
QuickAction,
|
QuickAction,
|
||||||
QuickActionEvent, QuickActionFriendRequest, QuickActionGroupMessage, QuickActionGroupRequest,
|
QuickActionEvent,
|
||||||
|
QuickActionFriendRequest,
|
||||||
|
QuickActionGroupMessage,
|
||||||
|
QuickActionGroupRequest,
|
||||||
} from '@/onebot';
|
} from '@/onebot';
|
||||||
import { ChatType, GroupRequestOperateTypes, NapCatCore, Peer } from '@/core';
|
import { ChatType, GroupRequestOperateTypes, NapCatCore, Peer } from '@/core';
|
||||||
import { OB11FriendRequestEvent } from '@/onebot/event/request/OB11FriendRequest';
|
import { OB11FriendRequestEvent } from '@/onebot/event/request/OB11FriendRequest';
|
||||||
@@ -15,8 +19,9 @@ import { isNull } from '@/common/utils/helper';
|
|||||||
export class OneBotQuickActionApi {
|
export class OneBotQuickActionApi {
|
||||||
constructor(
|
constructor(
|
||||||
public obContext: NapCatOneBot11Adapter,
|
public obContext: NapCatOneBot11Adapter,
|
||||||
public core: NapCatCore
|
public core: NapCatCore,
|
||||||
) {}
|
) {
|
||||||
|
}
|
||||||
|
|
||||||
async handleQuickOperation(eventContext: QuickActionEvent, quickAction: QuickAction) {
|
async handleQuickOperation(eventContext: QuickActionEvent, quickAction: QuickAction) {
|
||||||
if (eventContext.post_type === 'message') {
|
if (eventContext.post_type === 'message') {
|
||||||
@@ -72,7 +77,10 @@ export class OneBotQuickActionApi {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
replyMessage = replyMessage.concat(normalize(reply, quickAction.auto_escape));
|
replyMessage = replyMessage.concat(normalize(reply, quickAction.auto_escape));
|
||||||
const { sendElements, deleteAfterSentFiles } = await this.obContext.apis.MsgApi.createSendElements(replyMessage, peer);
|
const {
|
||||||
|
sendElements,
|
||||||
|
deleteAfterSentFiles,
|
||||||
|
} = await this.obContext.apis.MsgApi.createSendElements(replyMessage, peer);
|
||||||
this.obContext.apis.MsgApi.sendMsgWithOb11UniqueId(peer, sendElements, deleteAfterSentFiles, false).then().catch(this.core.context.logger.logError);
|
this.obContext.apis.MsgApi.sendMsgWithOb11UniqueId(peer, sendElements, deleteAfterSentFiles, false).then().catch(this.core.context.logger.logError);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1,14 +1,14 @@
|
|||||||
import { NapCatOneBot11Adapter } from "..";
|
import { NapCatOneBot11Adapter } from '..';
|
||||||
import { OB11BaseNoticeEvent } from "../event/notice/OB11BaseNoticeEvent";
|
import { OB11BaseNoticeEvent } from '../event/notice/OB11BaseNoticeEvent';
|
||||||
import { OB11FriendAddNoticeEvent } from "../event/notice/OB11FriendAddNoticeEvent";
|
import { OB11FriendAddNoticeEvent } from '../event/notice/OB11FriendAddNoticeEvent';
|
||||||
import { OB11GroupNoticeEvent } from "../event/notice/OB11GroupNoticeEvent";
|
import { OB11GroupNoticeEvent } from '../event/notice/OB11GroupNoticeEvent';
|
||||||
import { OB11GroupCardEvent } from "../event/notice/OB11GroupCardEvent";
|
import { OB11GroupCardEvent } from '../event/notice/OB11GroupCardEvent';
|
||||||
import { OB11GroupDecreaseEvent } from "../event/notice/OB11GroupDecreaseEvent";
|
import { OB11GroupDecreaseEvent } from '../event/notice/OB11GroupDecreaseEvent';
|
||||||
import { OB11GroupUploadNoticeEvent } from "../event/notice/OB11GroupUploadNoticeEvent";
|
import { OB11GroupUploadNoticeEvent } from '../event/notice/OB11GroupUploadNoticeEvent';
|
||||||
import { OB11GroupPokeEvent } from "../event/notice/OB11PokeEvent";
|
import { OB11GroupPokeEvent } from '../event/notice/OB11PokeEvent';
|
||||||
import { OB11GroupEssenceEvent } from "../event/notice/OB11GroupEssenceEvent";
|
import { OB11GroupEssenceEvent } from '../event/notice/OB11GroupEssenceEvent';
|
||||||
import { MessageUnique } from "@/common/utils/message-unique";
|
import { MessageUnique } from '@/common/utils/message-unique';
|
||||||
import { OB11GroupTitleEvent } from "../event/notice/OB11GroupTitleEvent";
|
import { OB11GroupTitleEvent } from '../event/notice/OB11GroupTitleEvent';
|
||||||
import { NapCatCore, RawMessage, ChatType, NTGrayTipElementSubTypeV2, TipGroupElementType, Peer } from '@/core';
|
import { NapCatCore, RawMessage, ChatType, NTGrayTipElementSubTypeV2, TipGroupElementType, Peer } from '@/core';
|
||||||
|
|
||||||
export async function NT2PrivateEvent(core: NapCatCore, obContext: NapCatOneBot11Adapter, msg: RawMessage): Promise<OB11BaseNoticeEvent | undefined> {
|
export async function NT2PrivateEvent(core: NapCatCore, obContext: NapCatOneBot11Adapter, msg: RawMessage): Promise<OB11BaseNoticeEvent | undefined> {
|
||||||
@@ -72,7 +72,7 @@ export async function NT2GroupEvent(core: NapCatCore, obContext: NapCatOneBot11A
|
|||||||
parseInt(msg.peerUid),
|
parseInt(msg.peerUid),
|
||||||
parseInt(core.selfInfo.uin),
|
parseInt(core.selfInfo.uin),
|
||||||
0,
|
0,
|
||||||
'leave'
|
'leave',
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -85,7 +85,7 @@ export async function NT2GroupEvent(core: NapCatCore, obContext: NapCatOneBot11A
|
|||||||
name: element.fileElement.fileName,
|
name: element.fileElement.fileName,
|
||||||
size: parseInt(element.fileElement.fileSize),
|
size: parseInt(element.fileElement.fileSize),
|
||||||
busid: element.fileElement.fileBizId || 0,
|
busid: element.fileElement.fileBizId || 0,
|
||||||
}
|
},
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
if (element.grayTipElement) {
|
if (element.grayTipElement) {
|
||||||
@@ -113,7 +113,7 @@ export async function NT2GroupEvent(core: NapCatCore, obContext: NapCatOneBot11A
|
|||||||
parseInt(msg.peerUid),
|
parseInt(msg.peerUid),
|
||||||
parseInt((await NTQQUserApi.getUinByUidV2(poke_uid[0].uid))!),
|
parseInt((await NTQQUserApi.getUinByUidV2(poke_uid[0].uid))!),
|
||||||
parseInt((await NTQQUserApi.getUinByUidV2(poke_uid[1].uid))!),
|
parseInt((await NTQQUserApi.getUinByUidV2(poke_uid[1].uid))!),
|
||||||
pokedetail
|
pokedetail,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -132,7 +132,7 @@ export async function NT2GroupEvent(core: NapCatCore, obContext: NapCatOneBot11A
|
|||||||
core,
|
core,
|
||||||
parseInt(msg.peerUid),
|
parseInt(msg.peerUid),
|
||||||
MessageUnique.getShortIdByMsgId(msgData.msgList[0].msgId)!,
|
MessageUnique.getShortIdByMsgId(msgData.msgList[0].msgId)!,
|
||||||
parseInt(msgData.msgList[0].senderUin)
|
parseInt(msgData.msgList[0].senderUin),
|
||||||
);
|
);
|
||||||
// 获取MsgSeq+Peer可获取具体消息
|
// 获取MsgSeq+Peer可获取具体消息
|
||||||
}
|
}
|
||||||
@@ -145,7 +145,7 @@ export async function NT2GroupEvent(core: NapCatCore, obContext: NapCatOneBot11A
|
|||||||
core,
|
core,
|
||||||
parseInt(msg.peerUid),
|
parseInt(msg.peerUid),
|
||||||
parseInt(memberUin),
|
parseInt(memberUin),
|
||||||
title
|
title,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -94,13 +94,13 @@ export class NapCatOneBot11Adapter {
|
|||||||
//创建NetWork服务
|
//创建NetWork服务
|
||||||
if (ob11Config.http.enable) {
|
if (ob11Config.http.enable) {
|
||||||
this.networkManager.registerAdapter(new OB11PassiveHttpAdapter(
|
this.networkManager.registerAdapter(new OB11PassiveHttpAdapter(
|
||||||
ob11Config.http.port, ob11Config.token, this.core, this.actions
|
ob11Config.http.port, ob11Config.token, this.core, this.actions,
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
if (ob11Config.http.enablePost) {
|
if (ob11Config.http.enablePost) {
|
||||||
ob11Config.http.postUrls.forEach(url => {
|
ob11Config.http.postUrls.forEach(url => {
|
||||||
this.networkManager.registerAdapter(new OB11ActiveHttpAdapter(
|
this.networkManager.registerAdapter(new OB11ActiveHttpAdapter(
|
||||||
url, ob11Config.token, this.core, this
|
url, ob11Config.token, this.core, this,
|
||||||
));
|
));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -113,7 +113,7 @@ export class NapCatOneBot11Adapter {
|
|||||||
if (ob11Config.reverseWs.enable) {
|
if (ob11Config.reverseWs.enable) {
|
||||||
ob11Config.reverseWs.urls.forEach(url => {
|
ob11Config.reverseWs.urls.forEach(url => {
|
||||||
this.networkManager.registerAdapter(new OB11ActiveWebSocketAdapter(
|
this.networkManager.registerAdapter(new OB11ActiveWebSocketAdapter(
|
||||||
url, 5000, ob11Config.heartInterval, ob11Config.token, this.core, this.actions
|
url, 5000, ob11Config.heartInterval, ob11Config.token, this.core, this.actions,
|
||||||
));
|
));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -134,9 +134,10 @@ export class NapCatOneBot11Adapter {
|
|||||||
await this.reloadNetwork(prev, newConfig);
|
await this.reloadNetwork(prev, newConfig);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
initRecentContactListener() {
|
initRecentContactListener() {
|
||||||
const recentContactListener = new NodeIKernelRecentContactListener();
|
const recentContactListener = new NodeIKernelRecentContactListener();
|
||||||
recentContactListener.onRecentContactNotification = function (msgList: any[], /* arg0: { msgListUnreadCnt: string }, arg1: number */) {
|
recentContactListener.onRecentContactNotification = function(msgList: any[] /* arg0: { msgListUnreadCnt: string }, arg1: number */) {
|
||||||
msgList.forEach((msg) => {
|
msgList.forEach((msg) => {
|
||||||
if (msg.chatType == ChatType.KCHATTYPEGROUP) {
|
if (msg.chatType == ChatType.KCHATTYPEGROUP) {
|
||||||
// log("recent contact", msgList, arg0, arg1);
|
// log("recent contact", msgList, arg0, arg1);
|
||||||
@@ -157,10 +158,10 @@ export class NapCatOneBot11Adapter {
|
|||||||
if (prev.http.enable !== now.http.enable) {
|
if (prev.http.enable !== now.http.enable) {
|
||||||
if (now.http.enable) {
|
if (now.http.enable) {
|
||||||
await this.networkManager.registerAdapterAndOpen(new OB11PassiveHttpAdapter(
|
await this.networkManager.registerAdapterAndOpen(new OB11PassiveHttpAdapter(
|
||||||
now.http.port, now.token, this.core, this.actions
|
now.http.port, now.token, this.core, this.actions,
|
||||||
));
|
));
|
||||||
} else {
|
} else {
|
||||||
await this.networkManager.closeAdapterByPredicate(adapter => adapter instanceof OB11PassiveHttpAdapter,);
|
await this.networkManager.closeAdapterByPredicate(adapter => adapter instanceof OB11PassiveHttpAdapter);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -169,7 +170,7 @@ export class NapCatOneBot11Adapter {
|
|||||||
if (now.http.enablePost) {
|
if (now.http.enablePost) {
|
||||||
now.http.postUrls.forEach(url => {
|
now.http.postUrls.forEach(url => {
|
||||||
this.networkManager.registerAdapterAndOpen(new OB11ActiveHttpAdapter(
|
this.networkManager.registerAdapterAndOpen(new OB11ActiveHttpAdapter(
|
||||||
url, now.token, this.core, this
|
url, now.token, this.core, this,
|
||||||
));
|
));
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
@@ -183,7 +184,7 @@ export class NapCatOneBot11Adapter {
|
|||||||
);
|
);
|
||||||
for (const url of added) {
|
for (const url of added) {
|
||||||
await this.networkManager.registerAdapterAndOpen(new OB11ActiveHttpAdapter(
|
await this.networkManager.registerAdapterAndOpen(new OB11ActiveHttpAdapter(
|
||||||
url, now.token, this.core, this
|
url, now.token, this.core, this,
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -197,7 +198,7 @@ export class NapCatOneBot11Adapter {
|
|||||||
));
|
));
|
||||||
} else {
|
} else {
|
||||||
await this.networkManager.closeAdapterByPredicate(
|
await this.networkManager.closeAdapterByPredicate(
|
||||||
adapter => adapter instanceof OB11PassiveWebSocketAdapter
|
adapter => adapter instanceof OB11PassiveWebSocketAdapter,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -207,12 +208,12 @@ export class NapCatOneBot11Adapter {
|
|||||||
if (now.reverseWs.enable) {
|
if (now.reverseWs.enable) {
|
||||||
now.reverseWs.urls.forEach(url => {
|
now.reverseWs.urls.forEach(url => {
|
||||||
this.networkManager.registerAdapterAndOpen(new OB11ActiveWebSocketAdapter(
|
this.networkManager.registerAdapterAndOpen(new OB11ActiveWebSocketAdapter(
|
||||||
url, 5000, now.heartInterval, now.token, this.core, this.actions
|
url, 5000, now.heartInterval, now.token, this.core, this.actions,
|
||||||
));
|
));
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
await this.networkManager.closeAdapterByPredicate(
|
await this.networkManager.closeAdapterByPredicate(
|
||||||
adapter => adapter instanceof OB11ActiveWebSocketAdapter
|
adapter => adapter instanceof OB11ActiveWebSocketAdapter,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@@ -223,7 +224,7 @@ export class NapCatOneBot11Adapter {
|
|||||||
);
|
);
|
||||||
for (const url of added) {
|
for (const url of added) {
|
||||||
await this.networkManager.registerAdapterAndOpen(new OB11ActiveWebSocketAdapter(
|
await this.networkManager.registerAdapterAndOpen(new OB11ActiveWebSocketAdapter(
|
||||||
url, 5000, now.heartInterval, now.token, this.core, this.actions
|
url, 5000, now.heartInterval, now.token, this.core, this.actions,
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -300,7 +301,7 @@ export class NapCatOneBot11Adapter {
|
|||||||
};
|
};
|
||||||
|
|
||||||
this.context.session.getMsgService().addKernelMsgListener(
|
this.context.session.getMsgService().addKernelMsgListener(
|
||||||
proxiedListenerOf(msgListener, this.context.logger) as any
|
proxiedListenerOf(msgListener, this.context.logger) as any,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -335,7 +336,7 @@ export class NapCatOneBot11Adapter {
|
|||||||
};
|
};
|
||||||
|
|
||||||
this.context.session.getBuddyService().addKernelBuddyListener(
|
this.context.session.getBuddyService().addKernelBuddyListener(
|
||||||
proxiedListenerOf(buddyListener, this.context.logger) as any
|
proxiedListenerOf(buddyListener, this.context.logger) as any,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -377,7 +378,7 @@ export class NapCatOneBot11Adapter {
|
|||||||
parseInt(member1.uin),
|
parseInt(member1.uin),
|
||||||
[
|
[
|
||||||
GroupNotifyMsgType.CANCEL_ADMIN_NOTIFY_CANCELED,
|
GroupNotifyMsgType.CANCEL_ADMIN_NOTIFY_CANCELED,
|
||||||
GroupNotifyMsgType.CANCEL_ADMIN_NOTIFY_ADMIN
|
GroupNotifyMsgType.CANCEL_ADMIN_NOTIFY_ADMIN,
|
||||||
].includes(notify.type) ? 'unset' : 'set',
|
].includes(notify.type) ? 'unset' : 'set',
|
||||||
);
|
);
|
||||||
this.networkManager.emitEvent(groupAdminNoticeEvent)
|
this.networkManager.emitEvent(groupAdminNoticeEvent)
|
||||||
@@ -471,7 +472,7 @@ export class NapCatOneBot11Adapter {
|
|||||||
};
|
};
|
||||||
|
|
||||||
this.context.session.getGroupService().addKernelGroupListener(
|
this.context.session.getGroupService().addKernelGroupListener(
|
||||||
proxiedListenerOf(groupListener, this.context.logger)
|
proxiedListenerOf(groupListener, this.context.logger),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -13,7 +13,7 @@ export class OB11ActiveHttpAdapter implements IOB11NetworkAdapter {
|
|||||||
public url: string,
|
public url: string,
|
||||||
public secret: string | undefined,
|
public secret: string | undefined,
|
||||||
public core: NapCatCore,
|
public core: NapCatCore,
|
||||||
public obContext: NapCatOneBot11Adapter
|
public obContext: NapCatOneBot11Adapter,
|
||||||
) {
|
) {
|
||||||
this.logger = core.context.logger;
|
this.logger = core.context.logger;
|
||||||
}
|
}
|
||||||
|
@@ -119,6 +119,7 @@ export class OB11ActiveWebSocketAdapter implements IOB11NetworkAdapter {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
connectEvent(core: NapCatCore) {
|
connectEvent(core: NapCatCore) {
|
||||||
try {
|
try {
|
||||||
this.checkStateAndReply<any>(new OB11LifeCycleEvent(core, LifeCycleSubType.CONNECT));
|
this.checkStateAndReply<any>(new OB11LifeCycleEvent(core, LifeCycleSubType.CONNECT));
|
||||||
@@ -126,6 +127,7 @@ export class OB11ActiveWebSocketAdapter implements IOB11NetworkAdapter {
|
|||||||
this.logger.logError('[OneBot] [WebSocket Client] 发送生命周期失败', e);
|
this.logger.logError('[OneBot] [WebSocket Client] 发送生命周期失败', e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private async handleMessage(message: any) {
|
private async handleMessage(message: any) {
|
||||||
let receiveData: { action: ActionName, params?: any, echo?: any } = { action: ActionName.Unknown, params: {} };
|
let receiveData: { action: ActionName, params?: any, echo?: any } = { action: ActionName.Unknown, params: {} };
|
||||||
let echo = undefined;
|
let echo = undefined;
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
import { IOB11NetworkAdapter, OB11EmitEventContent } from './index';
|
import { IOB11NetworkAdapter } from './index';
|
||||||
import express, { Express, Request, Response } from 'express';
|
import express, { Express, Request, Response } from 'express';
|
||||||
import http from 'http';
|
import http from 'http';
|
||||||
import { NapCatCore } from '@/core';
|
import { NapCatCore } from '@/core';
|
||||||
@@ -44,6 +44,7 @@ export class OB11PassiveHttpAdapter implements IOB11NetworkAdapter {
|
|||||||
this.server?.close();
|
this.server?.close();
|
||||||
this.app = undefined;
|
this.app = undefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
private initializeServer() {
|
private initializeServer() {
|
||||||
this.app = express();
|
this.app = express();
|
||||||
this.server = http.createServer(this.app);
|
this.server = http.createServer(this.app);
|
||||||
|
@@ -28,7 +28,7 @@ export class OB11PassiveWebSocketAdapter implements IOB11NetworkAdapter {
|
|||||||
heartbeatInterval: number,
|
heartbeatInterval: number,
|
||||||
token: string,
|
token: string,
|
||||||
core: NapCatCore,
|
core: NapCatCore,
|
||||||
public actions: ActionMap
|
public actions: ActionMap,
|
||||||
) {
|
) {
|
||||||
this.core = core;
|
this.core = core;
|
||||||
this.logger = core.context.logger;
|
this.logger = core.context.logger;
|
||||||
|
@@ -2,7 +2,7 @@ import type { SelfInfo } from '@/core/entities';
|
|||||||
|
|
||||||
import { LogWrapper } from '@/common/utils/log';
|
import { LogWrapper } from '@/common/utils/log';
|
||||||
import { NodeIKernelLoginListener, NodeIKernelSessionListener } from '@/core/listeners';
|
import { NodeIKernelLoginListener, NodeIKernelSessionListener } from '@/core/listeners';
|
||||||
import { NodeIDispatcherAdapter, NodeIDependsAdapter, NodeIGlobalAdapter } from '@/core/adapters';
|
import { NodeIDependsAdapter, NodeIDispatcherAdapter, NodeIGlobalAdapter } from '@/core/adapters';
|
||||||
import { NapCatPathWrapper } from '@/common/framework/napcat';
|
import { NapCatPathWrapper } from '@/common/framework/napcat';
|
||||||
import {
|
import {
|
||||||
InstanceContext,
|
InstanceContext,
|
||||||
@@ -92,7 +92,7 @@ export async function NCoreInitShell() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const selfInfo = await new Promise<SelfInfo>((resolve, reject) => {
|
const selfInfo = await new Promise<SelfInfo>((resolve) => {
|
||||||
const loginListener = new NodeIKernelLoginListener();
|
const loginListener = new NodeIKernelLoginListener();
|
||||||
|
|
||||||
// from constructor
|
// from constructor
|
||||||
@@ -129,7 +129,7 @@ export async function NCoreInitShell() {
|
|||||||
};
|
};
|
||||||
loginListener.onQRCodeSessionFailed = (errType: number, errCode: number, errMsg: string) => {
|
loginListener.onQRCodeSessionFailed = (errType: number, errCode: number, errMsg: string) => {
|
||||||
//logger.logError('登录失败(onQRCodeSessionFailed)', errCode, errMsg);
|
//logger.logError('登录失败(onQRCodeSessionFailed)', errCode, errMsg);
|
||||||
logger.logError('[Core] [Login] Login Error,ErrCode: ', errCode, " ErrMsg:", errMsg);
|
logger.logError('[Core] [Login] Login Error,ErrCode: ', errCode, ' ErrMsg:', errMsg);
|
||||||
if (errType == 1 && errCode == 3) {
|
if (errType == 1 && errCode == 3) {
|
||||||
// 二维码过期刷新
|
// 二维码过期刷新
|
||||||
}
|
}
|
||||||
|
@@ -1,5 +1,4 @@
|
|||||||
import express from 'express';
|
import express from 'express';
|
||||||
import { resolve } from 'node:path';
|
|
||||||
import { ALLRouter } from './src/router';
|
import { ALLRouter } from './src/router';
|
||||||
import { LogWrapper } from '@/common/utils/log';
|
import { LogWrapper } from '@/common/utils/log';
|
||||||
import { NapCatPathWrapper } from '@/common/framework/napcat';
|
import { NapCatPathWrapper } from '@/common/framework/napcat';
|
||||||
|
@@ -6,7 +6,7 @@ import { SettingSelect } from './components/SettingSelect';
|
|||||||
import { OB11Config, OB11ConfigWrapper } from './components/WebUiApiOB11Config';
|
import { OB11Config, OB11ConfigWrapper } from './components/WebUiApiOB11Config';
|
||||||
|
|
||||||
async function onSettingWindowCreated(view: Element) {
|
async function onSettingWindowCreated(view: Element) {
|
||||||
const isEmpty = (value: any) => value === undefined || value === undefined || value === '';
|
const isEmpty = (value: any) => value === undefined || false || value === '';
|
||||||
await OB11ConfigWrapper.Init(localStorage.getItem('auth') as string);
|
await OB11ConfigWrapper.Init(localStorage.getItem('auth') as string);
|
||||||
const ob11Config: OB11Config = await OB11ConfigWrapper.GetOB11Config();
|
const ob11Config: OB11Config = await OB11ConfigWrapper.GetOB11Config();
|
||||||
const setOB11Config = (key: string, value: any) => {
|
const setOB11Config = (key: string, value: any) => {
|
||||||
@@ -69,8 +69,7 @@ async function onSettingWindowCreated(view: Element) {
|
|||||||
<setting-text>HTTP 事件上报密钥</setting-text>
|
<setting-text>HTTP 事件上报密钥</setting-text>
|
||||||
</div>
|
</div>
|
||||||
<div class="q-input">
|
<div class="q-input">
|
||||||
<input id="config-ob11-http-secret" class="q-input__inner" data-config-key="ob11.http.secret" type="text" value="${ob11Config.http.secret
|
<input id="config-ob11-http-secret" class="q-input__inner" data-config-key="ob11.http.secret" type="text" value="${ob11Config.http.secret}" placeholder="未设置" />
|
||||||
}" placeholder="未设置" />
|
|
||||||
</div>
|
</div>
|
||||||
</setting-item>
|
</setting-item>
|
||||||
<setting-item data-direction="row">
|
<setting-item data-direction="row">
|
||||||
@@ -174,17 +173,17 @@ async function onSettingWindowCreated(view: Element) {
|
|||||||
'https://github.com/NapNeko/NapCatQQ',
|
'https://github.com/NapNeko/NapCatQQ',
|
||||||
SettingButton('点个星星', 'open-github'),
|
SettingButton('点个星星', 'open-github'),
|
||||||
),
|
),
|
||||||
SettingItem('NapCat 文档', '', SettingButton('看看文档', 'open-docs'))
|
SettingItem('NapCat 文档', '', SettingButton('看看文档', 'open-docs')),
|
||||||
]),
|
]),
|
||||||
SettingItem(
|
SettingItem(
|
||||||
'Telegram 群',
|
'Telegram 群',
|
||||||
'https://t.me/+nLZEnpne-pQ1OWFl',
|
'https://t.me/+nLZEnpne-pQ1OWFl',
|
||||||
SettingButton('进去逛逛', 'open-telegram')
|
SettingButton('进去逛逛', 'open-telegram'),
|
||||||
),
|
),
|
||||||
SettingItem(
|
SettingItem(
|
||||||
'QQ 群',
|
'QQ 群',
|
||||||
'518662028',
|
'518662028',
|
||||||
SettingButton('我要进去', 'open-qq-group')
|
SettingButton('我要进去', 'open-qq-group'),
|
||||||
),
|
),
|
||||||
'</div>',
|
'</div>',
|
||||||
].join(''),
|
].join(''),
|
||||||
|
Reference in New Issue
Block a user