@juzi/wechaty-puppet-whatsapp
Version:
Wechaty Puppet for WhatsApp
59 lines (49 loc) • 2.01 kB
text/typescript
import * as PUPPET from '@juzi/wechaty-puppet'
import { SPECIAL_BOT_PUSHNAME } from '../../config.js'
import type { WhatsAppContactPayload } from '../../schema/whatsapp-type.js'
import { ContactStatus } from '../../schema/contact.js'
export function parserContactRawPayload (contactPayload: WhatsAppContactPayload, userName?: string): PUPPET.payloads.Contact {
let type
if (contactPayload.isUser) {
type = PUPPET.types.Contact.Individual
} else if (contactPayload.isEnterprise) {
type = PUPPET.types.Contact.Corporation
} else {
type = PUPPET.types.Contact.Unknown
}
let name
// const isFriend = contactPayload.isMyContact || contactPayload.isMe
const additionalInfo: any = {
status: ContactStatus.FRIEND,
}
if (contactPayload.isMe) {
name = userName || contactPayload.pushname
if (name === SPECIAL_BOT_PUSHNAME) {
name = contactPayload.shortName
}
additionalInfo.corpId = contactPayload.id._serialized
additionalInfo.sCorpId = contactPayload.id._serialized
additionalInfo.corpName = `${contactPayload.isBusiness ? 'Whatsapp Business' : 'Whatsapp'}:${contactPayload.id._serialized}`
} else {
/**
* 在 iOS 中, pushname 是联系人自己设置的名字, name 是bot通讯录中联系人的名字
* 在 Android 中, pushname 是 undefined , name 是bot通讯录中联系人的名字
* 因此应该优先使用 name
*/
name = contactPayload.name || contactPayload.pushname
}
const number = contactPayload.number || contactPayload.id.user
return {
avatar: contactPayload.avatar,
friend: true,
gender: PUPPET.types.ContactGender.Unknown,
id: contactPayload.id._serialized,
name: name || contactPayload.id._serialized,
phone: [number],
type: type,
handle: number,
weixin: number,
additionalInfo: JSON.stringify(additionalInfo),
corporation: `${contactPayload.isBusiness ? 'Whatsapp Business' : 'Whatsapp'}:${contactPayload.id._serialized}`,
}
}