wechaty-puppet-wechat4u
Version:
Wechat4u Puppet for Wechaty
69 lines (61 loc) • 1.88 kB
text/typescript
/* eslint-disable @typescript-eslint/no-unnecessary-condition */
import { xmlToJson } from '../utils/xml-to-json.js'
import type { WebMessageRawPayload } from '../../web-schemas.js'
interface EmotionXmlSchema {
msg: {
emoji: {
$: {
type: string;
len: string;
cdnurl: string;
width: string;
height: string;
md5: string;
};
};
gameext: {
$: {
content: string;
type: string;
};
};
};
}
export interface EmojiMessagePayload {
type: number;
len: number;
md5: string;
cdnurl: string;
width: number;
height: number;
gameext?: string;
}
export async function parseEmotionMessagePayload (message: WebMessageRawPayload): Promise<EmojiMessagePayload> {
const jsonPayload: EmotionXmlSchema = await xmlToJson(message.Content)
const len = parseInt(jsonPayload.msg.emoji.$.len, 10) || 0
const width = parseInt(jsonPayload.msg.emoji.$.width, 10) || 0
const height = parseInt(jsonPayload.msg.emoji.$.height, 10) || 0
const cdnurl = jsonPayload.msg.emoji.$.cdnurl
const type = parseInt(jsonPayload.msg.emoji.$.type, 10) || 0
const md5 = jsonPayload.msg.emoji.$.md5
let gameext
if (jsonPayload.msg.gameext) {
const gameextType = parseInt(jsonPayload.msg.gameext.$.type, 10) || 0
const gameextContent = parseInt(jsonPayload.msg.gameext.$.content, 10) || 0
gameext = `<gameext type="${gameextType}" content="${gameextContent}" ></gameext>`
}
return {
cdnurl,
gameext,
height,
len,
md5,
type,
width,
}
}
export function generateEmotionPayload (emojiMessagePayload: EmojiMessagePayload): string {
return `<msg><emoji cdnurl="${emojiMessagePayload.cdnurl}" len="${emojiMessagePayload.len}" md5="${
emojiMessagePayload.md5
}" type="${emojiMessagePayload.type}"/>${emojiMessagePayload.gameext || ''}</msg>`
}