Compare commits

..

16 Commits

Author SHA1 Message Date
手瓜一十雪
3de5438139 fix: poke report 2024-12-04 22:16:59 +08:00
手瓜一十雪
c4b5f34271 fix: 兜底 防止进入影响速度 2024-12-04 22:02:11 +08:00
手瓜一十雪
22d3ac33a2 Refactor: 更新群组通知处理逻辑,优化数据结构和异步处理 2024-12-04 21:59:53 +08:00
Mlikiowa
2e5dd6535a release: v4.2.22 2024-12-04 13:18:58 +00:00
手瓜一十雪
eac58a2a50 fix: 9.9.17-30366 2024-12-04 21:04:24 +08:00
手瓜一十雪
e939ec0e52 fix: #597 2024-12-04 20:37:08 +08:00
Mlikiowa
5b17a14a2a release: v4.2.21 2024-12-04 11:49:26 +00:00
手瓜一十雪
8fb8c888f5 refactor: 移除未使用的uidCache和uinCache逻辑 2024-12-04 19:48:59 +08:00
Mlikiowa
4a2884509e release: v4.2.20 2024-12-04 11:46:12 +00:00
手瓜一十雪
e295235a89 fix: #596 2024-12-04 19:45:46 +08:00
手瓜一十雪
ef515a38d0 Merge branch 'main' of https://github.com/NapNeko/NapCatQQ 2024-12-04 18:50:55 +08:00
手瓜一十雪
02cff040e3 refactor: 移除未使用的createUidFromTinyId和getStatusByUid方法 2024-12-04 18:50:51 +08:00
Mlikiowa
bb0f65a52d release: v4.2.19 2024-12-04 10:42:32 +00:00
手瓜一十雪
d51d6a5cc1 refactor: getUidByUinV2/getUinByUidV2 2024-12-04 18:41:28 +08:00
手瓜一十雪
eb99379a79 fix: 性能优化 2024-12-04 18:29:33 +08:00
Mlikiowa
388eb57d0d release: v4.2.18 2024-12-04 03:40:59 +00:00
16 changed files with 216 additions and 108 deletions

View File

