mirai icon indicating copy to clipboard operation
mirai copied to clipboard

支持 MarketFace 的构造

Open cssxsh opened this issue 3 years ago • 6 comments

我发现了这个API

https://gxh.vip.qq.com/qqshow/admindata/comdata/vipEmoji_item_${itemid}/xydata.json

可以查看指定表情相关信息,比较关键的是,可以获取表情的md5 表情原图 https://gxh.vip.qq.com/club/item/parcel/item/9f/9f56b8605ec9739c019df342e4a8694a/300x300.png

对于MarketFaceImpl的构造参数delegate(ImMsgBody.MarketFace)

// 表情文件的md5 比特数组表示
faceId: ab1624acabe1e94f84cf0e0dc0741f93 
// 默认 1
faceInfo: 1 
// faceName 从电脑发送的face,faceName 是空的,会影响mirai判断消息内容是否为空
faceName: [哭哭] 
// 默认 200 但是 填入 0还是 300都不影响 实际显示大小
imageHeight: 200 
imageWidth: 200
// 默认 6
itemType: 6
// 64位hash 字符串表示 估计是访问权限相关,因为存在付费表情,应该存在某种构造免费表情KEY的方式  
// 免费表情KEY 可以使用 骰子 的 key填进去,也可以发送成功
key: d0f95a43b4b9185c 
// 默认 0
mediaType: 0 
// 非特殊表情 置空
mobileParam:  
// 非特殊表情 置空
param:  
//  不定长,比特数组 未知 但是貌似可以和mobileParam param 一样可以置空,不影响表情发送
pbReserve: 0a0608ac0210ac020a0608c80110c8014001 
// 默认 3
subType: 3
// 上述API的itemid
tabId: 209578

cssxsh avatar May 09 '21 12:05 cssxsh

我觉得即使支持了,也不太好管理。不如发图片

Him188 avatar Nov 25 '21 13:11 Him188

我觉得即使支持了,也不太好管理。不如发图片

的确,不过我觉得至少 支持收到的表情 的序列化,只能留存在运行过程中有点鸡肋

cssxsh avatar Nov 25 '21 16:11 cssxsh

最新发现 key 的 构造方式为 timestamp (只取到秒位) 的 md5 的前 64 位

例如 1657008872945, 取 1657008872 的 md5 bcba57b0f826fe45ec742df5ed968963, 再取 前 64 位 bcba57b0f826fe45

timestamp 可以在 https://gxh.vip.qq.com/qqshow/admindata/comdata/vipEmoji_item_${itemid}/xydata.json 返回的数据中获得(但不是100%有,有一定几率没有)

cssxsh avatar Jul 07 '22 06:07 cssxsh

Him188 avatar Jul 07 '22 10:07 Him188

怎么逆出来的 天才

sandtechnology avatar Jul 07 '22 10:07 sandtechnology

最新发现,商城表情的表情包API还有两个 分别是https://i.gtimg.cn/club/item/parcel/{itemid % 10}/{itemid}_android.jsonhttps://gxh.vip.qq.com/club/item/parcel/{itemid % 10}/{itemid}_android.json

如 itemid 为233001https://i.gtimg.cn/club/item/parcel/1/233001_android.json

获取商城表情资源可以使用https://i.gtimg.cn/club/item/parcel/item/{emote_hash[:2]}/{emote_hash}/{h}x{w}.pnghttps://gxh.vip.qq.com/club/item/parcel/item/{emote_hash[:2]}/{emote_hash}/{h}x{w}.png这样只能获取 png 格式的表情图,即使该表情为动态表情,也只能获取第一帧

如 emote_hash 为3f407e9807da0896d83831e9a4dc5f66https://i.gtimg.cn/club/item/parcel/item/3f/3f407e9807da0896d83831e9a4dc5f66/300x300.png

这个资源 url 同时存在一个加密的资源,只需把 url 末尾的{h}x{w}.png改为{h}_{w}即可,加密算法是 TEA 密钥为上面提到的 key,解密成功后识别到动态表情为 GIF 格式

SocialSisterYi avatar Jan 10 '23 07:01 SocialSisterYi