Prefer generified outgoing packets in all factories

This commit is contained in:
Him188 2021-04-18 00:33:27 +08:00
parent 82ad953b2b
commit 0443fe4576
16 changed files with 232 additions and 267 deletions

View File

@ -31,7 +31,6 @@ import net.mamoe.mirai.internal.contact.info.MemberInfoImpl
import net.mamoe.mirai.internal.message.*
import net.mamoe.mirai.internal.message.DeepMessageRefiner.refineDeep
import net.mamoe.mirai.internal.network.highway.*
import net.mamoe.mirai.internal.network.protocol
import net.mamoe.mirai.internal.network.protocol.data.jce.SvcDevLoginInfo
import net.mamoe.mirai.internal.network.protocol.data.proto.ImMsgBody
import net.mamoe.mirai.internal.network.protocol.data.proto.LongMsg
@ -861,8 +860,7 @@ internal open class MiraiImpl : IMirai, LowLevelApiAccessor {
dstUin: Long
): String {
bot.asQQAndroidBot().network.run {
val response: PttStore.GroupPttDown.Response.DownLoadInfo =
PttStore.GroupPttDown(bot.client, groupId, dstUin, md5).sendAndExpect()
val response = PttStore.GroupPttDown(bot.client, groupId, dstUin, md5).sendAndExpect()
return "http://${response.strDomain}${response.downPara.encodeToString()}"
}
}

View File

