mirror of
https://github.com/NapNeko/NapCatQQ.git
synced 2024-11-21 09:36:35 +00:00
chore: add
This commit is contained in:
parent
87c3b24488
commit
c865d32d95
@ -1,38 +1,90 @@
|
|||||||
import {
|
import {
|
||||||
ChatType,
|
ChatType,
|
||||||
|
Group,
|
||||||
GroupMember,
|
GroupMember,
|
||||||
|
GroupMemberCache,
|
||||||
GroupMemberRole,
|
GroupMemberRole,
|
||||||
GroupNotify,
|
GroupNotify,
|
||||||
GroupRequestOperateTypes,
|
GroupRequestOperateTypes,
|
||||||
MemberExtSourceType,
|
MemberExtSourceType,
|
||||||
} from '../entities';
|
} from '../entities';
|
||||||
import { GeneralCallResult, InstanceContext, NapCatCore, NodeIKernelGroupService } from '@/core';
|
import { GeneralCallResult, InstanceContext, NapCatCore, NodeIKernelGroupService } from '@/core';
|
||||||
import { runAllWithTimeout } from '@/common/utils/helper';
|
import { isNumeric, runAllWithTimeout } from '@/common/utils/helper';
|
||||||
import { NodeIKernelGroupListener } from '../listeners';
|
import { NodeIKernelGroupListener } from '../listeners';
|
||||||
|
|
||||||
export class NTQQGroupApi {
|
export class NTQQGroupApi {
|
||||||
context: InstanceContext;
|
context: InstanceContext;
|
||||||
core: NapCatCore;
|
core: NapCatCore;
|
||||||
|
public groupMembers: Map<string, Map<string, GroupMember>> = new Map<string, Map<string, GroupMember>>();
|
||||||
|
public groups: Map<string, Group> = new Map<string, Group>();
|
||||||
constructor(context: InstanceContext, core: NapCatCore) {
|
constructor(context: InstanceContext, core: NapCatCore) {
|
||||||
this.context = context;
|
this.context = context;
|
||||||
this.core = core;
|
this.core = core;
|
||||||
}
|
}
|
||||||
|
|
||||||
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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async getGroup(qq: string | number): Promise<Group | undefined> {
|
||||||
|
let group = this.groups.get(qq.toString());
|
||||||
|
if (!group) {
|
||||||
|
try {
|
||||||
|
const _groups = await this.getGroups();
|
||||||
|
if (_groups.length) {
|
||||||
|
_groups.forEach(g => {
|
||||||
|
this.groups.set(g.groupCode, g);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
return undefined;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
group = this.groups.get(qq.toString());
|
||||||
|
return group;
|
||||||
|
}
|
||||||
|
|
||||||
|
async getGroupMember(groupQQ: string | number, memberUinOrUid: string | number) {
|
||||||
|
groupQQ = groupQQ.toString();
|
||||||
|
memberUinOrUid = memberUinOrUid.toString();
|
||||||
|
let members = this.groupMembers.get(groupQQ);
|
||||||
|
if (!members) {
|
||||||
|
try {
|
||||||
|
members = await this.getGroupMembers(groupQQ);
|
||||||
|
// 更新群成员列表
|
||||||
|
this.groupMembers.set(groupQQ, members);
|
||||||
|
}
|
||||||
|
catch (e) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// log('getGroupMember', members);
|
||||||
|
const getMember = () => {
|
||||||
|
let member: GroupMember | undefined = undefined;
|
||||||
|
if (isNumeric(memberUinOrUid)) {
|
||||||
|
member = Array.from(members!.values()).find(member => member.uin === memberUinOrUid);
|
||||||
|
} else {
|
||||||
|
member = members!.get(memberUinOrUid);
|
||||||
|
}
|
||||||
|
return member;
|
||||||
|
};
|
||||||
|
let member = getMember();
|
||||||
|
if (!member) {
|
||||||
|
members = await this.getGroupMembers(groupQQ);
|
||||||
|
member = getMember();
|
||||||
|
}
|
||||||
|
return member;
|
||||||
|
}
|
||||||
|
|
||||||
async getGroups(forced = false) {
|
async getGroups(forced = false) {
|
||||||
type ListenerType = NodeIKernelGroupListener['onGroupListUpdate'];
|
type ListenerType = NodeIKernelGroupListener['onGroupListUpdate'];
|
||||||
const [_retData, _updateType, groupList] = await this.core.eventWrapper.CallNormalEvent <(force: boolean) => Promise<any>, ListenerType>
|
const [_retData, _updateType, groupList] = await this.core.eventWrapper.CallNormalEvent<(force: boolean) => Promise<any>, ListenerType>
|
||||||
(
|
(
|
||||||
'NodeIKernelGroupService/getGroupList',
|
'NodeIKernelGroupService/getGroupList',
|
||||||
'NodeIKernelGroupListener/onGroupListUpdate',
|
'NodeIKernelGroupListener/onGroupListUpdate',
|
||||||
1,
|
1,
|
||||||
5000,
|
5000,
|
||||||
(updateType) => true,
|
(updateType) => true,
|
||||||
forced,
|
forced,
|
||||||
);
|
);
|
||||||
return groupList;
|
return groupList;
|
||||||
}
|
}
|
||||||
@ -172,16 +224,16 @@ export class NTQQGroupApi {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async getSingleScreenNotifies(num: number) {
|
async getSingleScreenNotifies(num: number) {
|
||||||
const [_retData, _doubt, _seq, notifies] = await this.core.eventWrapper.CallNormalEvent <(arg1: boolean, arg2: string, arg3: number) => Promise<any>, (doubt: boolean, seq: string, notifies: GroupNotify[]) => void>
|
const [_retData, _doubt, _seq, notifies] = await this.core.eventWrapper.CallNormalEvent<(arg1: boolean, arg2: string, arg3: number) => Promise<any>, (doubt: boolean, seq: string, notifies: GroupNotify[]) => void>
|
||||||
(
|
(
|
||||||
'NodeIKernelGroupService/getSingleScreenNotifies',
|
'NodeIKernelGroupService/getSingleScreenNotifies',
|
||||||
'NodeIKernelGroupListener/onGroupSingleScreenNotifies',
|
'NodeIKernelGroupListener/onGroupSingleScreenNotifies',
|
||||||
1,
|
1,
|
||||||
5000,
|
5000,
|
||||||
() => true,
|
() => true,
|
||||||
false,
|
false,
|
||||||
'',
|
'',
|
||||||
num,
|
num,
|
||||||
);
|
);
|
||||||
return notifies;
|
return notifies;
|
||||||
}
|
}
|
||||||
@ -191,17 +243,17 @@ export class NTQQGroupApi {
|
|||||||
type EventType = NodeIKernelGroupService['getMemberInfo'];
|
type EventType = NodeIKernelGroupService['getMemberInfo'];
|
||||||
// NTEventDispatch.CreatListenerFunction('NodeIKernelGroupListener/onGroupMemberInfoUpdate',
|
// NTEventDispatch.CreatListenerFunction('NodeIKernelGroupListener/onGroupMemberInfoUpdate',
|
||||||
//return napCatCore.session.getGroupService().getMemberInfo(GroupCode, [uid], forced);
|
//return napCatCore.session.getGroupService().getMemberInfo(GroupCode, [uid], forced);
|
||||||
const [ret, _groupCode, _changeType, _members] = await this.core.eventWrapper.CallNormalEvent <EventType, ListenerType>
|
const [ret, _groupCode, _changeType, _members] = await this.core.eventWrapper.CallNormalEvent<EventType, ListenerType>
|
||||||
(
|
(
|
||||||
'NodeIKernelGroupService/getMemberInfo',
|
'NodeIKernelGroupService/getMemberInfo',
|
||||||
'NodeIKernelGroupListener/onMemberInfoChange',
|
'NodeIKernelGroupListener/onMemberInfoChange',
|
||||||
1,
|
1,
|
||||||
5000,
|
5000,
|
||||||
(groupCode: string, changeType: number, members: Map<string, GroupMember>) => {
|
(groupCode: string, changeType: number, members: Map<string, GroupMember>) => {
|
||||||
return groupCode == GroupCode && members.has(uid);
|
return groupCode == GroupCode && members.has(uid);
|
||||||
},
|
},
|
||||||
GroupCode, [uid], forced,
|
GroupCode, [uid], forced,
|
||||||
);
|
);
|
||||||
return _members.get(uid);
|
return _members.get(uid);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -244,7 +296,7 @@ export class NTQQGroupApi {
|
|||||||
'NodeIKernelGroupService/getGroupRecommendContactArkJson',
|
'NodeIKernelGroupService/getGroupRecommendContactArkJson',
|
||||||
5000,
|
5000,
|
||||||
GroupCode,
|
GroupCode,
|
||||||
);
|
);
|
||||||
return ret.arkJson;
|
return ret.arkJson;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -6,7 +6,13 @@ export enum GroupListUpdateType {
|
|||||||
MODIFIED,
|
MODIFIED,
|
||||||
REMOVE
|
REMOVE
|
||||||
}
|
}
|
||||||
|
export interface GroupMemberCache {
|
||||||
|
group: {
|
||||||
|
data: GroupMember[];
|
||||||
|
isExpired: boolean;
|
||||||
|
}
|
||||||
|
isExpired: boolean;
|
||||||
|
}
|
||||||
export interface Group {
|
export interface Group {
|
||||||
groupCode: string,
|
groupCode: string,
|
||||||
createTime?: string,//高版本才有
|
createTime?: string,//高版本才有
|
||||||
|
@ -35,7 +35,7 @@ async function handleMsg(coreContext: NapCatCore, msg: OB11Message, quickAction:
|
|||||||
let replyMessage: OB11MessageData[] = [];
|
let replyMessage: OB11MessageData[] = [];
|
||||||
|
|
||||||
if (msg.message_type == 'group') {
|
if (msg.message_type == 'group') {
|
||||||
group = await getGroup(msg.group_id!.toString());
|
group = await coreContext.getApiContext().GroupApi.getGroup(msg.group_id!.toString());
|
||||||
replyMessage.push({
|
replyMessage.push({
|
||||||
type: 'reply',
|
type: 'reply',
|
||||||
data: {
|
data: {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user