This commit is contained in:
fuqiuluo 2024-07-08 08:55:49 +08:00
parent 7ea127a279
commit 012ecaa85d
14 changed files with 78 additions and 58 deletions

View File

@ -23,6 +23,8 @@
> Riru可能导致封禁请减少使用。 > Riru可能导致封禁请减少使用。
> 如有违反法律,请联系删除。 > 如有违反法律,请联系删除。
> 请勿在任何平台宣传,宣扬,转发本项目,请勿恶意修改企业安装包造成相关企业产生损失,如有违背,必将追责到底。 > 请勿在任何平台宣传,宣扬,转发本项目,请勿恶意修改企业安装包造成相关企业产生损失,如有违背,必将追责到底。
>
> 社区地址:[discord](https://discord.gg/MKR2wz863h)
## 兼容|迁移|替代 说明 ## 兼容|迁移|替代 说明

View File

@ -162,7 +162,7 @@ private fun FunctionCard(
Function( Function(
title = "主动RPC", title = "主动RPC",
desc = "Kritor协议实现RPC", desc = "Kritor协议实现RPC由Shamrock放出rpc服务",
isSwitch = ShamrockConfig[ctx, ActiveRPC] isSwitch = ShamrockConfig[ctx, ActiveRPC]
) { ) {
ShamrockConfig[ctx, ActiveRPC] = it ShamrockConfig[ctx, ActiveRPC] = it
@ -171,7 +171,7 @@ private fun FunctionCard(
Function( Function(
title = "被动RPC", title = "被动RPC",
desc = "Kritor协议实现RPC", desc = "Kritor协议实现RPC由客户端提供反向的rpc服务",
isSwitch = ShamrockConfig[ctx, PassiveRPC] isSwitch = ShamrockConfig[ctx, PassiveRPC]
) { ) {
ShamrockConfig[ctx, PassiveRPC] = it ShamrockConfig[ctx, PassiveRPC] = it

View File

@ -8,7 +8,9 @@ import moe.fuqiuluo.symbols.Protobuf
data class TrpcOidb( data class TrpcOidb(
@ProtoNumber(1) val cmd: Int = Int.MIN_VALUE, @ProtoNumber(1) val cmd: Int = Int.MIN_VALUE,
@ProtoNumber(2) val service: Int = Int.MIN_VALUE, @ProtoNumber(2) val service: Int = Int.MIN_VALUE,
@ProtoNumber(4) val buffer: ByteArray, @ProtoNumber(3) val result: UInt? = null,
@ProtoNumber(4) val buffer: ByteArray? = null,
@ProtoNumber(5) val msg: String? = null,
//@ProtoNumber(11) val traceParams: Map<String, String> = mapOf(), //@ProtoNumber(11) val traceParams: Map<String, String> = mapOf(),
@ProtoNumber(12) val flag: Int = Int.MIN_VALUE, @ProtoNumber(12) val flag: Int = Int.MIN_VALUE,
): Protobuf<TrpcOidb> ): Protobuf<TrpcOidb>

View File

@ -156,8 +156,8 @@ internal object FriendService : FriendServiceGrpcKt.FriendServiceCoroutineImplBa
val bundle = Bundle() val bundle = Bundle()
val service = QQInterfaces.app val service = QQInterfaces.app
.getRuntimeService(IProfileProtocolService::class.java, "all") .getRuntimeService(IProfileProtocolService::class.java, "all")
if (request.hasNickName()) { if (request.hasNick()) {
bundle.putString(IProfileProtocolConst.KEY_NICK, request.nickName) bundle.putString(IProfileProtocolConst.KEY_NICK, request.nick)
} }
if (request.hasCompany()) { if (request.hasCompany()) {
bundle.putString(IProfileProtocolConst.KEY_COMPANY, request.company) bundle.putString(IProfileProtocolConst.KEY_COMPANY, request.company)

View File

@ -259,12 +259,12 @@ internal object GroupService : GroupServiceGrpcKt.GroupServiceCoroutineImplBase(
.ifNullOrEmpty { memberInfo.friendnick } ?: "" .ifNullOrEmpty { memberInfo.friendnick } ?: ""
age = memberInfo.age.toInt() age = memberInfo.age.toInt()
uniqueTitle = memberInfo.mUniqueTitle ?: "" uniqueTitle = memberInfo.mUniqueTitle ?: ""
uniqueTitleExpireTime = memberInfo.mUniqueTitleExpire uniqueTitleExpireTime = memberInfo.mUniqueTitleExpire.toLong()
card = memberInfo.troopnick.ifNullOrEmpty { memberInfo.friendnick } ?: "" card = memberInfo.troopnick.ifNullOrEmpty { memberInfo.friendnick } ?: ""
joinTime = memberInfo.join_time joinTime = memberInfo.join_time
lastActiveTime = memberInfo.last_active_time lastActiveTime = memberInfo.last_active_time
level = memberInfo.level level = memberInfo.level
shutUpTimestamp = memberInfo.gagTimeStamp shutUpTime = memberInfo.gagTimeStamp
distance = memberInfo.distance distance = memberInfo.distance
addAllHonors((memberInfo.honorList ?: "") addAllHonors((memberInfo.honorList ?: "")
@ -295,12 +295,12 @@ internal object GroupService : GroupServiceGrpcKt.GroupServiceCoroutineImplBase(
nick = memberInfo.nick ?: "" nick = memberInfo.nick ?: ""
age = 0 age = 0
uniqueTitle = memberInfo.memberSpecialTitle ?: "" uniqueTitle = memberInfo.memberSpecialTitle ?: ""
uniqueTitleExpireTime = memberInfo.specialTitleExpireTime.toInt() uniqueTitleExpireTime = memberInfo.specialTitleExpireTime
card = memberInfo.cardName.ifNullOrEmpty { memberInfo.nick } ?: "" card = memberInfo.cardName.ifNullOrEmpty { memberInfo.nick } ?: ""
joinTime = memberInfo.joinTime.toLong() joinTime = memberInfo.joinTime.toLong()
lastActiveTime = memberInfo.lastSpeakTime.toLong() lastActiveTime = memberInfo.lastSpeakTime.toLong()
level = memberInfo.memberLevel level = memberInfo.memberLevel
shutUpTimestamp = memberInfo.shutUpTime.toLong() shutUpTime = memberInfo.shutUpTime.toLong()
distance = 0 distance = 0
addAllHonors(memberInfo.groupHonor.let { bytes -> addAllHonors(memberInfo.groupHonor.let { bytes ->
@ -327,7 +327,7 @@ internal object GroupService : GroupServiceGrpcKt.GroupServiceCoroutineImplBase(
this.addProhibitedUsersInfo(ProhibitedUserInfo.newBuilder().apply { this.addProhibitedUsersInfo(ProhibitedUserInfo.newBuilder().apply {
uid = ContactHelper.getUidByUinAsync(it.memberUin) uid = ContactHelper.getUidByUinAsync(it.memberUin)
uin = it.memberUin uin = it.memberUin
prohibitedTime = it.shutuptimestap prohibitedTime = it.shutuptimestap.toLong()
}) })
} }
}.build() }.build()
@ -360,7 +360,7 @@ internal object GroupService : GroupServiceGrpcKt.GroupServiceCoroutineImplBase(
maxMemberCount = groupInfo.maxMember maxMemberCount = groupInfo.maxMember
memberCount = groupInfo.memberCount memberCount = groupInfo.memberCount
groupDesc = groupInfo.groupDesc groupDesc = groupInfo.groupDesc
createTime = groupInfo.createTime.toInt() createTime = groupInfo.createTime
groupFlag = groupInfo.groupFlag groupFlag = groupInfo.groupFlag
groupFlagExt = groupInfo.groupFlagExt groupFlagExt = groupInfo.groupFlagExt
}.build() }.build()

View File

@ -315,7 +315,7 @@ internal object MessageService : MessageServiceGrpcKt.MessageServiceCoroutineImp
throw StatusRuntimeException(Status.INTERNAL.withCause(it)) throw StatusRuntimeException(Status.INTERNAL.withCause(it))
}.getOrThrow().map { detail -> }.getOrThrow().map { detail ->
PushMessageBody.newBuilder().apply { PushMessageBody.newBuilder().apply {
this.time = detail.time this.time = detail.time.toLong()
this.messageId = detail.qqMsgId.toString() this.messageId = detail.qqMsgId.toString()
this.messageSeq = detail.msgSeq this.messageSeq = detail.msgSeq
this.contact = io.kritor.common.Contact.newBuilder().apply { this.contact = io.kritor.common.Contact.newBuilder().apply {
@ -398,10 +398,10 @@ internal object MessageService : MessageServiceGrpcKt.MessageServiceCoroutineImp
this.messageId = it.msgId.toString() this.messageId = it.msgId.toString()
} }
this.messageSeq = it.messageSeq this.messageSeq = it.messageSeq
this.messageTime = it.senderTime.toInt() this.messageTime = it.senderTime
this.senderNick = it.senderNick this.senderNick = it.senderNick
this.senderUin = it.senderId this.senderUin = it.senderId
this.operationTime = it.operatorTime.toInt() this.operationTime = it.operatorTime
this.operatorNick = it.operatorNick this.operatorNick = it.operatorNick
this.operatorUin = it.operatorId this.operatorUin = it.operatorId
this.jsonElements = it.messageContent.toString() this.jsonElements = it.messageContent.toString()

View File

@ -42,7 +42,7 @@ internal object GlobalEventTransmitter : QQInterfaces() {
elements: ArrayList<MsgElement>, elements: ArrayList<MsgElement>,
): Boolean { ): Boolean {
transMessageEvent(record, PushMessageBody.newBuilder().apply { transMessageEvent(record, PushMessageBody.newBuilder().apply {
this.time = record.msgTime.toInt() this.time = record.msgTime
this.messageId = record.msgId.toString() this.messageId = record.msgId.toString()
this.messageSeq = record.msgSeq this.messageSeq = record.msgSeq
this.contact = Contact.newBuilder().apply { this.contact = Contact.newBuilder().apply {
@ -65,7 +65,7 @@ internal object GlobalEventTransmitter : QQInterfaces() {
elements: ArrayList<MsgElement>, elements: ArrayList<MsgElement>,
): Boolean { ): Boolean {
transMessageEvent(record, PushMessageBody.newBuilder().apply { transMessageEvent(record, PushMessageBody.newBuilder().apply {
this.time = record.msgTime.toInt() this.time = record.msgTime
this.messageId = record.msgId.toString() this.messageId = record.msgId.toString()
this.messageSeq = record.msgSeq this.messageSeq = record.msgSeq
this.contact = Contact.newBuilder().apply { this.contact = Contact.newBuilder().apply {
@ -90,7 +90,7 @@ internal object GlobalEventTransmitter : QQInterfaces() {
fromNick: String, fromNick: String,
): Boolean { ): Boolean {
transMessageEvent(record, PushMessageBody.newBuilder().apply { transMessageEvent(record, PushMessageBody.newBuilder().apply {
this.time = record.msgTime.toInt() this.time = record.msgTime
this.messageId = record.msgId.toString() this.messageId = record.msgId.toString()
this.messageSeq = record.msgSeq this.messageSeq = record.msgSeq
this.contact = Contact.newBuilder().apply { this.contact = Contact.newBuilder().apply {
@ -113,7 +113,7 @@ internal object GlobalEventTransmitter : QQInterfaces() {
elements: ArrayList<MsgElement>, elements: ArrayList<MsgElement>,
): Boolean { ): Boolean {
transMessageEvent(record, PushMessageBody.newBuilder().apply { transMessageEvent(record, PushMessageBody.newBuilder().apply {
this.time = record.msgTime.toInt() this.time = record.msgTime
this.messageId = record.msgId.toString() this.messageId = record.msgId.toString()
this.messageSeq = record.msgSeq this.messageSeq = record.msgSeq
this.contact = Contact.newBuilder().apply { this.contact = Contact.newBuilder().apply {
@ -152,16 +152,16 @@ internal object GlobalEventTransmitter : QQInterfaces() {
): Boolean { ): Boolean {
pushNotice(NoticeEvent.newBuilder().apply { pushNotice(NoticeEvent.newBuilder().apply {
this.type = NoticeEvent.NoticeType.PRIVATE_FILE_UPLOADED this.type = NoticeEvent.NoticeType.PRIVATE_FILE_UPLOADED
this.time = msgTime.toInt() this.time = msgTime
this.privateFileUploaded = PrivateFileUploadedNotice.newBuilder().apply { this.privateFileUploaded = PrivateFileUploadedNotice.newBuilder().apply {
this.fileId = fileId this.fileId = fileId
this.fileName = fileName this.fileName = fileName
this.operatorUid = senderUid this.operatorUid = senderUid
this.operatorUin = senderUin this.operatorUin = senderUin
this.fileSize = fileSize this.fileSize = fileSize
this.expireTime = expireTime.toInt() this.expireTime = expireTime
this.fileSubId = fileSubId this.fileSubId = fileSubId.toInt() // todo(这玩意真的是一个数字?)
this.url = url this.fileUrl = url
}.build() }.build()
}.build()) }.build())
return true return true
@ -183,7 +183,7 @@ internal object GlobalEventTransmitter : QQInterfaces() {
): Boolean { ): Boolean {
pushNotice(NoticeEvent.newBuilder().apply { pushNotice(NoticeEvent.newBuilder().apply {
this.type = NoticeEvent.NoticeType.GROUP_FILE_UPLOADED this.type = NoticeEvent.NoticeType.GROUP_FILE_UPLOADED
this.time = msgTime.toInt() this.time = msgTime
this.groupFileUploaded = GroupFileUploadedNotice.newBuilder().apply { this.groupFileUploaded = GroupFileUploadedNotice.newBuilder().apply {
this.groupId = groupId this.groupId = groupId
this.operatorUid = senderUid this.operatorUid = senderUid
@ -191,7 +191,7 @@ internal object GlobalEventTransmitter : QQInterfaces() {
this.fileId = uuid this.fileId = uuid
this.fileName = fileName this.fileName = fileName
this.fileSize = fileSize this.fileSize = fileSize
this.busId = bizId this.fileSubId = bizId
this.fileUrl = url this.fileUrl = url
}.build() }.build()
}.build()) }.build())
@ -212,7 +212,7 @@ internal object GlobalEventTransmitter : QQInterfaces() {
): Boolean { ): Boolean {
pushNotice(NoticeEvent.newBuilder().apply { pushNotice(NoticeEvent.newBuilder().apply {
this.type = NoticeEvent.NoticeType.GROUP_SIGN_IN this.type = NoticeEvent.NoticeType.GROUP_SIGN_IN
this.time = time.toInt() this.time = time
this.groupSignIn = GroupSignInNotice.newBuilder().apply { this.groupSignIn = GroupSignInNotice.newBuilder().apply {
this.groupId = groupCode this.groupId = groupCode
this.targetUid = ContactHelper.getUidByUinAsync(target) this.targetUid = ContactHelper.getUidByUinAsync(target)
@ -235,7 +235,7 @@ internal object GlobalEventTransmitter : QQInterfaces() {
): Boolean { ): Boolean {
pushNotice(NoticeEvent.newBuilder().apply { pushNotice(NoticeEvent.newBuilder().apply {
this.type = NoticeEvent.NoticeType.GROUP_POKE this.type = NoticeEvent.NoticeType.GROUP_POKE
this.time = time.toInt() this.time = time
this.groupPoke = GroupPokeNotice.newBuilder().apply { this.groupPoke = GroupPokeNotice.newBuilder().apply {
this.groupId = groupCode this.groupId = groupCode
this.action = action this.action = action
@ -261,7 +261,7 @@ internal object GlobalEventTransmitter : QQInterfaces() {
): Boolean { ): Boolean {
pushNotice(NoticeEvent.newBuilder().apply { pushNotice(NoticeEvent.newBuilder().apply {
this.type = NoticeEvent.NoticeType.GROUP_MEMBER_INCREASE this.type = NoticeEvent.NoticeType.GROUP_MEMBER_INCREASE
this.time = time.toInt() this.time = time
this.groupMemberIncrease = GroupMemberIncreasedNotice.newBuilder().apply { this.groupMemberIncrease = GroupMemberIncreasedNotice.newBuilder().apply {
this.groupId = groupCode this.groupId = groupCode
this.operatorUid = operatorUid this.operatorUid = operatorUid
@ -285,7 +285,7 @@ internal object GlobalEventTransmitter : QQInterfaces() {
): Boolean { ): Boolean {
pushNotice(NoticeEvent.newBuilder().apply { pushNotice(NoticeEvent.newBuilder().apply {
this.type = NoticeEvent.NoticeType.GROUP_MEMBER_DECREASE this.type = NoticeEvent.NoticeType.GROUP_MEMBER_DECREASE
this.time = time.toInt() this.time = time
this.groupMemberDecrease = GroupMemberDecreasedNotice.newBuilder().apply { this.groupMemberDecrease = GroupMemberDecreasedNotice.newBuilder().apply {
this.groupId = groupCode this.groupId = groupCode
this.operatorUid = operatorUid this.operatorUid = operatorUid
@ -307,7 +307,7 @@ internal object GlobalEventTransmitter : QQInterfaces() {
): Boolean { ): Boolean {
pushNotice(NoticeEvent.newBuilder().apply { pushNotice(NoticeEvent.newBuilder().apply {
this.type = NoticeEvent.NoticeType.GROUP_ADMIN_CHANGED this.type = NoticeEvent.NoticeType.GROUP_ADMIN_CHANGED
this.time = msgTime.toInt() this.time = msgTime
this.groupAdminChanged = GroupAdminChangedNotice.newBuilder().apply { this.groupAdminChanged = GroupAdminChangedNotice.newBuilder().apply {
this.groupId = groupCode this.groupId = groupCode
this.targetUid = targetUid this.targetUid = targetUid
@ -327,7 +327,7 @@ internal object GlobalEventTransmitter : QQInterfaces() {
): Boolean { ): Boolean {
pushNotice(NoticeEvent.newBuilder().apply { pushNotice(NoticeEvent.newBuilder().apply {
this.type = NoticeEvent.NoticeType.GROUP_WHOLE_BAN this.type = NoticeEvent.NoticeType.GROUP_WHOLE_BAN
this.time = msgTime.toInt() this.time = msgTime
this.groupWholeBan = GroupWholeBanNotice.newBuilder().apply { this.groupWholeBan = GroupWholeBanNotice.newBuilder().apply {
this.groupId = groupCode this.groupId = groupCode
this.isBan = isOpen this.isBan = isOpen
@ -349,7 +349,7 @@ internal object GlobalEventTransmitter : QQInterfaces() {
): Boolean { ): Boolean {
pushNotice(NoticeEvent.newBuilder().apply { pushNotice(NoticeEvent.newBuilder().apply {
this.type = NoticeEvent.NoticeType.GROUP_MEMBER_BAN this.type = NoticeEvent.NoticeType.GROUP_MEMBER_BAN
this.time = msgTime.toInt() this.time = msgTime
this.groupMemberBan = GroupMemberBanNotice.newBuilder().apply { this.groupMemberBan = GroupMemberBanNotice.newBuilder().apply {
this.groupId = groupCode this.groupId = groupCode
this.operatorUid = operatorUid this.operatorUid = operatorUid
@ -376,7 +376,7 @@ internal object GlobalEventTransmitter : QQInterfaces() {
): Boolean { ): Boolean {
pushNotice(NoticeEvent.newBuilder().apply { pushNotice(NoticeEvent.newBuilder().apply {
this.type = NoticeEvent.NoticeType.GROUP_RECALL this.type = NoticeEvent.NoticeType.GROUP_RECALL
this.time = time.toInt() this.time = time
this.groupRecall = GroupRecallNotice.newBuilder().apply { this.groupRecall = GroupRecallNotice.newBuilder().apply {
this.groupId = groupCode this.groupId = groupCode
this.operatorUid = operatorUid this.operatorUid = operatorUid
@ -398,7 +398,7 @@ internal object GlobalEventTransmitter : QQInterfaces() {
): Boolean { ): Boolean {
pushNotice(NoticeEvent.newBuilder().apply { pushNotice(NoticeEvent.newBuilder().apply {
this.type = NoticeEvent.NoticeType.GROUP_CARD_CHANGED this.type = NoticeEvent.NoticeType.GROUP_CARD_CHANGED
this.time = time.toInt() this.time = time
this.groupCardChanged = GroupCardChangedNotice.newBuilder().apply { this.groupCardChanged = GroupCardChangedNotice.newBuilder().apply {
this.groupId = groupId this.groupId = groupId
this.targetUin = targetId this.targetUin = targetId
@ -416,7 +416,7 @@ internal object GlobalEventTransmitter : QQInterfaces() {
): Boolean { ): Boolean {
pushNotice(NoticeEvent.newBuilder().apply { pushNotice(NoticeEvent.newBuilder().apply {
this.type = NoticeEvent.NoticeType.GROUP_MEMBER_UNIQUE_TITLE_CHANGED this.type = NoticeEvent.NoticeType.GROUP_MEMBER_UNIQUE_TITLE_CHANGED
this.time = time.toInt() this.time = time
this.groupMemberUniqueTitleChanged = GroupUniqueTitleChangedNotice.newBuilder().apply { this.groupMemberUniqueTitleChanged = GroupUniqueTitleChangedNotice.newBuilder().apply {
this.groupId = groupId this.groupId = groupId
this.targetUid = ContactHelper.getUidByUinAsync(targetUin) this.targetUid = ContactHelper.getUidByUinAsync(targetUin)
@ -437,7 +437,7 @@ internal object GlobalEventTransmitter : QQInterfaces() {
): Boolean { ): Boolean {
pushNotice(NoticeEvent.newBuilder().apply { pushNotice(NoticeEvent.newBuilder().apply {
this.type = NoticeEvent.NoticeType.GROUP_ESSENCE_CHANGED this.type = NoticeEvent.NoticeType.GROUP_ESSENCE_CHANGED
this.time = time.toInt() this.time = time
this.groupEssenceChanged = GroupEssenceMessageNotice.newBuilder().apply { this.groupEssenceChanged = GroupEssenceMessageNotice.newBuilder().apply {
this.groupId = groupId this.groupId = groupId
this.messageId = msgId.toString() this.messageId = msgId.toString()
@ -465,7 +465,7 @@ internal object GlobalEventTransmitter : QQInterfaces() {
): Boolean { ): Boolean {
pushNotice(NoticeEvent.newBuilder().apply { pushNotice(NoticeEvent.newBuilder().apply {
this.type = NoticeEvent.NoticeType.PRIVATE_POKE this.type = NoticeEvent.NoticeType.PRIVATE_POKE
this.time = msgTime.toInt() this.time = msgTime
this.privatePoke = PrivatePokeNotice.newBuilder().apply { this.privatePoke = PrivatePokeNotice.newBuilder().apply {
this.action = action ?: "" this.action = action ?: ""
this.operatorUid = ContactHelper.getUidByUinAsync(operator) this.operatorUid = ContactHelper.getUidByUinAsync(operator)
@ -480,7 +480,7 @@ internal object GlobalEventTransmitter : QQInterfaces() {
suspend fun transPrivateRecall(time: Long, operator: Long, msgId: Long, tipText: String): Boolean { suspend fun transPrivateRecall(time: Long, operator: Long, msgId: Long, tipText: String): Boolean {
pushNotice(NoticeEvent.newBuilder().apply { pushNotice(NoticeEvent.newBuilder().apply {
this.type = NoticeEvent.NoticeType.PRIVATE_RECALL this.type = NoticeEvent.NoticeType.PRIVATE_RECALL
this.time = time.toInt() this.time = time
this.privateRecall = PrivateRecallNotice.newBuilder().apply { this.privateRecall = PrivateRecallNotice.newBuilder().apply {
this.operatorUin = operator this.operatorUin = operator
this.messageId = msgId.toString() this.messageId = msgId.toString()
@ -499,7 +499,7 @@ internal object GlobalEventTransmitter : QQInterfaces() {
suspend fun transFriendApp(time: Long, applierUid: String, operator: Long, tipText: String, flag: String): Boolean { suspend fun transFriendApp(time: Long, applierUid: String, operator: Long, tipText: String, flag: String): Boolean {
pushRequest(RequestEvent.newBuilder().apply { pushRequest(RequestEvent.newBuilder().apply {
this.type = RequestEvent.RequestType.FRIEND_APPLY this.type = RequestEvent.RequestType.FRIEND_APPLY
this.time = time.toInt() this.time = time
this.requestId = flag this.requestId = flag
this.friendApply = FriendApplyRequest.newBuilder().apply { this.friendApply = FriendApplyRequest.newBuilder().apply {
this.applierUid = applierUid this.applierUid = applierUid
@ -520,7 +520,7 @@ internal object GlobalEventTransmitter : QQInterfaces() {
): Boolean { ): Boolean {
pushRequest(RequestEvent.newBuilder().apply { pushRequest(RequestEvent.newBuilder().apply {
this.type = RequestEvent.RequestType.GROUP_APPLY this.type = RequestEvent.RequestType.GROUP_APPLY
this.time = time.toInt() this.time = time
this.requestId = flag this.requestId = flag
this.groupApply = GroupApplyRequest.newBuilder().apply { this.groupApply = GroupApplyRequest.newBuilder().apply {
this.applierUid = applierUid this.applierUid = applierUid
@ -541,7 +541,7 @@ internal object GlobalEventTransmitter : QQInterfaces() {
): Boolean { ): Boolean {
pushRequest(RequestEvent.newBuilder().apply { pushRequest(RequestEvent.newBuilder().apply {
this.type = RequestEvent.RequestType.GROUP_APPLY this.type = RequestEvent.RequestType.GROUP_APPLY
this.time = time.toInt() this.time = time
this.requestId = flag this.requestId = flag
this.invitedGroup = InvitedJoinGroupRequest.newBuilder().apply { this.invitedGroup = InvitedJoinGroupRequest.newBuilder().apply {
this.inviterUid = inviterUid this.inviterUid = inviterUid

View File

@ -355,7 +355,16 @@ internal object NtV2RichMediaSvc: QQInterfaces() {
if (fromServiceMsg == null || fromServiceMsg.wupBuffer == null) { if (fromServiceMsg == null || fromServiceMsg.wupBuffer == null) {
return Result.failure(Exception("unable to get multimedia pic info: ${fromServiceMsg?.wupBuffer}")) return Result.failure(Exception("unable to get multimedia pic info: ${fromServiceMsg?.wupBuffer}"))
} }
fromServiceMsg.wupBuffer.decodeProtobuf<TrpcOidb>().buffer.decodeProtobuf<NtV2RichMediaRsp>().download?.rkeyParam?.let { val trpc = kotlin.runCatching {
fromServiceMsg.wupBuffer.decodeProtobuf<TrpcOidb>()
}.getOrElse {
fromServiceMsg.wupBuffer.slice(4).decodeProtobuf<TrpcOidb>()
}
if (trpc.buffer == null) {
return Result.failure(Exception("unable to get multimedia pic info: ${trpc.msg}"))
}
trpc.buffer?.decodeProtobuf<NtV2RichMediaRsp>()?.download?.rkeyParam?.let {
return Result.success(it) return Result.success(it)
} }
}.onFailure { }.onFailure {
@ -448,8 +457,15 @@ internal object NtV2RichMediaSvc: QQInterfaces() {
if (fromServiceMsg == null || fromServiceMsg.wupBuffer == null) { if (fromServiceMsg == null || fromServiceMsg.wupBuffer == null) {
return Result.failure(Exception("unable to request upload nt pic")) return Result.failure(Exception("unable to request upload nt pic"))
} }
val rspBuffer = fromServiceMsg.wupBuffer.decodeProtobuf<TrpcOidb>().buffer val trpc = kotlin.runCatching {
val rsp = rspBuffer.decodeProtobuf<NtV2RichMediaRsp>() fromServiceMsg.wupBuffer.decodeProtobuf<TrpcOidb>()
}.getOrElse {
fromServiceMsg.wupBuffer.slice(4).decodeProtobuf<TrpcOidb>()
}
if (trpc.buffer == null) {
return Result.failure(Exception("unable to request upload nt pic: ${trpc.msg}"))
}
val rsp = trpc.buffer!!.decodeProtobuf<NtV2RichMediaRsp>()
if (rsp.upload == null) { if (rsp.upload == null) {
return Result.failure(Exception("unable to request upload nt pic: ${rsp.head}")) return Result.failure(Exception("unable to request upload nt pic: ${rsp.head}"))
} }

View File

@ -116,9 +116,9 @@ internal object GroupFileHelper: QQInterfaces() {
this.fileName = fileInfo.str_file_name.get() this.fileName = fileInfo.str_file_name.get()
this.fileSize = fileInfo.uint64_file_size.get() this.fileSize = fileInfo.uint64_file_size.get()
this.busId = fileInfo.uint32_bus_id.get() this.busId = fileInfo.uint32_bus_id.get()
this.uploadTime = fileInfo.uint32_upload_time.get() this.uploadTime = fileInfo.uint32_upload_time.get().toLong()
this.expireTime = fileInfo.uint32_dead_time.get() this.expireTime = fileInfo.uint32_dead_time.get().toLong()
this.modifyTime = fileInfo.uint32_modify_time.get() this.modifyTime = fileInfo.uint32_modify_time.get().toLong()
this.downloadTimes = fileInfo.uint32_download_times.get() this.downloadTimes = fileInfo.uint32_download_times.get()
this.uploader = fileInfo.uint64_uploader_uin.get() this.uploader = fileInfo.uint64_uploader_uin.get()
this.uploaderName = fileInfo.str_uploader_name.get() this.uploaderName = fileInfo.str_uploader_name.get()
@ -133,7 +133,7 @@ internal object GroupFileHelper: QQInterfaces() {
this.folderId = folderInfo.str_folder_id.get() this.folderId = folderInfo.str_folder_id.get()
this.folderName = folderInfo.str_folder_name.get() this.folderName = folderInfo.str_folder_name.get()
this.totalFileCount = folderInfo.uint32_total_file_count.get() this.totalFileCount = folderInfo.uint32_total_file_count.get()
this.createTime = folderInfo.uint32_create_time.get() this.createTime = folderInfo.uint32_create_time.get().toLong()
this.creator = folderInfo.uint64_create_uin.get() this.creator = folderInfo.uint64_create_uin.get()
this.creatorName = folderInfo.str_creator_name.get() this.creatorName = folderInfo.str_creator_name.get()
}.build()) }.build())

View File

@ -78,7 +78,7 @@ private object MsgConvertor {
elem.type = ElementType.POKE elem.type = ElementType.POKE
elem.setPoke(PokeElement.newBuilder().apply { elem.setPoke(PokeElement.newBuilder().apply {
this.id = face.vaspokeId this.id = face.vaspokeId
this.type = face.pokeType this.pokeType = face.pokeType
this.strength = face.pokeStrength this.strength = face.pokeStrength
}) })
} else { } else {
@ -195,7 +195,7 @@ private object MsgConvertor {
else -> throw UnsupportedOperationException("Not supported chat type: ${record.chatType}") else -> throw UnsupportedOperationException("Not supported chat type: ${record.chatType}")
} }
this.type = this.fileType =
if (image.isFlashPic == true) ImageElement.ImageType.FLASH else if (image.original) ImageElement.ImageType.ORIGIN else ImageElement.ImageType.COMMON if (image.isFlashPic == true) ImageElement.ImageType.FLASH else if (image.original) ImageElement.ImageType.ORIGIN else ImageElement.ImageType.COMMON
this.subType = image.picSubType this.subType = image.picSubType
}) })

View File

@ -65,7 +65,7 @@ suspend fun List<Elem>.toKritorResponseMessages(contact: Contact): ArrayList<Ele
this.type = ElementType.IMAGE this.type = ElementType.IMAGE
this.image = ImageElement.newBuilder().apply { this.image = ImageElement.newBuilder().apply {
this.fileMd5 = md5 this.fileMd5 = md5
this.type = if (customFace.origin == true) ImageType.ORIGIN else ImageType.COMMON this.fileType = if (customFace.origin == true) ImageType.ORIGIN else ImageType.COMMON
this.fileUrl = when (contact.chatType) { this.fileUrl = when (contact.chatType) {
MsgConstant.KCHATTYPEDISC, MsgConstant.KCHATTYPEGROUP -> RichProtoSvc.getGroupPicDownUrl( MsgConstant.KCHATTYPEDISC, MsgConstant.KCHATTYPEGROUP -> RichProtoSvc.getGroupPicDownUrl(
origUrl, origUrl,
@ -85,7 +85,7 @@ suspend fun List<Elem>.toKritorResponseMessages(contact: Contact): ArrayList<Ele
this.type = ElementType.IMAGE this.type = ElementType.IMAGE
this.image = ImageElement.newBuilder().apply { this.image = ImageElement.newBuilder().apply {
this.fileMd5 = md5 this.fileMd5 = md5
this.type = if (element.notOnlineImage?.original == true) ImageType.ORIGIN else ImageType.COMMON this.fileType = if (element.notOnlineImage?.original == true) ImageType.ORIGIN else ImageType.COMMON
this.fileUrl = when (contact.chatType) { this.fileUrl = when (contact.chatType) {
MsgConstant.KCHATTYPEDISC, MsgConstant.KCHATTYPEGROUP -> RichProtoSvc.getGroupPicDownUrl( MsgConstant.KCHATTYPEDISC, MsgConstant.KCHATTYPEGROUP -> RichProtoSvc.getGroupPicDownUrl(
origUrl, origUrl,

View File

@ -254,8 +254,8 @@ object NtMsgConvertor {
} }
private suspend fun imageConvertor(contact: Contact, msgId: Long, sourceImage: Element): Result<MsgElement> { private suspend fun imageConvertor(contact: Contact, msgId: Long, sourceImage: Element): Result<MsgElement> {
val isOriginal = sourceImage.image.type == ImageType.ORIGIN val isOriginal = sourceImage.image.fileType == ImageType.ORIGIN
val isFlash = sourceImage.image.type == ImageType.FLASH val isFlash = sourceImage.image.fileType == ImageType.FLASH
val file = when (sourceImage.image.dataCase!!) { val file = when (sourceImage.image.dataCase!!) {
ImageElement.DataCase.FILE_NAME -> { ImageElement.DataCase.FILE_NAME -> {
val fileMd5 = sourceImage.image.fileName.replace(regex = "[{}\\-]".toRegex(), replacement = "") val fileMd5 = sourceImage.image.fileName.replace(regex = "[{}\\-]".toRegex(), replacement = "")
@ -638,7 +638,7 @@ object NtMsgConvertor {
face.faceText = "" face.faceText = ""
face.faceType = 5 face.faceType = 5
face.packId = null face.packId = null
face.pokeType = sourcePoke.poke.type face.pokeType = sourcePoke.poke.pokeType
face.spokeSummary = "" face.spokeSummary = ""
face.doubleHit = 0 face.doubleHit = 0
face.vaspokeId = sourcePoke.poke.id face.vaspokeId = sourcePoke.poke.id

View File

@ -73,7 +73,7 @@ private object ReqMsgConvertor {
if (face.faceType == 5) { if (face.faceType == 5) {
elem.setPoke(PokeElement.newBuilder().apply { elem.setPoke(PokeElement.newBuilder().apply {
this.id = face.vaspokeId this.id = face.vaspokeId
this.type = face.pokeType this.pokeType = face.pokeType
this.strength = face.pokeStrength this.strength = face.pokeStrength
}) })
} else { } else {
@ -174,7 +174,7 @@ private object ReqMsgConvertor {
else -> throw UnsupportedOperationException("Not supported chat type: ${contact.chatType}") else -> throw UnsupportedOperationException("Not supported chat type: ${contact.chatType}")
} }
this.type = this.fileType =
if (image.isFlashPic == true) ImageElement.ImageType.FLASH else if (image.original) ImageElement.ImageType.ORIGIN else ImageElement.ImageType.COMMON if (image.isFlashPic == true) ImageElement.ImageType.FLASH else if (image.original) ImageElement.ImageType.ORIGIN else ImageElement.ImageType.COMMON
this.subType = image.picSubType this.subType = image.picSubType
}) })

View File

@ -183,7 +183,7 @@ suspend fun List<Element>.toRichText(contact: Contact): Result<Pair<String, Rich
summary.append("[回复消息]") summary.append("[回复消息]")
} }
Element.ElementType.IMAGE -> { Element.ElementType.IMAGE -> {
val type = it.image.type val type = it.image.fileType
val isOriginal = type == ImageElement.ImageType.ORIGIN val isOriginal = type == ImageElement.ImageType.ORIGIN
val file = when(it.image.dataCase!!) { val file = when(it.image.dataCase!!) {
ImageElement.DataCase.FILE_NAME -> { ImageElement.DataCase.FILE_NAME -> {
@ -391,7 +391,7 @@ suspend fun List<Element>.toRichText(contact: Contact): Result<Pair<String, Rich
commonElem = CommonElem( commonElem = CommonElem(
serviceType = 2, serviceType = 2,
elem = PokeExtra( elem = PokeExtra(
type = it.poke.type, type = it.poke.pokeType,
field7 = 0, field7 = 0,
field8 = 0 field8 = 0
).toByteArray(), ).toByteArray(),