feat(NOWEB): expose group member-share-history-mode as a settable endpoint (#2283)
This commit is contained in:
1 parent
9c080611b6
commit
cc650fca3b
4 files changed
+61
No files matched your search
@@ -41,6 +41,7 @@ import {
|
|||||||
JoinGroupResponse,
|
JoinGroupResponse,
|
||||||
ParticipantsRequest,
|
ParticipantsRequest,
|
||||||
SettingsMemberAddMode,
|
SettingsMemberAddMode,
|
||||||
|
SettingsMemberShareHistoryMode,
|
||||||
SettingsMembershipApproval,
|
SettingsMembershipApproval,
|
||||||
SettingsSecurityChangeInfo,
|
SettingsSecurityChangeInfo,
|
||||||
SubjectRequest,
|
SubjectRequest,
|
||||||
@@ -346,6 +347,28 @@ export class GroupsController {
|
|||||||
return session.getMemberAddMode(id);
|
return session.getMemberAddMode(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Put(':id/settings/security/member-share-history-mode')
|
||||||
|
@SessionApiParam
|
||||||
|
@GroupIdApiParam
|
||||||
|
@CheckPolicies(CanSession(Action.Send, FromParam('session')))
|
||||||
|
@ApiOperation({
|
||||||
|
summary:
|
||||||
|
'Update settings - members can send message history to new members',
|
||||||
|
description:
|
||||||
|
'Updates the group settings for whether members can share message history with new members, or only admins can.',
|
||||||
|
})
|
||||||
|
@UsePipes(new ValidationPipe({ transform: true, whitelist: true }))
|
||||||
|
setMemberShareHistoryMode(
|
||||||
|
@WorkingSessionParam session: WhatsappSession,
|
||||||
|
@Param('id') id: string,
|
||||||
|
@Body() request: SettingsMemberShareHistoryMode,
|
||||||
|
) {
|
||||||
|
return session.setMemberShareHistoryMode(
|
||||||
|
id,
|
||||||
|
request.membersCanShareHistory,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
@Put(':id/settings/security/membership-approval')
|
@Put(':id/settings/security/membership-approval')
|
||||||
@SessionApiParam
|
@SessionApiParam
|
||||||
@GroupIdApiParam
|
@GroupIdApiParam
|
||||||
|
|||||||
@@ -1025,6 +1025,10 @@ export abstract class WhatsappSession {
|
|||||||
throw new NotImplementedByEngineError();
|
throw new NotImplementedByEngineError();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public setMemberShareHistoryMode(id, value) {
|
||||||
|
throw new NotImplementedByEngineError();
|
||||||
|
}
|
||||||
|
|
||||||
public getMembershipApprovalMode(
|
public getMembershipApprovalMode(
|
||||||
id: string,
|
id: string,
|
||||||
): Promise<SettingsMembershipApproval> {
|
): Promise<SettingsMembershipApproval> {
|
||||||
|
|||||||
@@ -28,6 +28,7 @@ import makeWASocket, {
|
|||||||
import { WACallEvent } from '@adiwajshing/baileys/lib/Types/Call';
|
import { WACallEvent } from '@adiwajshing/baileys/lib/Types/Call';
|
||||||
import { BaileysEventMap } from '@adiwajshing/baileys/lib/Types/Events';
|
import { BaileysEventMap } from '@adiwajshing/baileys/lib/Types/Events';
|
||||||
import { GroupMetadata } from '@adiwajshing/baileys/lib/Types/GroupMetadata';
|
import { GroupMetadata } from '@adiwajshing/baileys/lib/Types/GroupMetadata';
|
||||||
|
import { executeWMexQuery } from '@adiwajshing/baileys/lib/Socket/mex';
|
||||||
import {
|
import {
|
||||||
Label as NOWEBLabel,
|
Label as NOWEBLabel,
|
||||||
LabelActionBody,
|
LabelActionBody,
|
||||||
@@ -168,6 +169,7 @@ import {
|
|||||||
GroupParticipant,
|
GroupParticipant,
|
||||||
ParticipantsRequest,
|
ParticipantsRequest,
|
||||||
SettingsMemberAddMode,
|
SettingsMemberAddMode,
|
||||||
|
SettingsMemberShareHistoryMode,
|
||||||
SettingsMembershipApproval,
|
SettingsMembershipApproval,
|
||||||
SettingsSecurityChangeInfo,
|
SettingsSecurityChangeInfo,
|
||||||
} from '@waha/structures/groups.dto';
|
} from '@waha/structures/groups.dto';
|
||||||
@@ -296,6 +298,14 @@ export interface NowebConfig {
|
|||||||
waVersion: WAVersion;
|
waVersion: WAVersion;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// WhatsApp Web MEX (w:mex) doc/query_id for the group property mutation that sets
|
||||||
|
// "members can send message history to new members". Captured from WhatsApp Web's
|
||||||
|
// WAWebMexUpdateGroupPropertyJobMutation on 2026-09-25 (see whatsapp-rust
|
||||||
|
// wacore/src/iq/mex_operations.rs, mod update_group_property). WhatsApp rotates these
|
||||||
|
// ids when Web is updated -- if this mutation starts failing, re-capture the query_id
|
||||||
|
// from a fresh WhatsApp Web session before assuming the endpoint itself is broken.
|
||||||
|
const MEX_QUERY_ID_UPDATE_GROUP_PROPERTY = '9418211574894172';
|
||||||
|
|
||||||
export class WhatsappSessionNoWebCore extends WhatsappSession {
|
export class WhatsappSessionNoWebCore extends WhatsappSession {
|
||||||
private START_ATTEMPT_DELAY_SECONDS = 2;
|
private START_ATTEMPT_DELAY_SECONDS = 2;
|
||||||
private AUTO_RESTART_AFTER_SECONDS = 28 * 60;
|
private AUTO_RESTART_AFTER_SECONDS = 28 * 60;
|
||||||
@@ -2238,6 +2248,25 @@ export class WhatsappSessionNoWebCore extends WhatsappSession {
|
|||||||
return await this.sock.groupMemberAddMode(id, mode);
|
return await this.sock.groupMemberAddMode(id, mode);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Activity()
|
||||||
|
public async setMemberShareHistoryMode(id, value) {
|
||||||
|
const mode = value ? 'ALL_MEMBER_SHARE' : 'ADMIN_SHARE';
|
||||||
|
const result = await executeWMexQuery<{ state?: string }>(
|
||||||
|
{ group_id: id, update: { member_share_group_history_mode: mode } },
|
||||||
|
MEX_QUERY_ID_UPDATE_GROUP_PROPERTY,
|
||||||
|
'xwa2_group_update_property',
|
||||||
|
this.sock.query,
|
||||||
|
this.sock.generateMessageTag,
|
||||||
|
);
|
||||||
|
if (result?.state !== 'ACTIVE') {
|
||||||
|
throw new Error(
|
||||||
|
`Failed to set member share history mode for group '${id}': ` +
|
||||||
|
`unexpected state '${result?.state}'`,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
public async getMembershipApprovalMode(
|
public async getMembershipApprovalMode(
|
||||||
id: string,
|
id: string,
|
||||||
): Promise<SettingsMembershipApproval> {
|
): Promise<SettingsMembershipApproval> {
|
||||||
|
|||||||
@@ -31,6 +31,11 @@ export class SettingsMemberAddMode {
|
|||||||
membersCanAddNewMember: boolean = true;
|
membersCanAddNewMember: boolean = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export class SettingsMemberShareHistoryMode {
|
||||||
|
@IsBoolean()
|
||||||
|
membersCanShareHistory: boolean = true;
|
||||||
|
}
|
||||||
|
|
||||||
export class SettingsMembershipApproval {
|
export class SettingsMembershipApproval {
|
||||||
@IsBoolean()
|
@IsBoolean()
|
||||||
newMembersApprovalRequired: boolean = false;
|
newMembersApprovalRequired: boolean = false;
|
||||||
|
|||||||
Reference in new issue
Block a user