diff --git a/protobuf/src/main/java/moe/whitechi73/protobuf/fav/WeiyunAddRichMediaReq.kt b/protobuf/src/main/java/protobuf/fav/WeiyunAddRichMediaReq.kt similarity index 99% rename from protobuf/src/main/java/moe/whitechi73/protobuf/fav/WeiyunAddRichMediaReq.kt rename to protobuf/src/main/java/protobuf/fav/WeiyunAddRichMediaReq.kt index aadd885..3eaae7f 100644 --- a/protobuf/src/main/java/moe/whitechi73/protobuf/fav/WeiyunAddRichMediaReq.kt +++ b/protobuf/src/main/java/protobuf/fav/WeiyunAddRichMediaReq.kt @@ -1,7 +1,7 @@ @file:OptIn(ExperimentalSerializationApi::class) @file:Suppress("ArrayInDataClass") -package moe.whitechi73.protobuf.fav +package protobuf.fav import kotlinx.serialization.ExperimentalSerializationApi import kotlinx.serialization.Serializable diff --git a/protobuf/src/main/java/moe/whitechi73/protobuf/fav/WeiyunAddRichMediaResp.kt b/protobuf/src/main/java/protobuf/fav/WeiyunAddRichMediaResp.kt similarity index 91% rename from protobuf/src/main/java/moe/whitechi73/protobuf/fav/WeiyunAddRichMediaResp.kt rename to protobuf/src/main/java/protobuf/fav/WeiyunAddRichMediaResp.kt index 839eb25..5d5c2f3 100644 --- a/protobuf/src/main/java/moe/whitechi73/protobuf/fav/WeiyunAddRichMediaResp.kt +++ b/protobuf/src/main/java/protobuf/fav/WeiyunAddRichMediaResp.kt @@ -1,5 +1,5 @@ @file:OptIn(ExperimentalSerializationApi::class) -package moe.whitechi73.protobuf.fav +package protobuf.fav import kotlinx.serialization.ExperimentalSerializationApi import kotlinx.serialization.Serializable diff --git a/protobuf/src/main/java/moe/whitechi73/protobuf/fav/WeiyunComm.kt b/protobuf/src/main/java/protobuf/fav/WeiyunComm.kt similarity index 87% rename from protobuf/src/main/java/moe/whitechi73/protobuf/fav/WeiyunComm.kt rename to protobuf/src/main/java/protobuf/fav/WeiyunComm.kt index 3439445..0e8ffe4 100644 --- a/protobuf/src/main/java/moe/whitechi73/protobuf/fav/WeiyunComm.kt +++ b/protobuf/src/main/java/protobuf/fav/WeiyunComm.kt @@ -1,4 +1,4 @@ -package moe.whitechi73.protobuf.fav +package protobuf.fav import kotlinx.serialization.Serializable import kotlinx.serialization.protobuf.ProtoNumber diff --git a/protobuf/src/main/java/moe/whitechi73/protobuf/fav/WeiyunCommonReq.kt b/protobuf/src/main/java/protobuf/fav/WeiyunCommonReq.kt similarity index 93% rename from protobuf/src/main/java/moe/whitechi73/protobuf/fav/WeiyunCommonReq.kt rename to protobuf/src/main/java/protobuf/fav/WeiyunCommonReq.kt index 98f2f40..76e9625 100644 --- a/protobuf/src/main/java/moe/whitechi73/protobuf/fav/WeiyunCommonReq.kt +++ b/protobuf/src/main/java/protobuf/fav/WeiyunCommonReq.kt @@ -1,5 +1,5 @@ @file:OptIn(ExperimentalSerializationApi::class) -package moe.whitechi73.protobuf.fav +package protobuf.fav import kotlinx.serialization.ExperimentalSerializationApi import kotlinx.serialization.Serializable @@ -12,4 +12,4 @@ data class WeiyunCommonReq ( @ProtoNumber(2009) val addRichMediaReq: WeiyunAddRichMediaReq? = null, @ProtoNumber(2010) val fastUploadResourceReq: WeiyunFastUploadResourceReq? = null, -) \ No newline at end of file + ) \ No newline at end of file diff --git a/protobuf/src/main/java/moe/whitechi73/protobuf/fav/WeiyunCommonResp.kt b/protobuf/src/main/java/protobuf/fav/WeiyunCommonResp.kt similarity index 94% rename from protobuf/src/main/java/moe/whitechi73/protobuf/fav/WeiyunCommonResp.kt rename to protobuf/src/main/java/protobuf/fav/WeiyunCommonResp.kt index 92405e6..ae3e922 100644 --- a/protobuf/src/main/java/moe/whitechi73/protobuf/fav/WeiyunCommonResp.kt +++ b/protobuf/src/main/java/protobuf/fav/WeiyunCommonResp.kt @@ -1,5 +1,5 @@ @file:OptIn(ExperimentalSerializationApi::class) -package moe.whitechi73.protobuf.fav +package protobuf.fav import kotlinx.serialization.ExperimentalSerializationApi import kotlinx.serialization.Serializable diff --git a/protobuf/src/main/java/moe/whitechi73/protobuf/fav/WeiyunFastUploadResourceReq.kt b/protobuf/src/main/java/protobuf/fav/WeiyunFastUploadResourceReq.kt similarity index 93% rename from protobuf/src/main/java/moe/whitechi73/protobuf/fav/WeiyunFastUploadResourceReq.kt rename to protobuf/src/main/java/protobuf/fav/WeiyunFastUploadResourceReq.kt index 62b03bd..7b01122 100644 --- a/protobuf/src/main/java/moe/whitechi73/protobuf/fav/WeiyunFastUploadResourceReq.kt +++ b/protobuf/src/main/java/protobuf/fav/WeiyunFastUploadResourceReq.kt @@ -1,5 +1,5 @@ @file:OptIn(ExperimentalSerializationApi::class) -package moe.whitechi73.protobuf.fav +package protobuf.fav import kotlinx.serialization.ExperimentalSerializationApi import kotlinx.serialization.Serializable diff --git a/protobuf/src/main/java/moe/whitechi73/protobuf/fav/WeiyunFastUploadResourceResp.kt b/protobuf/src/main/java/protobuf/fav/WeiyunFastUploadResourceResp.kt similarity index 97% rename from protobuf/src/main/java/moe/whitechi73/protobuf/fav/WeiyunFastUploadResourceResp.kt rename to protobuf/src/main/java/protobuf/fav/WeiyunFastUploadResourceResp.kt index 1fb9cb1..2128159 100644 --- a/protobuf/src/main/java/moe/whitechi73/protobuf/fav/WeiyunFastUploadResourceResp.kt +++ b/protobuf/src/main/java/protobuf/fav/WeiyunFastUploadResourceResp.kt @@ -1,6 +1,6 @@ @file:OptIn(ExperimentalSerializationApi::class) -package moe.whitechi73.protobuf.fav +package protobuf.fav import kotlinx.serialization.ExperimentalSerializationApi import kotlinx.serialization.Serializable diff --git a/protobuf/src/main/java/moe/whitechi73/protobuf/fav/WeiyunGetFavContentReq.kt b/protobuf/src/main/java/protobuf/fav/WeiyunGetFavContentReq.kt similarity index 89% rename from protobuf/src/main/java/moe/whitechi73/protobuf/fav/WeiyunGetFavContentReq.kt rename to protobuf/src/main/java/protobuf/fav/WeiyunGetFavContentReq.kt index a78c705..6a8f842 100644 --- a/protobuf/src/main/java/moe/whitechi73/protobuf/fav/WeiyunGetFavContentReq.kt +++ b/protobuf/src/main/java/protobuf/fav/WeiyunGetFavContentReq.kt @@ -1,5 +1,5 @@ @file:OptIn(ExperimentalSerializationApi::class) -package moe.whitechi73.protobuf.fav +package protobuf.fav import kotlinx.serialization.ExperimentalSerializationApi import kotlinx.serialization.Serializable diff --git a/protobuf/src/main/java/moe/whitechi73/protobuf/fav/WeiyunGetFavContentResp.kt b/protobuf/src/main/java/protobuf/fav/WeiyunGetFavContentResp.kt similarity index 97% rename from protobuf/src/main/java/moe/whitechi73/protobuf/fav/WeiyunGetFavContentResp.kt rename to protobuf/src/main/java/protobuf/fav/WeiyunGetFavContentResp.kt index 67ebcec..da23eb3 100644 --- a/protobuf/src/main/java/moe/whitechi73/protobuf/fav/WeiyunGetFavContentResp.kt +++ b/protobuf/src/main/java/protobuf/fav/WeiyunGetFavContentResp.kt @@ -1,5 +1,5 @@ @file:OptIn(ExperimentalSerializationApi::class) -package moe.whitechi73.protobuf.fav +package protobuf.fav import kotlinx.serialization.ExperimentalSerializationApi import kotlinx.serialization.Serializable diff --git a/protobuf/src/main/java/moe/whitechi73/protobuf/fav/WeiyunGetFavListReq.kt b/protobuf/src/main/java/protobuf/fav/WeiyunGetFavListReq.kt similarity index 95% rename from protobuf/src/main/java/moe/whitechi73/protobuf/fav/WeiyunGetFavListReq.kt rename to protobuf/src/main/java/protobuf/fav/WeiyunGetFavListReq.kt index 3661bb5..71ab471 100644 --- a/protobuf/src/main/java/moe/whitechi73/protobuf/fav/WeiyunGetFavListReq.kt +++ b/protobuf/src/main/java/protobuf/fav/WeiyunGetFavListReq.kt @@ -1,5 +1,5 @@ @file:OptIn(ExperimentalSerializationApi::class) -package moe.whitechi73.protobuf.fav +package protobuf.fav import kotlinx.serialization.ExperimentalSerializationApi import kotlinx.serialization.Serializable diff --git a/protobuf/src/main/java/moe/whitechi73/protobuf/fav/WeiyunGetFavListResp.kt b/protobuf/src/main/java/protobuf/fav/WeiyunGetFavListResp.kt similarity index 97% rename from protobuf/src/main/java/moe/whitechi73/protobuf/fav/WeiyunGetFavListResp.kt rename to protobuf/src/main/java/protobuf/fav/WeiyunGetFavListResp.kt index a5f7ead..cb8f5e5 100644 --- a/protobuf/src/main/java/moe/whitechi73/protobuf/fav/WeiyunGetFavListResp.kt +++ b/protobuf/src/main/java/protobuf/fav/WeiyunGetFavListResp.kt @@ -1,6 +1,6 @@ @file:OptIn(ExperimentalSerializationApi::class) -package moe.whitechi73.protobuf.fav +package protobuf.fav import kotlinx.serialization.ExperimentalSerializationApi import kotlinx.serialization.Serializable diff --git a/protobuf/src/main/java/moe/whitechi73/protobuf/fav/WeiyunMsgHead.kt b/protobuf/src/main/java/protobuf/fav/WeiyunMsgHead.kt similarity index 97% rename from protobuf/src/main/java/moe/whitechi73/protobuf/fav/WeiyunMsgHead.kt rename to protobuf/src/main/java/protobuf/fav/WeiyunMsgHead.kt index 90a071b..558b785 100644 --- a/protobuf/src/main/java/moe/whitechi73/protobuf/fav/WeiyunMsgHead.kt +++ b/protobuf/src/main/java/protobuf/fav/WeiyunMsgHead.kt @@ -1,7 +1,7 @@ @file:OptIn(ExperimentalSerializationApi::class) @file:Suppress("ArrayInDataClass") -package moe.whitechi73.protobuf.fav +package protobuf.fav import kotlinx.serialization.ExperimentalSerializationApi import kotlinx.serialization.Serializable diff --git a/protobuf/src/main/java/moe/whitechi73/protobuf/group_file_common/FolderInfo.kt b/protobuf/src/main/java/protobuf/group_file_common/FolderInfo.kt similarity index 95% rename from protobuf/src/main/java/moe/whitechi73/protobuf/group_file_common/FolderInfo.kt rename to protobuf/src/main/java/protobuf/group_file_common/FolderInfo.kt index f5c4cc7..94d016d 100644 --- a/protobuf/src/main/java/moe/whitechi73/protobuf/group_file_common/FolderInfo.kt +++ b/protobuf/src/main/java/protobuf/group_file_common/FolderInfo.kt @@ -1,4 +1,4 @@ -package moe.whitechi73.protobuf.group_file_common +package protobuf.group_file_common import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable diff --git a/protobuf/src/main/java/protobuf/guild/GetGuildFeeds.kt b/protobuf/src/main/java/protobuf/guild/GetGuildFeeds.kt new file mode 100644 index 0000000..269d699 --- /dev/null +++ b/protobuf/src/main/java/protobuf/guild/GetGuildFeeds.kt @@ -0,0 +1,405 @@ +@file:OptIn(ExperimentalSerializationApi::class) + +package protobuf.guild + +import kotlinx.serialization.ExperimentalSerializationApi +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable +import kotlinx.serialization.protobuf.ProtoNumber +import protobuf.qweb.QWebExtInfo + +@Serializable +data class GetGuildFeedsReq( + @ProtoNumber(1) var count: Int, + @ProtoNumber(2) var from: Int? = null, + @ProtoNumber(3) var feedAttchInfo: ByteArray? = null, + @ProtoNumber(4) var guildId: ULong? = null, + @ProtoNumber(5) var getType: Int? = null, + @ProtoNumber(6) var sortOption: Int? = null, + @ProtoNumber(7) var u7: Int? = null, + @ProtoNumber(8) var u8: Int? = null, + @ProtoNumber(9) var u9: ByteArray? = null, +) + +@Serializable +data class GetGuildFeedsRsp( + @ProtoNumber(1) var vecFeed: List? = null, + @ProtoNumber(2) var isFinish: Int = 0, + //@ProtoNumber(3) var feedAttchInfo: ByteArray? = null, + //@ProtoNumber(4) var traceId: String? = null, +) + +@Serializable +data class StFeed( + @SerialName("id") @ProtoNumber(1) var id: String, + @SerialName("title") @ProtoNumber(2) var title: StRichText, + @SerialName("poster") @ProtoNumber(4) var poster: StUser? = null, + @SerialName("videos") @ProtoNumber(5) var videos: List? = null, + @SerialName("contents") @ProtoNumber(6) var contents: StRichText? = null, + @SerialName("create_time") @ProtoNumber(7) var createTime: ULong? = null, + @SerialName("comment_count") @ProtoNumber(9) var commentCount: UInt? = null, + + @SerialName("comments") @ProtoNumber(10) var vecComment: List? = null, + @SerialName("share") @ProtoNumber(11) var share: StShare? = null, + @SerialName("visitor_info") @ProtoNumber(12) var visitorInfo: StVisitor? = null, + @SerialName("images") @ProtoNumber(13) var images: List? = null, + @SerialName("poi") @ProtoNumber(14) var poiInfo: StPoiInfoV2? = null, + @SerialName("op_mask") @ProtoNumber(17) var opMask: List? = null, + @SerialName("channel_info") @ProtoNumber(21) var channelInfo: StChannelInfo? = null, + @SerialName("create_time_ns") @ProtoNumber(22) var createTimeNs: ULong? = null, + @SerialName("update_time") @ProtoNumber(28) var updateTime: ULong? = null, + @SerialName("total_like") @ProtoNumber(29) var totalLike: StTotalLike? = null, + @SerialName("discussion_mum") @ProtoNumber(31) var discussionMum: UInt? = null, + @SerialName("feed_type") @ProtoNumber(32) var feedType: UInt? = null, + @SerialName("default_background_img") @ProtoNumber(34) var defaultBackgroundImg: String? = null, + @SerialName("group_code") @ProtoNumber(35) var groupCode: ULong? = null, +) + +@Serializable +data class StTotalLike ( + @SerialName("count") @ProtoNumber(1) var likeCount: UInt? = null, + @SerialName("is_clicked") @ProtoNumber(2) var isClicked: UInt? = null, +) + +@Serializable +data class StPoiInfoV2( + @SerialName("poi_id") @ProtoNumber(1) var poiId: String? = null, + @SerialName("name") @ProtoNumber(2) var name: String? = null, + @SerialName("poi_type") @ProtoNumber(3) var poiType: Int? = null, + @SerialName("type_name") @ProtoNumber(4) var typeName: String? = null, + @SerialName("address") @ProtoNumber(5) var address: String? = null, + @SerialName("district_code") @ProtoNumber(6) var districtCode: Int? = null, + @SerialName("gps") @ProtoNumber(7) var gps: StGPSV2? = null, + @SerialName("distance") @ProtoNumber(8) var distance: Int? = null, + @SerialName("hot_value") @ProtoNumber(9) var hotValue: Int? = null, + @SerialName("phone") @ProtoNumber(10) var phone: String? = null, + @SerialName("country") @ProtoNumber(11) var country: String? = null, + @SerialName("province") @ProtoNumber(12) var province: String? = null, + @SerialName("city") @ProtoNumber(13) var city: String? = null, + @SerialName("poi_num") @ProtoNumber(14) var poiNum: Int? = null, + @SerialName("poi_order_type") @ProtoNumber(15) var poiOrderType: Int? = null, + @SerialName("default_name") @ProtoNumber(16) var defaultName: String? = null, + @SerialName("district") @ProtoNumber(17) var district: String? = null, + @SerialName("dian_ping_id") @ProtoNumber(18) var dianPingId: String? = null, + @SerialName("distance_text") @ProtoNumber(19) var distanceText: String? = null, + @SerialName("display_name") @ProtoNumber(20) var displayName: String? = null, +) + +@Serializable +data class StGPSV2( + @SerialName("lat") @ProtoNumber(1) var latitude: Long? = null, + @SerialName("lon") @ProtoNumber(2) var longitude: Long? = null, +) + +@Serializable +data class StShare( + @SerialName("title") @ProtoNumber(1) var title: String? = null, + @SerialName("desc") @ProtoNumber(2) var desc: String? = null, + @SerialName("type") @ProtoNumber(3) var type: UInt? = null, + @SerialName("url") @ProtoNumber(4) var url: String? = null, + @SerialName("author") @ProtoNumber(5) var author: StUser? = null, + @SerialName("poster") @ProtoNumber(6) var poster: StUser? = null, + @SerialName("videos") @ProtoNumber(7) var videos: List? = null, + @SerialName("short_url") @ProtoNumber(8) var shorturl: String? = null, + @SerialName("share_card_info") @ProtoNumber(9) var shareCardInfo: String? = null, + //@ProtoNumber(10) var shareQzoneInfo: Any? = null, + @SerialName("images") @ProtoNumber(11) var images: List? = null, + @SerialName("publish_total_user") @ProtoNumber(12) var publishTotalUser: UInt? = null, + @SerialName("shared_count") @ProtoNumber(13) var sharedCount: UInt? = null, + //@ProtoNumber(14) var channelShareInfo: Any? = null, +) + +@Serializable +data class StVisitor( + @SerialName("view_count") + @ProtoNumber(1) val viewCount: UInt? = null, + @SerialName("recome_count") + @ProtoNumber(3) val recomeCount: UInt? = null, + @SerialName("view_desc") + @ProtoNumber(4) val viewDesc: String? = null, +) + +@Serializable +data class StComment( + @SerialName("id") @ProtoNumber(1) var id: String? = null, + @SerialName("poster") @ProtoNumber(2) var postUser: StUser? = null, + @SerialName("create_time") @ProtoNumber(3) var createTime: ULong? = null, + @SerialName("content") @ProtoNumber(4) var content: String? = null, + @SerialName("reply_count") @ProtoNumber(5) var replyCount: UInt? = null, + @SerialName("replies") @ProtoNumber(6) var vecReply: List? = null, + //@ProtoNumber(7) var busiData: Any? = null, + @SerialName("like_info") @ProtoNumber(8) var likeInfo: StLike? = null, + @SerialName("type_flag") @ProtoNumber(9) var typeFlag: UInt? = null, + @SerialName("at_uin_list") @ProtoNumber(10) var atUinList: List? = null, + @SerialName("type_flag2") @ProtoNumber(11) var typeFlag2: UInt? = null, + @SerialName("create_time_ns") @ProtoNumber(12) var createTimeNs: ULong? = null, + @SerialName("store_ext_info") @ProtoNumber(13) var storeExtInfo: List? = null, + @SerialName("third_id") @ProtoNumber(14) var thirdId: String? = null, + @SerialName("source_type") @ProtoNumber(15) var sourceType: UInt? = null, + @SerialName("rich_contents") @ProtoNumber(16) var richContents: StRichText? = null, + @SerialName("images") @ProtoNumber(17) var images: List? = null, + @SerialName("sequence") @ProtoNumber(18) var sequence: ULong? = null, + @SerialName("next_page_reply") @ProtoNumber(19) var nextPageReply: Boolean? = null, + @SerialName("attach_info") @ProtoNumber(20) var attachInfo: String? = null, +) + +@Serializable +data class StReply( + @SerialName("id") @ProtoNumber(1) var id: String? = null, + @SerialName("poster") @ProtoNumber(2) var postUser: StUser? = null, + @SerialName("create_time") @ProtoNumber(3) var createTime: ULong? = null, + @SerialName("content") @ProtoNumber(4) var content: String? = null, + @SerialName("target") @ProtoNumber(5) var targetUser: StUser? = null, + //@ProtoNumber(6) var busiData: ByteArray? = null, + @SerialName("like_info") @ProtoNumber(7) var likeInfo: StLike? = null, + @SerialName("type_flag") @ProtoNumber(8) var typeFlag: UInt? = null, + @SerialName("modify_flag") @ProtoNumber(9) var modifyflag: UInt? = null, + @SerialName("at_uin_list") @ProtoNumber(10) var atUinList: List? = null, + @SerialName("type_flag2") @ProtoNumber(11) var typeFlag2: UInt? = null, + @SerialName("create_time_ns") @ProtoNumber(12) var createTimeNs: ULong? = null, + @SerialName("store_ext_info") @ProtoNumber(13) var storeExtInfo: List? = null, + @SerialName("third_id") @ProtoNumber(14) var thirdId: String? = null, + @SerialName("target_reply_id") @ProtoNumber(15) var targetReplyID: String? = null, + @SerialName("source_type") @ProtoNumber(16) var sourceType: UInt? = null, + @SerialName("rich_contents") @ProtoNumber(17) var richContents: StRichText? = null, + @SerialName("images") @ProtoNumber(18) var images: List? = null, +) + +@Serializable +data class StLike( + @SerialName("id") + @ProtoNumber(1) var id: String? = null, + @SerialName("count") + @ProtoNumber(2) var count: UInt? = null, + @SerialName("status") + @ProtoNumber(3) var status: UInt? = null, + @SerialName("like_uin_list") + @ProtoNumber(4) var vecUser: List? = null, + @SerialName("poster") + @ProtoNumber(6) var postUser: StUser? = null, + @SerialName("has_liked_count") + @ProtoNumber(7) var hasLikedCount: UInt? = null, + @SerialName("owner_status") + @ProtoNumber(8) var ownerStatus: UInt? = null, + @SerialName("jump_url") + @ProtoNumber(9) var jumpUrl: String? = null, +) + +@Serializable +data class StVideo( + @SerialName("file_id") @ProtoNumber(1) var fileId: String? = null, + @SerialName("file_size") @ProtoNumber(2) var fileSize: UInt? = null, + @SerialName("duration") @ProtoNumber(3) var duration: UInt? = null, + @SerialName("width") @ProtoNumber(4) var width: UInt? = null, + @SerialName("height") @ProtoNumber(5) var height: UInt? = null, + @SerialName("play_url") @ProtoNumber(6) var playUrl: String? = null, + @SerialName("trans_status") @ProtoNumber(7) var transStatus: UInt? = null, + @SerialName("video_prior") @ProtoNumber(8) var videoPrior: UInt? = null, + @SerialName("video_rate") @ProtoNumber(9) var videoRate: UInt? = null, + //@ProtoNumber(10) var vecVideoUrl: String? = null, + //@ProtoNumber(11) var busiData: Any? = null, + @SerialName("approval_status") @ProtoNumber(12) var approvalStatus: UInt? = null, + @SerialName("video_source") @ProtoNumber(13) var videoSource: UInt? = null, + @SerialName("media_quality_rank") @ProtoNumber(14) var mediaQualityRank: UInt? = null, + @SerialName("media_quality_score") @ProtoNumber(15) var mediaQualityScore: Float? = null, + @SerialName("md5") @ProtoNumber(16) var videoMD5: String? = null, + @SerialName("is_quic") @ProtoNumber(17) var isQuic: UInt? = null, + @SerialName("orientation") @ProtoNumber(18) var orientation: Int? = null, + @SerialName("cover") @ProtoNumber(19) var cover: StImage? = null, + @SerialName("pattern_id") @ProtoNumber(20) var patternId: String? = null, + @SerialName("display_index") @ProtoNumber(21) var displayIndex: UInt? = null, +) + +@Serializable +data class StRichText( + @SerialName("contents") @ProtoNumber(1) var contents: List? = null, + @SerialName("images") @ProtoNumber(2) var images: List? = null, +) + +@Serializable +data class StRichTextContent( + @SerialName("type") @ProtoNumber(1) var type: Int? = null, + @SerialName("pattern_id") @ProtoNumber(2) var patternId: String? = null, + @SerialName("text") @ProtoNumber(3) var textContent: StRichTextTextContent? = null, + @SerialName("at") @ProtoNumber(4) var atContent: StRichTextAtContent? = null, + @SerialName("url") @ProtoNumber(5) var urlContent: StRichTextURLContent? = null, + @SerialName("emoji") @ProtoNumber(6) var emojiContent: StRichTextEmojiContent? = null, + @SerialName("channel") @ProtoNumber(7) var channelContent: StRichTextChannelContent? = null, + @SerialName("guild") @ProtoNumber(8) var guildContent: StRichTextGuildContent? = null, + @SerialName("icon") @ProtoNumber(9) var iconContent: StRichTextIconContent? = null, +) + +@Serializable +data class StRichTextIconContent( + @SerialName("url") @ProtoNumber(1) val url: String? = null +) +@Serializable +data class StRichTextGuildContent( + @SerialName("channel_info") @ProtoNumber(1) val channelInfo: StChannelInfo? = null +) + +@Serializable +data class StRichTextChannelContent( + @SerialName("channel_info") @ProtoNumber(1) val channelInfo: StChannelInfo? = null +) + +@Serializable +data class StChannelInfo( + //@SerialName("sign") @ProtoNumber(1) var sign: String? = null, + @SerialName("name") + @ProtoNumber(2) var name: String? = null, + @SerialName("icon_url") + @ProtoNumber(3) var iconUrl: String? = null, + @SerialName("type") + @ProtoNumber(4) var privateType: Int? = null, + @SerialName("guild_name") + @ProtoNumber(5) var guildName: String? = null, + @SerialName("hot_icon") + @ProtoNumber(6) var hotIcon: String? = null, + @SerialName("hot_index") + @ProtoNumber(7) var hotIndex: UInt? = null, +) + +@Serializable +data class StRichTextEmojiContent( + @ProtoNumber(1) var id: String? = null, + @ProtoNumber(2) var type: String? = null, + @ProtoNumber(3) var name: String? = null, + @ProtoNumber(4) var url: String? = null, +) + +@Serializable +data class StRichTextURLContent( + @ProtoNumber(1) var url: String? = null, + @SerialName("display") @ProtoNumber(2) var displayText: String? = null, + @ProtoNumber(3) var type: Int? = null, + @SerialName("play_url") @ProtoNumber(4) var playUrl: String? = null, + @SerialName("platform") @ProtoNumber(5) var thirdPlatform: ThirdPlatform? = null, + @SerialName("third_video_info") @ProtoNumber(6) var thirdVideoInfo: CommThirdVideoInfo? = null, +) + +@Serializable +data class CommThirdVideoInfo( + @SerialName("cover") @ProtoNumber(1) val cover: String? = null, + @SerialName("duration") @ProtoNumber(2) val duration: ULong? = null, +) + +@Serializable +data class ThirdPlatform( + @ProtoNumber(1) var icon: String? = null, + @ProtoNumber(2) var name: String? = null, +) + +@Serializable +data class StRichTextTextContent( + @ProtoNumber(1) var text: String? = null +) + +@Serializable +data class StRichTextAtContent( + @ProtoNumber(1) var type: Int? = null, + @SerialName("guild_info") @ProtoNumber(2) var guildInfo: GuildInfo? = null, + @SerialName("role_info") @ProtoNumber(3) var roleGroupId: RoleGroupInfo? = null, + @ProtoNumber(4) var user: StUser? = null, +) + +@Serializable +data class StUser( + @ProtoNumber(1) var id: String? = null, + @ProtoNumber(2) var nick: String? = null, + @ProtoNumber(3) var icon: StIconInfo? = null, + @ProtoNumber(4) var desc: String? = null, + @SerialName("follow_state") @ProtoNumber(5) var followState: UInt? = null, + @ProtoNumber(6) var type: UInt? = null, + @ProtoNumber(7) var sex: UInt? = null, + @ProtoNumber(8) var birthday: ULong? = null, + @ProtoNumber(9) var school: String? = null, + @ProtoNumber(11) var location: String? = null, + //@ProtoNumber(12) var busiData: ByteArray? = null, + @SerialName("frd") @ProtoNumber(13) var frdState: UInt? = null, + @SerialName("relation_state") @ProtoNumber(14) var relationState: UInt? = null, + @SerialName("black_state") @ProtoNumber(15) var blackState: UInt? = null, + @ProtoNumber(16) var medal: StTagMedalInfo? = null, + @ProtoNumber(17) var constellation: Int? = null, + @SerialName("jump_url") @ProtoNumber(18) var jumpUrl: String? = null, + @SerialName("location_code") @ProtoNumber(19) var locationCode: String? = null, + @SerialName("third_id") @ProtoNumber(20) var thirdId: String? = null, + @ProtoNumber(21) var company: String? = null, + @SerialName("certification_desc") @ProtoNumber(22) var certificationDesc: String? = null, + @SerialName("desc_type") @ProtoNumber(23) var descType: UInt? = null, + //@ProtoNumber(24) var channelUserInfo: Any? = null, + //@SerialName("login_id") @ProtoNumber(25) var loginId: String? = null, + @ProtoNumber(26) var uin: ULong? = null, + @SerialName("nick_flag") @ProtoNumber(27) var nickFlag: UInt? = null, + @SerialName("manage_tag") @ProtoNumber(28) var manageTag: CustomManageTag? = null, + //@SerialName("personal_medal") @ProtoNumber(29) var personalMedal: PersonalMedal? = null, +) + +@Serializable +data class PersonalMedal( + @SerialName("start") @ProtoNumber(1) val startTime: ULong? = null, + @SerialName("end") @ProtoNumber(2) val endTime: ULong? = null, + @ProtoNumber(3) var url: String? = null, +) + +@Serializable +data class StTagMedalInfo( + @SerialName("id") @ProtoNumber(1) val tagId: ULong? = null, + @SerialName("name") @ProtoNumber(2) val tagName: String? = null, + @ProtoNumber(3) val rank: ULong? = null, +) + +@Serializable +data class CustomManageTag( + @ProtoNumber(3) val color: UInt? = null, + @SerialName("name") @ProtoNumber(2) val tagName: String? = null, +) + +@Serializable +data class StIconInfo( + //@SerialName("url_40") @ProtoNumber(1) var iconUrl40: String? = null, + //@SerialName("url_100") @ProtoNumber(2) var iconUrl100: String? = null, + //@SerialName("url_140") @ProtoNumber(3) var iconUrl140: String? = null, + //@SerialName("url_640") @ProtoNumber(4) var iconUrl640: String? = null, + @SerialName("url") @ProtoNumber(5) var iconUrl: String? = null, +) + +@Serializable +data class RoleGroupInfo( + @SerialName("role") @ProtoNumber(1) var roleId: ULong? = null, + @ProtoNumber(2) var name: String? = null, + @ProtoNumber(3) var color: ULong? = null, +) + +@Serializable +data class GuildInfo( + @SerialName("guild_id") @ProtoNumber(1) var guildId: ULong? = null, + @ProtoNumber(2) var name: String? = null, + @SerialName("join_time") @ProtoNumber(3) var joinTime: ULong? = null, +) + +@Serializable +data class StImage( + @ProtoNumber(1) var width: UInt? = null, + @ProtoNumber(2) var height: UInt? = null, + @ProtoNumber(3) var picUrl: String? = null, + @SerialName("image_urls") @ProtoNumber(4) var vecImageUrl: List? = null, + @SerialName("id") @ProtoNumber(5) var picId: String? = null, + //@ProtoNumber(6) var busiData: Any? = null, + @SerialName("md5") @ProtoNumber(7) var imageMD5: String? = null, + @SerialName("layer_pic_url") @ProtoNumber(8) var layerPicUrl: String? = null, + @SerialName("pattern_id") @ProtoNumber(9) var patternId: String? = null, + @SerialName("display_index") @ProtoNumber(10) var displayIndex: Int? = null, + @SerialName("size") @ProtoNumber(11) var origSize: UInt? = null, + @SerialName("is_original") @ProtoNumber(12) var isOrig: Boolean? = null, + @SerialName("is_gif") @ProtoNumber(13) var isGif: Boolean? = null, +) + +@Serializable +data class StImageUrl( + @SerialName("level_type") @ProtoNumber(1) var levelType: UInt? = null, + @ProtoNumber(2) var url: String? = null, + @ProtoNumber(3) var width: UInt? = null, + @ProtoNumber(4) var height: UInt? = null, + //@ProtoNumber(5) var busiData: Any? = null, +) \ No newline at end of file diff --git a/protobuf/src/main/java/moe/whitechi73/protobuf/message/Message.kt b/protobuf/src/main/java/protobuf/message/Message.kt similarity index 97% rename from protobuf/src/main/java/moe/whitechi73/protobuf/message/Message.kt rename to protobuf/src/main/java/protobuf/message/Message.kt index 34b1306..c5fffa1 100644 --- a/protobuf/src/main/java/moe/whitechi73/protobuf/message/Message.kt +++ b/protobuf/src/main/java/protobuf/message/Message.kt @@ -1,5 +1,5 @@ @file:OptIn(ExperimentalSerializationApi::class) -package moe.whitechi73.protobuf.message +package protobuf.message import kotlinx.serialization.ExperimentalSerializationApi import kotlinx.serialization.Serializable diff --git a/protobuf/src/main/java/moe/whitechi73/protobuf/oidb/TrpcOidb.kt b/protobuf/src/main/java/protobuf/oidb/TrpcOidb.kt similarity index 69% rename from protobuf/src/main/java/moe/whitechi73/protobuf/oidb/TrpcOidb.kt rename to protobuf/src/main/java/protobuf/oidb/TrpcOidb.kt index 8c56bab..0280312 100644 --- a/protobuf/src/main/java/moe/whitechi73/protobuf/oidb/TrpcOidb.kt +++ b/protobuf/src/main/java/protobuf/oidb/TrpcOidb.kt @@ -1,7 +1,5 @@ -@file:OptIn(ExperimentalSerializationApi::class) -package moe.whitechi73.protobuf.oidb +package protobuf.oidb -import kotlinx.serialization.ExperimentalSerializationApi import kotlinx.serialization.Serializable import kotlinx.serialization.protobuf.ProtoNumber @@ -11,4 +9,4 @@ data class TrpcOidb( @ProtoNumber(2) val service: Int = Int.MIN_VALUE, @ProtoNumber(4) val buffer: ByteArray, @ProtoNumber(12) val flag: Int = Int.MIN_VALUE, -) +) \ No newline at end of file diff --git a/protobuf/src/main/java/moe/whitechi73/protobuf/oidb/cmd0x6d7/Oidb0x6d7.kt b/protobuf/src/main/java/protobuf/oidb/cmd0x6d7/Oidb0x6d7.kt similarity index 96% rename from protobuf/src/main/java/moe/whitechi73/protobuf/oidb/cmd0x6d7/Oidb0x6d7.kt rename to protobuf/src/main/java/protobuf/oidb/cmd0x6d7/Oidb0x6d7.kt index fdee8dc..398eb5f 100644 --- a/protobuf/src/main/java/moe/whitechi73/protobuf/oidb/cmd0x6d7/Oidb0x6d7.kt +++ b/protobuf/src/main/java/protobuf/oidb/cmd0x6d7/Oidb0x6d7.kt @@ -1,11 +1,11 @@ @file:OptIn(ExperimentalSerializationApi::class) -package moe.whitechi73.protobuf.oidb.cmd0x6d7 +package protobuf.oidb.cmd0x6d7 import kotlinx.serialization.ExperimentalSerializationApi import kotlinx.serialization.Serializable import kotlinx.serialization.protobuf.ProtoNumber -import moe.whitechi73.protobuf.group_file_common.FolderInfo +import protobuf.group_file_common.FolderInfo @Serializable data class Oidb0x6d7ReqBody( diff --git a/protobuf/src/main/java/moe/whitechi73/protobuf/oidb/cmd0x9082/Oidb0x9082.kt b/protobuf/src/main/java/protobuf/oidb/cmd0x9082/Oidb0x9082.kt similarity index 90% rename from protobuf/src/main/java/moe/whitechi73/protobuf/oidb/cmd0x9082/Oidb0x9082.kt rename to protobuf/src/main/java/protobuf/oidb/cmd0x9082/Oidb0x9082.kt index c118b30..4095c40 100644 --- a/protobuf/src/main/java/moe/whitechi73/protobuf/oidb/cmd0x9082/Oidb0x9082.kt +++ b/protobuf/src/main/java/protobuf/oidb/cmd0x9082/Oidb0x9082.kt @@ -1,4 +1,4 @@ -package moe.whitechi73.protobuf.oidb.cmd0x9082 +package protobuf.oidb.cmd0x9082 import kotlinx.serialization.Serializable import kotlinx.serialization.protobuf.ProtoNumber diff --git a/protobuf/src/main/java/moe/whitechi73/protobuf/oidb/cmd0xf16/Oidb0xf16.kt b/protobuf/src/main/java/protobuf/oidb/cmd0xf16/Oidb0xf16.kt similarity index 89% rename from protobuf/src/main/java/moe/whitechi73/protobuf/oidb/cmd0xf16/Oidb0xf16.kt rename to protobuf/src/main/java/protobuf/oidb/cmd0xf16/Oidb0xf16.kt index 8301882..4039e99 100644 --- a/protobuf/src/main/java/moe/whitechi73/protobuf/oidb/cmd0xf16/Oidb0xf16.kt +++ b/protobuf/src/main/java/protobuf/oidb/cmd0xf16/Oidb0xf16.kt @@ -1,4 +1,4 @@ -package moe.whitechi73.protobuf.oidb.cmd0xf16 +package protobuf.oidb.cmd0xf16 import kotlinx.serialization.Serializable import kotlinx.serialization.protobuf.ProtoNumber diff --git a/protobuf/src/main/java/moe/whitechi73/protobuf/oidb/cmd0xf88/Oidb0xf88.kt b/protobuf/src/main/java/protobuf/oidb/cmd0xf88/Oidb0xf88.kt similarity index 99% rename from protobuf/src/main/java/moe/whitechi73/protobuf/oidb/cmd0xf88/Oidb0xf88.kt rename to protobuf/src/main/java/protobuf/oidb/cmd0xf88/Oidb0xf88.kt index bafec7b..ba22444 100644 --- a/protobuf/src/main/java/moe/whitechi73/protobuf/oidb/cmd0xf88/Oidb0xf88.kt +++ b/protobuf/src/main/java/protobuf/oidb/cmd0xf88/Oidb0xf88.kt @@ -1,6 +1,6 @@ @file:OptIn(ExperimentalSerializationApi::class) -package moe.whitechi73.protobuf.oidb.cmd0xf88 +package protobuf.oidb.cmd0xf88 import kotlinx.serialization.ExperimentalSerializationApi import kotlinx.serialization.Serializable diff --git a/protobuf/src/main/java/moe/whitechi73/protobuf/oidb/cmd0xfc2/Oidb0xfc2.kt b/protobuf/src/main/java/protobuf/oidb/cmd0xfc2/Oidb0xfc2.kt similarity index 98% rename from protobuf/src/main/java/moe/whitechi73/protobuf/oidb/cmd0xfc2/Oidb0xfc2.kt rename to protobuf/src/main/java/protobuf/oidb/cmd0xfc2/Oidb0xfc2.kt index 6113fea..e395e11 100644 --- a/protobuf/src/main/java/moe/whitechi73/protobuf/oidb/cmd0xfc2/Oidb0xfc2.kt +++ b/protobuf/src/main/java/protobuf/oidb/cmd0xfc2/Oidb0xfc2.kt @@ -1,5 +1,5 @@ @file:OptIn(ExperimentalSerializationApi::class) -package moe.whitechi73.protobuf.oidb.cmd0xfc2 +package protobuf.oidb.cmd0xfc2 import kotlinx.serialization.ExperimentalSerializationApi import kotlinx.serialization.Serializable diff --git a/protobuf/src/main/java/moe/whitechi73/protobuf/oidb/cmx0xf57/Oidb0xf57.kt b/protobuf/src/main/java/protobuf/oidb/cmx0xf57/Oidb0xf57.kt similarity index 98% rename from protobuf/src/main/java/moe/whitechi73/protobuf/oidb/cmx0xf57/Oidb0xf57.kt rename to protobuf/src/main/java/protobuf/oidb/cmx0xf57/Oidb0xf57.kt index 133bb2f..a570d9f 100644 --- a/protobuf/src/main/java/moe/whitechi73/protobuf/oidb/cmx0xf57/Oidb0xf57.kt +++ b/protobuf/src/main/java/protobuf/oidb/cmx0xf57/Oidb0xf57.kt @@ -1,6 +1,6 @@ @file:OptIn(ExperimentalSerializationApi::class) -package moe.whitechi73.protobuf.oidb.cmx0xf57 +package protobuf.oidb.cmx0xf57 import kotlinx.serialization.ExperimentalSerializationApi import kotlinx.serialization.Serializable diff --git a/protobuf/src/main/java/moe/whitechi73/protobuf/push/C2CCommonTipsEvent.kt b/protobuf/src/main/java/protobuf/push/C2CCommonTipsEvent.kt similarity index 90% rename from protobuf/src/main/java/moe/whitechi73/protobuf/push/C2CCommonTipsEvent.kt rename to protobuf/src/main/java/protobuf/push/C2CCommonTipsEvent.kt index 5ef2b7f..02aff08 100644 --- a/protobuf/src/main/java/moe/whitechi73/protobuf/push/C2CCommonTipsEvent.kt +++ b/protobuf/src/main/java/protobuf/push/C2CCommonTipsEvent.kt @@ -1,4 +1,4 @@ -package moe.whitechi73.protobuf.push +package protobuf.push import kotlinx.serialization.Serializable import kotlinx.serialization.protobuf.ProtoNumber diff --git a/protobuf/src/main/java/moe/whitechi73/protobuf/push/C2CRecallEvent.kt b/protobuf/src/main/java/protobuf/push/C2CRecallEvent.kt similarity index 92% rename from protobuf/src/main/java/moe/whitechi73/protobuf/push/C2CRecallEvent.kt rename to protobuf/src/main/java/protobuf/push/C2CRecallEvent.kt index b30511f..c6d563a 100644 --- a/protobuf/src/main/java/moe/whitechi73/protobuf/push/C2CRecallEvent.kt +++ b/protobuf/src/main/java/protobuf/push/C2CRecallEvent.kt @@ -1,4 +1,4 @@ -package moe.whitechi73.protobuf.push +package protobuf.push import kotlinx.serialization.Serializable import kotlinx.serialization.protobuf.ProtoNumber diff --git a/protobuf/src/main/java/moe/whitechi73/protobuf/push/EssenceMessageEvent.kt b/protobuf/src/main/java/protobuf/push/EssenceMessageEvent.kt similarity index 76% rename from protobuf/src/main/java/moe/whitechi73/protobuf/push/EssenceMessageEvent.kt rename to protobuf/src/main/java/protobuf/push/EssenceMessageEvent.kt index a3e7070..3ecd77a 100644 --- a/protobuf/src/main/java/moe/whitechi73/protobuf/push/EssenceMessageEvent.kt +++ b/protobuf/src/main/java/protobuf/push/EssenceMessageEvent.kt @@ -1,4 +1,4 @@ -package moe.whitechi73.protobuf.push +package protobuf.push import kotlinx.serialization.Serializable import kotlinx.serialization.protobuf.ProtoNumber diff --git a/protobuf/src/main/java/moe/whitechi73/protobuf/push/FriendApplyEvent.kt b/protobuf/src/main/java/protobuf/push/FriendApplyEvent.kt similarity index 93% rename from protobuf/src/main/java/moe/whitechi73/protobuf/push/FriendApplyEvent.kt rename to protobuf/src/main/java/protobuf/push/FriendApplyEvent.kt index 756e510..510a08f 100644 --- a/protobuf/src/main/java/moe/whitechi73/protobuf/push/FriendApplyEvent.kt +++ b/protobuf/src/main/java/protobuf/push/FriendApplyEvent.kt @@ -1,4 +1,4 @@ -package moe.whitechi73.protobuf.push +package protobuf.push import kotlinx.serialization.Serializable import kotlinx.serialization.protobuf.ProtoNumber diff --git a/protobuf/src/main/java/moe/whitechi73/protobuf/push/GroupAdminChangeEvent.kt b/protobuf/src/main/java/protobuf/push/GroupAdminChangeEvent.kt similarity index 87% rename from protobuf/src/main/java/moe/whitechi73/protobuf/push/GroupAdminChangeEvent.kt rename to protobuf/src/main/java/protobuf/push/GroupAdminChangeEvent.kt index 3c11031..342676e 100644 --- a/protobuf/src/main/java/moe/whitechi73/protobuf/push/GroupAdminChangeEvent.kt +++ b/protobuf/src/main/java/protobuf/push/GroupAdminChangeEvent.kt @@ -1,4 +1,4 @@ -package moe.whitechi73.protobuf.push +package protobuf.push import kotlinx.serialization.Serializable import kotlinx.serialization.protobuf.ProtoNumber diff --git a/protobuf/src/main/java/moe/whitechi73/protobuf/push/GroupAdminChangedOperation.kt b/protobuf/src/main/java/protobuf/push/GroupAdminChangedOperation.kt similarity index 91% rename from protobuf/src/main/java/moe/whitechi73/protobuf/push/GroupAdminChangedOperation.kt rename to protobuf/src/main/java/protobuf/push/GroupAdminChangedOperation.kt index ce598f5..0563c86 100644 --- a/protobuf/src/main/java/moe/whitechi73/protobuf/push/GroupAdminChangedOperation.kt +++ b/protobuf/src/main/java/protobuf/push/GroupAdminChangedOperation.kt @@ -1,4 +1,4 @@ -package moe.whitechi73.protobuf.push +package protobuf.push import kotlinx.serialization.Serializable import kotlinx.serialization.protobuf.ProtoNumber diff --git a/protobuf/src/main/java/moe/whitechi73/protobuf/push/GroupApplyEvent.kt b/protobuf/src/main/java/protobuf/push/GroupApplyEvent.kt similarity index 88% rename from protobuf/src/main/java/moe/whitechi73/protobuf/push/GroupApplyEvent.kt rename to protobuf/src/main/java/protobuf/push/GroupApplyEvent.kt index 4b4e834..20493f0 100644 --- a/protobuf/src/main/java/moe/whitechi73/protobuf/push/GroupApplyEvent.kt +++ b/protobuf/src/main/java/protobuf/push/GroupApplyEvent.kt @@ -1,4 +1,4 @@ -package moe.whitechi73.protobuf.push +package protobuf.push import kotlinx.serialization.Serializable import kotlinx.serialization.protobuf.ProtoNumber diff --git a/protobuf/src/main/java/moe/whitechi73/protobuf/push/GroupBanEvent.kt b/protobuf/src/main/java/protobuf/push/GroupBanEvent.kt similarity index 93% rename from protobuf/src/main/java/moe/whitechi73/protobuf/push/GroupBanEvent.kt rename to protobuf/src/main/java/protobuf/push/GroupBanEvent.kt index 8950298..0af2268 100644 --- a/protobuf/src/main/java/moe/whitechi73/protobuf/push/GroupBanEvent.kt +++ b/protobuf/src/main/java/protobuf/push/GroupBanEvent.kt @@ -1,4 +1,4 @@ -package moe.whitechi73.protobuf.push +package protobuf.push import kotlinx.serialization.Serializable import kotlinx.serialization.protobuf.ProtoNumber diff --git a/protobuf/src/main/java/moe/whitechi73/protobuf/push/GroupCommonTipsEvent.kt b/protobuf/src/main/java/protobuf/push/GroupCommonTipsEvent.kt similarity index 96% rename from protobuf/src/main/java/moe/whitechi73/protobuf/push/GroupCommonTipsEvent.kt rename to protobuf/src/main/java/protobuf/push/GroupCommonTipsEvent.kt index 9389beb..167ad4d 100644 --- a/protobuf/src/main/java/moe/whitechi73/protobuf/push/GroupCommonTipsEvent.kt +++ b/protobuf/src/main/java/protobuf/push/GroupCommonTipsEvent.kt @@ -1,4 +1,4 @@ -package moe.whitechi73.protobuf.push +package protobuf.push import kotlinx.serialization.Serializable import kotlinx.serialization.protobuf.ProtoNumber diff --git a/protobuf/src/main/java/moe/whitechi73/protobuf/push/GroupInviteEvent.kt b/protobuf/src/main/java/protobuf/push/GroupInviteEvent.kt similarity index 85% rename from protobuf/src/main/java/moe/whitechi73/protobuf/push/GroupInviteEvent.kt rename to protobuf/src/main/java/protobuf/push/GroupInviteEvent.kt index d3bb364..1a5323a 100644 --- a/protobuf/src/main/java/moe/whitechi73/protobuf/push/GroupInviteEvent.kt +++ b/protobuf/src/main/java/protobuf/push/GroupInviteEvent.kt @@ -1,4 +1,4 @@ -package moe.whitechi73.protobuf.push +package protobuf.push import kotlinx.serialization.Serializable import kotlinx.serialization.protobuf.ProtoNumber diff --git a/protobuf/src/main/java/moe/whitechi73/protobuf/push/GroupInvitedApplyEvent.kt b/protobuf/src/main/java/protobuf/push/GroupInvitedApplyEvent.kt similarity index 91% rename from protobuf/src/main/java/moe/whitechi73/protobuf/push/GroupInvitedApplyEvent.kt rename to protobuf/src/main/java/protobuf/push/GroupInvitedApplyEvent.kt index a50260b..d848291 100644 --- a/protobuf/src/main/java/moe/whitechi73/protobuf/push/GroupInvitedApplyEvent.kt +++ b/protobuf/src/main/java/protobuf/push/GroupInvitedApplyEvent.kt @@ -1,4 +1,4 @@ -package moe.whitechi73.protobuf.push +package protobuf.push import kotlinx.serialization.Serializable import kotlinx.serialization.protobuf.ProtoNumber diff --git a/protobuf/src/main/java/moe/whitechi73/protobuf/push/GroupListChangeEvent.kt b/protobuf/src/main/java/protobuf/push/GroupListChangeEvent.kt similarity index 90% rename from protobuf/src/main/java/moe/whitechi73/protobuf/push/GroupListChangeEvent.kt rename to protobuf/src/main/java/protobuf/push/GroupListChangeEvent.kt index ff47f90..c837fb6 100644 --- a/protobuf/src/main/java/moe/whitechi73/protobuf/push/GroupListChangeEvent.kt +++ b/protobuf/src/main/java/protobuf/push/GroupListChangeEvent.kt @@ -1,4 +1,4 @@ -package moe.whitechi73.protobuf.push +package protobuf.push import kotlinx.serialization.Serializable import kotlinx.serialization.protobuf.ProtoNumber diff --git a/protobuf/src/main/java/moe/whitechi73/protobuf/push/GroupRecallEvent.kt b/protobuf/src/main/java/protobuf/push/GroupRecallEvent.kt similarity index 92% rename from protobuf/src/main/java/moe/whitechi73/protobuf/push/GroupRecallEvent.kt rename to protobuf/src/main/java/protobuf/push/GroupRecallEvent.kt index 5634ea9..8ab2d27 100644 --- a/protobuf/src/main/java/moe/whitechi73/protobuf/push/GroupRecallEvent.kt +++ b/protobuf/src/main/java/protobuf/push/GroupRecallEvent.kt @@ -1,4 +1,4 @@ -package moe.whitechi73.protobuf.push +package protobuf.push import kotlinx.serialization.Serializable import kotlinx.serialization.protobuf.ProtoNumber diff --git a/protobuf/src/main/java/moe/whitechi73/protobuf/push/GroupUniqueTitleChangeEvent.kt b/protobuf/src/main/java/protobuf/push/GroupUniqueTitleChangeEvent.kt similarity index 87% rename from protobuf/src/main/java/moe/whitechi73/protobuf/push/GroupUniqueTitleChangeEvent.kt rename to protobuf/src/main/java/protobuf/push/GroupUniqueTitleChangeEvent.kt index b03a5d4..228e96a 100644 --- a/protobuf/src/main/java/moe/whitechi73/protobuf/push/GroupUniqueTitleChangeEvent.kt +++ b/protobuf/src/main/java/protobuf/push/GroupUniqueTitleChangeEvent.kt @@ -1,4 +1,4 @@ -package moe.whitechi73.protobuf.push +package protobuf.push import kotlinx.serialization.Serializable import kotlinx.serialization.protobuf.ProtoNumber diff --git a/protobuf/src/main/java/moe/whitechi73/protobuf/push/MessagePush.kt b/protobuf/src/main/java/protobuf/push/MessagePush.kt similarity index 89% rename from protobuf/src/main/java/moe/whitechi73/protobuf/push/MessagePush.kt rename to protobuf/src/main/java/protobuf/push/MessagePush.kt index 9436713..17f0b01 100644 --- a/protobuf/src/main/java/moe/whitechi73/protobuf/push/MessagePush.kt +++ b/protobuf/src/main/java/protobuf/push/MessagePush.kt @@ -1,8 +1,8 @@ -package moe.whitechi73.protobuf.push +package protobuf.push import kotlinx.serialization.Serializable import kotlinx.serialization.protobuf.ProtoNumber -import moe.whitechi73.protobuf.message.MessageBody +import protobuf.message.MessageBody @Serializable data class MessagePush( diff --git a/protobuf/src/main/java/protobuf/qweb/QWeb.kt b/protobuf/src/main/java/protobuf/qweb/QWeb.kt new file mode 100644 index 0000000..52298a6 --- /dev/null +++ b/protobuf/src/main/java/protobuf/qweb/QWeb.kt @@ -0,0 +1,37 @@ +@file:OptIn(ExperimentalSerializationApi::class) + +package protobuf.qweb + +import kotlinx.serialization.ExperimentalSerializationApi +import kotlinx.serialization.Serializable +import kotlinx.serialization.protobuf.ProtoNumber + +@Serializable +data class QWebReq( + @ProtoNumber(1) val seq: Int = 0, + @ProtoNumber(2) val qua: String = "", + @ProtoNumber(3) val deviceInfo: String = "", + @ProtoNumber(4) val buffer: ByteArray? = null, + @ProtoNumber(5) val traceId: String = "", + @ProtoNumber(6) val module: String = "", + @ProtoNumber(7) var cmdname: String? = null, + //@ProtoNumber(8) var loginSig: Any? = null, + //@ProtoNumber(9) var Crypto: Any? = null, + @ProtoNumber(10) var extinfo: List? = null, + //@ProtoNumber(11) var contentType: Any? = null, +) + +@Serializable +data class QWebExtInfo( + @ProtoNumber(1) val key: String, + @ProtoNumber(2) val value: String, +) + +@Serializable +data class QWebRsp( + @ProtoNumber(1) var seq: Int? = null, + //@ProtoNumber(2) var retCode: Int? = null, + //@ProtoNumber(3) var errMsg: String? = null, + @ProtoNumber(4) var buffer: ByteArray? = null, + //@ProtoNumber(5) var Extinfo: List? = null, +) \ No newline at end of file diff --git a/qqinterface/src/main/java/com/tencent/qqnt/kernel/nativeinterface/IGProFetchTopFeedsCallback.java b/qqinterface/src/main/java/com/tencent/qqnt/kernel/nativeinterface/IGProFetchTopFeedsCallback.java new file mode 100644 index 0000000..18b89c5 --- /dev/null +++ b/qqinterface/src/main/java/com/tencent/qqnt/kernel/nativeinterface/IGProFetchTopFeedsCallback.java @@ -0,0 +1,7 @@ +package com.tencent.qqnt.kernel.nativeinterface; + +import java.util.ArrayList; + +public interface IGProFetchTopFeedsCallback { + void onResult(int code, String msg, ArrayList feeds); +} diff --git a/qqinterface/src/main/java/com/tencent/qqnt/kernel/nativeinterface/IKernelGuildService.java b/qqinterface/src/main/java/com/tencent/qqnt/kernel/nativeinterface/IKernelGuildService.java index f103cd9..cf6df79 100644 --- a/qqinterface/src/main/java/com/tencent/qqnt/kernel/nativeinterface/IKernelGuildService.java +++ b/qqinterface/src/main/java/com/tencent/qqnt/kernel/nativeinterface/IKernelGuildService.java @@ -47,6 +47,8 @@ public interface IKernelGuildService { void fetchUserInfo(long guildId, long channelId, ArrayList tinyIdList, int seq, IGProGetUserInfoCallback cb); + void fetchTopFeeds(long guildId, long channelId, IGProFetchTopFeedsCallback cb); + GProSimpleProfile getSimpleProfile(long guildId, long tinyId, int seq); GProFaceAuthInfo getFaceAuthInfo(); diff --git a/xposed/src/main/java/moe/fuqiuluo/qqinterface/servlet/BaseSvc.kt b/xposed/src/main/java/moe/fuqiuluo/qqinterface/servlet/BaseSvc.kt index 9014c96..a43bd8d 100644 --- a/xposed/src/main/java/moe/fuqiuluo/qqinterface/servlet/BaseSvc.kt +++ b/xposed/src/main/java/moe/fuqiuluo/qqinterface/servlet/BaseSvc.kt @@ -7,6 +7,10 @@ import com.tencent.mobileqq.app.QQAppInterface import com.tencent.mobileqq.msf.core.MsfCore import com.tencent.mobileqq.pb.ByteStringMicro import com.tencent.qphone.base.remote.ToServiceMsg +import io.ktor.utils.io.core.BytePacketBuilder +import io.ktor.utils.io.core.readBytes +import io.ktor.utils.io.core.writeFully +import io.ktor.utils.io.core.writeInt import kotlinx.coroutines.DelicateCoroutinesApi import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.GlobalScope @@ -15,11 +19,13 @@ import kotlinx.coroutines.suspendCancellableCoroutine import kotlinx.coroutines.withTimeoutOrNull import kotlinx.serialization.encodeToByteArray import kotlinx.serialization.protobuf.ProtoBuf +import moe.fuqiuluo.shamrock.tools.slice +import moe.fuqiuluo.shamrock.utils.DeflateTools import moe.fuqiuluo.shamrock.utils.PlatformUtils import moe.fuqiuluo.shamrock.xposed.helper.AppRuntimeFetcher import moe.fuqiuluo.shamrock.xposed.helper.internal.DynamicReceiver import moe.fuqiuluo.shamrock.xposed.helper.internal.IPCRequest -import moe.whitechi73.protobuf.oidb.TrpcOidb +import protobuf.oidb.TrpcOidb import mqq.app.MobileQQ import tencent.im.oidb.oidb_sso import kotlin.coroutines.resume @@ -57,7 +63,7 @@ internal abstract class BaseSvc { suspend fun sendBufferAW(cmd: String, isPb: Boolean, data: ByteArray, timeout: Long = 5000L): ByteArray? { val seq = MsfCore.getNextSeq() - return withTimeoutOrNull(timeout) { + val buffer = withTimeoutOrNull(timeout) { suspendCancellableCoroutine { continuation -> GlobalScope.launch(Dispatchers.Default) { DynamicReceiver.register(IPCRequest(cmd, seq) { @@ -71,6 +77,16 @@ internal abstract class BaseSvc { if (it == null) DynamicReceiver.unregister(seq) }?.copyOf() + try { + if (buffer != null && buffer.size >= 5 && buffer[4] == 120.toByte()) { + val builder = BytePacketBuilder() + val deBuffer = DeflateTools.uncompress(buffer.slice(4)) + builder.writeInt(deBuffer.size) + builder.writeFully(deBuffer) + return builder.build().readBytes() + } + } catch (_: Exception) { } + return buffer } fun sendOidb(cmd: String, cmdId: Int, serviceId: Int, buffer: ByteArray, seq: Int = -1, trpc: Boolean = false) { diff --git a/xposed/src/main/java/moe/fuqiuluo/qqinterface/servlet/ChatSvc.kt b/xposed/src/main/java/moe/fuqiuluo/qqinterface/servlet/ChatSvc.kt index e4f8aae..6e26f86 100644 --- a/xposed/src/main/java/moe/fuqiuluo/qqinterface/servlet/ChatSvc.kt +++ b/xposed/src/main/java/moe/fuqiuluo/qqinterface/servlet/ChatSvc.kt @@ -2,18 +2,20 @@ package moe.fuqiuluo.qqinterface.servlet import kotlinx.serialization.encodeToByteArray import kotlinx.serialization.protobuf.ProtoBuf -import moe.whitechi73.protobuf.oidb.cmd0x9082.Oidb0x9082 +import protobuf.oidb.cmd0x9082.Oidb0x9082 internal object ChatSvc: BaseSvc() { fun setGroupMessageCommentFace(peer: Long, msgSeq: ULong, faceIndex: String, isSet: Boolean) { val serviceId = if (isSet) 1 else 2 - sendOidb("OidbSvcTrpcTcp.0x9082_$serviceId", 36994, serviceId, ProtoBuf.encodeToByteArray(Oidb0x9082( + sendOidb("OidbSvcTrpcTcp.0x9082_$serviceId", 36994, serviceId, ProtoBuf.encodeToByteArray( + Oidb0x9082( peer = peer.toULong(), msgSeq = msgSeq, faceIndex = faceIndex, flag = 1u, u1 = 0u, u2 = 0u - ))) + ) + )) } } \ No newline at end of file diff --git a/xposed/src/main/java/moe/fuqiuluo/qqinterface/servlet/FileSvc.kt b/xposed/src/main/java/moe/fuqiuluo/qqinterface/servlet/FileSvc.kt index fc24722..7a0e4d7 100644 --- a/xposed/src/main/java/moe/fuqiuluo/qqinterface/servlet/FileSvc.kt +++ b/xposed/src/main/java/moe/fuqiuluo/qqinterface/servlet/FileSvc.kt @@ -12,27 +12,29 @@ import moe.fuqiuluo.shamrock.tools.EMPTY_BYTE_ARRAY import moe.fuqiuluo.shamrock.tools.slice import moe.fuqiuluo.shamrock.tools.toHexString import moe.fuqiuluo.shamrock.utils.DeflateTools -import moe.whitechi73.protobuf.oidb.cmd0x6d7.CreateFolderReq -import moe.whitechi73.protobuf.oidb.cmd0x6d7.DeleteFolderReq -import moe.whitechi73.protobuf.oidb.cmd0x6d7.MoveFolderReq -import moe.whitechi73.protobuf.oidb.cmd0x6d7.Oidb0x6d7ReqBody -import moe.whitechi73.protobuf.oidb.cmd0x6d7.Oidb0x6d7RespBody -import moe.whitechi73.protobuf.oidb.cmd0x6d7.RenameFolderReq +import protobuf.oidb.cmd0x6d7.CreateFolderReq +import protobuf.oidb.cmd0x6d7.DeleteFolderReq +import protobuf.oidb.cmd0x6d7.MoveFolderReq +import protobuf.oidb.cmd0x6d7.Oidb0x6d7ReqBody +import protobuf.oidb.cmd0x6d7.Oidb0x6d7RespBody +import protobuf.oidb.cmd0x6d7.RenameFolderReq import tencent.im.oidb.cmd0x6d6.oidb_0x6d6 import tencent.im.oidb.cmd0x6d8.oidb_0x6d8 import tencent.im.oidb.oidb_sso -import moe.whitechi73.protobuf.group_file_common.FolderInfo as GroupFileCommonFolderInfo +import protobuf.group_file_common.FolderInfo as GroupFileCommonFolderInfo internal object FileSvc: BaseSvc() { suspend fun createFileFolder(groupId: String, folderName: String, parentFolderId: String = "/"): Result { - val data = ProtoBuf.encodeToByteArray(Oidb0x6d7ReqBody( + val data = ProtoBuf.encodeToByteArray( + Oidb0x6d7ReqBody( createFolder = CreateFolderReq( groupCode = groupId.toULong(), appId = 3u, parentFolderId = parentFolderId, folderName = folderName ) - )) + ) + ) val resultBuffer = sendOidbAW("OidbSvc.0x6d7_0", 1751, 0, data) ?: return Result.failure(Exception("unable to fetch result")) val oidbPkg = oidb_sso.OIDBSSOPkg() @@ -45,13 +47,15 @@ internal object FileSvc: BaseSvc() { } suspend fun deleteGroupFolder(groupId: String, folderUid: String): Boolean { - val buffer = sendOidbAW("OidbSvc.0x6d7_1", 1751, 1, ProtoBuf.encodeToByteArray(Oidb0x6d7ReqBody( + val buffer = sendOidbAW("OidbSvc.0x6d7_1", 1751, 1, ProtoBuf.encodeToByteArray( + Oidb0x6d7ReqBody( deleteFolder = DeleteFolderReq( groupCode = groupId.toULong(), appId = 3u, folderId = folderUid ) - ))) ?: return false + ) + )) ?: return false val oidbPkg = oidb_sso.OIDBSSOPkg() oidbPkg.mergeFrom(buffer.slice(4)) val rsp = ProtoBuf.decodeFromByteArray(oidbPkg.bytes_bodybuffer.get().toByteArray()) @@ -59,14 +63,16 @@ internal object FileSvc: BaseSvc() { } suspend fun moveGroupFolder(groupId: String, folderUid: String, newParentFolderUid: String): Boolean { - val buffer = sendOidbAW("OidbSvc.0x6d7_2", 1751, 2, ProtoBuf.encodeToByteArray(Oidb0x6d7ReqBody( + val buffer = sendOidbAW("OidbSvc.0x6d7_2", 1751, 2, ProtoBuf.encodeToByteArray( + Oidb0x6d7ReqBody( moveFolder = MoveFolderReq( groupCode = groupId.toULong(), appId = 3u, folderId = folderUid, parentFolderId = "/" ) - ))) ?: return false + ) + )) ?: return false val oidbPkg = oidb_sso.OIDBSSOPkg() oidbPkg.mergeFrom(buffer.slice(4)) val rsp = ProtoBuf.decodeFromByteArray(oidbPkg.bytes_bodybuffer.get().toByteArray()) @@ -74,14 +80,16 @@ internal object FileSvc: BaseSvc() { } suspend fun renameFolder(groupId: String, folderUid: String, name: String): Boolean { - val buffer = sendOidbAW("OidbSvc.0x6d7_3", 1751, 3, ProtoBuf.encodeToByteArray(Oidb0x6d7ReqBody( + val buffer = sendOidbAW("OidbSvc.0x6d7_3", 1751, 3, ProtoBuf.encodeToByteArray( + Oidb0x6d7ReqBody( renameFolder = RenameFolderReq( groupCode = groupId.toULong(), appId = 3u, folderId = folderUid, folderName = name ) - ))) ?: return false + ) + )) ?: return false val oidbPkg = oidb_sso.OIDBSSOPkg() oidbPkg.mergeFrom(buffer.slice(4)) val rsp = ProtoBuf.decodeFromByteArray(oidbPkg.bytes_bodybuffer.get().toByteArray()) diff --git a/xposed/src/main/java/moe/fuqiuluo/qqinterface/servlet/GProSvc.kt b/xposed/src/main/java/moe/fuqiuluo/qqinterface/servlet/GProSvc.kt index 6879457..d6643d0 100644 --- a/xposed/src/main/java/moe/fuqiuluo/qqinterface/servlet/GProSvc.kt +++ b/xposed/src/main/java/moe/fuqiuluo/qqinterface/servlet/GProSvc.kt @@ -5,7 +5,8 @@ package moe.fuqiuluo.qqinterface.servlet import com.tencent.mobileqq.qqguildsdk.api.IGPSService import com.tencent.qqnt.kernel.nativeinterface.GProGuildRole import com.tencent.qqnt.kernel.nativeinterface.GProRoleMemberList -import com.tencent.qqnt.kernel.nativeinterface.IGProFetchMemberListWithRoleCallback +import io.ktor.utils.io.ByteReadChannel +import io.ktor.utils.io.core.readBytes import kotlinx.coroutines.suspendCancellableCoroutine import kotlinx.coroutines.withTimeoutOrNull import kotlinx.serialization.ExperimentalSerializationApi @@ -19,20 +20,28 @@ import moe.fuqiuluo.qqinterface.servlet.structures.GuildStatus import moe.fuqiuluo.qqinterface.servlet.structures.SlowModeInfo import moe.fuqiuluo.shamrock.helper.Level import moe.fuqiuluo.shamrock.helper.LogCenter +import moe.fuqiuluo.shamrock.tools.EMPTY_BYTE_ARRAY import moe.fuqiuluo.shamrock.tools.slice +import moe.fuqiuluo.shamrock.tools.toHexString +import moe.fuqiuluo.shamrock.utils.DeflateTools import moe.fuqiuluo.shamrock.utils.PlatformUtils import moe.fuqiuluo.shamrock.xposed.helper.NTServiceFetcher -import moe.whitechi73.protobuf.oidb.cmd0xf88.GProFilter -import moe.whitechi73.protobuf.oidb.cmd0xf88.GProUserInfo -import moe.whitechi73.protobuf.oidb.cmd0xf88.Oidb0xf88Req -import moe.whitechi73.protobuf.oidb.cmd0xf88.Oidb0xf88Rsp -import moe.whitechi73.protobuf.oidb.cmx0xf57.Oidb0xf57Filter -import moe.whitechi73.protobuf.oidb.cmx0xf57.Oidb0xf57GuildInfo -import moe.whitechi73.protobuf.oidb.cmx0xf57.Oidb0xf57MetaInfo -import moe.whitechi73.protobuf.oidb.cmx0xf57.Oidb0xf57Req -import moe.whitechi73.protobuf.oidb.cmx0xf57.Oidb0xf57Rsp -import moe.whitechi73.protobuf.oidb.cmx0xf57.Oidb0xf57U1 -import moe.whitechi73.protobuf.oidb.cmx0xf57.Oidb0xf57U2 +import protobuf.guild.GetGuildFeedsReq +import protobuf.guild.GetGuildFeedsRsp +import protobuf.oidb.cmd0xf88.GProFilter +import protobuf.oidb.cmd0xf88.GProUserInfo +import protobuf.oidb.cmd0xf88.Oidb0xf88Req +import protobuf.oidb.cmd0xf88.Oidb0xf88Rsp +import protobuf.oidb.cmx0xf57.Oidb0xf57Filter +import protobuf.oidb.cmx0xf57.Oidb0xf57GuildInfo +import protobuf.oidb.cmx0xf57.Oidb0xf57MetaInfo +import protobuf.oidb.cmx0xf57.Oidb0xf57Req +import protobuf.oidb.cmx0xf57.Oidb0xf57Rsp +import protobuf.oidb.cmx0xf57.Oidb0xf57U1 +import protobuf.oidb.cmx0xf57.Oidb0xf57U2 +import protobuf.qweb.QWebExtInfo +import protobuf.qweb.QWebReq +import protobuf.qweb.QWebRsp import tencent.im.oidb.oidb_sso import kotlin.coroutines.resume @@ -43,13 +52,15 @@ internal object GProSvc: BaseSvc() { } suspend fun getGuildInfo(guildId: ULong): Result { - val respBuffer = sendOidbAW("OidbSvcTrpcTcp.0xf57_9", 0xf57, 9, ProtoBuf.encodeToByteArray(Oidb0xf57Req( + val respBuffer = sendOidbAW("OidbSvcTrpcTcp.0xf57_9", 0xf57, 9, ProtoBuf.encodeToByteArray( + Oidb0xf57Req( filter = Oidb0xf57Filter( u1 = Oidb0xf57U1(1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u), u2 = Oidb0xf57U2(1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u) ), guildInfo = Oidb0xf57GuildInfo(guildId = guildId) - ))) + ) + )) val body = oidb_sso.OIDBSSOPkg() if (respBuffer == null) { return Result.failure(Exception("unable to send packet")) @@ -62,6 +73,35 @@ internal object GProSvc: BaseSvc() { } } + suspend fun getGuildFeeds(guildId: ULong, channelId: ULong, startIndex: Int): Result { + val buffer = sendBufferAW("QChannelSvr.trpc.qchannel.commreader.ComReader.GetGuildFeeds", true, ProtoBuf.encodeToByteArray(QWebReq( + seq = 10, + qua = PlatformUtils.getQUA(), + deviceInfo = "i=&imsi=&mac=02:00:00:00:00:00&m=Shamrock&o=114514&a=1919810&sd=0&c64=1&sc=1&p=8000*8000&aid=123456789012345678901234567890abcdef&f=Tencent&mm=5610&cf=1726&cc=8&qimei=&qimei36=&sharpP=1&n=nether_world&support_xsj_live=false&client_mod=concise&timezone=America/La_Paz&material_sdk_version=&vh265=&refreshrate=10086&hwlevel=9&suphdr=1&is_teenager_mod=8&liveH265=&bmst=5&AV1=0", + buffer = ProtoBuf.encodeToByteArray(GetGuildFeedsReq( + count = 12, + from = startIndex, + feedAttchInfo = EMPTY_BYTE_ARRAY, + guildId = guildId, + getType = 1, + u7 = 0, + u8 = 1, + u9 = EMPTY_BYTE_ARRAY + )), + traceId = app.account + "_0_0", + extinfo = listOf( + QWebExtInfo("fc-appid", "96"), + QWebExtInfo("environment_id", "shamrock"), + QWebExtInfo("tiny_id", getSelfTinyId().toString()), + ) + ))) ?: return Result.failure(Exception("unable to send packet")) + val webRsp = ProtoBuf.decodeFromByteArray(buffer.slice(4)) + if(webRsp.buffer == null) return Result.failure(Exception("server error")) + val wupBuffer = webRsp.buffer!! + val feeds = ProtoBuf.decodeFromByteArray(wupBuffer) + return Result.success(feeds) + } + fun getChannelList(guildId: ULong, refresh: Boolean = false): Result> { if (refresh) { refreshGuildInfo(guildId) @@ -146,12 +186,14 @@ internal object GProSvc: BaseSvc() { guildId: ULong, memberTinyId: ULong ): Result { - val respBuffer = sendOidbAW("OidbSvcTrpcTcp.0xf88_1", 0xf88, 1, ProtoBuf.encodeToByteArray(Oidb0xf88Req( + val respBuffer = sendOidbAW("OidbSvcTrpcTcp.0xf88_1", 0xf88, 1, ProtoBuf.encodeToByteArray( + Oidb0xf88Req( filter = GProFilter(1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u), memberId = 0uL, tinyId = memberTinyId, guildId = guildId - ))) + ) + )) val body = oidb_sso.OIDBSSOPkg() if (respBuffer == null) { return Result.failure(Exception("unable to send packet")) diff --git a/xposed/src/main/java/moe/fuqiuluo/qqinterface/servlet/GroupSvc.kt b/xposed/src/main/java/moe/fuqiuluo/qqinterface/servlet/GroupSvc.kt index 3289dda..9ae7798 100644 --- a/xposed/src/main/java/moe/fuqiuluo/qqinterface/servlet/GroupSvc.kt +++ b/xposed/src/main/java/moe/fuqiuluo/qqinterface/servlet/GroupSvc.kt @@ -14,7 +14,6 @@ import com.tencent.mobileqq.pb.ByteStringMicro import com.tencent.mobileqq.troop.api.ITroopInfoService import com.tencent.mobileqq.troop.api.ITroopMemberInfoService import com.tencent.protofile.join_group_link.join_group_link -import com.tencent.qphone.base.remote.FromServiceMsg import com.tencent.qphone.base.remote.ToServiceMsg import com.tencent.qqnt.kernel.nativeinterface.MemberInfo import com.tencent.qqnt.kernel.nativeinterface.MsgConstant @@ -75,8 +74,8 @@ import moe.fuqiuluo.shamrock.utils.FileUtils import moe.fuqiuluo.shamrock.utils.PlatformUtils import moe.fuqiuluo.shamrock.xposed.helper.AppRuntimeFetcher import moe.fuqiuluo.shamrock.xposed.helper.NTServiceFetcher -import moe.whitechi73.protobuf.oidb.cmd0xf16.Oidb0xf16 -import moe.whitechi73.protobuf.oidb.cmd0xf16.SetGroupRemarkReq +import protobuf.oidb.cmd0xf16.Oidb0xf16 +import protobuf.oidb.cmd0xf16.SetGroupRemarkReq import mqq.app.MobileQQ import tencent.im.group.group_member_info import tencent.im.oidb.cmd0x88d.oidb_0x88d @@ -272,13 +271,15 @@ internal object GroupSvc: BaseSvc() { } fun modifyGroupRemark(groupId: Long, remark: String): Boolean { - sendOidb("OidbSvc.0xf16_1", 3862, 1, ProtoBuf.encodeToByteArray(Oidb0xf16( + sendOidb("OidbSvc.0xf16_1", 3862, 1, ProtoBuf.encodeToByteArray( + Oidb0xf16( setGroupRemarkReq = SetGroupRemarkReq( groupCode = groupId.toULong(), groupUin = groupCode2GroupUin(groupId).toULong(), groupRemark = remark ) - ))) + ) + )) return true } diff --git a/xposed/src/main/java/moe/fuqiuluo/qqinterface/servlet/PacketSvc.kt b/xposed/src/main/java/moe/fuqiuluo/qqinterface/servlet/PacketSvc.kt index d667d75..1cd3cb7 100644 --- a/xposed/src/main/java/moe/fuqiuluo/qqinterface/servlet/PacketSvc.kt +++ b/xposed/src/main/java/moe/fuqiuluo/qqinterface/servlet/PacketSvc.kt @@ -1,6 +1,5 @@ package moe.fuqiuluo.qqinterface.servlet -import com.tencent.mobileqq.msf.core.MsfCore import com.tencent.qqnt.kernel.nativeinterface.Contact import com.tencent.qqnt.kernel.nativeinterface.IKernelMsgService import com.tencent.qqnt.kernel.nativeinterface.MsgConstant @@ -16,14 +15,14 @@ import moe.fuqiuluo.shamrock.remote.action.handlers.GetHistoryMsg import moe.fuqiuluo.shamrock.remote.service.listener.AioListener import moe.fuqiuluo.shamrock.tools.broadcast import moe.fuqiuluo.shamrock.utils.DeflateTools -import moe.whitechi73.protobuf.message.JsonElement -import moe.whitechi73.protobuf.message.MessageBody -import moe.whitechi73.protobuf.message.MessageContentHead -import moe.whitechi73.protobuf.message.MessageElement -import moe.whitechi73.protobuf.message.MessageElementList -import moe.whitechi73.protobuf.message.MessageHead -import moe.whitechi73.protobuf.message.RichMessage -import moe.whitechi73.protobuf.push.MessagePush +import protobuf.message.JsonElement +import protobuf.message.MessageBody +import protobuf.message.MessageContentHead +import protobuf.message.MessageElement +import protobuf.message.MessageElementList +import protobuf.message.MessageHead +import protobuf.message.RichMessage +import protobuf.push.MessagePush import mqq.app.MobileQQ import kotlin.coroutines.resume @@ -33,9 +32,11 @@ internal object PacketSvc: BaseSvc() { */ suspend fun fakeSelfRecvJsonMsg(msgService: IKernelMsgService, content: String): Long { return fakeReceiveSelfMsg(msgService) { - listOf(MessageElement( + listOf( + MessageElement( json = JsonElement((byteArrayOf(1) + DeflateTools.compress(content.toByteArray()))) - )) + ) + ) } } diff --git a/xposed/src/main/java/moe/fuqiuluo/qqinterface/servlet/QFavSvc.kt b/xposed/src/main/java/moe/fuqiuluo/qqinterface/servlet/QFavSvc.kt index d616087..ae4bb65 100644 --- a/xposed/src/main/java/moe/fuqiuluo/qqinterface/servlet/QFavSvc.kt +++ b/xposed/src/main/java/moe/fuqiuluo/qqinterface/servlet/QFavSvc.kt @@ -2,7 +2,6 @@ package moe.fuqiuluo.qqinterface.servlet -import android.graphics.BitmapFactory import com.tencent.mobileqq.app.QQAppInterface import com.tencent.mobileqq.transfile.HttpNetReq import com.tencent.mobileqq.transfile.INetEngineListener @@ -24,18 +23,18 @@ import moe.fuqiuluo.shamrock.tools.toHexString import moe.fuqiuluo.shamrock.utils.DeflateTools import moe.fuqiuluo.shamrock.utils.MD5 import moe.fuqiuluo.shamrock.xposed.helper.AppRuntimeFetcher -import moe.whitechi73.protobuf.fav.WeiyunAddRichMediaReq -import moe.whitechi73.protobuf.fav.WeiyunAuthor -import moe.whitechi73.protobuf.fav.WeiyunCollectCommInfo -import moe.whitechi73.protobuf.fav.WeiyunComm -import moe.whitechi73.protobuf.fav.WeiyunCommonReq -import moe.whitechi73.protobuf.fav.WeiyunFastUploadResourceReq -import moe.whitechi73.protobuf.fav.WeiyunGetFavContentReq -import moe.whitechi73.protobuf.fav.WeiyunGetFavListReq -import moe.whitechi73.protobuf.fav.WeiyunMsgHead -import moe.whitechi73.protobuf.fav.WeiyunPicInfo -import moe.whitechi73.protobuf.fav.WeiyunRichMediaContent -import moe.whitechi73.protobuf.fav.WeiyunRichMediaSummary +import protobuf.fav.WeiyunAddRichMediaReq +import protobuf.fav.WeiyunAuthor +import protobuf.fav.WeiyunCollectCommInfo +import protobuf.fav.WeiyunComm +import protobuf.fav.WeiyunCommonReq +import protobuf.fav.WeiyunFastUploadResourceReq +import protobuf.fav.WeiyunGetFavContentReq +import protobuf.fav.WeiyunGetFavListReq +import protobuf.fav.WeiyunMsgHead +import protobuf.fav.WeiyunPicInfo +import protobuf.fav.WeiyunRichMediaContent +import protobuf.fav.WeiyunRichMediaSummary import mqq.manager.TicketManager import oicq.wlogin_sdk.request.Ticket import oicq.wlogin_sdk.request.WtTicketPromise @@ -95,7 +94,8 @@ internal object QFavSvc: BaseSvc() { getFavContentReq = WeiyunGetFavContentReq( cidList = arrayListOf(id) ) - )) + ) + ) } suspend fun addImageMsg( @@ -147,9 +147,11 @@ internal object QFavSvc: BaseSvc() { ), contentType = 1u ), - richMediaContent = listOf(WeiyunRichMediaContent( + richMediaContent = listOf( + WeiyunRichMediaContent( rawData = """""".toByteArray(), - picList = listOf(WeiyunPicInfo( + picList = listOf( + WeiyunPicInfo( uri = picUrl, md5 = md5Bytes, sha1 = md5.toByteArray(), @@ -160,10 +162,13 @@ internal object QFavSvc: BaseSvc() { size = size.toULong(), type = 0u, picId = pid - )) - )) + ) + ) + ) + ) ) - )) + ) + ) } suspend fun applyUpImageMsg( @@ -180,7 +185,8 @@ internal object QFavSvc: BaseSvc() { val md5 = MD5.genFileMd5(image.absolutePath) return sendWeiyunReq(20010, WeiyunCommonReq( fastUploadResourceReq = WeiyunFastUploadResourceReq( - picInfoList = listOf(WeiyunPicInfo( + picInfoList = listOf( + WeiyunPicInfo( md5 = md5, name = md5.toHexString(), width = width.toUInt(), @@ -195,9 +201,11 @@ internal object QFavSvc: BaseSvc() { groupId = groupId.toULong(), groupName = groupName ) - )), + ) + ), ) - )) + ) + ) } suspend fun addRichMediaMsg( @@ -229,11 +237,14 @@ internal object QFavSvc: BaseSvc() { brief = content, contentType = 1u ), - richMediaContent = listOf(WeiyunRichMediaContent( + richMediaContent = listOf( + WeiyunRichMediaContent( rawData = content.textToHtml().toByteArray(), - )) + ) + ) ) - )) + ) + ) } private fun String.textToHtml(): String { @@ -318,7 +329,9 @@ internal object QFavSvc: BaseSvc() { } val pSKey = getWeiYunPSKey() httpNetReq.mHttpMethod = HttpNetReq.HTTP_POST - httpNetReq.mSendData = DeflateTools.gzip(packData(packHead(cmd, pSKey), ProtoBuf.encodeToByteArray(WeiyunComm(req = req)))) + httpNetReq.mSendData = DeflateTools.gzip(packData(packHead(cmd, pSKey), ProtoBuf.encodeToByteArray( + WeiyunComm(req = req) + ))) httpNetReq.mOutStream = outputStream httpNetReq.mStartDownOffset = 0L httpNetReq.mReqProperties["Shamrock"] = "true" @@ -338,7 +351,8 @@ internal object QFavSvc: BaseSvc() { } private fun packHead(cmd: Int, pskey: String): ByteArray { - return ProtoBuf.encodeToByteArray(WeiyunMsgHead( + return ProtoBuf.encodeToByteArray( + WeiyunMsgHead( uin = app.longAccountUin.toULong(), seq = seq++.toUInt(), type = 1u, @@ -350,7 +364,8 @@ internal object QFavSvc: BaseSvc() { key = pskey.toByteArray(), majorVersion = MAJOR_VERSION.toUInt(), minorVersion = MINOR_VERSION.toUInt(), - )) + ) + ) } private fun packData(head: ByteArray, body: ByteArray): ByteArray { diff --git a/xposed/src/main/java/moe/fuqiuluo/qqinterface/servlet/transfile/RichProtoSvc.kt b/xposed/src/main/java/moe/fuqiuluo/qqinterface/servlet/transfile/RichProtoSvc.kt index 5d6dfee..61a6309 100644 --- a/xposed/src/main/java/moe/fuqiuluo/qqinterface/servlet/transfile/RichProtoSvc.kt +++ b/xposed/src/main/java/moe/fuqiuluo/qqinterface/servlet/transfile/RichProtoSvc.kt @@ -19,10 +19,10 @@ import moe.fuqiuluo.shamrock.tools.slice import moe.fuqiuluo.shamrock.tools.toHexString import moe.fuqiuluo.shamrock.utils.PlatformUtils import moe.fuqiuluo.shamrock.xposed.helper.AppRuntimeFetcher -import moe.whitechi73.protobuf.oidb.cmd0xfc2.Oidb0xfc2ChannelInfo -import moe.whitechi73.protobuf.oidb.cmd0xfc2.Oidb0xfc2MsgApplyDownloadReq -import moe.whitechi73.protobuf.oidb.cmd0xfc2.Oidb0xfc2ReqBody -import moe.whitechi73.protobuf.oidb.cmd0xfc2.Oidb0xfc2RspBody +import protobuf.oidb.cmd0xfc2.Oidb0xfc2ChannelInfo +import protobuf.oidb.cmd0xfc2.Oidb0xfc2MsgApplyDownloadReq +import protobuf.oidb.cmd0xfc2.Oidb0xfc2ReqBody +import protobuf.oidb.cmd0xfc2.Oidb0xfc2RspBody import mqq.app.MobileQQ import tencent.im.cs.cmd0x346.cmd0x346 import tencent.im.oidb.cmd0x6d6.oidb_0x6d6 @@ -32,7 +32,8 @@ import kotlin.coroutines.resume internal object RichProtoSvc: BaseSvc() { suspend fun getGuildFileDownUrl(peerId: String, channelId: String, fileId: String, bizId: Int): String { - val buffer = sendOidbAW("OidbSvcTrpcTcp.0xfc2_0", 4034, 0, ProtoBuf.encodeToByteArray(Oidb0xfc2ReqBody( + val buffer = sendOidbAW("OidbSvcTrpcTcp.0xfc2_0", 4034, 0, ProtoBuf.encodeToByteArray( + Oidb0xfc2ReqBody( msgCmd = 1200, msgBusType = 4202, msgChannelInfo = Oidb0xfc2ChannelInfo( @@ -44,7 +45,8 @@ internal object RichProtoSvc: BaseSvc() { fieldId = fileId, supportEncrypt = 0 ) - ))) ?: return "" + ) + )) ?: return "" val body = oidb_sso.OIDBSSOPkg() body.mergeFrom(buffer.slice(4)) ProtoBuf.decodeFromByteArray(body.bytes_bodybuffer.get().toByteArray()).msgApplyDownloadRsp?.let { diff --git a/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/action/handlers/FavAddImageMsg.kt b/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/action/handlers/FavAddImageMsg.kt index 334a3ef..89e9a9c 100644 --- a/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/action/handlers/FavAddImageMsg.kt +++ b/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/action/handlers/FavAddImageMsg.kt @@ -16,7 +16,7 @@ import moe.fuqiuluo.shamrock.utils.CryptTools import moe.fuqiuluo.shamrock.utils.DeflateTools import moe.fuqiuluo.shamrock.utils.FileUtils import moe.fuqiuluo.symbols.OneBotHandler -import moe.whitechi73.protobuf.fav.WeiyunComm +import protobuf.fav.WeiyunComm @OneBotHandler("fav.add_image_msg") internal object FavAddImageMsg: IActionHandler() { diff --git a/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/action/handlers/FavAddTextMsg.kt b/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/action/handlers/FavAddTextMsg.kt index 06e7ee1..39e5925 100644 --- a/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/action/handlers/FavAddTextMsg.kt +++ b/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/action/handlers/FavAddTextMsg.kt @@ -13,7 +13,7 @@ import moe.fuqiuluo.shamrock.remote.action.IActionHandler import moe.fuqiuluo.shamrock.tools.EmptyJsonString import moe.fuqiuluo.shamrock.utils.DeflateTools import moe.fuqiuluo.symbols.OneBotHandler -import moe.whitechi73.protobuf.fav.WeiyunComm +import protobuf.fav.WeiyunComm @OneBotHandler("fav.add_text_msg") internal object FavAddTextMsg: IActionHandler() { diff --git a/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/action/handlers/FavGetItemContent.kt b/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/action/handlers/FavGetItemContent.kt index 458f515..ff1fbd9 100644 --- a/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/action/handlers/FavGetItemContent.kt +++ b/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/action/handlers/FavGetItemContent.kt @@ -16,7 +16,7 @@ import moe.fuqiuluo.shamrock.remote.action.IActionHandler import moe.fuqiuluo.shamrock.tools.EmptyJsonString import moe.fuqiuluo.shamrock.utils.DeflateTools import moe.fuqiuluo.symbols.OneBotHandler -import moe.whitechi73.protobuf.fav.WeiyunComm +import protobuf.fav.WeiyunComm @OneBotHandler("fav.get_item_content") internal object FavGetItemContent: IActionHandler() { diff --git a/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/action/handlers/FavGetItemList.kt b/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/action/handlers/FavGetItemList.kt index 10b183d..b54b659 100644 --- a/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/action/handlers/FavGetItemList.kt +++ b/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/action/handlers/FavGetItemList.kt @@ -13,7 +13,7 @@ import moe.fuqiuluo.shamrock.remote.action.IActionHandler import moe.fuqiuluo.shamrock.tools.EmptyJsonString import moe.fuqiuluo.shamrock.utils.DeflateTools import moe.fuqiuluo.symbols.OneBotHandler -import moe.whitechi73.protobuf.fav.WeiyunComm +import protobuf.fav.WeiyunComm @OneBotHandler("fav.get_item_list") internal object FavGetItemList: IActionHandler() { diff --git a/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/action/handlers/GetGuildFeeds.kt b/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/action/handlers/GetGuildFeeds.kt new file mode 100644 index 0000000..84fabd5 --- /dev/null +++ b/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/action/handlers/GetGuildFeeds.kt @@ -0,0 +1,38 @@ +package moe.fuqiuluo.shamrock.remote.action.handlers + +import kotlinx.serialization.Serializable +import kotlinx.serialization.json.JsonElement +import moe.fuqiuluo.qqinterface.servlet.GProSvc +import moe.fuqiuluo.shamrock.remote.action.ActionSession +import moe.fuqiuluo.shamrock.remote.action.IActionHandler +import moe.fuqiuluo.shamrock.tools.EmptyJsonString +import moe.fuqiuluo.symbols.OneBotHandler +import protobuf.guild.StFeed + +@OneBotHandler("get_guild_feeds") +internal object GetGuildFeeds: IActionHandler() { + override suspend fun internalHandle(session: ActionSession): String { + val guildId = session.getString("guild_id").toULong() + val channelId = session.getStringOrNull("channel_id")?.toULong() ?: 0uL + val from = session.getIntOrNull("from") ?: 0 + return invoke(guildId, channelId, from, session.echo) + } + + suspend operator fun invoke(guildId: ULong, channelId: ULong, startIndex: Int, echo: JsonElement = EmptyJsonString): String { + val result = GProSvc.getGuildFeeds(guildId, channelId, startIndex).getOrElse { + GProSvc.getGuildFeeds(guildId, 0uL, startIndex).onFailure { + return error(it.message ?: "server error", echo) + }.getOrThrow() + } + if (result.vecFeed == null) { + return error("server error", echo) + } + return ok(GetGuildFeedsResult(result.isFinish == 1, result.vecFeed!!), echo = echo) + } + + @Serializable + data class GetGuildFeedsResult( + val isFinish: Boolean, + val feeds: List + ) +} \ No newline at end of file diff --git a/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/service/listener/PrimitiveListener.kt b/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/service/listener/PrimitiveListener.kt index 39551de..1f2d324 100644 --- a/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/service/listener/PrimitiveListener.kt +++ b/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/service/listener/PrimitiveListener.kt @@ -31,8 +31,21 @@ import moe.fuqiuluo.shamrock.tools.asJsonObject import moe.fuqiuluo.shamrock.tools.asString import moe.fuqiuluo.shamrock.tools.readBuf32Long import moe.fuqiuluo.shamrock.xposed.helper.PacketHandler -import moe.whitechi73.protobuf.message.* -import moe.whitechi73.protobuf.push.* +import protobuf.message.MessageContentHead +import protobuf.message.MessageHead +import protobuf.message.RichMessage +import protobuf.push.C2CCommonTipsEvent +import protobuf.push.C2CRecallEvent +import protobuf.push.FriendApplyEvent +import protobuf.push.GroupAdminChangeEvent +import protobuf.push.GroupApplyEvent +import protobuf.push.GroupBanEvent +import protobuf.push.GroupCommonTipsEvent +import protobuf.push.GroupInviteEvent +import protobuf.push.GroupInvitedApplyEvent +import protobuf.push.GroupListChangeEvent +import protobuf.push.MessagePush +import protobuf.push.MessagePushClientInfo internal object PrimitiveListener { fun registerListener() { @@ -579,7 +592,7 @@ internal object PrimitiveListener { } } - private suspend fun onInviteGroup(time: Long, msgHead: MessageHead,richMsg: RichMessage) { + private suspend fun onInviteGroup(time: Long, msgHead: MessageHead, richMsg: RichMessage) { val event = ProtoBuf.decodeFromByteArray(richMsg.rawBuffer!!) val groupCode = event.groupCode val invitorUid = event.inviterUid diff --git a/xposed/src/main/java/moe/fuqiuluo/shamrock/utils/PlatformUtils.kt b/xposed/src/main/java/moe/fuqiuluo/shamrock/utils/PlatformUtils.kt index 2a74dde..cb8af55 100644 --- a/xposed/src/main/java/moe/fuqiuluo/shamrock/utils/PlatformUtils.kt +++ b/xposed/src/main/java/moe/fuqiuluo/shamrock/utils/PlatformUtils.kt @@ -18,6 +18,10 @@ import kotlin.random.Random internal object PlatformUtils { const val QQ_9_0_8_VER = 5540 + fun getQUA(): String { + return "V1_AND_SQ_${getQQVersion(MobileQQ.getContext())}_${getQQVersionCode()}_YYB_D" + } + fun getQQVersion(context: Context): String { val packageInfo: PackageInfo = context.packageManager.getPackageInfo(context.packageName, 0) return packageInfo.versionName