diff --git a/app/components/messages/content/MessageContact.vue b/app/components/messages/content/MessageContact.vue index f42f337..0f1492a 100644 --- a/app/components/messages/content/MessageContact.vue +++ b/app/components/messages/content/MessageContact.vue @@ -60,20 +60,20 @@ - - - + - - + diff --git a/docs/baileys-media-messaging.md b/docs/baileys-media-messaging.md new file mode 100644 index 0000000..1fec1fe --- /dev/null +++ b/docs/baileys-media-messaging.md @@ -0,0 +1,1117 @@ +# Baileys Media Messaging API Documentation + +> Documentación auto-generada para el desarrollo de mensajes multimedia en WhatsApp Nucleo +> Fuente: https://baileys.wiki +> Generado: 2025-12-03T17:18:54.553Z + +Esta documentación contiene la API de Baileys relevante para enviar diferentes tipos de mensajes multimedia: +- Imágenes y Videos +- Documentos +- Audio y Notas de Voz +- Contactos +- Ubicación +- Encuestas (Polls) +- Eventos + +## Tabla de Contenidos + +### Type Aliases +- [AnyMediaMessageContent](#typeAliase-anymediamessagecontent) +- [AnyMessageContent](#typeAliase-anymessagecontent) +- [AnyRegularMessageContent](#typeAliase-anyregularmessagecontent) +- [WAContactMessage](#typeAliase-wacontactmessage) +- [WAContactsArrayMessage](#typeAliase-wacontactsarraymessage) +- [WALocationMessage](#typeAliase-walocationmessage) +- [WAGenericMediaMessage](#typeAliase-wagenericmediamessage) +- [PollMessageOptions](#typeAliase-pollmessageoptions) +- [EventMessageOptions](#typeAliase-eventmessageoptions) +- [MediaType](#typeAliase-mediatype) +- [MediaGenerationOptions](#typeAliase-mediagenerationoptions) +- [MiscMessageGenerationOptions](#typeAliase-miscmessagegenerationoptions) +- [MessageGenerationOptions](#typeAliase-messagegenerationoptions) +- [MessageContentGenerationOptions](#typeAliase-messagecontentgenerationoptions) +- [WAMediaUpload](#typeAliase-wamediaupload) +- [DownloadableMessage](#typeAliase-downloadablemessage) +- [WAContextInfo](#typeAliase-wacontextinfo) +- [MessageWithContextInfo](#typeAliase-messagewithcontextinfo) + +### Funciones +- [prepareWAMessageMedia](#function-preparewamessagemedia) +- [generateWAMessage](#function-generatewamessage) +- [generateWAMessageContent](#function-generatewamessagecontent) +- [generateWAMessageFromContent](#function-generatewamessagefromcontent) +- [getContentType](#function-getcontenttype) +- [extensionForMediaMessage](#function-extensionformediamessage) +- [downloadMediaMessage](#function-downloadmediamessage) +- [downloadContentFromMessage](#function-downloadcontentfrommessage) +- [encryptedStream](#function-encryptedstream) +- [getMediaKeys](#function-getmediakeys) + +### Variables +- [MEDIA_KEYS](#variable-media_keys) +- [MEDIA_PATH_MAP](#variable-media_path_map) +- [MEDIA_HKDF_KEY_MAPPING](#variable-media_hkdf_key_mapping) + +### Interfaces +- [WAUrlInfo](#interface-waurlinfo) + + +--- + +# Type Aliases + +--- + +## type Aliase: AnyMediaMessageContent + +**Fuente:** https://baileys.wiki/docs/api/type-aliases/AnyMediaMessageContent + +On this page + +**AnyMediaMessageContent**: `object` & `Mentionable` & `Contextable` & `WithDimensions` | `object` & `Mentionable` & `Contextable` & `WithDimensions` | { `audio`: [`WAMediaUpload`](/docs/api/type-aliases/WAMediaUpload); `ptt`: `boolean`; `seconds`: `number`; } | `object` & `WithDimensions` | `object` & `Contextable` & `object` & `Editable` + +Defined in: [src/Types/Message.ts:163](https://github.com/WhiskeySockets/Baileys/blob/cb8b3717aaede47460ba700651ee936f268c0ce4/src/Types/Message.ts#L163) + +## Type declaration[​](#type-declaration) + +### mimetype?[​](#mimetype) + +`optional` **mimetype**: `string` + +--- + +## type Aliase: AnyMessageContent + +**Fuente:** https://baileys.wiki/docs/api/type-aliases/AnyMessageContent + +On this page + +**AnyMessageContent**: [`AnyRegularMessageContent`](/docs/api/type-aliases/AnyRegularMessageContent) | { `force`: `boolean`; `forward`: [`WAMessage`](/docs/api/type-aliases/WAMessage); } | { `delete`: [`WAMessageKey`](/docs/api/type-aliases/WAMessageKey); } | { `disappearingMessagesInChat`: `boolean` | `number`; } | { `limitSharing`: `boolean`; } + +Defined in: [src/Types/Message.ts:271](https://github.com/WhiskeySockets/Baileys/blob/cb8b3717aaede47460ba700651ee936f268c0ce4/src/Types/Message.ts#L271) + +## Type declaration[​](#type-declaration) + +[`AnyRegularMessageContent`](/docs/api/type-aliases/AnyRegularMessageContent) + +{ `force`: `boolean`; `forward`: [`WAMessage`](/docs/api/type-aliases/WAMessage); } + +### force?[​](#force) + +`optional` **force**: `boolean` + +### forward[​](#forward) + +**forward**: [`WAMessage`](/docs/api/type-aliases/WAMessage) + +{ `delete`: [`WAMessageKey`](/docs/api/type-aliases/WAMessageKey); } + +### delete[​](#delete) + +**delete**: [`WAMessageKey`](/docs/api/type-aliases/WAMessageKey) + +Delete your message or anyone's message in a group (admin required) + +{ `disappearingMessagesInChat`: `boolean` | `number`; } + +### disappearingMessagesInChat[​](#disappearingmessagesinchat) + +**disappearingMessagesInChat**: `boolean` | `number` + +{ `limitSharing`: `boolean`; } + +### limitSharing[​](#limitsharing) + +**limitSharing**: `boolean` + +--- + +## type Aliase: AnyRegularMessageContent + +**Fuente:** https://baileys.wiki/docs/api/type-aliases/AnyRegularMessageContent + +**AnyRegularMessageContent**: `object` & `Mentionable` & `Contextable` & `Editable` | [`AnyMediaMessageContent`](/docs/api/type-aliases/AnyMediaMessageContent) | { `event`: [`EventMessageOptions`](/docs/api/type-aliases/EventMessageOptions); } | `object` & `Mentionable` & `Contextable` & `Editable` | { `contacts`: { `contacts`: [`IContactMessage`](/docs/api/namespaces/proto/namespaces/Message/interfaces/IContactMessage)[]; `displayName`: `string`; }; } | { `location`: [`WALocationMessage`](/docs/api/type-aliases/WALocationMessage); } | { `react`: [`IReactionMessage`](/docs/api/namespaces/proto/namespaces/Message/interfaces/IReactionMessage); } | { `buttonReply`: [`ButtonReplyInfo`](/docs/api/type-aliases/ButtonReplyInfo); `type`: `"template"` | `"plain"`; } | { `groupInvite`: [`GroupInviteInfo`](/docs/api/type-aliases/GroupInviteInfo); } | { `listReply`: `Omit`<[`IListResponseMessage`](/docs/api/namespaces/proto/namespaces/Message/interfaces/IListResponseMessage), `"contextInfo"`>; } | { `pin`: [`WAMessageKey`](/docs/api/type-aliases/WAMessageKey); `time`: `86400` | `604800` | `2592000`; `type`: [`Type`](/docs/api/namespaces/proto/namespaces/PinInChat/enumerations/Type); } | { `body`: `string`; `businessOwnerJid`: `string`; `footer`: `string`; `product`: [`WASendableProduct`](/docs/api/type-aliases/WASendableProduct); } | `SharePhoneNumber` | `RequestPhoneNumber` & `ViewOnce` + +Defined in: [src/Types/Message.ts:218](https://github.com/WhiskeySockets/Baileys/blob/cb8b3717aaede47460ba700651ee936f268c0ce4/src/Types/Message.ts#L218) + +--- + +## type Aliase: WAContactMessage + +**Fuente:** https://baileys.wiki/docs/api/type-aliases/WAContactMessage + +**WAContactMessage**: [`IContactMessage`](/docs/api/namespaces/proto/namespaces/Message/interfaces/IContactMessage) + +Defined in: [src/Types/Message.ts:18](https://github.com/WhiskeySockets/Baileys/blob/cb8b3717aaede47460ba700651ee936f268c0ce4/src/Types/Message.ts#L18) + +--- + +## type Aliase: WAContactsArrayMessage + +**Fuente:** https://baileys.wiki/docs/api/type-aliases/WAContactsArrayMessage + +**WAContactsArrayMessage**: [`IContactsArrayMessage`](/docs/api/namespaces/proto/namespaces/Message/interfaces/IContactsArrayMessage) + +Defined in: [src/Types/Message.ts:19](https://github.com/WhiskeySockets/Baileys/blob/cb8b3717aaede47460ba700651ee936f268c0ce4/src/Types/Message.ts#L19) + +--- + +## type Aliase: WALocationMessage + +**Fuente:** https://baileys.wiki/docs/api/type-aliases/WALocationMessage + +**WALocationMessage**: [`ILocationMessage`](/docs/api/namespaces/proto/namespaces/Message/interfaces/ILocationMessage) + +Defined in: [src/Types/Message.ts:29](https://github.com/WhiskeySockets/Baileys/blob/cb8b3717aaede47460ba700651ee936f268c0ce4/src/Types/Message.ts#L29) + +--- + +## type Aliase: WAGenericMediaMessage + +**Fuente:** https://baileys.wiki/docs/api/type-aliases/WAGenericMediaMessage + +**WAGenericMediaMessage**: [`IVideoMessage`](/docs/api/namespaces/proto/namespaces/Message/interfaces/IVideoMessage) | [`IImageMessage`](/docs/api/namespaces/proto/namespaces/Message/interfaces/IImageMessage) | [`IAudioMessage`](/docs/api/namespaces/proto/namespaces/Message/interfaces/IAudioMessage) | [`IDocumentMessage`](/docs/api/namespaces/proto/namespaces/Message/interfaces/IDocumentMessage) | [`IStickerMessage`](/docs/api/namespaces/proto/namespaces/Message/interfaces/IStickerMessage) + +Defined in: [src/Types/Message.ts:30](https://github.com/WhiskeySockets/Baileys/blob/cb8b3717aaede47460ba700651ee936f268c0ce4/src/Types/Message.ts#L30) + +--- + +## type Aliase: PollMessageOptions + +**Fuente:** https://baileys.wiki/docs/api/type-aliases/PollMessageOptions + +On this page + +**PollMessageOptions**: `object` + +Defined in: [src/Types/Message.ts:133](https://github.com/WhiskeySockets/Baileys/blob/cb8b3717aaede47460ba700651ee936f268c0ce4/src/Types/Message.ts#L133) + +## Type declaration[​](#type-declaration) + +### messageSecret?[​](#messagesecret) + +`optional` **messageSecret**: `Uint8Array` + +32 byte message secret to encrypt poll selections + +### name[​](#name) + +**name**: `string` + +### selectableCount?[​](#selectablecount) + +`optional` **selectableCount**: `number` + +### toAnnouncementGroup?[​](#toannouncementgroup) + +`optional` **toAnnouncementGroup**: `boolean` + +### values[​](#values) + +**values**: `string`[] + +--- + +## type Aliase: EventMessageOptions + +**Fuente:** https://baileys.wiki/docs/api/type-aliases/EventMessageOptions + +On this page + +**EventMessageOptions**: `object` + +Defined in: [src/Types/Message.ts:142](https://github.com/WhiskeySockets/Baileys/blob/cb8b3717aaede47460ba700651ee936f268c0ce4/src/Types/Message.ts#L142) + +## Type declaration[​](#type-declaration) + +### call?[​](#call) + +`optional` **call**: `"audio"` | `"video"` + +### description?[​](#description) + +`optional` **description**: `string` + +### endDate?[​](#enddate) + +`optional` **endDate**: `Date` + +### extraGuestsAllowed?[​](#extraguestsallowed) + +`optional` **extraGuestsAllowed**: `boolean` + +### isCancelled?[​](#iscancelled) + +`optional` **isCancelled**: `boolean` + +### isScheduleCall?[​](#isschedulecall) + +`optional` **isScheduleCall**: `boolean` + +### location?[​](#location) + +`optional` **location**: [`WALocationMessage`](/docs/api/type-aliases/WALocationMessage) + +### messageSecret?[​](#messagesecret) + +`optional` **messageSecret**: `Uint8Array`<`ArrayBufferLike`> + +### name[​](#name) + +**name**: `string` + +### startDate[​](#startdate) + +**startDate**: `Date` + +--- + +## type Aliase: MediaType + +**Fuente:** https://baileys.wiki/docs/api/type-aliases/MediaType + +**MediaType**: keyof *typeof* [`MEDIA_HKDF_KEY_MAPPING`](/docs/api/variables/MEDIA_HKDF_KEY_MAPPING) + +Defined in: [src/Defaults/index.ts:117](https://github.com/WhiskeySockets/Baileys/blob/cb8b3717aaede47460ba700651ee936f268c0ce4/src/Defaults/index.ts#L117) + +--- + +## type Aliase: MediaGenerationOptions + +**Fuente:** https://baileys.wiki/docs/api/type-aliases/MediaGenerationOptions + +On this page + +**MediaGenerationOptions**: `object` + +Defined in: [src/Types/Message.ts:336](https://github.com/WhiskeySockets/Baileys/blob/cb8b3717aaede47460ba700651ee936f268c0ce4/src/Types/Message.ts#L336) + +## Type declaration[​](#type-declaration) + +### backgroundColor?[​](#backgroundcolor) + +`optional` **backgroundColor**: `string` + +### font?[​](#font) + +`optional` **font**: `number` + +### logger?[​](#logger) + +`optional` **logger**: `ILogger` + +### mediaCache?[​](#mediacache) + +`optional` **mediaCache**: [`CacheStore`](/docs/api/type-aliases/CacheStore) + +cache media so it does not have to be uploaded again + +### mediaTypeOverride?[​](#mediatypeoverride) + +`optional` **mediaTypeOverride**: [`MediaType`](/docs/api/type-aliases/MediaType) + +### mediaUploadTimeoutMs?[​](#mediauploadtimeoutms) + +`optional` **mediaUploadTimeoutMs**: `number` + +### options?[​](#options) + +`optional` **options**: `RequestInit` + +### upload[​](#upload) + +**upload**: [`WAMediaUploadFunction`](/docs/api/type-aliases/WAMediaUploadFunction) + +--- + +## type Aliase: MiscMessageGenerationOptions + +**Fuente:** https://baileys.wiki/docs/api/type-aliases/MiscMessageGenerationOptions + +On this page + +**MiscMessageGenerationOptions**: `MinimalRelayOptions` & `object` + +Defined in: [src/Types/Message.ts:309](https://github.com/WhiskeySockets/Baileys/blob/cb8b3717aaede47460ba700651ee936f268c0ce4/src/Types/Message.ts#L309) + +## Type declaration[​](#type-declaration) + +### backgroundColor?[​](#backgroundcolor) + +`optional` **backgroundColor**: `string` + +backgroundcolor for status + +### broadcast?[​](#broadcast) + +`optional` **broadcast**: `boolean` + +if it is broadcast + +### ephemeralExpiration?[​](#ephemeralexpiration) + +`optional` **ephemeralExpiration**: `number` | `string` + +disappearing messages settings + +### font?[​](#font) + +`optional` **font**: `number` + +font type for status + +### mediaUploadTimeoutMs?[​](#mediauploadtimeoutms) + +`optional` **mediaUploadTimeoutMs**: `number` + +timeout for media upload to WA server + +### quoted?[​](#quoted) + +`optional` **quoted**: [`WAMessage`](/docs/api/type-aliases/WAMessage) + +the message you want to quote + +### statusJidList?[​](#statusjidlist) + +`optional` **statusJidList**: `string`[] + +jid list of participants for status@broadcast + +### timestamp?[​](#timestamp) + +`optional` **timestamp**: `Date` + +optional, if you want to manually set the timestamp of the message + +--- + +## type Aliase: MessageGenerationOptions + +**Fuente:** https://baileys.wiki/docs/api/type-aliases/MessageGenerationOptions + +**MessageGenerationOptions**: [`MessageContentGenerationOptions`](/docs/api/type-aliases/MessageContentGenerationOptions) & [`MessageGenerationOptionsFromContent`](/docs/api/type-aliases/MessageGenerationOptionsFromContent) + +Defined in: [src/Types/Message.ts:357](https://github.com/WhiskeySockets/Baileys/blob/cb8b3717aaede47460ba700651ee936f268c0ce4/src/Types/Message.ts#L357) + +--- + +## type Aliase: MessageContentGenerationOptions + +**Fuente:** https://baileys.wiki/docs/api/type-aliases/MessageContentGenerationOptions + +On this page + +**MessageContentGenerationOptions**: [`MediaGenerationOptions`](/docs/api/type-aliases/MediaGenerationOptions) & `object` + +Defined in: [src/Types/Message.ts:351](https://github.com/WhiskeySockets/Baileys/blob/cb8b3717aaede47460ba700651ee936f268c0ce4/src/Types/Message.ts#L351) + +## Type declaration[​](#type-declaration) + +### getCallLink()?[​](#getcalllink) + +`optional` **getCallLink**: (`type`, `event`?) => `Promise`<`string` | `undefined`> + +#### Parameters[​](#parameters) + +type[​](#type) + +`"audio"` | `"video"` + +event?[​](#event) +startTime[​](#starttime) + +`number` + +#### Returns[​](#returns) + +`Promise`<`string` | `undefined`> + +### getProfilePicUrl()?[​](#getprofilepicurl) + +`optional` **getProfilePicUrl**: (`jid`, `type`) => `Promise`<`string` | `undefined`> + +#### Parameters[​](#parameters-1) + +jid[​](#jid) + +`string` + +type[​](#type-1) + +`"image"` | `"preview"` + +#### Returns[​](#returns-1) + +`Promise`<`string` | `undefined`> + +### getUrlInfo()?[​](#geturlinfo) + +`optional` **getUrlInfo**: (`text`) => `Promise`<[`WAUrlInfo`](/docs/api/interfaces/WAUrlInfo) | `undefined`> + +#### Parameters[​](#parameters-2) + +text[​](#text) + +`string` + +#### Returns[​](#returns-2) + +`Promise`<[`WAUrlInfo`](/docs/api/interfaces/WAUrlInfo) | `undefined`> + +### jid?[​](#jid-1) + +`optional` **jid**: `string` + +--- + +## type Aliase: WAMediaUpload + +**Fuente:** https://baileys.wiki/docs/api/type-aliases/WAMediaUpload + +**WAMediaUpload**: `Buffer` | [`WAMediaPayloadStream`](/docs/api/type-aliases/WAMediaPayloadStream) | [`WAMediaPayloadURL`](/docs/api/type-aliases/WAMediaPayloadURL) + +Defined in: [src/Types/Message.ts:41](https://github.com/WhiskeySockets/Baileys/blob/cb8b3717aaede47460ba700651ee936f268c0ce4/src/Types/Message.ts#L41) + +--- + +## type Aliase: DownloadableMessage + +**Fuente:** https://baileys.wiki/docs/api/type-aliases/DownloadableMessage + +On this page + +**DownloadableMessage**: `object` + +Defined in: [src/Types/Message.ts:83](https://github.com/WhiskeySockets/Baileys/blob/cb8b3717aaede47460ba700651ee936f268c0ce4/src/Types/Message.ts#L83) + +## Type declaration[​](#type-declaration) + +### directPath?[​](#directpath) + +`optional` **directPath**: `string` | `null` + +### mediaKey?[​](#mediakey) + +`optional` **mediaKey**: `Uint8Array` | `null` + +### url?[​](#url) + +`optional` **url**: `string` | `null` + +--- + +## type Aliase: WAContextInfo + +**Fuente:** https://baileys.wiki/docs/api/type-aliases/WAContextInfo + +**WAContextInfo**: [`IContextInfo`](/docs/api/namespaces/proto/interfaces/IContextInfo) + +Defined in: [src/Types/Message.ts:28](https://github.com/WhiskeySockets/Baileys/blob/cb8b3717aaede47460ba700651ee936f268c0ce4/src/Types/Message.ts#L28) + +--- + +## type Aliase: MessageWithContextInfo + +**Fuente:** https://baileys.wiki/docs/api/type-aliases/MessageWithContextInfo + +**MessageWithContextInfo**: `"imageMessage"` | `"contactMessage"` | `"locationMessage"` | `"extendedTextMessage"` | `"documentMessage"` | `"audioMessage"` | `"videoMessage"` | `"call"` | `"contactsArrayMessage"` | `"liveLocationMessage"` | `"templateMessage"` | `"stickerMessage"` | `"groupInviteMessage"` | `"templateButtonReplyMessage"` | `"productMessage"` | `"listMessage"` | `"orderMessage"` | `"listResponseMessage"` | `"buttonsMessage"` | `"buttonsResponseMessage"` | `"interactiveMessage"` | `"interactiveResponseMessage"` | `"pollCreationMessage"` | `"requestPhoneNumberMessage"` | `"messageHistoryBundle"` | `"eventMessage"` | `"newsletterAdminInviteMessage"` | `"albumMessage"` | `"stickerPackMessage"` | `"pollResultSnapshotMessage"` | `"messageHistoryNotice"` + +Defined in: [src/Types/Message.ts:50](https://github.com/WhiskeySockets/Baileys/blob/cb8b3717aaede47460ba700651ee936f268c0ce4/src/Types/Message.ts#L50) + + +--- + +# Funciones + +--- + +## function: prepareWAMessageMedia + +**Fuente:** https://baileys.wiki/docs/api/functions/prepareWAMessageMedia + +On this page + +**prepareWAMessageMedia**(`message`, `options`): `Promise`<[`Message`](/docs/api/namespaces/proto/classes/Message)> + +Defined in: [src/Utils/messages.ts:116](https://github.com/WhiskeySockets/Baileys/blob/cb8b3717aaede47460ba700651ee936f268c0ce4/src/Utils/messages.ts#L116) + +## Parameters[​](#parameters) + +### message[​](#message) + +[`AnyMediaMessageContent`](/docs/api/type-aliases/AnyMediaMessageContent) + +### options[​](#options) + +[`MessageContentGenerationOptions`](/docs/api/type-aliases/MessageContentGenerationOptions) + +## Returns[​](#returns) + +`Promise`<[`Message`](/docs/api/namespaces/proto/classes/Message)> + +--- + +## function: generateWAMessage + +**Fuente:** https://baileys.wiki/docs/api/functions/generateWAMessage + +On this page + +**generateWAMessage**(`jid`, `content`, `options`): `Promise`<[`WAMessage`](/docs/api/type-aliases/WAMessage)> + +Defined in: [src/Utils/messages.ts:707](https://github.com/WhiskeySockets/Baileys/blob/cb8b3717aaede47460ba700651ee936f268c0ce4/src/Utils/messages.ts#L707) + +## Parameters[​](#parameters) + +### jid[​](#jid) + +`string` + +### content[​](#content) + +[`AnyMessageContent`](/docs/api/type-aliases/AnyMessageContent) + +### options[​](#options) + +[`MessageGenerationOptions`](/docs/api/type-aliases/MessageGenerationOptions) + +## Returns[​](#returns) + +`Promise`<[`WAMessage`](/docs/api/type-aliases/WAMessage)> + +--- + +## function: generateWAMessageContent + +**Fuente:** https://baileys.wiki/docs/api/functions/generateWAMessageContent + +On this page + +**generateWAMessageContent**(`message`, `options`): `Promise`<[`Message`](/docs/api/namespaces/proto/classes/Message)> + +Defined in: [src/Utils/messages.ts:369](https://github.com/WhiskeySockets/Baileys/blob/cb8b3717aaede47460ba700651ee936f268c0ce4/src/Utils/messages.ts#L369) + +## Parameters[​](#parameters) + +### message[​](#message) + +[`AnyMessageContent`](/docs/api/type-aliases/AnyMessageContent) + +### options[​](#options) + +[`MessageContentGenerationOptions`](/docs/api/type-aliases/MessageContentGenerationOptions) + +## Returns[​](#returns) + +`Promise`<[`Message`](/docs/api/namespaces/proto/classes/Message)> + +--- + +## function: generateWAMessageFromContent + +**Fuente:** https://baileys.wiki/docs/api/functions/generateWAMessageFromContent + +On this page + +**generateWAMessageFromContent**(`jid`, `message`, `options`): [`WAMessage`](/docs/api/type-aliases/WAMessage) + +Defined in: [src/Utils/messages.ts:623](https://github.com/WhiskeySockets/Baileys/blob/cb8b3717aaede47460ba700651ee936f268c0ce4/src/Utils/messages.ts#L623) + +## Parameters[​](#parameters) + +### jid[​](#jid) + +`string` + +### message[​](#message) + +[`IMessage`](/docs/api/namespaces/proto/interfaces/IMessage) + +### options[​](#options) + +[`MessageGenerationOptionsFromContent`](/docs/api/type-aliases/MessageGenerationOptionsFromContent) + +## Returns[​](#returns) + +[`WAMessage`](/docs/api/type-aliases/WAMessage) + +--- + +## function: getContentType + +**Fuente:** https://baileys.wiki/docs/api/functions/getContentType + +On this page + +**getContentType**(`content`): `undefined` | keyof IMessage + +Defined in: [src/Utils/messages.ts:715](https://github.com/WhiskeySockets/Baileys/blob/cb8b3717aaede47460ba700651ee936f268c0ce4/src/Utils/messages.ts#L715) + +Get the key to access the true type of content + +## Parameters[​](#parameters) + +### content[​](#content) + +`undefined` | [`IMessage`](/docs/api/namespaces/proto/interfaces/IMessage) + +## Returns[​](#returns) + +`undefined` | keyof IMessage + +--- + +## function: extensionForMediaMessage + +**Fuente:** https://baileys.wiki/docs/api/functions/extensionForMediaMessage + +On this page + +**extensionForMediaMessage**(`message`): `string` + +Defined in: [src/Utils/messages-media.ts:628](https://github.com/WhiskeySockets/Baileys/blob/cb8b3717aaede47460ba700651ee936f268c0ce4/src/Utils/messages-media.ts#L628) + +## Parameters[​](#parameters) + +### message[​](#message) + +[`IMessage`](/docs/api/namespaces/proto/interfaces/IMessage) + +## Returns[​](#returns) + +`string` + +--- + +## function: downloadMediaMessage + +**Fuente:** https://baileys.wiki/docs/api/functions/downloadMediaMessage + +On this page + +**downloadMediaMessage**<`Type`>(`message`, `type`, `options`, `ctx`?): `Promise`<`Type` *extends* `"buffer"` ? `Buffer`<`ArrayBufferLike`> : `Transform`> + +Defined in: [src/Utils/messages.ts:985](https://github.com/WhiskeySockets/Baileys/blob/cb8b3717aaede47460ba700651ee936f268c0ce4/src/Utils/messages.ts#L985) + +Downloads the given message. Throws an error if it's not a media message + +## Type Parameters[​](#type-parameters) + +• **Type** *extends* `"buffer"` | `"stream"` + +## Parameters[​](#parameters) + +### message[​](#message) + +[`WAMessage`](/docs/api/type-aliases/WAMessage) + +### type[​](#type) + +`Type` + +### options[​](#options) + +[`MediaDownloadOptions`](/docs/api/type-aliases/MediaDownloadOptions) + +### ctx?[​](#ctx) + +`DownloadMediaMessageContext` + +## Returns[​](#returns) + +`Promise`<`Type` *extends* `"buffer"` ? `Buffer`<`ArrayBufferLike`> : `Transform`> + +--- + +## function: downloadContentFromMessage + +**Fuente:** https://baileys.wiki/docs/api/functions/downloadContentFromMessage + +On this page + +**downloadContentFromMessage**(`__namedParameters`, `type`, `opts`): `Promise`<`Transform`> + +Defined in: [src/Utils/messages-media.ts:506](https://github.com/WhiskeySockets/Baileys/blob/cb8b3717aaede47460ba700651ee936f268c0ce4/src/Utils/messages-media.ts#L506) + +## Parameters[​](#parameters) + +### __namedParameters[​](#__namedparameters) + +[`DownloadableMessage`](/docs/api/type-aliases/DownloadableMessage) + +### type[​](#type) + +`"ppic"` | `"product"` | `"image"` | `"video"` | `"sticker"` | `"thumbnail-document"` | `"audio"` | `"thumbnail-image"` | `"biz-cover-photo"` | `"thumbnail-video"` | `"thumbnail-link"` | `"gif"` | `"md-app-state"` | `"md-msg-hist"` | `"document"` | `"ptt"` | `"product-catalog-image"` | `"payment-bg-image"` | `"ptv"` + +### opts[​](#opts) + +[`MediaDownloadOptions`](/docs/api/type-aliases/MediaDownloadOptions) = `{}` + +## Returns[​](#returns) + +`Promise`<`Transform`> + +--- + +## function: encryptedStream + +**Fuente:** https://baileys.wiki/docs/api/functions/encryptedStream + +On this page + +**encryptedStream**(`media`, `mediaType`, `__namedParameters`): `Promise`<{ `encFilePath`: `string`; `fileEncSha256`: `Buffer`<`ArrayBufferLike`>; `fileLength`: `number`; `fileSha256`: `Buffer`<`ArrayBufferLike`>; `mac`: `Buffer`<`ArrayBuffer`>; `mediaKey`: `Buffer`<`ArrayBufferLike`>; `originalFilePath`: `undefined` | `string`; }> + +Defined in: [src/Utils/messages-media.ts:384](https://github.com/WhiskeySockets/Baileys/blob/cb8b3717aaede47460ba700651ee936f268c0ce4/src/Utils/messages-media.ts#L384) + +## Parameters[​](#parameters) + +### media[​](#media) + +[`WAMediaUpload`](/docs/api/type-aliases/WAMediaUpload) + +### mediaType[​](#mediatype) + +`"ppic"` | `"product"` | `"image"` | `"video"` | `"sticker"` | `"thumbnail-document"` | `"audio"` | `"thumbnail-image"` | `"biz-cover-photo"` | `"thumbnail-video"` | `"thumbnail-link"` | `"gif"` | `"md-app-state"` | `"md-msg-hist"` | `"document"` | `"ptt"` | `"product-catalog-image"` | `"payment-bg-image"` | `"ptv"` + +### __namedParameters[​](#__namedparameters) + +`EncryptedStreamOptions` = `{}` + +## Returns[​](#returns) + +`Promise`<{ `encFilePath`: `string`; `fileEncSha256`: `Buffer`<`ArrayBufferLike`>; `fileLength`: `number`; `fileSha256`: `Buffer`<`ArrayBufferLike`>; `mac`: `Buffer`<`ArrayBuffer`>; `mediaKey`: `Buffer`<`ArrayBufferLike`>; `originalFilePath`: `undefined` | `string`; }> + +--- + +## function: getMediaKeys + +**Fuente:** https://baileys.wiki/docs/api/functions/getMediaKeys + +On this page + +**getMediaKeys**(`buffer`, `mediaType`): `Promise`<[`MediaDecryptionKeyInfo`](/docs/api/type-aliases/MediaDecryptionKeyInfo)> + +Defined in: [src/Utils/messages-media.ts:95](https://github.com/WhiskeySockets/Baileys/blob/cb8b3717aaede47460ba700651ee936f268c0ce4/src/Utils/messages-media.ts#L95) + +generates all the keys required to encrypt/decrypt & sign a media message + +## Parameters[​](#parameters) + +### buffer[​](#buffer) + +`undefined` | `null` | `string` | `Uint8Array`<`ArrayBufferLike`> + +### mediaType[​](#mediatype) + +`"ppic"` | `"product"` | `"image"` | `"video"` | `"sticker"` | `"thumbnail-document"` | `"audio"` | `"thumbnail-image"` | `"biz-cover-photo"` | `"thumbnail-video"` | `"thumbnail-link"` | `"gif"` | `"md-app-state"` | `"md-msg-hist"` | `"document"` | `"ptt"` | `"product-catalog-image"` | `"payment-bg-image"` | `"ptv"` + +## Returns[​](#returns) + +`Promise`<[`MediaDecryptionKeyInfo`](/docs/api/type-aliases/MediaDecryptionKeyInfo)> + + +--- + +# Variables + +--- + +## variable: MEDIA_KEYS + +**Fuente:** https://baileys.wiki/docs/api/variables/MEDIA_KEYS + +`const` **MEDIA_KEYS**: (`"ppic"` | `"product"` | `"image"` | `"video"` | `"sticker"` | `"thumbnail-document"` | `"audio"` | `"thumbnail-image"` | `"biz-cover-photo"` | `"thumbnail-video"` | `"thumbnail-link"` | `"gif"` | `"md-app-state"` | `"md-msg-hist"` | `"document"` | `"ptt"` | `"product-catalog-image"` | `"payment-bg-image"` | `"ptv"`)[] + +Defined in: [src/Defaults/index.ts:119](https://github.com/WhiskeySockets/Baileys/blob/cb8b3717aaede47460ba700651ee936f268c0ce4/src/Defaults/index.ts#L119) + +--- + +## variable: MEDIA_PATH_MAP + +**Fuente:** https://baileys.wiki/docs/api/variables/MEDIA_PATH_MAP + +`const` **MEDIA_PATH_MAP**: `{ [T in MediaType]?: string }` + +Defined in: [src/Defaults/index.ts:82](https://github.com/WhiskeySockets/Baileys/blob/cb8b3717aaede47460ba700651ee936f268c0ce4/src/Defaults/index.ts#L82) + +--- + +## variable: MEDIA_HKDF_KEY_MAPPING + +**Fuente:** https://baileys.wiki/docs/api/variables/MEDIA_HKDF_KEY_MAPPING + +On this page + +`const` **MEDIA_HKDF_KEY_MAPPING**: `object` + +Defined in: [src/Defaults/index.ts:95](https://github.com/WhiskeySockets/Baileys/blob/cb8b3717aaede47460ba700651ee936f268c0ce4/src/Defaults/index.ts#L95) + +## Type declaration[​](#type-declaration) + +### audio[​](#audio) + +**audio**: `string` = `'Audio'` + +### biz-cover-photo[​](#biz-cover-photo) + +**biz-cover-photo**: `string` = `'Image'` + +### document[​](#document) + +**document**: `string` = `'Document'` + +### gif[​](#gif) + +**gif**: `string` = `'Video'` + +### image[​](#image) + +**image**: `string` = `'Image'` + +### md-app-state[​](#md-app-state) + +**md-app-state**: `string` = `'App State'` + +### md-msg-hist[​](#md-msg-hist) + +**md-msg-hist**: `string` = `'History'` + +### payment-bg-image[​](#payment-bg-image) + +**payment-bg-image**: `string` = `'Payment Background'` + +### ppic[​](#ppic) + +**ppic**: `string` = `''` + +### product[​](#product) + +**product**: `string` = `'Image'` + +### product-catalog-image[​](#product-catalog-image) + +**product-catalog-image**: `string` = `''` + +### ptt[​](#ptt) + +**ptt**: `string` = `'Audio'` + +### ptv[​](#ptv) + +**ptv**: `string` = `'Video'` + +### sticker[​](#sticker) + +**sticker**: `string` = `'Image'` + +### thumbnail-document[​](#thumbnail-document) + +**thumbnail-document**: `string` = `'Document Thumbnail'` + +### thumbnail-image[​](#thumbnail-image) + +**thumbnail-image**: `string` = `'Image Thumbnail'` + +### thumbnail-link[​](#thumbnail-link) + +**thumbnail-link**: `string` = `'Link Thumbnail'` + +### thumbnail-video[​](#thumbnail-video) + +**thumbnail-video**: `string` = `'Video Thumbnail'` + +### video[​](#video) + +**video**: `string` = `'Video'` + + +--- + +# Interfaces + +--- + +## interface: WAUrlInfo + +**Fuente:** https://baileys.wiki/docs/api/interfaces/WAUrlInfo + +On this page + +Defined in: [src/Types/Message.ts:102](https://github.com/WhiskeySockets/Baileys/blob/cb8b3717aaede47460ba700651ee936f268c0ce4/src/Types/Message.ts#L102) + +## Properties[​](#properties) + +### canonical-url[​](#canonical-url) + +**canonical-url**: `string` + +Defined in: [src/Types/Message.ts:103](https://github.com/WhiskeySockets/Baileys/blob/cb8b3717aaede47460ba700651ee936f268c0ce4/src/Types/Message.ts#L103) + +### description?[​](#description) + +`optional` **description**: `string` + +Defined in: [src/Types/Message.ts:106](https://github.com/WhiskeySockets/Baileys/blob/cb8b3717aaede47460ba700651ee936f268c0ce4/src/Types/Message.ts#L106) + +### highQualityThumbnail?[​](#highqualitythumbnail) + +`optional` **highQualityThumbnail**: [`IImageMessage`](/docs/api/namespaces/proto/namespaces/Message/interfaces/IImageMessage) + +Defined in: [src/Types/Message.ts:108](https://github.com/WhiskeySockets/Baileys/blob/cb8b3717aaede47460ba700651ee936f268c0ce4/src/Types/Message.ts#L108) + +### jpegThumbnail?[​](#jpegthumbnail) + +`optional` **jpegThumbnail**: `Buffer`<`ArrayBufferLike`> + +Defined in: [src/Types/Message.ts:107](https://github.com/WhiskeySockets/Baileys/blob/cb8b3717aaede47460ba700651ee936f268c0ce4/src/Types/Message.ts#L107) + +### matched-text[​](#matched-text) + +**matched-text**: `string` + +Defined in: [src/Types/Message.ts:104](https://github.com/WhiskeySockets/Baileys/blob/cb8b3717aaede47460ba700651ee936f268c0ce4/src/Types/Message.ts#L104) + +### originalThumbnailUrl?[​](#originalthumbnailurl) + +`optional` **originalThumbnailUrl**: `string` + +Defined in: [src/Types/Message.ts:109](https://github.com/WhiskeySockets/Baileys/blob/cb8b3717aaede47460ba700651ee936f268c0ce4/src/Types/Message.ts#L109) + +### title[​](#title) + +**title**: `string` + +Defined in: [src/Types/Message.ts:105](https://github.com/WhiskeySockets/Baileys/blob/cb8b3717aaede47460ba700651ee936f268c0ce4/src/Types/Message.ts#L105) + + +--- + +# Ejemplos de Uso Comunes + +## Enviar Imagen + +```typescript +import { prepareWAMessageMedia, generateWAMessageFromContent } from '@whiskeysockets/baileys' + +// Opción 1: Usando sendMessage directamente +await sock.sendMessage(jid, { + image: { url: './image.jpg' }, // o Buffer + caption: 'Descripción de la imagen', + mimetype: 'image/jpeg' +}) + +// Opción 2: Con prepareWAMessageMedia +const media = await prepareWAMessageMedia( + { image: { url: './image.jpg' } }, + { upload: sock.waUploadToServer } +) +``` + +## Enviar Video + +```typescript +await sock.sendMessage(jid, { + video: { url: './video.mp4' }, + caption: 'Mi video', + mimetype: 'video/mp4', + gifPlayback: false // true para GIFs +}) +``` + +## Enviar Documento + +```typescript +await sock.sendMessage(jid, { + document: { url: './document.pdf' }, + mimetype: 'application/pdf', + fileName: 'documento.pdf', + caption: 'Documento importante' +}) +``` + +## Enviar Audio + +```typescript +// Audio normal +await sock.sendMessage(jid, { + audio: { url: './audio.mp3' }, + mimetype: 'audio/mp4' +}) + +// Nota de voz (PTT) +await sock.sendMessage(jid, { + audio: { url: './voice.ogg' }, + mimetype: 'audio/ogg; codecs=opus', + ptt: true // Push To Talk = nota de voz +}) +``` + +## Enviar Contacto + +```typescript +// Un contacto +await sock.sendMessage(jid, { + contacts: { + displayName: 'Juan Pérez', + contacts: [{ + vcard: `BEGIN:VCARD +VERSION:3.0 +FN:Juan Pérez +TEL;type=CELL;waid=1234567890:+1234567890 +END:VCARD` + }] + } +}) + +// Múltiples contactos +await sock.sendMessage(jid, { + contacts: { + displayName: 'Mis Contactos', + contacts: [ + { vcard: '...' }, + { vcard: '...' } + ] + } +}) +``` + +## Enviar Ubicación + +```typescript +await sock.sendMessage(jid, { + location: { + degreesLatitude: 24.121231, + degreesLongitude: 55.1121221 + } +}) +``` + +## Enviar Encuesta (Poll) + +```typescript +await sock.sendMessage(jid, { + poll: { + name: '¿Cuál es tu color favorito?', + values: ['Rojo', 'Azul', 'Verde', 'Amarillo'], + selectableCount: 1 // Cantidad de opciones seleccionables + } +}) +``` + +## Enviar con Quoted (Respuesta) + +```typescript +// El 'quoted' debe ser el mensaje original completo +await sock.sendMessage(jid, + { text: 'Esta es una respuesta' }, + { quoted: originalMessage } +) + +// También funciona con media +await sock.sendMessage(jid, + { image: { url: './image.jpg' }, caption: 'Respuesta con imagen' }, + { quoted: originalMessage } +) +``` + diff --git a/docs/scrape-media-docs.mjs b/docs/scrape-media-docs.mjs new file mode 100644 index 0000000..f9a1a29 --- /dev/null +++ b/docs/scrape-media-docs.mjs @@ -0,0 +1,400 @@ +#!/usr/bin/env node + +/** + * Script para scrapear documentación de Baileys relacionada con Media Messaging + * Genera: baileys-media-messaging.md + */ + +const BASE_URL = 'https://baileys.wiki/docs/api'; + +// Elementos a scrapear para media messaging +const ELEMENTS = { + typeAliases: [ + 'AnyMediaMessageContent', + 'AnyMessageContent', + 'AnyRegularMessageContent', + 'WAContactMessage', + 'WAContactsArrayMessage', + 'WALocationMessage', + 'WAGenericMediaMessage', + 'PollMessageOptions', + 'EventMessageOptions', + 'MediaType', + 'MediaGenerationOptions', + 'MiscMessageGenerationOptions', + 'MessageGenerationOptions', + 'MessageContentGenerationOptions', + 'WAMediaUpload', + 'DownloadableMessage', + 'WAContextInfo', + 'MessageWithContextInfo', + ], + functions: [ + 'prepareWAMessageMedia', + 'generateWAMessage', + 'generateWAMessageContent', + 'generateWAMessageFromContent', + 'getContentType', + 'extensionForMediaMessage', + 'downloadMediaMessage', + 'downloadContentFromMessage', + 'encryptedStream', + 'getMediaKeys', + ], + variables: [ + 'MEDIA_KEYS', + 'MEDIA_PATH_MAP', + 'MEDIA_HKDF_KEY_MAPPING', + ], + interfaces: [ + 'WAUrlInfo', + ] +}; + +// Función para hacer fetch con retry +async function fetchWithRetry(url, retries = 3) { + for (let i = 0; i < retries; i++) { + try { + const response = await fetch(url); + if (!response.ok) { + throw new Error(`HTTP ${response.status}`); + } + return await response.text(); + } catch (error) { + console.error(` Intento ${i + 1}/${retries} fallido: ${error.message}`); + if (i === retries - 1) throw error; + await new Promise(r => setTimeout(r, 1000 * (i + 1))); + } + } +} + +// Función para extraer contenido principal de una página +function extractContent(html, elementName) { + // Remover scripts, styles, nav, footer + let content = html + .replace(/]*>[\s\S]*?<\/script>/gi, '') + .replace(/]*>[\s\S]*?<\/style>/gi, '') + .replace(/]*>[\s\S]*?<\/nav>/gi, '') + .replace(/]*>[\s\S]*?<\/footer>/gi, '') + .replace(/]*>[\s\S]*?<\/header>/gi, ''); + + // Buscar el contenido principal (article o main) + const articleMatch = content.match(/]*>([\s\S]*?)<\/article>/i); + const mainMatch = content.match(/]*>([\s\S]*?)<\/main>/i); + + content = articleMatch ? articleMatch[1] : (mainMatch ? mainMatch[1] : content); + + // Convertir HTML a texto/markdown básico + content = content + // Headers + .replace(/]*>([\s\S]*?)<\/h1>/gi, '\n# $1\n') + .replace(/]*>([\s\S]*?)<\/h2>/gi, '\n## $1\n') + .replace(/]*>([\s\S]*?)<\/h3>/gi, '\n### $1\n') + .replace(/]*>([\s\S]*?)<\/h4>/gi, '\n#### $1\n') + // Code blocks + .replace(/]*>]*>([\s\S]*?)<\/code><\/pre>/gi, '\n```typescript\n$1\n```\n') + .replace(/]*>([\s\S]*?)<\/code>/gi, '`$1`') + // Lists + .replace(/]*>([\s\S]*?)<\/li>/gi, '- $1\n') + .replace(/]*>/gi, '\n') + .replace(/<\/ul>/gi, '\n') + .replace(/]*>/gi, '\n') + .replace(/<\/ol>/gi, '\n') + // Paragraphs + .replace(/]*>([\s\S]*?)<\/p>/gi, '\n$1\n') + // Bold/Italic + .replace(/]*>([\s\S]*?)<\/strong>/gi, '**$1**') + .replace(/]*>([\s\S]*?)<\/b>/gi, '**$1**') + .replace(/]*>([\s\S]*?)<\/em>/gi, '*$1*') + .replace(/]*>([\s\S]*?)<\/i>/gi, '*$1*') + // Links + .replace(/]*href="([^"]*)"[^>]*>([\s\S]*?)<\/a>/gi, '[$2]($1)') + // Divs y spans + .replace(/]*>/gi, '\n') + .replace(/<\/div>/gi, '\n') + .replace(/]*>/gi, '') + .replace(/<\/span>/gi, '') + // Breaks + .replace(//gi, '\n') + // Remover otros tags HTML + .replace(/<[^>]+>/g, '') + // Decodificar entidades HTML + .replace(/</g, '<') + .replace(/>/g, '>') + .replace(/&/g, '&') + .replace(/"/g, '"') + .replace(/'/g, "'") + .replace(/'/g, "'") + .replace(/ /g, ' ') + // Limpiar espacios múltiples + .replace(/\n{3,}/g, '\n\n') + .replace(/[ \t]+/g, ' ') + .trim(); + + return content; +} + +// Función para construir URL según el tipo +function buildUrl(type, name) { + const urlMap = { + typeAliases: `${BASE_URL}/type-aliases/${name}`, + functions: `${BASE_URL}/functions/${name}`, + variables: `${BASE_URL}/variables/${name}`, + interfaces: `${BASE_URL}/interfaces/${name}`, + }; + return urlMap[type]; +} + +// Función principal +async function main() { + console.log('🚀 Iniciando scraping de documentación de Baileys para Media Messaging...\n'); + + const results = { + typeAliases: [], + functions: [], + variables: [], + interfaces: [], + }; + + // Scrapear cada categoría + for (const [category, elements] of Object.entries(ELEMENTS)) { + console.log(`\n📁 Scrapeando ${category}...`); + + for (const element of elements) { + const url = buildUrl(category, element); + console.log(` 📄 ${element}...`); + + try { + const html = await fetchWithRetry(url); + const content = extractContent(html, element); + + results[category].push({ + name: element, + url: url, + content: content, + }); + + console.log(` ✅ ${element} - OK`); + + // Pequeña pausa para no saturar el servidor + await new Promise(r => setTimeout(r, 500)); + } catch (error) { + console.log(` ❌ ${element} - Error: ${error.message}`); + results[category].push({ + name: element, + url: url, + content: `Error al obtener documentación: ${error.message}`, + error: true, + }); + } + } + } + + // Generar markdown + console.log('\n📝 Generando markdown...'); + + let markdown = `# Baileys Media Messaging API Documentation + +> Documentación auto-generada para el desarrollo de mensajes multimedia en WhatsApp Nucleo +> Fuente: https://baileys.wiki +> Generado: ${new Date().toISOString()} + +Esta documentación contiene la API de Baileys relevante para enviar diferentes tipos de mensajes multimedia: +- Imágenes y Videos +- Documentos +- Audio y Notas de Voz +- Contactos +- Ubicación +- Encuestas (Polls) +- Eventos + +## Tabla de Contenidos + +`; + + // Generar tabla de contenidos + const categoryNames = { + interfaces: 'Interfaces', + typeAliases: 'Type Aliases', + functions: 'Funciones', + variables: 'Variables', + }; + + for (const [category, items] of Object.entries(results)) { + if (items.length > 0) { + markdown += `### ${categoryNames[category]}\n`; + for (const item of items) { + const anchor = `${category.slice(0, -1)}-${item.name.toLowerCase()}`; + markdown += `- [${item.name}](#${anchor})\n`; + } + markdown += '\n'; + } + } + + // Agregar contenido de cada categoría + for (const [category, items] of Object.entries(results)) { + if (items.length > 0) { + markdown += `\n---\n\n# ${categoryNames[category]}\n\n`; + + for (const item of items) { + const typeLabel = category.slice(0, -1).replace(/([A-Z])/g, ' $1').trim(); + markdown += `---\n\n## ${typeLabel}: ${item.name}\n\n`; + markdown += `**Fuente:** ${item.url}\n\n`; + + if (item.error) { + markdown += `> ⚠️ ${item.content}\n\n`; + } else { + markdown += `${item.content}\n\n`; + } + } + } + } + + // Agregar sección de ejemplos de uso + markdown += ` +--- + +# Ejemplos de Uso Comunes + +## Enviar Imagen + +\`\`\`typescript +import { prepareWAMessageMedia, generateWAMessageFromContent } from '@whiskeysockets/baileys' + +// Opción 1: Usando sendMessage directamente +await sock.sendMessage(jid, { + image: { url: './image.jpg' }, // o Buffer + caption: 'Descripción de la imagen', + mimetype: 'image/jpeg' +}) + +// Opción 2: Con prepareWAMessageMedia +const media = await prepareWAMessageMedia( + { image: { url: './image.jpg' } }, + { upload: sock.waUploadToServer } +) +\`\`\` + +## Enviar Video + +\`\`\`typescript +await sock.sendMessage(jid, { + video: { url: './video.mp4' }, + caption: 'Mi video', + mimetype: 'video/mp4', + gifPlayback: false // true para GIFs +}) +\`\`\` + +## Enviar Documento + +\`\`\`typescript +await sock.sendMessage(jid, { + document: { url: './document.pdf' }, + mimetype: 'application/pdf', + fileName: 'documento.pdf', + caption: 'Documento importante' +}) +\`\`\` + +## Enviar Audio + +\`\`\`typescript +// Audio normal +await sock.sendMessage(jid, { + audio: { url: './audio.mp3' }, + mimetype: 'audio/mp4' +}) + +// Nota de voz (PTT) +await sock.sendMessage(jid, { + audio: { url: './voice.ogg' }, + mimetype: 'audio/ogg; codecs=opus', + ptt: true // Push To Talk = nota de voz +}) +\`\`\` + +## Enviar Contacto + +\`\`\`typescript +// Un contacto +await sock.sendMessage(jid, { + contacts: { + displayName: 'Juan Pérez', + contacts: [{ + vcard: \`BEGIN:VCARD +VERSION:3.0 +FN:Juan Pérez +TEL;type=CELL;waid=1234567890:+1234567890 +END:VCARD\` + }] + } +}) + +// Múltiples contactos +await sock.sendMessage(jid, { + contacts: { + displayName: 'Mis Contactos', + contacts: [ + { vcard: '...' }, + { vcard: '...' } + ] + } +}) +\`\`\` + +## Enviar Ubicación + +\`\`\`typescript +await sock.sendMessage(jid, { + location: { + degreesLatitude: 24.121231, + degreesLongitude: 55.1121221 + } +}) +\`\`\` + +## Enviar Encuesta (Poll) + +\`\`\`typescript +await sock.sendMessage(jid, { + poll: { + name: '¿Cuál es tu color favorito?', + values: ['Rojo', 'Azul', 'Verde', 'Amarillo'], + selectableCount: 1 // Cantidad de opciones seleccionables + } +}) +\`\`\` + +## Enviar con Quoted (Respuesta) + +\`\`\`typescript +// El 'quoted' debe ser el mensaje original completo +await sock.sendMessage(jid, + { text: 'Esta es una respuesta' }, + { quoted: originalMessage } +) + +// También funciona con media +await sock.sendMessage(jid, + { image: { url: './image.jpg' }, caption: 'Respuesta con imagen' }, + { quoted: originalMessage } +) +\`\`\` + +`; + + // Guardar archivo + const fs = await import('fs'); + const outputPath = './docs/baileys-media-messaging.md'; + fs.writeFileSync(outputPath, markdown); + + console.log(`\n✅ Documentación generada exitosamente en: ${outputPath}`); + console.log(` Total elementos: ${Object.values(results).flat().length}`); + console.log(` - Type Aliases: ${results.typeAliases.length}`); + console.log(` - Functions: ${results.functions.length}`); + console.log(` - Variables: ${results.variables.length}`); + console.log(` - Interfaces: ${results.interfaces.length}`); +} + +main().catch(console.error);