feat: add label feature (#955)

Co-authored-by: 刘建辉 <liujianhui@gongchang.com>
This commit is contained in:
建辉
2024-09-22 19:48:17 +08:00
committed by GitHub
parent 9e4e211751
commit 6ff945502d
4 changed files with 43 additions and 0 deletions

View File

@@ -8,6 +8,7 @@ import { makeMutex } from '../Utils/make-mutex'
import processMessage from '../Utils/process-message' import processMessage from '../Utils/process-message'
import { BinaryNode, getBinaryNodeChild, getBinaryNodeChildren, jidNormalizedUser, reduceBinaryNodeToDictionary, S_WHATSAPP_NET } from '../WABinary' import { BinaryNode, getBinaryNodeChild, getBinaryNodeChildren, jidNormalizedUser, reduceBinaryNodeToDictionary, S_WHATSAPP_NET } from '../WABinary'
import { makeSocket } from './socket' import { makeSocket } from './socket'
import { Label, LabelActionBody } from '../Types/Label'
const MAX_SYNC_ATTEMPTS = 2 const MAX_SYNC_ATTEMPTS = 2
@@ -804,6 +805,17 @@ export const makeChatsSocket = (config: SocketConfig) => {
}, jid) }, jid)
} }
/**
* Adds label
*/
const addLabel = (jid: string, labels: LabelActionBody) => {
return chatModify({
addLabel: {
...labels
}
}, jid)
}
/** /**
* Adds label for the chats * Adds label for the chats
*/ */
@@ -1024,6 +1036,7 @@ export const makeChatsSocket = (config: SocketConfig) => {
resyncAppState, resyncAppState,
chatModify, chatModify,
cleanDirtyBits, cleanDirtyBits,
addLabel,
addChatLabel, addChatLabel,
removeChatLabel, removeChatLabel,
addMessageLabel, addMessageLabel,

View File

@@ -1,6 +1,7 @@
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 { LabelActionBody } from './Label'
import type { ChatLabelAssociationActionBody } from './LabelAssociation' import type { ChatLabelAssociationActionBody } from './LabelAssociation'
import type { MessageLabelAssociationActionBody } from './LabelAssociation' import type { MessageLabelAssociationActionBody } from './LabelAssociation'
import type { MinimalMessage } from './Message' import type { MinimalMessage } from './Message'
@@ -90,6 +91,8 @@ export type ChatModification =
lastMessages: LastMessageList lastMessages: LastMessageList
} }
| { delete: true, lastMessages: LastMessageList } | { delete: true, lastMessages: LastMessageList }
// Label
| { addLabel: LabelActionBody }
// Label assosiation // Label assosiation
| { addChatLabel: ChatLabelAssociationActionBody } | { addChatLabel: ChatLabelAssociationActionBody }
| { removeChatLabel: ChatLabelAssociationActionBody } | { removeChatLabel: ChatLabelAssociationActionBody }

View File

@@ -11,6 +11,18 @@ export interface Label {
predefinedId?: string predefinedId?: string
} }
export interface LabelActionBody {
id: string
/** Label name */
name?: string
/** Label color ID */
color?: number
/** Is label has been deleted */
deleted?: boolean
/** WhatsApp has 5 predefined labels (New customer, New order & etc) */
predefinedId?: number
}
/** WhatsApp has 20 predefined colors */ /** WhatsApp has 20 predefined colors */
export enum LabelColor { export enum LabelColor {
Color1 = 0, Color1 = 0,

View File

@@ -620,6 +620,21 @@ export const chatModificationToAppPatch = (
apiVersion: 1, apiVersion: 1,
operation: OP.SET, operation: OP.SET,
} }
} else if('addLabel' in mod) {
patch = {
syncAction: {
labelEditAction: {
name: mod.addLabel.name,
color: mod.addLabel.color,
predefinedId : mod.addLabel.predefinedId,
deleted: mod.addLabel.deleted
}
},
index: ['label_edit', mod.addLabel.id],
type: 'regular',
apiVersion: 3,
operation: OP.SET,
}
} else if('addChatLabel' in mod) { } else if('addChatLabel' in mod) {
patch = { patch = {
syncAction: { syncAction: {