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,42 +38,38 @@ internal object NudgePacket : OutgoingPacketFactory<NudgePacket.Response>("OidbS
client: QQAndroidClient,
nudgeTargetId: Long,
messageReceiverUin: Long,
): OutgoingPacket {
return buildOutgoingUniPacket(client) {
writeProtoBuf(
OidbSso.OIDBSSOPkg.serializer(),
OidbSso.OIDBSSOPkg(
command = 3795,
serviceType = 1,
result = 0,
bodybuffer = Cmd0xed3.ReqBody(
toUin = nudgeTargetId,
aioUin = messageReceiverUin
).toByteArray(Cmd0xed3.ReqBody.serializer())
)
): OutgoingPacket = buildOutgoingUniPacket(client) {
writeProtoBuf(
OidbSso.OIDBSSOPkg.serializer(),
OidbSso.OIDBSSOPkg(
command = 3795,
serviceType = 1,
result = 0,
bodybuffer = Cmd0xed3.ReqBody(
toUin = nudgeTargetId,
aioUin = messageReceiverUin
).toByteArray(Cmd0xed3.ReqBody.serializer())
)
}
)
}
fun troopInvoke(
client: QQAndroidClient,
messageReceiverGroupCode: Long,
nudgeTargetId: Long,
): OutgoingPacket {
return buildOutgoingUniPacket(client) {
writeProtoBuf(
OidbSso.OIDBSSOPkg.serializer(),
OidbSso.OIDBSSOPkg(
command = 3795,
serviceType = 1,
result = 0,
bodybuffer = Cmd0xed3.ReqBody(
toUin = nudgeTargetId,
groupCode = messageReceiverGroupCode
).toByteArray(Cmd0xed3.ReqBody.serializer())
)
): OutgoingPacket = buildOutgoingUniPacket(client) {
writeProtoBuf(
OidbSso.OIDBSSOPkg.serializer(),
OidbSso.OIDBSSOPkg(
command = 3795,
serviceType = 1,
result = 0,
bodybuffer = Cmd0xed3.ReqBody(
toUin = nudgeTargetId,
groupCode = messageReceiverGroupCode
).toByteArray(Cmd0xed3.ReqBody.serializer())
)
}
)
}
}

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,30 +30,26 @@ 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) {
writeProtoBuf(
OidbSso.OIDBSSOPkg.serializer(), OidbSso.OIDBSSOPkg(
command = 3756,
result = 0,
serviceType = 1,
bodybuffer = Oidb0xeac.ReqBody(
groupCode = troopUin,
msgSeq = msg_seq.and(-1),
msgRandom = msg_random
).toByteArray(Oidb0xeac.ReqBody.serializer()),
)
) = buildOutgoingUniPacket(client) {
writeProtoBuf(
OidbSso.OIDBSSOPkg.serializer(), OidbSso.OIDBSSOPkg(
command = 3756,
result = 0,
serviceType = 1,
bodybuffer = Oidb0xeac.ReqBody(
groupCode = troopUin,
msgSeq = msg_seq.and(-1),
msgRandom = msg_random
).toByteArray(Oidb0xeac.ReqBody.serializer()),
)
}
)
}
override suspend fun ByteReadPacket.decode(bot: QQAndroidBot): Response {

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,30 +44,28 @@ internal class FriendList {
targetGroupUin: Long,
targetGroupCode: Long,
nextUin: Long = 0
): OutgoingPacket {
return buildOutgoingUniPacket(client, bodyType = 1, key = client.wLoginSigInfo.d2Key) {
writeJceStruct(
RequestPacket.serializer(),
RequestPacket(
funcName = "GetTroopMemberListReq",
servantName = "mqq.IMService.FriendListServiceServantObj",
version = 3,
requestId = client.nextRequestPacketRequestId(),
sBuffer = jceRequestSBuffer(
"GTML",
GetTroopMemberListReq.serializer(),
GetTroopMemberListReq(
uin = client.uin,
groupCode = targetGroupCode,
groupUin = targetGroupUin,
nextUin = nextUin,
reqType = 0,
version = 2
)
) = buildOutgoingUniPacket(client, bodyType = 1, key = client.wLoginSigInfo.d2Key) {
writeJceStruct(
RequestPacket.serializer(),
RequestPacket(
funcName = "GetTroopMemberListReq",
servantName = "mqq.IMService.FriendListServiceServantObj",
version = 3,
requestId = client.nextRequestPacketRequestId(),
sBuffer = jceRequestSBuffer(
"GTML",
GetTroopMemberListReq.serializer(),
GetTroopMemberListReq(
uin = client.uin,
groupCode = targetGroupCode,
groupUin = targetGroupUin,
nextUin = nextUin,
reqType = 0,
version = 2
)
)
)
}
)
}
class Response(
@ -95,33 +92,31 @@ internal class FriendList {
operator fun invoke(
client: QQAndroidClient
): OutgoingPacket {
return buildOutgoingUniPacket(client, bodyType = 1, key = client.wLoginSigInfo.d2Key) {
writeJceStruct(
RequestPacket.serializer(),
RequestPacket(
funcName = "GetTroopListReqV2Simplify",
servantName = "mqq.IMService.FriendListServiceServantObj",
version = 3,
cPacketType = 0x00,
requestId = client.nextRequestPacketRequestId(),
sBuffer = jceRequestSBuffer(
"GetTroopListReqV2Simplify",
GetTroopListReqV2Simplify.serializer(),
GetTroopListReqV2Simplify(
uin = client.uin,
getMSFMsgFlag = 0,
groupFlagExt = 1,
shVersion = 7,
dwCompanyId = 0,
versionNum = 1,
vecGroupInfo = listOf(),
getLongGroupName = 1
)
) = buildOutgoingUniPacket(client, bodyType = 1, key = client.wLoginSigInfo.d2Key) {
writeJceStruct(
RequestPacket.serializer(),
RequestPacket(
funcName = "GetTroopListReqV2Simplify",
servantName = "mqq.IMService.FriendListServiceServantObj",
version = 3,
cPacketType = 0x00,
requestId = client.nextRequestPacketRequestId(),
sBuffer = jceRequestSBuffer(
"GetTroopListReqV2Simplify",
GetTroopListReqV2Simplify.serializer(),
GetTroopListReqV2Simplify(
uin = client.uin,
getMSFMsgFlag = 0,
groupFlagExt = 1,
shVersion = 7,
dwCompanyId = 0,
versionNum = 1,
vecGroupInfo = listOf(),
getLongGroupName = 1
)
)
)
}
)
}
}
@ -140,27 +135,25 @@ internal class FriendList {
operator fun invoke(
client: QQAndroidClient,
friend: Friend
): OutgoingPacket {
return buildOutgoingUniPacket(client, bodyType = 1, key = client.wLoginSigInfo.d2Key) {
writeJceStruct(
RequestPacket.serializer(),
RequestPacket(
funcName = "DelFriendReq",
servantName = "mqq.IMService.FriendListServiceServantObj",
version = 3,
sBuffer = jceRequestSBuffer(
"DF",
DelFriendReq.serializer(),
DelFriendReq(
uin = client.uin,
delType = 2,
delUin = friend.uin,
version = 1
)
) = buildOutgoingUniPacket(client, bodyType = 1, key = client.wLoginSigInfo.d2Key) {
writeJceStruct(
RequestPacket.serializer(),
RequestPacket(
funcName = "DelFriendReq",
servantName = "mqq.IMService.FriendListServiceServantObj",
version = 3,
sBuffer = jceRequestSBuffer(
"DF",
DelFriendReq.serializer(),
DelFriendReq(
uin = client.uin,
delType = 2,
delUin = friend.uin,
version = 1
)
)
)
}
)
}
}
@ -191,49 +184,47 @@ internal class FriendList {
fun forSingleFriend(
client: QQAndroidClient,
uin: Long
): OutgoingPacket {
return buildOutgoingUniPacket(client, bodyType = 1, key = client.wLoginSigInfo.d2Key) {
writeJceStruct(
RequestPacket.serializer(),
RequestPacket(
funcName = "GetFriendListReq",
servantName = "mqq.IMService.FriendListServiceServantObj",
version = 3,
cPacketType = 0x003,
requestId = client.nextRequestPacketRequestId(),
sBuffer = jceRequestSBuffer(
"FL",
GetFriendListReq.serializer(),
GetFriendListReq(
reqtype = 3,
ifGetGroupInfo = 0,
ifReflush = 1,
uin = client.uin,
startIndex = 0,
groupstartIndex = 0,
getgroupCount = 0,
ifShowTermType = 1,
version = 27L,
getfriendCount = 0,
ifGetMSFGroup = 0,
eAppType = 0,
groupid = 0,
ifGetBothFlag = 0,
ifGetDOVId = 0,
uinList = listOf(uin),
vec0xd6bReq = Vec0xd6b.ReqBody().toByteArray(Vec0xd6b.ReqBody.serializer()),
vec0xd50Req = Vec0xd50.ReqBody(
appid = 10002L,
reqKsingSwitch = 1,
reqMusicSwitch = 1,
reqMutualmarkLbsshare = 1,
reqMutualmarkAlienation = 1
).toByteArray(Vec0xd50.ReqBody.serializer())
)
) = buildOutgoingUniPacket(client, bodyType = 1, key = client.wLoginSigInfo.d2Key) {
writeJceStruct(
RequestPacket.serializer(),
RequestPacket(
funcName = "GetFriendListReq",
servantName = "mqq.IMService.FriendListServiceServantObj",
version = 3,
cPacketType = 0x003,
requestId = client.nextRequestPacketRequestId(),
sBuffer = jceRequestSBuffer(
"FL",
GetFriendListReq.serializer(),
GetFriendListReq(
reqtype = 3,
ifGetGroupInfo = 0,
ifReflush = 1,
uin = client.uin,
startIndex = 0,
groupstartIndex = 0,
getgroupCount = 0,
ifShowTermType = 1,
version = 27L,
getfriendCount = 0,
ifGetMSFGroup = 0,
eAppType = 0,
groupid = 0,
ifGetBothFlag = 0,
ifGetDOVId = 0,
uinList = listOf(uin),
vec0xd6bReq = Vec0xd6b.ReqBody().toByteArray(Vec0xd6b.ReqBody.serializer()),
vec0xd50Req = Vec0xd50.ReqBody(
appid = 10002L,
reqKsingSwitch = 1,
reqMusicSwitch = 1,
reqMutualmarkLbsshare = 1,
reqMutualmarkAlienation = 1
).toByteArray(Vec0xd50.ReqBody.serializer())
)
)
)
}
)
}
operator fun invoke(
@ -242,58 +233,56 @@ internal class FriendList {
friendListCount: Int,
groupListStartIndex: Int,
groupListCount: Int
): OutgoingPacket {
return buildOutgoingUniPacket(client, bodyType = 1, key = client.wLoginSigInfo.d2Key) {
writeJceStruct(
RequestPacket.serializer(),
RequestPacket(
funcName = "GetFriendListReq",
servantName = "mqq.IMService.FriendListServiceServantObj",
version = 3,
cPacketType = 0x003,
requestId = client.nextRequestPacketRequestId(),
sBuffer = jceRequestSBuffer(
"FL",
GetFriendListReq.serializer(),
GetFriendListReq(
reqtype = 3,
ifReflush = if (friendListStartIndex <= 0) {
0
} else {
1
},
uin = client.uin,
startIndex = friendListStartIndex.toShort(),
getfriendCount = friendListCount.toShort(),
groupid = 0,
ifGetGroupInfo = if (groupListCount <= 0) {
0
} else {
1
},
groupstartIndex = groupListStartIndex.toByte(),
getgroupCount = groupListCount.toByte(),
ifGetMSFGroup = 0,
ifShowTermType = 1,
version = 27L,
uinList = null,
eAppType = 0,
ifGetBothFlag = 0,
ifGetDOVId = 0,
vec0xd6bReq = EMPTY_BYTE_ARRAY,
vec0xd50Req = Vec0xd50.ReqBody(
appid = 10002L,
reqKsingSwitch = 1,
reqMusicSwitch = 1,
reqMutualmarkLbsshare = 1,
reqMutualmarkAlienation = 1
).toByteArray(Vec0xd50.ReqBody.serializer()),
vecSnsTypelist = listOf(13580L, 13581L, 13582L)
)
) = buildOutgoingUniPacket(client, bodyType = 1, key = client.wLoginSigInfo.d2Key) {
writeJceStruct(
RequestPacket.serializer(),
RequestPacket(
funcName = "GetFriendListReq",
servantName = "mqq.IMService.FriendListServiceServantObj",
version = 3,
cPacketType = 0x003,
requestId = client.nextRequestPacketRequestId(),
sBuffer = jceRequestSBuffer(
"FL",
GetFriendListReq.serializer(),
GetFriendListReq(
reqtype = 3,
ifReflush = if (friendListStartIndex <= 0) {
0
} else {
1
},
uin = client.uin,
startIndex = friendListStartIndex.toShort(),
getfriendCount = friendListCount.toShort(),
groupid = 0,
ifGetGroupInfo = if (groupListCount <= 0) {
0
} else {
1
},
groupstartIndex = groupListStartIndex.toByte(),
getgroupCount = groupListCount.toByte(),
ifGetMSFGroup = 0,
ifShowTermType = 1,
version = 27L,
uinList = null,
eAppType = 0,
ifGetBothFlag = 0,
ifGetDOVId = 0,
vec0xd6bReq = EMPTY_BYTE_ARRAY,
vec0xd50Req = Vec0xd50.ReqBody(
appid = 10002L,
reqKsingSwitch = 1,
reqMusicSwitch = 1,
reqMutualmarkLbsshare = 1,
reqMutualmarkAlienation = 1
).toByteArray(Vec0xd50.ReqBody.serializer()),
vecSnsTypelist = listOf(13580L, 13581L, 13582L)
)
)
)
}
)
}
}
}

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,22 +37,20 @@ internal class StrangerList {
operator fun invoke(
client: QQAndroidClient,
): OutgoingPacket {
return buildOutgoingUniPacket(client) {
writeProtoBuf(
OidbSso.OIDBSSOPkg.serializer(),
OidbSso.OIDBSSOPkg(
command = 1490,
serviceType = 0,
bodybuffer = Oidb0x5d2.ReqBody(
subCmd = 1,
reqGetList = Oidb0x5d2.ReqGetList(
seq = client.strangerSeq
)
).toByteArray(Oidb0x5d2.ReqBody.serializer())
)
) = buildOutgoingUniPacket(client) {
writeProtoBuf(
OidbSso.OIDBSSOPkg.serializer(),
OidbSso.OIDBSSOPkg(
command = 1490,
serviceType = 0,
bodybuffer = Oidb0x5d2.ReqBody(
subCmd = 1,
reqGetList = Oidb0x5d2.ReqGetList(
seq = client.strangerSeq
)
).toByteArray(Oidb0x5d2.ReqBody.serializer())
)
}
)
}
override suspend fun ByteReadPacket.decode(bot: QQAndroidBot): Response {
@ -80,20 +76,18 @@ internal class StrangerList {
operator fun invoke(
client: QQAndroidClient,
stranger: Stranger
): OutgoingPacket {
return buildOutgoingUniPacket(client) {
writeProtoBuf(
OidbSso.OIDBSSOPkg.serializer(),
OidbSso.OIDBSSOPkg(
command = 1492,
serviceType = 0,
result = 0,
bodybuffer = Oidb0x5d4.ReqBody(
uinList = listOf(stranger.id)
).toByteArray(Oidb0x5d4.ReqBody.serializer())
)
) = buildOutgoingUniPacket(client) {
writeProtoBuf(
OidbSso.OIDBSSOPkg.serializer(),
OidbSso.OIDBSSOPkg(
command = 1492,
serviceType = 0,
result = 0,
bodybuffer = Oidb0x5d4.ReqBody(
uinList = listOf(stranger.id)
).toByteArray(Oidb0x5d4.ReqBody.serializer())
)
}
)
}
override suspend fun ByteReadPacket.decode(bot: QQAndroidBot): Response {

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,