mirror of
https://github.com/NapNeko/NapCatQQ.git
synced 2024-11-21 09:36:35 +00:00
feat: contact actions
This commit is contained in:
parent
1eef3a6a7d
commit
d320550080
92
src/laana/action/contact.ts
Normal file
92
src/laana/action/contact.ts
Normal file
@ -0,0 +1,92 @@
|
|||||||
|
import { NapCatCore, Sex } from '@/core';
|
||||||
|
import { NapCatLaanaAdapter } from '@/laana';
|
||||||
|
import { LaanaUserEntity, LaanaGroup, LaanaUserEntity_Sex } from '@laana-proto/def';
|
||||||
|
import { LaanaActionHandler } from '@/laana/action/index';
|
||||||
|
|
||||||
|
export class LaanaContactActionImpl {
|
||||||
|
constructor(
|
||||||
|
public core: NapCatCore,
|
||||||
|
public laana: NapCatLaanaAdapter,
|
||||||
|
) {}
|
||||||
|
|
||||||
|
handler: LaanaActionHandler = {
|
||||||
|
getAllBuddies: async () => ({
|
||||||
|
buddyUins: await this.getAllBuddies(),
|
||||||
|
}),
|
||||||
|
|
||||||
|
getAllGroups: async () => ({
|
||||||
|
groupCodes: await this.getAllGroups(),
|
||||||
|
}),
|
||||||
|
|
||||||
|
getBuddyInfo: async ({ buddyUin }) => ({
|
||||||
|
buddy: await this.getBuddyInfo(buddyUin),
|
||||||
|
}),
|
||||||
|
|
||||||
|
getGroupInfo: async ({ groupCode }) => ({
|
||||||
|
group: await this.getGroupInfo(groupCode),
|
||||||
|
}),
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get all buddies' uin.
|
||||||
|
*/
|
||||||
|
async getAllBuddies() {
|
||||||
|
return (await this.core.apis.FriendApi.getBuddyV2())
|
||||||
|
.map(value => value.uin)
|
||||||
|
.filter(value => value !== undefined);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get all groups' groupCode.
|
||||||
|
*/
|
||||||
|
async getAllGroups() {
|
||||||
|
return Array.from(
|
||||||
|
(await this.core.apis.GroupApi.getGroups()).values()
|
||||||
|
).map(value => value.groupCode);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get buddy info.
|
||||||
|
* @param uin Buddy uin.
|
||||||
|
*/
|
||||||
|
async getBuddyInfo(uin: string): Promise<LaanaUserEntity> {
|
||||||
|
const uid = await this.core.apis.UserApi.getUidByUinV2(uin);
|
||||||
|
if (!uid) {
|
||||||
|
throw new Error(`获取 ${uin} 信息失败`);
|
||||||
|
}
|
||||||
|
const userInfo = await this.core.apis.UserApi.getUserDetailInfo(uid);
|
||||||
|
return {
|
||||||
|
uin,
|
||||||
|
nick: userInfo.nick,
|
||||||
|
sex: userInfo.sex === Sex.male ? LaanaUserEntity_Sex.MALE
|
||||||
|
: userInfo.sex === Sex.female ? LaanaUserEntity_Sex.FEMALE
|
||||||
|
: LaanaUserEntity_Sex.UNKNOWN,
|
||||||
|
age: userInfo.age,
|
||||||
|
qid: userInfo.qid,
|
||||||
|
roleData: {
|
||||||
|
oneofKind: 'buddyRoleData',
|
||||||
|
buddyRoleData: {
|
||||||
|
remark: userInfo.remark,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get group info.
|
||||||
|
* @param groupCode Group code.
|
||||||
|
*/
|
||||||
|
async getGroupInfo(groupCode: string): Promise<LaanaGroup> {
|
||||||
|
const groupInfo = await this.core.apis.GroupApi.getGroup(groupCode);
|
||||||
|
if (!groupInfo) {
|
||||||
|
throw new Error(`获取 ${groupCode} 信息失败`);
|
||||||
|
}
|
||||||
|
return {
|
||||||
|
groupCode,
|
||||||
|
groupName: groupInfo.groupName,
|
||||||
|
groupRemark: groupInfo.remarkName,
|
||||||
|
memberCount: groupInfo.memberCount,
|
||||||
|
maxMemberCount: groupInfo.maxMember,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user