mirror of
https://github.com/FranP-code/Baileys.git
synced 2025-10-13 00:32:22 +00:00
Merge branch 'master' into master
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
import { Boom } from '@hapi/boom'
|
||||
import { proto } from '../../WAProto'
|
||||
import { PROCESSABLE_HISTORY_TYPES } from '../Defaults'
|
||||
import { ALL_WA_PATCH_NAMES, ChatModification, ChatMutation, LTHashState, MessageUpsertType, PresenceData, SocketConfig, WABusinessHoursConfig, WABusinessProfile, WAMediaUpload, WAMessage, WAPatchCreate, WAPatchName, WAPresence } from '../Types'
|
||||
import { ALL_WA_PATCH_NAMES, ChatModification, ChatMutation, LTHashState, MessageUpsertType, PresenceData, SocketConfig, WABusinessHoursConfig, WABusinessProfile, WAMediaUpload, WAMessage, WAPatchCreate, WAPatchName, WAPresence, WAPrivacyOnlineValue, WAPrivacyValue, WAReadReceiptsValue } from '../Types'
|
||||
import { chatModificationToAppPatch, ChatMutationMap, decodePatches, decodeSyncdSnapshot, encodeSyncdPatch, extractSyncdPatches, generateProfilePicture, getHistoryMsg, newLTHashState, processSyncAction } from '../Utils'
|
||||
import { makeMutex } from '../Utils/make-mutex'
|
||||
import processMessage from '../Utils/process-message'
|
||||
@@ -61,6 +61,69 @@ export const makeChatsSocket = (config: SocketConfig) => {
|
||||
return privacySettings
|
||||
}
|
||||
|
||||
/** helper function to run a privacy IQ query */
|
||||
const privacyQuery = async(name: string, value: string) => {
|
||||
await query({
|
||||
tag: 'iq',
|
||||
attrs: {
|
||||
xmlns: 'privacy',
|
||||
to: S_WHATSAPP_NET,
|
||||
type: 'set'
|
||||
},
|
||||
content: [{
|
||||
tag: 'privacy',
|
||||
attrs: {},
|
||||
content: [
|
||||
{
|
||||
tag: 'category',
|
||||
attrs: { name, value }
|
||||
}
|
||||
]
|
||||
}]
|
||||
})
|
||||
}
|
||||
|
||||
const updateLastSeenPrivacy = async(value: WAPrivacyValue) => {
|
||||
await privacyQuery('last', value)
|
||||
}
|
||||
|
||||
const updateOnlinePrivacy = async(value: WAPrivacyOnlineValue) => {
|
||||
await privacyQuery('online', value)
|
||||
}
|
||||
|
||||
const updateProfilePicturePrivacy = async(value: WAPrivacyValue) => {
|
||||
await privacyQuery('profile', value)
|
||||
}
|
||||
|
||||
const updateStatusPrivacy = async(value: WAPrivacyValue) => {
|
||||
await privacyQuery('status', value)
|
||||
}
|
||||
|
||||
const updateReadReceiptsPrivacy = async(value: WAReadReceiptsValue) => {
|
||||
await privacyQuery('readreceipts', value)
|
||||
}
|
||||
|
||||
const updateGroupsAddPrivacy = async(value: WAPrivacyValue) => {
|
||||
await privacyQuery('groupadd', value)
|
||||
}
|
||||
|
||||
const updateDefaultDisappearingMode = async(duration: number) => {
|
||||
await query({
|
||||
tag: 'iq',
|
||||
attrs: {
|
||||
xmlns: 'disappearing_mode',
|
||||
to: S_WHATSAPP_NET,
|
||||
type: 'set'
|
||||
},
|
||||
content: [{
|
||||
tag: 'disappearing_mode',
|
||||
attrs: {
|
||||
duration : duration.toString()
|
||||
}
|
||||
}]
|
||||
})
|
||||
}
|
||||
|
||||
/** helper function to run a generic IQ query */
|
||||
const interactiveQuery = async(userNodes: BinaryNode[], queryNode: BinaryNode) => {
|
||||
const result = await query({
|
||||
@@ -161,6 +224,18 @@ export const makeChatsSocket = (config: SocketConfig) => {
|
||||
})
|
||||
}
|
||||
|
||||
/** remove the profile picture for yourself or a group */
|
||||
const removeProfilePicture = async(jid: string) => {
|
||||
await query({
|
||||
tag: 'iq',
|
||||
attrs: {
|
||||
to: jidNormalizedUser(jid),
|
||||
type: 'set',
|
||||
xmlns: 'w:profile:picture'
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
/** update the profile status for yourself */
|
||||
const updateProfileStatus = async(status: string) => {
|
||||
await query({
|
||||
@@ -857,9 +932,17 @@ export const makeChatsSocket = (config: SocketConfig) => {
|
||||
fetchBlocklist,
|
||||
fetchStatus,
|
||||
updateProfilePicture,
|
||||
removeProfilePicture,
|
||||
updateProfileStatus,
|
||||
updateProfileName,
|
||||
updateBlockStatus,
|
||||
updateLastSeenPrivacy,
|
||||
updateOnlinePrivacy,
|
||||
updateProfilePicturePrivacy,
|
||||
updateStatusPrivacy,
|
||||
updateReadReceiptsPrivacy,
|
||||
updateGroupsAddPrivacy,
|
||||
updateDefaultDisappearingMode,
|
||||
getBusinessProfile,
|
||||
resyncAppState,
|
||||
chatModify
|
||||
|
||||
@@ -3,6 +3,13 @@ import type { AccountSettings } from './Auth'
|
||||
import type { BufferedEventData } from './Events'
|
||||
import type { MinimalMessage } from './Message'
|
||||
|
||||
/** privacy settings in WhatsApp Web */
|
||||
export type WAPrivacyValue = 'all' | 'contacts' | 'contact_blacklist' | 'none'
|
||||
|
||||
export type WAPrivacyOnlineValue = 'all' | 'match_last_seen'
|
||||
|
||||
export type WAReadReceiptsValue = 'all' | 'none'
|
||||
|
||||
/** set of statuses visible to other people; see updatePresence() in WhatsAppWeb.Send */
|
||||
export type WAPresence = 'unavailable' | 'available' | 'composing' | 'recording' | 'paused'
|
||||
|
||||
|
||||
@@ -55,6 +55,7 @@ type Mentionable = {
|
||||
type ViewOnce = {
|
||||
viewOnce?: boolean
|
||||
}
|
||||
|
||||
type Buttonable = {
|
||||
/** add buttons to the message */
|
||||
buttons?: proto.Message.ButtonsMessage.IButton[]
|
||||
@@ -65,6 +66,9 @@ type Templatable = {
|
||||
|
||||
footer?: string
|
||||
}
|
||||
type Editable = {
|
||||
edit?: WAMessageKey
|
||||
}
|
||||
type Listable = {
|
||||
/** Sections of the List */
|
||||
sections?: proto.Message.ListMessage.ISection[]
|
||||
@@ -117,7 +121,7 @@ export type AnyMediaMessageContent = (
|
||||
fileName?: string
|
||||
caption?: string
|
||||
} & Buttonable & Templatable))
|
||||
& { mimetype?: string }
|
||||
& { mimetype?: string } & Editable
|
||||
|
||||
export type ButtonReplyInfo = {
|
||||
displayText: string
|
||||
@@ -134,11 +138,11 @@ export type AnyRegularMessageContent = (
|
||||
text: string
|
||||
linkPreview?: WAUrlInfo | null
|
||||
}
|
||||
& Mentionable & Buttonable & Templatable & Listable)
|
||||
& Mentionable & Buttonable & Templatable & Listable & Editable)
|
||||
| AnyMediaMessageContent
|
||||
| ({
|
||||
poll: PollMessageOptions
|
||||
} & Mentionable & Buttonable & Templatable)
|
||||
} & Mentionable & Buttonable & Templatable & Editable)
|
||||
| {
|
||||
contacts: {
|
||||
displayName?: string
|
||||
|
||||
@@ -488,6 +488,16 @@ export const generateWAMessageContent = async(
|
||||
m[messageType].contextInfo.mentionedJid = message.mentions
|
||||
}
|
||||
|
||||
if('edit' in message) {
|
||||
m = {
|
||||
protocolMessage: {
|
||||
key: message.edit,
|
||||
editedMessage: m,
|
||||
type: WAProto.Message.ProtocolMessage.Type.MESSAGE_EDIT
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return WAProto.Message.fromObject(m)
|
||||
}
|
||||
|
||||
@@ -886,4 +896,4 @@ export const assertMediaContent = (content: proto.IMessage | null | undefined) =
|
||||
}
|
||||
|
||||
return mediaContent
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user