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!