diff --git a/src/Socket/messages-recv.ts b/src/Socket/messages-recv.ts index 8032734..ded4eca 100644 --- a/src/Socket/messages-recv.ts +++ b/src/Socket/messages-recv.ts @@ -660,6 +660,13 @@ export const makeMessagesRecvSocket = (config: SocketConfig) => { signalRepository, logger, ) + + if(msg.message?.protocolMessage?.type === proto.Message.ProtocolMessage.Type.SHARE_PHONE_NUMBER) { + if(node.attrs.sender_pn) { + ev.emit('chats.phoneNumberShare', { lid: node.attrs.from, jid: node.attrs.sender_pn }) + } + } + if(shouldIgnoreJid(msg.key.remoteJid!)) { logger.debug({ key: msg.key }, 'ignored message') await sendMessageAck(node) diff --git a/src/Socket/messages-send.ts b/src/Socket/messages-send.ts index 9b32b33..946db84 100644 --- a/src/Socket/messages-send.ts +++ b/src/Socket/messages-send.ts @@ -304,6 +304,8 @@ export const makeMessagesSocket = (config: SocketConfig) => { message: proto.IMessage, { messageId: msgId, participant, additionalAttributes, useUserDevicesCache, cachedGroupMetadata, statusJidList }: MessageRelayOptions ) => { + const meId = authState.creds.me!.id + let shouldIncludeDeviceIdentity = false const { user, server } = jidDecode(jid)! @@ -311,7 +313,6 @@ export const makeMessagesSocket = (config: SocketConfig) => { const isGroup = server === 'g.us' const isStatus = jid === statusJid const isLid = server === 'lid' - const meId = authState.creds.me!.id msgId = msgId || generateMessageID() useUserDevicesCache = useUserDevicesCache !== false diff --git a/src/Types/Events.ts b/src/Types/Events.ts index f37a6d2..289f5be 100644 --- a/src/Types/Events.ts +++ b/src/Types/Events.ts @@ -26,6 +26,7 @@ export type BaileysEventMap = { 'chats.upsert': Chat[] /** update the given chats */ 'chats.update': ChatUpdate[] + 'chats.phoneNumberShare': {lid: string, jid: string} /** delete chats with given ID */ 'chats.delete': string[] /** presence of contact in a chat updated */ @@ -54,6 +55,7 @@ export type BaileysEventMap = { 'blocklist.set': { blocklist: string[] } 'blocklist.update': { blocklist: string[], type: 'add' | 'remove' } + /** Receive an update on a call, including when the call was received, rejected, accepted */ 'call': WACallEvent[] 'labels.edit': Label diff --git a/src/Types/Message.ts b/src/Types/Message.ts index 385ed7c..da8bd4d 100644 --- a/src/Types/Message.ts +++ b/src/Types/Message.ts @@ -96,6 +96,14 @@ export type PollMessageOptions = { messageSecret?: Uint8Array } +type SharePhoneNumber = { + sharePhoneNumber: boolean +} + +type RequestPhoneNumber = { + requestPhoneNumber: boolean +} + export type MediaType = keyof typeof MEDIA_HKDF_KEY_MAPPING export type AnyMediaMessageContent = ( ({ @@ -169,7 +177,7 @@ export type AnyRegularMessageContent = ( businessOwnerJid?: string body?: string footer?: string - } + } | SharePhoneNumber | RequestPhoneNumber ) & ViewOnce export type AnyMessageContent = AnyRegularMessageContent | { diff --git a/src/Utils/messages.ts b/src/Utils/messages.ts index 0ed8224..cfdcd6b 100644 --- a/src/Utils/messages.ts +++ b/src/Utils/messages.ts @@ -449,6 +449,12 @@ export const generateWAMessageContent = async( selectableOptionsCount: message.poll.selectableCount, options: message.poll.values.map(optionName => ({ optionName })), } + } else if('sharePhoneNumber' in message) { + m.protocolMessage = { + type: proto.Message.ProtocolMessage.Type.SHARE_PHONE_NUMBER + } + } else if('requestPhoneNumber' in message) { + m.requestPhoneNumberMessage = {} } else { m = await prepareWAMessageMedia( message,