[core] Exclude groups participants

fix #242
This commit is contained in:
devlikepro committed 2025-02-27 14:34:20 +07:00
1 parent 0dd001e95a
commit f621d84b83
6 files changed
+53 -3

No files matched your search

+7 -2
View File
@@ -30,6 +30,8 @@ import { parseGroupInviteLink, WhatsappSession } from '../core/abc/session.abc';
import {
CreateGroupRequest,
DescriptionRequest,
GroupField,
GroupsListFields,
GroupsPaginationParams,
JoinGroupRequest,
JoinGroupResponse,
@@ -82,11 +84,14 @@ export class GroupsController {
@SessionApiParam
@ApiOperation({ summary: 'Get all groups.' })
@UsePipes(new ValidationPipe({ transform: true, whitelist: true }))
getGroups(
async getGroups(
@WorkingSessionParam session: WhatsappSession,
@Query() pagination: GroupsPaginationParams,
@Query() fields: GroupsListFields,
) {
return session.getGroups(pagination);
let groups: any = await session.getGroups(pagination);
groups = session.filterGroupsFields(groups, fields);
return groups;
}
@Post('refresh')
+15 -1
View File
@@ -71,6 +71,8 @@ import {
} from '../../structures/enums.dto';
import {
CreateGroupRequest,
GroupField,
GroupsListFields,
GroupsPaginationParams,
ParticipantsRequest,
SettingsSecurityChangeInfo,
@@ -621,10 +623,22 @@ export abstract class WhatsappSession {
throw new NotImplementedByEngineError();
}
public getGroups(pagination: PaginationParams) {
public getGroups(pagination: PaginationParams): Promise<any> {
throw new NotImplementedByEngineError();
}
public filterGroupsFields(data: any, fields: GroupsListFields) {
const groups: any[] = Array.isArray(data) ? data : Object.values(data);
if (fields.exclude?.includes(GroupField.PARTICIPANTS)) {
groups.forEach((group) => this.removeGroupsFieldParticipant(group));
}
return data;
}
protected removeGroupsFieldParticipant(group: any) {
return;
}
public refreshGroups(): Promise<boolean> {
throw new NotImplementedByEngineError();
}
@@ -688,6 +688,10 @@ export class WhatsappSessionGoWSCore extends WhatsappSession {
return paginator.apply(data);
}
protected removeGroupsFieldParticipant(group: any) {
delete group.Participants;
}
public async refreshGroups(): Promise<boolean> {
const req = this.session;
await promisify(this.client.FetchGroups)(req);
@@ -1191,6 +1191,10 @@ export class WhatsappSessionNoWebCore extends WhatsappSession {
return lodash.keyBy(groups, 'id');
}
protected removeGroupsFieldParticipant(group: any) {
delete group.participants;
}
public async refreshGroups(): Promise<boolean> {
this.store.resetGroupsCache();
await this.store.getGroups({});
@@ -894,6 +894,13 @@ export class WhatsappSessionWebJSCore extends WhatsappSession {
return paginator.apply(groups);
}
protected removeGroupsFieldParticipant(group: any) {
delete group.groupMetadata?.participants;
delete group.groupMetadata?.pendingParticipants;
delete group.groupMetadata?.pastParticipants;
delete group.groupMetadata?.membershipApprovalRequests;
}
public async refreshGroups(): Promise<boolean> {
return true;
}
+16
View File
@@ -74,6 +74,22 @@ export class JoinGroupResponse {
id: string;
}
export enum GroupField {
NONE = '',
PARTICIPANTS = 'participants',
}
export class GroupsListFields {
@IsOptional()
@ApiProperty({
description: 'Exclude fields',
enum: GroupField,
isArray: true,
})
@IsEnum(GroupField, { each: true })
exclude: string[];
}
export enum GroupSortField {
ID = 'id',
SUBJECT = 'subject',