mirror of
https://github.com/FranP-code/Baileys.git
synced 2025-10-13 00:32:22 +00:00
feat(labels): modify chat utils
This commit is contained in:
@@ -777,6 +777,52 @@ export const makeChatsSocket = (config: SocketConfig) => {
|
|||||||
return appPatch(patch)
|
return appPatch(patch)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds label for the chats
|
||||||
|
*/
|
||||||
|
const addChatLabel = (jid: string, labelId: string) => {
|
||||||
|
return chatModify({
|
||||||
|
addChatLabel: {
|
||||||
|
labelId
|
||||||
|
}
|
||||||
|
}, jid)
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Removes label for the chat
|
||||||
|
*/
|
||||||
|
const removeChatLabel = (jid: string, labelId: string) => {
|
||||||
|
return chatModify({
|
||||||
|
removeChatLabel: {
|
||||||
|
labelId
|
||||||
|
}
|
||||||
|
}, jid)
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds label for the message
|
||||||
|
*/
|
||||||
|
const addMessageLabel = (jid: string, messageId: string, labelId: string) => {
|
||||||
|
return chatModify({
|
||||||
|
addMessageLabel: {
|
||||||
|
messageId,
|
||||||
|
labelId
|
||||||
|
}
|
||||||
|
}, jid)
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Removes label for the message
|
||||||
|
*/
|
||||||
|
const removeMessageLabel = (jid: string, messageId: string, labelId: string) => {
|
||||||
|
return chatModify({
|
||||||
|
removeMessageLabel: {
|
||||||
|
messageId,
|
||||||
|
labelId
|
||||||
|
}
|
||||||
|
}, jid)
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* queries need to be fired on connection open
|
* queries need to be fired on connection open
|
||||||
* help ensure parity with WA Web
|
* help ensure parity with WA Web
|
||||||
@@ -945,6 +991,10 @@ export const makeChatsSocket = (config: SocketConfig) => {
|
|||||||
updateDefaultDisappearingMode,
|
updateDefaultDisappearingMode,
|
||||||
getBusinessProfile,
|
getBusinessProfile,
|
||||||
resyncAppState,
|
resyncAppState,
|
||||||
chatModify
|
chatModify,
|
||||||
|
addChatLabel,
|
||||||
|
removeChatLabel,
|
||||||
|
addMessageLabel,
|
||||||
|
removeMessageLabel
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
import type { proto } from '../../WAProto'
|
import type { proto } from '../../WAProto'
|
||||||
import type { AccountSettings } from './Auth'
|
import type { AccountSettings } from './Auth'
|
||||||
import type { BufferedEventData } from './Events'
|
import type { BufferedEventData } from './Events'
|
||||||
|
import type { ChatLabelAssociationActionBody } from './LabelAssociation'
|
||||||
|
import type { MessageLabelAssociationActionBody } from './LabelAssociation'
|
||||||
import type { MinimalMessage } from './Message'
|
import type { MinimalMessage } from './Message'
|
||||||
|
|
||||||
/** privacy settings in WhatsApp Web */
|
/** privacy settings in WhatsApp Web */
|
||||||
@@ -90,6 +92,11 @@ export type ChatModification =
|
|||||||
lastMessages: LastMessageList
|
lastMessages: LastMessageList
|
||||||
}
|
}
|
||||||
| { delete: true, lastMessages: LastMessageList }
|
| { delete: true, lastMessages: LastMessageList }
|
||||||
|
// Label assosiation
|
||||||
|
| { addChatLabel: ChatLabelAssociationActionBody }
|
||||||
|
| { removeChatLabel: ChatLabelAssociationActionBody }
|
||||||
|
| { addMessageLabel: MessageLabelAssociationActionBody }
|
||||||
|
| { removeMessageLabel: MessageLabelAssociationActionBody }
|
||||||
|
|
||||||
export type InitialReceivedChatsState = {
|
export type InitialReceivedChatsState = {
|
||||||
[jid: string]: {
|
[jid: string]: {
|
||||||
|
|||||||
@@ -5,6 +5,8 @@ import { WACallEvent } from './Call'
|
|||||||
import { Chat, ChatUpdate, PresenceData } from './Chat'
|
import { Chat, ChatUpdate, PresenceData } from './Chat'
|
||||||
import { Contact } from './Contact'
|
import { Contact } from './Contact'
|
||||||
import { GroupMetadata, ParticipantAction } from './GroupMetadata'
|
import { GroupMetadata, ParticipantAction } from './GroupMetadata'
|
||||||
|
import { Label } from './Label'
|
||||||
|
import { LabelAssociation } from './LabelAssociation'
|
||||||
import { MessageUpsertType, MessageUserReceiptUpdate, WAMessage, WAMessageKey, WAMessageUpdate } from './Message'
|
import { MessageUpsertType, MessageUserReceiptUpdate, WAMessage, WAMessageKey, WAMessageUpdate } from './Message'
|
||||||
import { ConnectionState } from './State'
|
import { ConnectionState } from './State'
|
||||||
|
|
||||||
@@ -54,6 +56,8 @@ export type BaileysEventMap = {
|
|||||||
'blocklist.update': { blocklist: string[], type: 'add' | 'remove' }
|
'blocklist.update': { blocklist: string[], type: 'add' | 'remove' }
|
||||||
/** Receive an update on a call, including when the call was received, rejected, accepted */
|
/** Receive an update on a call, including when the call was received, rejected, accepted */
|
||||||
'call': WACallEvent[]
|
'call': WACallEvent[]
|
||||||
|
'labels.edit': Label
|
||||||
|
'labels.association': { association: LabelAssociation, type: 'add' | 'remove' }
|
||||||
}
|
}
|
||||||
|
|
||||||
export type BufferedEventData = {
|
export type BufferedEventData = {
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ import { AxiosRequestConfig } from 'axios'
|
|||||||
import type { Logger } from 'pino'
|
import type { Logger } from 'pino'
|
||||||
import { proto } from '../../WAProto'
|
import { proto } from '../../WAProto'
|
||||||
import { BaileysEventEmitter, Chat, ChatModification, ChatMutation, ChatUpdate, Contact, InitialAppStateSyncOptions, LastMessageList, LTHashState, WAPatchCreate, WAPatchName } from '../Types'
|
import { BaileysEventEmitter, Chat, ChatModification, ChatMutation, ChatUpdate, Contact, InitialAppStateSyncOptions, LastMessageList, LTHashState, WAPatchCreate, WAPatchName } from '../Types'
|
||||||
|
import { ChatLabelAssociation, LabelAssociationType, MessageLabelAssociation } from '../Types/LabelAssociation'
|
||||||
import { BinaryNode, getBinaryNodeChild, getBinaryNodeChildren, isJidGroup, jidNormalizedUser } from '../WABinary'
|
import { BinaryNode, getBinaryNodeChild, getBinaryNodeChildren, isJidGroup, jidNormalizedUser } from '../WABinary'
|
||||||
import { aesDecrypt, aesEncrypt, hkdf, hmacSign } from './crypto'
|
import { aesDecrypt, aesEncrypt, hkdf, hmacSign } from './crypto'
|
||||||
import { toNumber } from './generics'
|
import { toNumber } from './generics'
|
||||||
@@ -606,6 +607,68 @@ export const chatModificationToAppPatch = (
|
|||||||
apiVersion: 1,
|
apiVersion: 1,
|
||||||
operation: OP.SET,
|
operation: OP.SET,
|
||||||
}
|
}
|
||||||
|
} else if ('addChatLabel' in mod) {
|
||||||
|
patch = {
|
||||||
|
syncAction: {
|
||||||
|
labelAssociationAction: {
|
||||||
|
labeled: true,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
index: [LabelAssociationType.Chat, mod.addChatLabel.labelId, jid],
|
||||||
|
type: 'regular',
|
||||||
|
apiVersion: 3,
|
||||||
|
operation: OP.SET,
|
||||||
|
}
|
||||||
|
} else if ('removeChatLabel' in mod) {
|
||||||
|
patch = {
|
||||||
|
syncAction: {
|
||||||
|
labelAssociationAction: {
|
||||||
|
labeled: false,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
index: [LabelAssociationType.Chat, mod.removeChatLabel.labelId, jid],
|
||||||
|
type: 'regular',
|
||||||
|
apiVersion: 3,
|
||||||
|
operation: OP.SET,
|
||||||
|
}
|
||||||
|
} else if ('addMessageLabel' in mod) {
|
||||||
|
patch = {
|
||||||
|
syncAction: {
|
||||||
|
labelAssociationAction: {
|
||||||
|
labeled: true,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
index: [
|
||||||
|
LabelAssociationType.Message,
|
||||||
|
mod.addMessageLabel.labelId,
|
||||||
|
jid,
|
||||||
|
mod.addMessageLabel.messageId,
|
||||||
|
'0',
|
||||||
|
'0'
|
||||||
|
],
|
||||||
|
type: 'regular',
|
||||||
|
apiVersion: 3,
|
||||||
|
operation: OP.SET,
|
||||||
|
}
|
||||||
|
} else if ('removeMessageLabel' in mod) {
|
||||||
|
patch = {
|
||||||
|
syncAction: {
|
||||||
|
labelAssociationAction: {
|
||||||
|
labeled: false,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
index: [
|
||||||
|
LabelAssociationType.Message,
|
||||||
|
mod.removeMessageLabel.labelId,
|
||||||
|
jid,
|
||||||
|
mod.removeMessageLabel.messageId,
|
||||||
|
'0',
|
||||||
|
'0'
|
||||||
|
],
|
||||||
|
type: 'regular',
|
||||||
|
apiVersion: 3,
|
||||||
|
operation: OP.SET,
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
throw new Boom('not supported')
|
throw new Boom('not supported')
|
||||||
}
|
}
|
||||||
@@ -687,13 +750,15 @@ export const processSyncAction = (
|
|||||||
conditional: getChatUpdateConditional(id, markReadAction?.messageRange)
|
conditional: getChatUpdateConditional(id, markReadAction?.messageRange)
|
||||||
}])
|
}])
|
||||||
} else if (action?.deleteMessageForMeAction || type === 'deleteMessageForMe') {
|
} else if (action?.deleteMessageForMeAction || type === 'deleteMessageForMe') {
|
||||||
ev.emit('messages.delete', { keys: [
|
ev.emit('messages.delete', {
|
||||||
|
keys: [
|
||||||
{
|
{
|
||||||
remoteJid: id,
|
remoteJid: id,
|
||||||
id: msgId,
|
id: msgId,
|
||||||
fromMe: fromMe === '1'
|
fromMe: fromMe === '1'
|
||||||
}
|
}
|
||||||
] })
|
]
|
||||||
|
})
|
||||||
} else if (action?.contactAction) {
|
} else if (action?.contactAction) {
|
||||||
ev.emit('contacts.upsert', [{ id, name: action.contactAction!.fullName! }])
|
ev.emit('contacts.upsert', [{ id, name: action.contactAction!.fullName! }])
|
||||||
} else if (action?.pushNameSetting) {
|
} else if (action?.pushNameSetting) {
|
||||||
@@ -731,6 +796,34 @@ export const processSyncAction = (
|
|||||||
if (!isInitialSync) {
|
if (!isInitialSync) {
|
||||||
ev.emit('chats.delete', [id])
|
ev.emit('chats.delete', [id])
|
||||||
}
|
}
|
||||||
|
} else if (action?.labelEditAction) {
|
||||||
|
const { name, color, deleted, predefinedId } = action.labelEditAction!
|
||||||
|
|
||||||
|
ev.emit('labels.edit', {
|
||||||
|
id,
|
||||||
|
name: name!,
|
||||||
|
color: color!,
|
||||||
|
deleted: deleted!,
|
||||||
|
predefinedId: predefinedId ? String(predefinedId) : undefined
|
||||||
|
})
|
||||||
|
} else if (action?.labelAssociationAction) {
|
||||||
|
ev.emit('labels.association', {
|
||||||
|
type: action.labelAssociationAction.labeled
|
||||||
|
? 'add'
|
||||||
|
: 'remove',
|
||||||
|
association: type === LabelAssociationType.Chat
|
||||||
|
? {
|
||||||
|
type: LabelAssociationType.Chat,
|
||||||
|
chatId: syncAction.index[2],
|
||||||
|
labelId: syncAction.index[1]
|
||||||
|
} as ChatLabelAssociation
|
||||||
|
: {
|
||||||
|
type: LabelAssociationType.Message,
|
||||||
|
chatId: syncAction.index[2],
|
||||||
|
messageId: syncAction.index[3],
|
||||||
|
labelId: syncAction.index[1]
|
||||||
|
} as MessageLabelAssociation
|
||||||
|
})
|
||||||
} else {
|
} else {
|
||||||
logger?.debug({ syncAction, id }, 'unprocessable update')
|
logger?.debug({ syncAction, id }, 'unprocessable update')
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user