mirai icon indicating copy to clipboard operation
mirai copied to clipboard

定制化分享音乐(MusicShare)卡片底部

Open ryoii opened this issue 2 years ago • 2 comments

曾在远古时期,我分析过音乐分享的卡片消息,通过客户端生成的是也是 LightApp 类型。目前框架内将收到的 LightApp 类型的 MusicShare 做了类型转换,并在发送的时候使用了 OidbCmd0x77 的包。实际上,类似这两个包对于音乐的部分是类似的

这是 lightapp 中部分结构,这个结构可以对应到 pb 的 LightAppStruct#Meta#Music,这也是 mirai 对音乐类的 LightApp 转换时使用的结构

 "music":{
            "action":"",
            "android_pkg_name":"",
            "app_type":1,
            "appid":100497308,
            "desc":"$singer",
            "jumpUrl":"",
            "musicUrl":"$songPath",
            "preview":"$poster",
            "sourceMsgId":"0",
            "source_icon":"",
            "source_url":"",
            "tag":"$tag",
            "title":"$title"
}

这是 OidbCmd077 的部分结构

    @Serializable
    internal class RichMsgBody(
        @JvmField @ProtoNumber(1) val usingArk: Boolean = false,
        @JvmField @ProtoNumber(10) val title: String = "",
        @JvmField @ProtoNumber(11) val summary: String = "",
        @JvmField @ProtoNumber(12) val brief: String = "",
        @JvmField @ProtoNumber(13) val url: String = "",
        @JvmField @ProtoNumber(14) val pictureUrl: String = "",
        @JvmField @ProtoNumber(15) val action: String = "",
        @JvmField @ProtoNumber(16) val musicUrl: String = "",
        @JvmField @ProtoNumber(21) val imageInfo: ImageInfo? = null,
    ) : ProtoBuf

其中缺少了两个很有意思的字段 source_icontag 这两个字段可以生成卡片底部的图标和脚注。注意到在 OidbCmd077 结构中有部分字段没有生成,我猜测应该是包含这两个字段拿到,具体是哪个顺序呢。

新 Feature 需求:

MusicType 的枚举新增一个 Custom 类型,可以修改这两个字段,它会覆盖掉 clientInfo 提供的默认底部的图标和脚注。同时传入另一个 MusicType 作为原本的 clientInfo。

ryoii avatar May 27 '22 09:05 ryoii

真的有么,mirai 的 proto 应该是一两年以内的

Him188 avatar Jun 06 '22 16:06 Him188

真的有么,mirai 的 proto 应该是一两年以内的

我不知道,但是 proto 里不是确实空了些字段么

ryoii avatar Jun 07 '22 02:06 ryoii