From 250477497d2eda75b823a4f535e75b0872f4368c Mon Sep 17 00:00:00 2001 From: Matheus Filype <67132916+Santosl2@users.noreply.github.com> Date: Fri, 19 Dec 2025 17:00:48 -0300 Subject: [PATCH] Add Feature LabelMember (Based on #2164) (#2198) * fix: improve message resend logic by adding checks for message IDs * Revert "fix: improve message resend logic by adding checks for message IDs" This reverts commit c03f9d8e6fc6cbfbb9d1f8f67c169700e704213d. * feat: add group member label update functionality and event emission * feat: refactor updateMemberLabel function for improved readability * feat: use optional chaining for label association message in processMessage * feat: add updateMemberLabel to makeMessagesSocket for enhanced functionality * fix: correct log message for group member tag update event Co-authored-by: FgsiDev --- Example/example.ts | 4 ++++ src/Socket/messages-send.ts | 31 +++++++++++++++++++++++++++++++ src/Types/Events.ts | 8 ++++++++ src/Utils/process-message.ts | 13 +++++++++++++ 4 files changed, 56 insertions(+) diff --git a/Example/example.ts b/Example/example.ts index 2c9e09bb..45a40672 100644 --- a/Example/example.ts +++ b/Example/example.ts @@ -223,6 +223,10 @@ const startSock = async() => { if(events['chats.delete']) { console.log('chats deleted ', events['chats.delete']) } + + if(events['group.member-tag.update']) { + console.log('group member tag update', JSON.stringify(events['group.member-tag.update'], undefined, 2)) + } } ) diff --git a/src/Socket/messages-send.ts b/src/Socket/messages-send.ts index 9762c268..61fb4860 100644 --- a/src/Socket/messages-send.ts +++ b/src/Socket/messages-send.ts @@ -383,6 +383,36 @@ export const makeMessagesSocket = (config: SocketConfig) => { return deviceResults } + /** + * Update Member Label + */ + const updateMemberLabel = (jid: string, memberLabel: string) => { + return relayMessage( + jid, + { + protocolMessage: { + type: proto.Message.ProtocolMessage.Type.GROUP_MEMBER_LABEL_CHANGE, + memberLabel: { + label: memberLabel?.slice(0, 30), + labelTimestamp: unixTimestampSeconds() + } + } + }, + { + additionalNodes: [ + { + tag: 'meta', + attrs: { + tag_reason: 'user_update', + appdata: 'member_tag' + }, + content: undefined + } + ] + } + ) + } + const assertSessions = async (jids: string[], force?: boolean) => { let didFetchNewSession = false const uniqueJids = [...new Set(jids)] // Deduplicate JIDs @@ -1069,6 +1099,7 @@ export const makeMessagesSocket = (config: SocketConfig) => { createParticipantNodes, getUSyncDevices, messageRetryManager, + updateMemberLabel, updateMediaMessage: async (message: WAMessage) => { const content = assertMediaContent(message.message) const mediaKey = content.mediaKey! diff --git a/src/Types/Events.ts b/src/Types/Events.ts index 1e5ef381..e4a73f2c 100644 --- a/src/Types/Events.ts +++ b/src/Types/Events.ts @@ -78,6 +78,14 @@ export type BaileysEventMap = { action: RequestJoinAction method: RequestJoinMethod } + /* update the labels assigned to a group participant */ + 'group.member-tag.update': { + groupId: string + participant: string + participantAlt?: string + label: string + messageTimestamp?: number + } 'blocklist.set': { blocklist: string[] } 'blocklist.update': { blocklist: string[]; type: 'add' | 'remove' } diff --git a/src/Utils/process-message.ts b/src/Utils/process-message.ts index e6988480..8cad9245 100644 --- a/src/Utils/process-message.ts +++ b/src/Utils/process-message.ts @@ -378,6 +378,19 @@ const processMessage = async ( } } ]) + break + case proto.Message.ProtocolMessage.Type.GROUP_MEMBER_LABEL_CHANGE: + const labelAssociationMsg = protocolMsg.memberLabel + if (labelAssociationMsg?.label) { + ev.emit('group.member-tag.update', { + groupId: chat.id!, + label: labelAssociationMsg.label, + participant: message.key.participant!, + participantAlt: message.key.participantAlt!, + messageTimestamp: Number(message.messageTimestamp) + }) + } + break case proto.Message.ProtocolMessage.Type.LID_MIGRATION_MAPPING_SYNC: const encodedPayload = protocolMsg.lidMigrationMappingSyncMessage?.encodedMappingPayload!