@@ -4,7 +4,7 @@
"name": "NapCatQQ", "name": "NapCatQQ",
"slug": "NapCat.Framework", "slug": "NapCat.Framework",
"description": "高性能的 OneBot 11 协议实现", "description": "高性能的 OneBot 11 协议实现",
"version": "4.2.17", "version": "4.2.22",
"icon": "./logo.png", "icon": "./logo.png",
"authors": [ "authors": [
{ {

View File

@@ -2,7 +2,7 @@
"name": "napcat", "name": "napcat",
"private": true, "private": true,
"type": "module", "type": "module",
"version": "4.2.17", "version": "4.2.22",
"scripts": { "scripts": {
"build:universal": "npm run build:webui && vite build --mode universal || exit 1", "build:universal": "npm run build:webui && vite build --mode universal || exit 1",
"build:framework": "npm run build:webui && vite build --mode framework || exit 1", "build:framework": "npm run build:webui && vite build --mode framework || exit 1",

View File

@@ -1 +1 @@
export const napCatVersion = '4.2.17'; export const napCatVersion = '4.2.22';

View File

@@ -2,6 +2,8 @@ import { ModifyProfileParams, User, UserDetailSource } from '@/core/types';
import { RequestUtil } from '@/common/request'; import { RequestUtil } from '@/common/request';
import { InstanceContext, NapCatCore, ProfileBizType } from '..'; import { InstanceContext, NapCatCore, ProfileBizType } from '..';
import { solveAsyncProblem } from '@/common/helper'; import { solveAsyncProblem } from '@/common/helper';
import { promisify } from 'node:util';
import { LRUCache } from '@/common/lru-cache';
export class NTQQUserApi { export class NTQQUserApi {
context: InstanceContext; context: InstanceContext;
@@ -11,13 +13,6 @@ export class NTQQUserApi {
this.context = context; this.context = context;
this.core = core; this.core = core;
} }
//self_tind格式
async createUidFromTinyId(tinyId: string) {
return this.context.session.getMsgService().createUidFromTinyId(this.core.selfInfo.uin, tinyId);
}
async getStatusByUid(uid: string) {
return this.context.session.getProfileService().getStatus(uid);
}
async getCoreAndBaseInfo(uids: string[]) { async getCoreAndBaseInfo(uids: string[]) {
return await this.core.eventWrapper.callNoListenerEvent( return await this.core.eventWrapper.callNoListenerEvent(
@@ -170,35 +165,51 @@ export class NTQQUserApi {
if (!skey) { if (!skey) {
throw new Error('SKey is Empty'); throw new Error('SKey is Empty');
} }
return skey; return skey;
} }
//后期改成流水线处理
async getUidByUinV2(Uin: string) { async getUidByUinV2(Uin: string) {
let uid = (await this.context.session.getGroupService().getUidByUins([Uin])).uids.get(Uin); if (!Uin) {
if (uid) return uid; return '';
uid = (await this.context.session.getProfileService().getUidByUin('FriendsServiceImpl', [Uin])).get(Uin); }
if (uid) return uid; const services = [
uid = (await this.context.session.getUixConvertService().getUid([Uin])).uidInfo.get(Uin); () => this.context.session.getUixConvertService().getUid([Uin]).then((data) => data.uidInfo.get(Uin)).catch(() => undefined),
if (uid) return uid; () => promisify<string, string[], Map<string, string>>
const unverifiedUid = (await this.getUserDetailInfoByUin(Uin)).detail.uid;//从QQ Native 特殊转换 (this.context.session.getProfileService().getUidByUin)('FriendsServiceImpl', [Uin]).then((data) => data.get(Uin)).catch(() => undefined),
if (unverifiedUid.indexOf('*') == -1) uid = unverifiedUid; () => this.context.session.getGroupService().getUidByUins([Uin]).then((data) => data.uids.get(Uin)).catch(() => undefined),
//if (uid) return uid; () => this.getUserDetailInfoByUin(Uin).then((data) => data.detail.uid).catch(() => undefined),
return uid; ];
let uid: string | undefined = undefined;
for (const service of services) {
uid = await service();
if (uid && uid.indexOf('*') == -1 && uid !== '') {
break;
}
}
return uid ?? '';
} }
//后期改成流水线处理
async getUinByUidV2(Uid: string) { async getUinByUidV2(Uid: string) {
let uin = (await this.context.session.getGroupService().getUinByUids([Uid])).uins.get(Uid); if (!Uid) {
if (uin && uin !== '0') return uin; return '0';
uin = (await this.context.session.getProfileService().getUinByUid('FriendsServiceImpl', [Uid])).get(Uid); }
if (uin && uin !== '0') return uin; const services = [
uin = (await this.context.session.getUixConvertService().getUin([Uid])).uinInfo.get(Uid); () => this.context.session.getUixConvertService().getUin([Uid]).then((data) => data.uinInfo.get(Uid)).catch(() => undefined),
if (uin && uin !== '0') return uin; () => this.context.session.getGroupService().getUinByUids([Uid]).then((data) => data.uins.get(Uid)).catch(() => undefined),
uin = (await this.core.apis.FriendApi.getBuddyIdMap(true)).getKey(Uid); () => promisify<string, string[], Map<string, string>>
if (uin && uin !== '0') return uin; (this.context.session.getProfileService().getUinByUid)('FriendsServiceImpl', [Uid]).then((data) => data.get(Uid)).catch(() => undefined),
uin = (await this.getUserDetailInfo(Uid)).uin; //从QQ Native 转换 () => this.core.apis.FriendApi.getBuddyIdMap(true).then((data) => data.getKey(Uid)).catch(() => undefined),
return uin; () => this.getUserDetailInfo(Uid).then((data) => data.uin).catch(() => undefined),
];
let uin: string | undefined = undefined;
for (const service of services) {
uin = await service();
if (uin && uin !== '0' && uin !== '') {
break;
}
}
return uin ?? '0';
} }
async getRecentContactListSnapShot(count: number) { async getRecentContactListSnapShot(count: number) {

View File

@@ -98,5 +98,9 @@
"6.9.61-29927": { "6.9.61-29927": {
"appid": 537255836, "appid": 537255836,
"qua": "V1_MAC_NQ_6.9.61_29927_GW_B" "qua": "V1_MAC_NQ_6.9.61_29927_GW_B"
},
"9.9.17-30366": {
"appid": 537258389,
"qua": "V1_WIN_NQ_9.9.17_30366_GW_B"
} }
} }

View File

@@ -102,5 +102,9 @@
"6.9.61-29927-arm64": { "6.9.61-29927-arm64": {
"send": "4038740", "send": "4038740",
"recv": "403AF58" "recv": "403AF58"
},
"9.9.17-30366-x64": {
"send": "39AB0B0",
"recv": "39AF4E4"
} }
} }

View File

@@ -187,11 +187,11 @@ export interface NodeIKernelGroupService {
destroyGroup(groupCode: string): void; destroyGroup(groupCode: string): void;
getSingleScreenNotifies(doubted: boolean, start_seq: string, num: number): Promise<GeneralCallResult>; getSingleScreenNotifies(doubt: boolean, startSeq: string, count: number): Promise<GeneralCallResult>;
clearGroupNotifies(groupCode: string): void; clearGroupNotifies(groupCode: string): void;
getGroupNotifiesUnreadCount(unknown: boolean): Promise<GeneralCallResult>; getGroupNotifiesUnreadCount(doubt: boolean): Promise<GeneralCallResult>;
clearGroupNotifiesUnreadCount(doubt: boolean): void; clearGroupNotifiesUnreadCount(doubt: boolean): void;

View File

@@ -9,9 +9,9 @@ export interface NodeIKernelProfileService {
getRelationFlag(callfrom: string, uids: string[]): Promise<Map<string, any>>; getRelationFlag(callfrom: string, uids: string[]): Promise<Map<string, any>>;
getUidByUin(callfrom: string, uin: Array<string>): Promise<Map<string, string>>; getUidByUin(callfrom: string, uin: Array<string>): Map<string, string>;
getUinByUid(callfrom: string, uid: Array<string>): Promise<Map<string, string>>; getUinByUid(callfrom: string, uid: Array<string>): Map<string, string>;
getCoreAndBaseInfo(callfrom: string, uids: string[]): Promise<Map<string, SimpleInfo>>; getCoreAndBaseInfo(callfrom: string, uids: string[]): Promise<Map<string, SimpleInfo>>;

View File

@@ -29,6 +29,7 @@ export interface TextElement {
} }
export interface FaceElement { export interface FaceElement {
pokeType?: number;
faceIndex: number; faceIndex: number;
faceType: FaceType; faceType: FaceType;
faceText?: string; faceText?: string;

View File

@@ -2,31 +2,43 @@ import { GroupNotifyMsgStatus } from '@/core';
import { OneBotAction } from '@/onebot/action/OneBotAction'; import { OneBotAction } from '@/onebot/action/OneBotAction';
import { ActionName } from '@/onebot/action/router'; import { ActionName } from '@/onebot/action/router';
interface OB11GroupRequestNotify { interface Notify {
group_id: number, request_id: string;
user_id: number, invitor_uin: number;
flag: string invitor_nick?: string;
group_id?: number;
group_name?: string;
checked: boolean;
requester_nick?: string;
actor: number;
} }
export default class GetGroupAddRequest extends OneBotAction<null, OB11GroupRequestNotify[] | null> { export default class GetGroupAddRequest extends OneBotAction<null, Notify[] | null> {
actionName = ActionName.GetGroupIgnoreAddRequest; actionName = ActionName.GetGroupIgnoreAddRequest;
async _handle(payload: null): Promise<OB11GroupRequestNotify[] | null> { async _handle(payload: null): Promise<Notify[] | null> {
const ignoredNotifies = await this.core.apis.GroupApi.getSingleScreenNotifies(true, 10); const NTQQUserApi = this.core.apis.UserApi;
const retData: any = { const NTQQGroupApi = this.core.apis.GroupApi;
join_requests: await Promise.all( const ignoredNotifies = await NTQQGroupApi.getSingleScreenNotifies(true, 10);
ignoredNotifies const retData: Notify[] = [];
.filter(notify => notify.type === 7)
.map(async SSNotify => ({ const notifyPromises = ignoredNotifies
request_id: SSNotify.group.groupCode + '|' + SSNotify.seq + '|' + SSNotify.type, .filter(notify => notify.type === 7)
requester_uin: await this.core.apis.UserApi.getUinByUidV2(SSNotify.user1?.uid), .map(async SSNotify => {
requester_nick: SSNotify.user1?.nickName, const invitorUin = SSNotify.user1?.uid ? +await NTQQUserApi.getUinByUidV2(SSNotify.user1.uid) : 0;
group_id: SSNotify.group?.groupCode, const actorUin = SSNotify.user2?.uid ? +await NTQQUserApi.getUinByUidV2(SSNotify.user2.uid) : 0;
group_name: SSNotify.group?.groupName, retData.push({
checked: SSNotify.status !== GroupNotifyMsgStatus.KUNHANDLE, request_id: `${SSNotify.group.groupCode}|${SSNotify.seq}|${SSNotify.type}`,
actor: await this.core.apis.UserApi.getUinByUidV2(SSNotify.user2?.uid) || 0, invitor_uin: invitorUin,
}))), requester_nick: SSNotify.user1?.nickName,
}; group_id: +SSNotify.group?.groupCode,
group_name: SSNotify.group?.groupName,
checked: SSNotify.status !== GroupNotifyMsgStatus.KUNHANDLE,
actor: actorUin,
});
});
await Promise.all(notifyPromises);
return retData; return retData;
} }

View File

@@ -1,25 +1,54 @@
import { GroupNotifyMsgStatus } from '@/core'; import { GroupNotifyMsgStatus } from '@/core';
import { OneBotAction } from '@/onebot/action/OneBotAction'; import { OneBotAction } from '@/onebot/action/OneBotAction';
import { ActionName } from '@/onebot/action/router'; import { ActionName } from '@/onebot/action/router';
export class GetGroupIgnoredNotifies extends OneBotAction<void, any> {
actionName = ActionName.GetGroupIgnoredNotifies;
async _handle(payload: void) { interface Notify {
const ignoredNotifies = await this.core.apis.GroupApi.getSingleScreenNotifies(true, 10); request_id: string;
const retData: any = { invitor_uin: number;
join_requests: await Promise.all( invitor_nick?: string;
ignoredNotifies group_id?: number;
.filter(notify => notify.type === 7) group_name?: string;
.map(async SSNotify => ({ checked: boolean;
request_id: SSNotify.group.groupCode + '|' + SSNotify.seq + '|' + SSNotify.type, requester_nick?: string;
requester_uin: await this.core.apis.UserApi.getUinByUidV2(SSNotify.user1?.uid), actor: number;
requester_nick: SSNotify.user1?.nickName, }
group_id: SSNotify.group?.groupCode, interface RetData {
group_name: SSNotify.group?.groupName, InvitedRequest: Notify[];
checked: SSNotify.status !== GroupNotifyMsgStatus.KUNHANDLE, join_requests: Notify[];
actor: await this.core.apis.UserApi.getUinByUidV2(SSNotify.user2?.uid) || 0, }
}))),
}; export class GetGroupIgnoredNotifies extends OneBotAction<void, RetData> {
actionName = ActionName.GetGroupSystemMsg;
async _handle(): Promise<RetData> {
const NTQQUserApi = this.core.apis.UserApi;
const NTQQGroupApi = this.core.apis.GroupApi;
const SingleScreenNotifies = await NTQQGroupApi.getSingleScreenNotifies(false, 50);
const retData: RetData = { InvitedRequest: [], join_requests: [] };
const notifyPromises = SingleScreenNotifies.map(async (SSNotify) => {
const invitorUin = SSNotify.user1?.uid ? +await NTQQUserApi.getUinByUidV2(SSNotify.user1.uid) : 0;
const actorUin = SSNotify.user2?.uid ? +await NTQQUserApi.getUinByUidV2(SSNotify.user2.uid) : 0;
const commonData = {
request_id: `${SSNotify.group.groupCode}|${SSNotify.seq}|${SSNotify.type}`,
invitor_uin: invitorUin,
invitor_nick: SSNotify.user1?.nickName,
group_id: +SSNotify.group?.groupCode,
group_name: SSNotify.group?.groupName,
checked: SSNotify.status !== GroupNotifyMsgStatus.KUNHANDLE,
actor: actorUin,
requester_nick: SSNotify.user1?.nickName,
};
if (SSNotify.type === 1) {
retData.InvitedRequest.push(commonData);
} else if (SSNotify.type === 7) {
retData.join_requests.push(commonData);
}
});
await Promise.all(notifyPromises);
return retData; return retData;
} }

View File

@@ -21,7 +21,8 @@ export class GetGroupMemberList extends OneBotAction<Payload, OB11GroupMember[]>
const memberCache = this.core.apis.GroupApi.groupMemberCache; const memberCache = this.core.apis.GroupApi.groupMemberCache;
let groupMembers = memberCache.get(groupIdStr); let groupMembers = memberCache.get(groupIdStr);
if (noCache || !groupMembers) { if (noCache || !groupMembers) {
await this.core.apis.GroupApi.refreshGroupMemberCache(groupIdStr); this.core.apis.GroupApi.refreshGroupMemberCache(groupIdStr).then().catch();
//下次刷新
groupMembers = memberCache.get(groupIdStr); groupMembers = memberCache.get(groupIdStr);
if (!groupMembers) { if (!groupMembers) {
throw new Error(`Failed to get group member list for group ${groupIdStr}`); throw new Error(`Failed to get group member list for group ${groupIdStr}`);

View File

@@ -1,38 +1,63 @@
import { GroupNotifyMsgStatus } from '@/core'; import { GroupNotifyMsgStatus } from '@/core';
import { OneBotAction } from '@/onebot/action/OneBotAction'; import { OneBotAction } from '@/onebot/action/OneBotAction';
import { ActionName } from '@/onebot/action/router'; import { ActionName } from '@/onebot/action/router';
export class GetGroupSystemMsg extends OneBotAction<void, any> {
interface Notify {
request_id: string;
invitor_uin: number;
invitor_nick?: string;
group_id?: number;
group_name?: string;
checked: boolean;
actor: number;
}
interface JoinRequest extends Notify {
requester_nick?: string;
}
interface RetData {
InvitedRequest: Notify[];
join_requests: JoinRequest[];
}
export class GetGroupSystemMsg extends OneBotAction<void, RetData> {
actionName = ActionName.GetGroupSystemMsg; actionName = ActionName.GetGroupSystemMsg;
async _handle() { async _handle(): Promise<RetData> {
const NTQQUserApi = this.core.apis.UserApi; const NTQQUserApi = this.core.apis.UserApi;
const NTQQGroupApi = this.core.apis.GroupApi; const NTQQGroupApi = this.core.apis.GroupApi;
// 默认10条 该api未完整实现 包括响应数据规范化 类型规范化 const SingleScreenNotifies = await NTQQGroupApi.getSingleScreenNotifies(false, 50);
const SingleScreenNotifies = await NTQQGroupApi.getSingleScreenNotifies(false, 10); const retData: RetData = { InvitedRequest: [], join_requests: [] };
const retData: any = { InvitedRequest: [], join_requests: [] };
for (const SSNotify of SingleScreenNotifies) { const notifyPromises = SingleScreenNotifies.map(async (SSNotify) => {
if (SSNotify.type == 1) { const invitorUin = SSNotify.user1?.uid ? +await NTQQUserApi.getUinByUidV2(SSNotify.user1.uid) : 0;
const actorUin = SSNotify.user2?.uid ? +await NTQQUserApi.getUinByUidV2(SSNotify.user2.uid) : 0;
if (SSNotify.type === 1) {
retData.InvitedRequest.push({ retData.InvitedRequest.push({
request_id: SSNotify.group.groupCode + '|' + SSNotify.seq + '|' + SSNotify.type, request_id: `${SSNotify.group.groupCode}|${SSNotify.seq}|${SSNotify.type}`,
invitor_uin: await NTQQUserApi.getUinByUidV2(SSNotify.user1?.uid), invitor_uin: invitorUin,
invitor_nick: SSNotify.user1?.nickName, invitor_nick: SSNotify.user1?.nickName,
group_id: SSNotify.group?.groupCode, group_id: +SSNotify.group?.groupCode,
group_name: SSNotify.group?.groupName, group_name: SSNotify.group?.groupName,
checked: SSNotify.status === GroupNotifyMsgStatus.KUNHANDLE ? false : true, checked: SSNotify.status !== GroupNotifyMsgStatus.KUNHANDLE,
actor: await NTQQUserApi.getUinByUidV2(SSNotify.user2?.uid) || 0, actor: actorUin,
}); });
} else if (SSNotify.type == 7) { } else if (SSNotify.type === 7) {
retData.join_requests.push({ retData.join_requests.push({
request_id: SSNotify.group.groupCode + '|' + SSNotify.seq + '|' + SSNotify.type, request_id: `${SSNotify.group.groupCode}|${SSNotify.seq}|${SSNotify.type}`,
requester_uin: await NTQQUserApi.getUinByUidV2(SSNotify.user1?.uid), invitor_uin: invitorUin,
requester_nick: SSNotify.user1?.nickName, requester_nick: SSNotify.user1?.nickName,
group_id: SSNotify.group?.groupCode, group_id: +SSNotify.group?.groupCode,
group_name: SSNotify.group?.groupName, group_name: SSNotify.group?.groupName,
checked: SSNotify.status === GroupNotifyMsgStatus.KUNHANDLE ? false : true, checked: SSNotify.status !== GroupNotifyMsgStatus.KUNHANDLE,
actor: await NTQQUserApi.getUinByUidV2(SSNotify.user2?.uid) || 0, actor: actorUin,
}); });
} }
} });
await Promise.all(notifyPromises);
return retData; return retData;
} }

View File

@@ -153,6 +153,17 @@ export class OneBotMsgApi {
faceElement: async element => { faceElement: async element => {
const faceIndex = element.faceIndex; const faceIndex = element.faceIndex;
if (element.faceType == FaceType.Poke) {
return {
type: OB11MessageDataType.poke,
data: {
type: element?.pokeType?.toString() ?? '0',
id: faceIndex.toString(),
}
}
}
if (faceIndex === FaceIndex.DICE) { if (faceIndex === FaceIndex.DICE) {
return { return {
type: OB11MessageDataType.dice, type: OB11MessageDataType.dice,

View File

@@ -405,8 +405,8 @@ export class NapCatOneBot11Adapter {
this.context.logger.logDebug(`收到邀请我加群通知:${notify}`); this.context.logger.logDebug(`收到邀请我加群通知:${notify}`);
const groupInviteEvent = new OB11GroupRequestEvent( const groupInviteEvent = new OB11GroupRequestEvent(
this.core, this.core,
parseInt(notify.group.groupCode), +notify.group.groupCode,
parseInt(await this.core.apis.UserApi.getUinByUidV2(notify.user2.uid)), +await this.core.apis.UserApi.getUinByUidV2(notify.user2.uid),
'invite', 'invite',
notify.postscript, notify.postscript,
flag flag
@@ -423,8 +423,8 @@ export class NapCatOneBot11Adapter {
this.context.logger.logDebug(`收到群员邀请加群通知:${notify}`); this.context.logger.logDebug(`收到群员邀请加群通知:${notify}`);
const groupInviteEvent = new OB11GroupRequestEvent( const groupInviteEvent = new OB11GroupRequestEvent(
this.core, this.core,
parseInt(notify.group.groupCode), +notify.group.groupCode,
parseInt(await this.core.apis.UserApi.getUinByUidV2(notify.user1.uid)), +await this.core.apis.UserApi.getUinByUidV2(notify.user1.uid),
'add', 'add',
notify.postscript, notify.postscript,
flag flag
@@ -571,6 +571,8 @@ export class NapCatOneBot11Adapter {
} }
private async emitFriendRecallMsg(message: RawMessage, oriMessageId: number, element: MessageElement) { private async emitFriendRecallMsg(message: RawMessage, oriMessageId: number, element: MessageElement) {
const operatorUid = element.grayTipElement?.revokeElement.operatorUid;
if (!operatorUid) return undefined;
return new OB11FriendRecallNoticeEvent( return new OB11FriendRecallNoticeEvent(
this.core, this.core,
+message.senderUin, +message.senderUin,
@@ -581,7 +583,7 @@ export class NapCatOneBot11Adapter {
private async emitGroupRecallMsg(message: RawMessage, oriMessageId: number, element: MessageElement) { private async emitGroupRecallMsg(message: RawMessage, oriMessageId: number, element: MessageElement) {
const operatorUid = element.grayTipElement?.revokeElement.operatorUid; const operatorUid = element.grayTipElement?.revokeElement.operatorUid;
if (!operatorUid) return undefined; if (!operatorUid) return undefined;
const operatorId = message.senderUin ?? await this.core.apis.UserApi.getUinByUidV2(operatorUid); const operatorId = await this.core.apis.UserApi.getUinByUidV2(operatorUid);
return new OB11GroupRecallNoticeEvent( return new OB11GroupRecallNoticeEvent(
this.core, this.core,
+message.peerUin, +message.peerUin,

View File

@@ -71,6 +71,14 @@ export enum OB11MessageDataType {
location = 'location' location = 'location'
} }
export interface OB11MessagePoke {
type: OB11MessageDataType.poke;
data: {
type: string;
id: string;
};
}
// 商城表情消息接口定义 // 商城表情消息接口定义
export interface OB11MessageMFace { export interface OB11MessageMFace {
type: OB11MessageDataType.mface; type: OB11MessageDataType.mface;
@@ -247,7 +255,7 @@ export type OB11MessageData =
OB11MessageAt | OB11MessageReply | OB11MessageAt | OB11MessageReply |
OB11MessageImage | OB11MessageRecord | OB11MessageFile | OB11MessageVideo | OB11MessageImage | OB11MessageRecord | OB11MessageFile | OB11MessageVideo |
OB11MessageNode | OB11MessageIdMusic | OB11MessageCustomMusic | OB11MessageJson | OB11MessageNode | OB11MessageIdMusic | OB11MessageCustomMusic | OB11MessageJson |
OB11MessageDice | OB11MessageRPS | OB11MessageMarkdown | OB11MessageForward | OB11MessageContext; OB11MessageDice | OB11MessageRPS | OB11MessageMarkdown | OB11MessageForward | OB11MessageContext | OB11MessagePoke;
// 发送消息接口定义 // 发送消息接口定义
export interface OB11PostSendMsg { export interface OB11PostSendMsg {