Skip to content

Commit 7c32d7f

Browse files
committed
feat(group): add updateMemberAddMode endpoint
Expose the WhatsApp protocol's group "member add mode" setting (supported by Baileys via groupMemberAddMode) as a new endpoint, so clients can toggle whether non-admin members are allowed to add participants to a group. POST /group/updateMemberAddMode/{instance}?groupJid=<jid> body: { "mode": "admin_add" | "all_member_add" } - admin_add → only admins can add new members - all_member_add → any member can add new members (WhatsApp default) Mirrors the existing pattern of updateSetting: - DTO : GroupUpdateMemberAddModeDto - Schema: updateMemberAddModeSchema (validates mode enum) - Service: WhatsappBaileysService.updateMemberAddMode - Controller: GroupController.updateMemberAddMode - Route: POST /group/updateMemberAddMode No breaking change. No new dependency.
1 parent cd800f2 commit 7c32d7f

5 files changed

Lines changed: 45 additions & 0 deletions

File tree

src/api/controllers/group.controller.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import {
99
GroupSendInvite,
1010
GroupSubjectDto,
1111
GroupToggleEphemeralDto,
12+
GroupUpdateMemberAddModeDto,
1213
GroupUpdateParticipantDto,
1314
GroupUpdateSettingDto,
1415
} from '@api/dto/group.dto';
@@ -74,6 +75,10 @@ export class GroupController {
7475
return await this.waMonitor.waInstances[instance.instanceName].updateGSetting(update);
7576
}
7677

78+
public async updateMemberAddMode(instance: InstanceDto, update: GroupUpdateMemberAddModeDto) {
79+
return await this.waMonitor.waInstances[instance.instanceName].updateMemberAddMode(update);
80+
}
81+
7782
public async toggleEphemeral(instance: InstanceDto, update: GroupToggleEphemeralDto) {
7883
return await this.waMonitor.waInstances[instance.instanceName].toggleEphemeral(update);
7984
}

src/api/dto/group.dto.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,3 +54,7 @@ export class GroupUpdateSettingDto extends GroupJid {
5454
export class GroupToggleEphemeralDto extends GroupJid {
5555
expiration: 0 | 86400 | 604800 | 7776000;
5656
}
57+
58+
export class GroupUpdateMemberAddModeDto extends GroupJid {
59+
mode: 'admin_add' | 'all_member_add';
60+
}

src/api/integrations/channel/whatsapp/whatsapp.baileys.service.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ import {
2626
GroupSendInvite,
2727
GroupSubjectDto,
2828
GroupToggleEphemeralDto,
29+
GroupUpdateMemberAddModeDto,
2930
GroupUpdateParticipantDto,
3031
GroupUpdateSettingDto,
3132
} from '@api/dto/group.dto';
@@ -4588,6 +4589,15 @@ export class BaileysStartupService extends ChannelStartupService {
45884589
}
45894590
}
45904591

4592+
public async updateMemberAddMode(update: GroupUpdateMemberAddModeDto) {
4593+
try {
4594+
await this.client.groupMemberAddMode(update.groupJid, update.mode);
4595+
return { update: 'success', mode: update.mode };
4596+
} catch (error) {
4597+
throw new BadRequestException('Error updating member add mode', error.toString());
4598+
}
4599+
}
4600+
45914601
public async toggleEphemeral(update: GroupToggleEphemeralDto) {
45924602
try {
45934603
await this.client.groupToggleEphemeral(update.groupJid, update.expiration);

src/api/routes/group.router.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import {
1010
GroupSendInvite,
1111
GroupSubjectDto,
1212
GroupToggleEphemeralDto,
13+
GroupUpdateMemberAddModeDto,
1314
GroupUpdateParticipantDto,
1415
GroupUpdateSettingDto,
1516
} from '@api/dto/group.dto';
@@ -25,6 +26,7 @@ import {
2526
updateGroupDescriptionSchema,
2627
updateGroupPictureSchema,
2728
updateGroupSubjectSchema,
29+
updateMemberAddModeSchema,
2830
updateParticipantsSchema,
2931
updateSettingsSchema,
3032
} from '@validate/validate.schema';
@@ -176,6 +178,16 @@ export class GroupRouter extends RouterBroker {
176178

177179
res.status(HttpStatus.CREATED).json(response);
178180
})
181+
.post(this.routerPath('updateMemberAddMode'), ...guards, async (req, res) => {
182+
const response = await this.groupValidate<GroupUpdateMemberAddModeDto>({
183+
request: req,
184+
schema: updateMemberAddModeSchema,
185+
ClassRef: GroupUpdateMemberAddModeDto,
186+
execute: (instance, data) => groupController.updateMemberAddMode(instance, data),
187+
});
188+
189+
res.status(HttpStatus.CREATED).json(response);
190+
})
179191
.post(this.routerPath('toggleEphemeral'), ...guards, async (req, res) => {
180192
const response = await this.groupValidate<GroupToggleEphemeralDto>({
181193
request: req,

src/validate/group.schema.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -191,3 +191,17 @@ export const updateGroupDescriptionSchema: JSONSchema7 = {
191191
required: ['groupJid', 'description'],
192192
...isNotEmpty('groupJid', 'description'),
193193
};
194+
195+
export const updateMemberAddModeSchema: JSONSchema7 = {
196+
$id: v4(),
197+
type: 'object',
198+
properties: {
199+
groupJid: { type: 'string' },
200+
mode: {
201+
type: 'string',
202+
enum: ['admin_add', 'all_member_add'],
203+
},
204+
},
205+
required: ['groupJid', 'mode'],
206+
...isNotEmpty('groupJid', 'mode'),
207+
};

0 commit comments

Comments
 (0)