mirror of
https://github.com/NapNeko/NapCatQQ.git
synced 2024-11-21 09:36:35 +00:00
feat: implement most group actions
This commit is contained in:
parent
e49e921839
commit
4540c77343
165
src/laana/action/group.ts
Normal file
165
src/laana/action/group.ts
Normal file
@ -0,0 +1,165 @@
|
||||
import { GroupMemberRole, NapCatCore, Sex } from '@/core';
|
||||
import { NapCatLaanaAdapter } from '@/laana';
|
||||
import {
|
||||
LaanaUserEntity,
|
||||
LaanaUserEntity_Sex,
|
||||
LaanaUserEntity_GroupRoleData_PermissionLevel as PermLevel,
|
||||
LaanaFile,
|
||||
SetGroupAdminPing_Operation,
|
||||
} from '@laana-proto/def';
|
||||
|
||||
export class LaanaGroupActionImpl {
|
||||
constructor(
|
||||
public core: NapCatCore,
|
||||
public laana: NapCatLaanaAdapter,
|
||||
) {}
|
||||
|
||||
async getGroupMemberUins(groupCode: string) {
|
||||
return Array.from((await this.core.apis.GroupApi.getGroupMembersV2(groupCode)).values())
|
||||
.map(value => value.uin);
|
||||
}
|
||||
|
||||
async getGroupMemberInfo(groupCode: string, 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.GroupApi.getGroupMember(groupCode, uid);
|
||||
if (!userInfo) {
|
||||
throw new Error(`获取 ${uin} 信息失败`);
|
||||
}
|
||||
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: 'groupRoleData',
|
||||
groupRoleData: {
|
||||
groupNick: userInfo.cardName || undefined,
|
||||
permissionLevel: userInfo.role === GroupMemberRole.normal ? PermLevel.NORMAL :
|
||||
userInfo.role === GroupMemberRole.admin ? PermLevel.ADMIN :
|
||||
userInfo.role === GroupMemberRole.owner ? PermLevel.OWNER :
|
||||
PermLevel.FALLBACK,
|
||||
isRobot: userInfo.isRobot,
|
||||
lastSpeakTime: BigInt(userInfo.lastSpeakTime), // TODO: multiple by 1000?
|
||||
shutUpTime: BigInt(userInfo.shutUpTime), // TODO: multiple by 1000?
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Get group info.
|
||||
* @param groupCode Group code.
|
||||
* @param newGroupName New group name.
|
||||
*/
|
||||
async setGroupName(groupCode: string, newGroupName: string) {
|
||||
return await this.core.apis.GroupApi.setGroupName(groupCode, newGroupName);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set group avatar.
|
||||
* @param groupCode Group code.
|
||||
* @param newAvatarFile Laana-styled file.
|
||||
* @returns Cache ID of the new avatar.
|
||||
*/
|
||||
async setGroupAvatar(groupCode: string, newAvatarFile: LaanaFile) {
|
||||
const cacheId = await this.laana.utils.file.resolveCacheIdFromLaanaFile(newAvatarFile);
|
||||
const path = await this.laana.utils.file.toLocalPath(cacheId);
|
||||
await this.core.apis.GroupApi.setGroupAvatar(groupCode, path);
|
||||
return cacheId;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set group admin.
|
||||
* @param groupCode Group code.
|
||||
* @param uin Uin of the member.
|
||||
* @param operation Set or unset.
|
||||
*/
|
||||
async setGroupAdmin(groupCode: string, uin: string, operation: SetGroupAdminPing_Operation) {
|
||||
const uid = await this.core.apis.UserApi.getUidByUinV2(uin);
|
||||
if (!uid) {
|
||||
throw new Error(`获取 ${uin} 对应 ${uid} 失败`);
|
||||
}
|
||||
return await this.core.apis.GroupApi.setMemberRole(
|
||||
groupCode,
|
||||
uid,
|
||||
operation === SetGroupAdminPing_Operation.SET ? GroupMemberRole.admin : GroupMemberRole.normal
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set group member card name.
|
||||
* @param groupCode Group code.
|
||||
* @param uin Uin of the member.
|
||||
* @param newCardName New card name.
|
||||
*/
|
||||
async setGroupMemberCardName(groupCode: string, uin: string, newCardName: string) {
|
||||
const uid = await this.core.apis.UserApi.getUidByUinV2(uin);
|
||||
if (!uid) {
|
||||
throw new Error(`获取 ${uin} 对应 ${uid} 失败`);
|
||||
}
|
||||
return await this.core.apis.GroupApi.setMemberCard(groupCode, uid, newCardName);
|
||||
}
|
||||
|
||||
/**
|
||||
* Shut up a group member.
|
||||
* @param groupCode Group code.
|
||||
* @param uin Uin of the member.
|
||||
* @param duration Duration of the shut-up.
|
||||
*/
|
||||
async setGroupMemberShutUp(groupCode: string, uin: string, duration: number) {
|
||||
const uid = await this.core.apis.UserApi.getUidByUinV2(uin);
|
||||
if (!uid) {
|
||||
throw new Error(`获取 ${uin} 对应 ${uid} 失败`);
|
||||
}
|
||||
return await this.core.apis.GroupApi.banMember(groupCode, [{ uid, timeStamp: duration }]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Lift a group member's shut-up.
|
||||
* @param groupCode Group code.
|
||||
* @param uin Uin of the member.
|
||||
*/
|
||||
async liftGroupMemberShutUp(groupCode: string, uin: string) {
|
||||
const uid = await this.core.apis.UserApi.getUidByUinV2(uin);
|
||||
if (!uid) {
|
||||
throw new Error(`获取 ${uin} 对应 ${uid} 失败`);
|
||||
}
|
||||
return await this.core.apis.GroupApi.banMember(groupCode, [{ uid, timeStamp: 0 }]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set group shut-up all.
|
||||
* @param groupCode Group code.
|
||||
* @param lift Lift or set.
|
||||
*/
|
||||
async setGroupShutUpAll(groupCode: string, lift: boolean) {
|
||||
return await this.core.apis.GroupApi.banGroup(groupCode, !lift);
|
||||
}
|
||||
|
||||
/**
|
||||
* Kick a group member.
|
||||
* @param groupCode Group code.
|
||||
* @param uin Uin of the member.
|
||||
*/
|
||||
async kickGroupMember(groupCode: string, uin: string) {
|
||||
const uid = await this.core.apis.UserApi.getUidByUinV2(uin);
|
||||
if (!uid) {
|
||||
throw new Error(`获取 ${uin} 对应 ${uid} 失败`);
|
||||
}
|
||||
return await this.core.apis.GroupApi.kickMember(groupCode, [uid]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Quit a group.
|
||||
* @param groupCode Group code.
|
||||
*/
|
||||
async quitGroup(groupCode: string) {
|
||||
return await this.core.apis.GroupApi.quitGroup(groupCode);
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user