@ -24,7 +24,6 @@ import net.mamoe.mirai.internal.network.protocol.data.proto.ImMsgBody
import net.mamoe.mirai.internal.network.protocol.data.proto.MsgComm
import net.mamoe.mirai.internal.network.protocol.data.proto.MsgTransmit
import net.mamoe.mirai.internal.network.protocol.data.proto.MultiMsg
import net.mamoe.mirai.internal.network.protocol.packet.OutgoingPacket
import net.mamoe.mirai.internal.network.protocol.packet.OutgoingPacketFactory
import net.mamoe.mirai.internal.network.protocol.packet.buildOutgoingUniPacket
import net.mamoe.mirai.internal.utils._miraiContentToString
@ -134,7 +133,7 @@ internal class MultiMsg {
client: QQAndroidClient,
messageData: MessageValidationData,
dstUin: Long // group uin
): OutgoingPacket = buildOutgoingUniPacket(client) {
) = buildOutgoingUniPacket(client) {
writeProtoBuf(
MultiMsg.ReqBody.serializer(),
MultiMsg.ReqBody(

View File

@ -1,5 +1,5 @@
/*
* Copyright 2019-2020 Mamoe Technologies and contributors.
* Copyright 2019-2021 Mamoe Technologies and contributors.
*
* 此源代码的使用受 GNU AFFERO GENERAL PUBLIC LICENSE version 3 许可证的约束, 可以在以下链接找到该许可证.
* Use of this source code is governed by the GNU AGPLv3 license that can be found through the following link.
@ -38,8 +38,7 @@ internal object NudgePacket : OutgoingPacketFactory<NudgePacket.Response>("OidbS
client: QQAndroidClient,
nudgeTargetId: Long,
messageReceiverUin: Long,
): OutgoingPacket {
return buildOutgoingUniPacket(client) {
): OutgoingPacket = buildOutgoingUniPacket(client) {
writeProtoBuf(
OidbSso.OIDBSSOPkg.serializer(),
OidbSso.OIDBSSOPkg(
@ -53,14 +52,12 @@ internal object NudgePacket : OutgoingPacketFactory<NudgePacket.Response>("OidbS
)
)
}
}
fun troopInvoke(
client: QQAndroidClient,
messageReceiverGroupCode: Long,
nudgeTargetId: Long,
): OutgoingPacket {
return buildOutgoingUniPacket(client) {
): OutgoingPacket = buildOutgoingUniPacket(client) {
writeProtoBuf(
OidbSso.OIDBSSOPkg.serializer(),
OidbSso.OIDBSSOPkg(
@ -74,6 +71,5 @@ internal object NudgePacket : OutgoingPacketFactory<NudgePacket.Response>("OidbS
)
)
}
}
}

View File

@ -17,7 +17,6 @@ import net.mamoe.mirai.internal.network.Packet
import net.mamoe.mirai.internal.network.QQAndroidClient
import net.mamoe.mirai.internal.network.protocol.data.proto.MsgRevokeUserDef
import net.mamoe.mirai.internal.network.protocol.data.proto.MsgSvc
import net.mamoe.mirai.internal.network.protocol.packet.OutgoingPacket
import net.mamoe.mirai.internal.network.protocol.packet.OutgoingPacketFactory
import net.mamoe.mirai.internal.network.protocol.packet.OutgoingPacketWithRespType
import net.mamoe.mirai.internal.network.protocol.packet.buildOutgoingUniPacket
@ -87,7 +86,7 @@ internal class PbMessageSvc {
messageSequenceId: IntArray, // 56639
messageRandom: IntArray, // 921878719
time: Int
): OutgoingPacket {
): OutgoingPacketWithRespType<Response> {
require(messageSequenceId.size == messageRandom.size)
return buildOutgoingUniPacket(client) {
@ -126,7 +125,7 @@ internal class PbMessageSvc {
messageSequenceId: IntArray, // 56639
messageRandom: IntArray, // 921878719
time: Int
): OutgoingPacket {
): OutgoingPacketWithRespType<Response> {
require(messageSequenceId.size == messageRandom.size)
return buildOutgoingUniPacket(client) {

View File

@ -13,18 +13,14 @@ import kotlinx.io.core.ByteReadPacket
import net.mamoe.mirai.internal.QQAndroidBot
import net.mamoe.mirai.internal.network.Packet
import net.mamoe.mirai.internal.network.QQAndroidClient
import net.mamoe.mirai.internal.network.protocol.data.proto.Oidb0x496
import net.mamoe.mirai.internal.network.protocol.data.proto.Oidb0xeac
import net.mamoe.mirai.internal.network.protocol.data.proto.OidbSso
import net.mamoe.mirai.internal.network.protocol.packet.OutgoingPacketFactory
import net.mamoe.mirai.internal.network.protocol.packet.OutgoingPacketWithRespType
import net.mamoe.mirai.internal.network.protocol.packet.buildOutgoingUniPacket
import net.mamoe.mirai.internal.utils._miraiContentToString
import net.mamoe.mirai.internal.utils.io.serialization.loadAs
import net.mamoe.mirai.internal.utils.io.serialization.readProtoBuf
import net.mamoe.mirai.internal.utils.io.serialization.toByteArray
import net.mamoe.mirai.internal.utils.io.serialization.writeProtoBuf
import net.mamoe.mirai.utils.MiraiLogger
/**
* 群精华消息管理
@ -34,17 +30,14 @@ import net.mamoe.mirai.utils.MiraiLogger
internal class TroopEssenceMsgManager {
internal object SetEssence : OutgoingPacketFactory<SetEssence.Response>("OidbSvc.0xeac_1") {
internal data class Response(val success: Boolean, val msg: String?) : Packet {
}
internal data class Response(val success: Boolean, val msg: String?) : Packet
operator fun invoke(
client: QQAndroidClient,
troopUin: Long,
msg_random: Int,
msg_seq: Int
): OutgoingPacketWithRespType<Response> {
return buildOutgoingUniPacket(client) {
) = buildOutgoingUniPacket(client) {
writeProtoBuf(
OidbSso.OIDBSSOPkg.serializer(), OidbSso.OIDBSSOPkg(
command = 3756,
@ -58,7 +51,6 @@ internal class TroopEssenceMsgManager {
)
)
}
}
override suspend fun ByteReadPacket.decode(bot: QQAndroidBot): Response {
readProtoBuf(OidbSso.OIDBSSOPkg.serializer()).let { pkg ->

View File

@ -137,7 +137,7 @@ internal class TroopManagement {
operator fun invoke(
client: QQAndroidClient
): OutgoingPacket = buildOutgoingUniPacket(client) {
) = buildOutgoingUniPacket(client) {
writeProtoBuf(
OidbSso.OIDBSSOPkg.serializer(), OidbSso.OIDBSSOPkg(
command = 1174,
@ -193,7 +193,7 @@ internal class TroopManagement {
client: QQAndroidClient,
member: Member,
message: String
): OutgoingPacket = buildOutgoingUniPacket(client) {
) = buildOutgoingUniPacket(client) {
writeProtoBuf(
OidbSso.OIDBSSOPkg.serializer(),
OidbSso.OIDBSSOPkg(
@ -224,7 +224,7 @@ internal class TroopManagement {
client: QQAndroidClient,
groupCode: Long,
switch: Boolean
): OutgoingPacket = impl(client, groupCode) {
) = impl(client, groupCode) {
shutupTime = if (switch) 0x0FFFFFFF else 0
}
@ -252,7 +252,7 @@ internal class TroopManagement {
client: QQAndroidClient,
groupCode: Long,
switch: Boolean
): OutgoingPacket = impl(client, groupCode) {
) = impl(client, groupCode) {
groupFlagext3 = if (switch) 0x00100000 else 0x00000000//暂时无效
}
@ -260,7 +260,7 @@ internal class TroopManagement {
client: QQAndroidClient,
groupCode: Long,
newName: String
): OutgoingPacket = impl(client, groupCode) {
) = impl(client, groupCode) {
ingGroupName = newName.toByteArray()
}
@ -268,7 +268,7 @@ internal class TroopManagement {
client: QQAndroidClient,
groupCode: Long,
newMemo: String
): OutgoingPacket = impl(client, groupCode) {
) = impl(client, groupCode) {
ingGroupMemo = newMemo.toByteArray()
}
@ -276,7 +276,7 @@ internal class TroopManagement {
client: QQAndroidClient,
groupCode: Long,
switch: Boolean
): OutgoingPacket = impl(client, groupCode) {
) = impl(client, groupCode) {
allowMemberInvite = if (switch) 1 else 0
}

View File

@ -14,7 +14,6 @@ import net.mamoe.mirai.internal.QQAndroidBot
import net.mamoe.mirai.internal.network.Packet
import net.mamoe.mirai.internal.network.QQAndroidClient
import net.mamoe.mirai.internal.network.protocol.data.proto.Cmd0x388
import net.mamoe.mirai.internal.network.protocol.packet.OutgoingPacket
import net.mamoe.mirai.internal.network.protocol.packet.OutgoingPacketFactory
import net.mamoe.mirai.internal.network.protocol.packet.buildOutgoingUniPacket
import net.mamoe.mirai.internal.utils.io.serialization.readProtoBuf
@ -49,7 +48,7 @@ internal class ImgStore {
buType: Int = 2,
appPicType: Int = 1006,
originalPic: Int = 0
): OutgoingPacket = buildOutgoingUniPacket(client) {
) = buildOutgoingUniPacket(client) {
writeProtoBuf(
Cmd0x388.ReqBody.serializer(),
Cmd0x388.ReqBody(

View File

@ -69,9 +69,7 @@ internal object MessageSvcPbGetMsg : OutgoingPacketFactory<MessageSvcPbGetMsg.Re
client: QQAndroidClient,
syncFlag: MsgSvc.SyncFlag = MsgSvc.SyncFlag.START,
syncCookie: ByteArray?, //PbPushMsg.msg.msgHead.msgTime
) = buildOutgoingUniPacket(
client
) {
) = buildOutgoingUniPacket(client) {
//println("syncCookie=${client.c2cMessageSync.syncCookie?.toUHexString()}")
writeProtoBuf(
MsgSvc.PbGetMsgReq.serializer(),

View File

@ -301,7 +301,7 @@ internal object MessageSvcPbSendMsg : OutgoingPacketFactory<MessageSvcPbSendMsg.
targetMember: Member,
message: MessageChain,
source: OnlineMessageSourceToTempImpl
): OutgoingPacket = buildOutgoingUniPacket(client) {
) = buildOutgoingUniPacket(client) {
writeProtoBuf(
MsgSvc.PbSendMsgReq.serializer(), MsgSvc.PbSendMsgReq(
routingHead = MsgSvc.RoutingHead(

View File

@ -14,7 +14,6 @@ import net.mamoe.mirai.internal.QQAndroidBot
import net.mamoe.mirai.internal.network.Packet
import net.mamoe.mirai.internal.network.QQAndroidClient
import net.mamoe.mirai.internal.network.protocol.data.proto.Cmd0x388
import net.mamoe.mirai.internal.network.protocol.packet.OutgoingPacket
import net.mamoe.mirai.internal.network.protocol.packet.OutgoingPacketFactory
import net.mamoe.mirai.internal.network.protocol.packet.OutgoingPacketWithRespType
import net.mamoe.mirai.internal.network.protocol.packet.buildOutgoingUniPacket
@ -128,7 +127,7 @@ internal class PttStore {
}
object GroupPttDown : OutgoingPacketFactory<GroupPttDown.Response>("PttStore.GroupPttDown") {
object GroupPttDown : OutgoingPacketFactory<GroupPttDown.Response.DownLoadInfo>("PttStore.GroupPttDown") {
sealed class Response : Packet {
class DownLoadInfo(
@ -152,7 +151,7 @@ internal class PttStore {
dstUin: Long,
md5: ByteArray
): OutgoingPacket = buildOutgoingUniPacket(client) {
) = buildOutgoingUniPacket(client) {
writeProtoBuf(
Cmd0x388.ReqBody.serializer(), Cmd0x388.ReqBody(
netType = 3, // wifi
@ -174,7 +173,7 @@ internal class PttStore {
)
}
override suspend fun ByteReadPacket.decode(bot: QQAndroidBot): Response {
override suspend fun ByteReadPacket.decode(bot: QQAndroidBot): Response.DownLoadInfo {
val resp0 = readProtoBuf(Cmd0x388.RspBody.serializer())
val resp =
resp0.msgGetpttUrlRsp.firstOrNull() ?: error("cannot find `msgGetpttUrlRsp` from `Cmd0x388.RspBody`")

View File

@ -18,7 +18,6 @@ import net.mamoe.mirai.internal.network.QQAndroidClient
import net.mamoe.mirai.internal.network.protocol.data.jce.*
import net.mamoe.mirai.internal.network.protocol.data.proto.Vec0xd50
import net.mamoe.mirai.internal.network.protocol.data.proto.Vec0xd6b
import net.mamoe.mirai.internal.network.protocol.packet.OutgoingPacket
import net.mamoe.mirai.internal.network.protocol.packet.OutgoingPacketFactory
import net.mamoe.mirai.internal.network.protocol.packet.buildOutgoingUniPacket
import net.mamoe.mirai.internal.utils.io.serialization.jceRequestSBuffer
@ -45,8 +44,7 @@ internal class FriendList {
targetGroupUin: Long,
targetGroupCode: Long,
nextUin: Long = 0
): OutgoingPacket {
return buildOutgoingUniPacket(client, bodyType = 1, key = client.wLoginSigInfo.d2Key) {
) = buildOutgoingUniPacket(client, bodyType = 1, key = client.wLoginSigInfo.d2Key) {
writeJceStruct(
RequestPacket.serializer(),
RequestPacket(
@ -69,7 +67,6 @@ internal class FriendList {
)
)
}
}
class Response(
val members: List<StTroopMemberInfo>,
@ -95,8 +92,7 @@ internal class FriendList {
operator fun invoke(
client: QQAndroidClient
): OutgoingPacket {
return buildOutgoingUniPacket(client, bodyType = 1, key = client.wLoginSigInfo.d2Key) {
) = buildOutgoingUniPacket(client, bodyType = 1, key = client.wLoginSigInfo.d2Key) {
writeJceStruct(
RequestPacket.serializer(),
RequestPacket(
@ -123,7 +119,6 @@ internal class FriendList {
)
}
}
}
internal object DelFriend :
OutgoingPacketFactory<DelFriend.Response>("friendlist.delFriend") {
@ -140,8 +135,7 @@ internal class FriendList {
operator fun invoke(
client: QQAndroidClient,
friend: Friend
): OutgoingPacket {
return buildOutgoingUniPacket(client, bodyType = 1, key = client.wLoginSigInfo.d2Key) {
) = buildOutgoingUniPacket(client, bodyType = 1, key = client.wLoginSigInfo.d2Key) {
writeJceStruct(
RequestPacket.serializer(),
RequestPacket(
@ -162,7 +156,6 @@ internal class FriendList {
)
}
}
}
internal object GetFriendGroupList :
OutgoingPacketFactory<GetFriendGroupList.Response>("friendlist.getFriendGroupList") {
@ -191,8 +184,7 @@ internal class FriendList {
fun forSingleFriend(
client: QQAndroidClient,
uin: Long
): OutgoingPacket {
return buildOutgoingUniPacket(client, bodyType = 1, key = client.wLoginSigInfo.d2Key) {
) = buildOutgoingUniPacket(client, bodyType = 1, key = client.wLoginSigInfo.d2Key) {
writeJceStruct(
RequestPacket.serializer(),
RequestPacket(
@ -234,7 +226,6 @@ internal class FriendList {
)
)
}
}
operator fun invoke(
client: QQAndroidClient,
@ -242,8 +233,7 @@ internal class FriendList {
friendListCount: Int,
groupListStartIndex: Int,
groupListCount: Int
): OutgoingPacket {
return buildOutgoingUniPacket(client, bodyType = 1, key = client.wLoginSigInfo.d2Key) {
) = buildOutgoingUniPacket(client, bodyType = 1, key = client.wLoginSigInfo.d2Key) {
writeJceStruct(
RequestPacket.serializer(),
RequestPacket(
@ -295,5 +285,4 @@ internal class FriendList {
)
}
}
}
}

View File

@ -1,5 +1,5 @@
/*
* Copyright 2019-2020 Mamoe Technologies and contributors.
* Copyright 2019-2021 Mamoe Technologies and contributors.
*
* 此源代码的使用受 GNU AFFERO GENERAL PUBLIC LICENSE version 3 许可证的约束, 可以在以下链接找到该许可证.
* Use of this source code is governed by the GNU AGPLv3 license that can be found through the following link.
@ -16,7 +16,6 @@ import net.mamoe.mirai.internal.network.QQAndroidClient
import net.mamoe.mirai.internal.network.protocol.data.jce.GroupMngReqJce
import net.mamoe.mirai.internal.network.protocol.data.jce.GroupMngRes
import net.mamoe.mirai.internal.network.protocol.data.jce.RequestPacket
import net.mamoe.mirai.internal.network.protocol.packet.OutgoingPacket
import net.mamoe.mirai.internal.network.protocol.packet.OutgoingPacketFactory
import net.mamoe.mirai.internal.network.protocol.packet.buildOutgoingUniPacket
import net.mamoe.mirai.internal.utils.io.serialization.jceRequestSBuffer
@ -36,7 +35,7 @@ internal class ProfileService {
operator fun invoke(
client: QQAndroidClient,
groupCode: Long
): OutgoingPacket = buildOutgoingUniPacket(client) {
) = buildOutgoingUniPacket(client) {
writeJceStruct(
RequestPacket.serializer(),
RequestPacket(

View File

@ -11,7 +11,6 @@ package net.mamoe.mirai.internal.network.protocol.packet.list
import kotlinx.io.core.ByteReadPacket
import net.mamoe.mirai.contact.Stranger
import net.mamoe.mirai.event.broadcast
import net.mamoe.mirai.event.events.StrangerRelationChangeEvent
import net.mamoe.mirai.internal.QQAndroidBot
import net.mamoe.mirai.internal.network.Packet
@ -19,7 +18,6 @@ import net.mamoe.mirai.internal.network.QQAndroidClient
import net.mamoe.mirai.internal.network.protocol.data.proto.Oidb0x5d2
import net.mamoe.mirai.internal.network.protocol.data.proto.Oidb0x5d4
import net.mamoe.mirai.internal.network.protocol.data.proto.OidbSso
import net.mamoe.mirai.internal.network.protocol.packet.OutgoingPacket
import net.mamoe.mirai.internal.network.protocol.packet.OutgoingPacketFactory
import net.mamoe.mirai.internal.network.protocol.packet.buildOutgoingUniPacket
import net.mamoe.mirai.internal.utils.broadcastWithBot
@ -39,8 +37,7 @@ internal class StrangerList {
operator fun invoke(
client: QQAndroidClient,
): OutgoingPacket {
return buildOutgoingUniPacket(client) {
) = buildOutgoingUniPacket(client) {
writeProtoBuf(
OidbSso.OIDBSSOPkg.serializer(),
OidbSso.OIDBSSOPkg(
@ -55,7 +52,6 @@ internal class StrangerList {
)
)
}
}
override suspend fun ByteReadPacket.decode(bot: QQAndroidBot): Response {
readProtoBuf(OidbSso.OIDBSSOPkg.serializer()).let { pkg ->
@ -80,8 +76,7 @@ internal class StrangerList {
operator fun invoke(
client: QQAndroidClient,
stranger: Stranger
): OutgoingPacket {
return buildOutgoingUniPacket(client) {
) = buildOutgoingUniPacket(client) {
writeProtoBuf(
OidbSso.OIDBSSOPkg.serializer(),
OidbSso.OIDBSSOPkg(
@ -94,7 +89,6 @@ internal class StrangerList {
)
)
}
}
override suspend fun ByteReadPacket.decode(bot: QQAndroidBot): Response {
readProtoBuf(OidbSso.OIDBSSOPkg.serializer()).let { pkg ->

View File

@ -13,7 +13,10 @@ import kotlinx.io.core.ByteReadPacket
import net.mamoe.mirai.internal.QQAndroidBot
import net.mamoe.mirai.internal.network.Packet
import net.mamoe.mirai.internal.network.QQAndroidClient
import net.mamoe.mirai.internal.network.protocol.packet.*
import net.mamoe.mirai.internal.network.protocol.packet.NO_ENCRYPT
import net.mamoe.mirai.internal.network.protocol.packet.OutgoingPacketFactory
import net.mamoe.mirai.internal.network.protocol.packet.buildLoginOutgoingPacket
import net.mamoe.mirai.internal.network.protocol.packet.writeSsoPacket
import net.mamoe.mirai.internal.network.subAppId
internal class Heartbeat {
@ -25,7 +28,7 @@ internal class Heartbeat {
operator fun invoke(
client: QQAndroidClient
): OutgoingPacket = buildLoginOutgoingPacket(client, 0, key = NO_ENCRYPT) {
) = buildLoginOutgoingPacket(client, 0, key = NO_ENCRYPT) {
writeSsoPacket(client, client.subAppId, commandName, sequenceId = it) {
}

View File

@ -74,7 +74,7 @@ internal class StatSvc {
operator fun invoke(
client: QQAndroidClient
): OutgoingPacket = buildLoginOutgoingPacket(client, 1) {
) = buildLoginOutgoingPacket(client, 1) {
writeProtoBuf(
StatSvcGetOnline.ReqBody.serializer(), StatSvcGetOnline.ReqBody(
uin = client.uin,
@ -100,7 +100,7 @@ internal class StatSvc {
operator fun invoke(
client: QQAndroidClient
): OutgoingPacket = buildLoginOutgoingPacket(
) = buildLoginOutgoingPacket(
client,
bodyType = 1,
extraData = client.wLoginSigInfo.d2.data,

View File

@ -40,7 +40,7 @@ internal class WtLogin {
object SubCommand7 {
operator fun invoke(
client: QQAndroidClient
): OutgoingPacket = buildLoginOutgoingPacket(client, bodyType = 2) { sequenceId ->
) = buildLoginOutgoingPacket(client, bodyType = 2) { sequenceId ->
writeSsoPacket(
client,
client.subAppId,
@ -70,7 +70,7 @@ internal class WtLogin {
object SubCommand17 {
operator fun invoke(
client: QQAndroidClient
): OutgoingPacket = buildLoginOutgoingPacket(client, bodyType = 2) { sequenceId ->
) = buildLoginOutgoingPacket(client, bodyType = 2) { sequenceId ->
writeSsoPacket(
client,
client.subAppId,