mirror of
https://github.com/mamoe/mirai.git
synced 2025-02-13 03:16:05 +08:00
troop List
This commit is contained in:
parent
06515bc0be
commit
192a83de0c
@ -102,19 +102,26 @@ internal class QQAndroidBotNetworkHandler(bot: QQAndroidBot) : BotNetworkHandler
|
||||
override suspend fun init() {
|
||||
//start updating friend/group list
|
||||
bot.logger.info("Start updating friend/group list")
|
||||
|
||||
/*
|
||||
val data = FriendList.GetFriendGroupList(
|
||||
bot.client,
|
||||
0,
|
||||
1,
|
||||
20,
|
||||
0,
|
||||
2
|
||||
0
|
||||
).sendAndExpect<FriendList.GetFriendGroupList.Response>()
|
||||
*/
|
||||
|
||||
|
||||
println(data.contentToString())
|
||||
*/
|
||||
|
||||
val data = FriendList.GetTroopList(
|
||||
bot.client
|
||||
).sendAndExpect<FriendList.GetTroopList.Response>()
|
||||
).sendAndExpect<FriendList.GetTroopList.Response>(100000)
|
||||
println(data.contentToString())
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
@ -24,3 +24,84 @@ internal class stTroopNumSimplify(
|
||||
@SerialId(2) val dwGroupFlagExt: Long? = null,
|
||||
@SerialId(3) val dwGroupRankSeq: Long? = null
|
||||
) : JceStruct
|
||||
|
||||
|
||||
@Serializable
|
||||
internal class GetTroopListRespV2(
|
||||
@SerialId(0) val uin: Long,
|
||||
@SerialId(1) val troopcount: Short,
|
||||
@SerialId(2) val result: Int,
|
||||
@SerialId(3) val errorCode: Short? = null,
|
||||
@SerialId(4) val vecCookies: ByteArray? = null,
|
||||
@SerialId(5) val vecTroopList: List<stTroopNum>? = null,
|
||||
@SerialId(6) val vecTroopListDel: List<stTroopNum>? = null,
|
||||
@SerialId(7) val vecTroopRank: List<stGroupRankInfo>? = null,
|
||||
@SerialId(8) val vecFavGroup: List<stFavoriteGroup>? = null,
|
||||
@SerialId(9) val vecTroopListExt: List<stTroopNum>? = null
|
||||
) : JceStruct
|
||||
|
||||
|
||||
@Serializable
|
||||
internal class stTroopNum(
|
||||
@SerialId(0) val groupUin: Long,
|
||||
@SerialId(1) val groupCode: Long,
|
||||
@SerialId(2) val flag: Byte? = null,
|
||||
@SerialId(3) val dwGroupInfoSeq: Long? = null,
|
||||
@SerialId(4) val groupName: String? = "",
|
||||
@SerialId(5) val groupMemo: String? = "",
|
||||
@SerialId(6) val dwGroupFlagExt: Long? = null,
|
||||
@SerialId(7) val dwGroupRankSeq: Long? = null,
|
||||
@SerialId(8) val dwCertificationType: Long? = null,
|
||||
@SerialId(9) val dwShutupTimestamp: Long? = null,
|
||||
@SerialId(10) val dwMyShutupTimestamp: Long? = null,
|
||||
@SerialId(11) val dwCmdUinUinFlag: Long? = null,
|
||||
@SerialId(12) val dwAdditionalFlag: Long? = null,
|
||||
@SerialId(13) val dwGroupTypeFlag: Long? = null,
|
||||
@SerialId(14) val dwGroupSecType: Long? = null,
|
||||
@SerialId(15) val dwGroupSecTypeInfo: Long? = null,
|
||||
@SerialId(16) val dwGroupClassExt: Long? = null,
|
||||
@SerialId(17) val dwAppPrivilegeFlag: Long? = null,
|
||||
@SerialId(18) val dwSubscriptionUin: Long? = null,
|
||||
@SerialId(19) val dwMemberNum: Long? = null,
|
||||
@SerialId(20) val dwMemberNumSeq: Long? = null,
|
||||
@SerialId(21) val dwMemberCardSeq: Long? = null,
|
||||
@SerialId(22) val dwGroupFlagExt3: Long? = null,
|
||||
@SerialId(23) val dwGroupOwnerUin: Long? = null,
|
||||
@SerialId(24) val isConfGroup: Byte? = null,
|
||||
@SerialId(25) val isModifyConfGroupFace: Byte? = null,
|
||||
@SerialId(26) val isModifyConfGroupName: Byte? = null,
|
||||
@SerialId(27) val dwCmduinJoinTime: Long? = null,
|
||||
@SerialId(28) val ulCompanyId: Long? = null,
|
||||
@SerialId(29) val dwMaxGroupMemberNum: Long? = null,
|
||||
@SerialId(30) val dwCmdUinGroupMask: Long? = null,
|
||||
@SerialId(31) val udwHLGuildAppid: Long? = null,
|
||||
@SerialId(32) val udwHLGuildSubType: Long? = null,
|
||||
@SerialId(33) val udwCmdUinRingtoneID: Long? = null,
|
||||
@SerialId(34) val udwCmdUinFlagEx2: Long? = null
|
||||
) : JceStruct
|
||||
|
||||
@Serializable
|
||||
internal class stGroupRankInfo(
|
||||
@SerialId(0) val dwGroupCode: Long,
|
||||
@SerialId(1) val groupRankSysFlag: Byte? = null,
|
||||
@SerialId(2) val groupRankUserFlag: Byte? = null,
|
||||
@SerialId(3) val vecRankMap: List<stLevelRankPair>? = null,
|
||||
@SerialId(4) val dwGroupRankSeq: Long? = null,
|
||||
@SerialId(5) val ownerName: String? = "",
|
||||
@SerialId(6) val adminName: String? = "",
|
||||
@SerialId(7) val dwOfficeMode: Long? = null
|
||||
) : JceStruct
|
||||
|
||||
@Serializable
|
||||
internal class stFavoriteGroup(
|
||||
@SerialId(0) val dwGroupCode: Long,
|
||||
@SerialId(1) val dwTimestamp: Long? = null,
|
||||
@SerialId(2) val dwSnsFlag: Long? = 1L,
|
||||
@SerialId(3) val dwOpenTimestamp: Long? = null
|
||||
) : JceStruct
|
||||
|
||||
@Serializable
|
||||
internal class stLevelRankPair(
|
||||
@SerialId(0) val dwLevel: Long? = null,
|
||||
@SerialId(1) val rank: String? = ""
|
||||
) : JceStruct
|
||||
|
@ -67,7 +67,7 @@ internal object KnownPacketFactories : List<PacketFactory<*>> by mutableListOf(
|
||||
MessageSvc.PushForceOffline,
|
||||
MessageSvc.PbSendMsg,
|
||||
FriendList.GetFriendGroupList,
|
||||
FriendList.GetTroopListSimplify
|
||||
FriendList.GetTroopList
|
||||
) {
|
||||
// SvcReqMSFLoginNotify 自己的其他设备上限
|
||||
// MessageSvc.PushReaded 电脑阅读了别人的消息, 告知手机
|
||||
|
@ -8,16 +8,20 @@ import net.mamoe.mirai.qqandroid.io.serialization.jceRequestSBuffer
|
||||
import net.mamoe.mirai.qqandroid.io.serialization.toByteArray
|
||||
import net.mamoe.mirai.qqandroid.io.serialization.writeJceStruct
|
||||
import net.mamoe.mirai.qqandroid.network.QQAndroidClient
|
||||
import net.mamoe.mirai.qqandroid.network.protocol.data.jce.*
|
||||
import net.mamoe.mirai.qqandroid.network.protocol.data.jce.GetFriendListReq
|
||||
import net.mamoe.mirai.qqandroid.network.protocol.data.jce.GetFriendListResp
|
||||
import net.mamoe.mirai.qqandroid.network.protocol.data.jce.GetTroopListReqV2Simplify
|
||||
import net.mamoe.mirai.qqandroid.network.protocol.data.jce.GroupInfo
|
||||
import net.mamoe.mirai.qqandroid.network.protocol.data.jce.RequestPacket
|
||||
import net.mamoe.mirai.qqandroid.network.protocol.data.proto.Vec0xd50
|
||||
import net.mamoe.mirai.qqandroid.network.protocol.packet.EMPTY_BYTE_ARRAY
|
||||
import net.mamoe.mirai.qqandroid.network.protocol.packet.OutgoingPacket
|
||||
import net.mamoe.mirai.qqandroid.network.protocol.packet.PacketFactory
|
||||
import net.mamoe.mirai.qqandroid.network.protocol.packet.buildOutgoingUniPacket
|
||||
import net.mamoe.mirai.qqandroid.network.protocol.packet.list.FriendList.GetFriendGroupList.decode
|
||||
import net.mamoe.mirai.utils.cryptor.contentToString
|
||||
import net.mamoe.mirai.utils.io.debugPrint
|
||||
import net.mamoe.mirai.utils.io.discardExact
|
||||
import net.mamoe.mirai.utils.io.readRemainingBytes
|
||||
import net.mamoe.mirai.utils.io.toUHexString
|
||||
@ -25,15 +29,28 @@ import net.mamoe.mirai.utils.io.toUHexString
|
||||
|
||||
internal class FriendList {
|
||||
|
||||
internal object GetTroopListSimplify :
|
||||
PacketFactory<GetTroopListSimplify.Response>("friendlist.GetTroopListReqV2") {
|
||||
override suspend fun ByteReadPacket.decode(bot: QQAndroidBot): GetTroopListSimplify.Response {
|
||||
println("获取到了GetTroopList的回信")
|
||||
println(this.readRemainingBytes().toUHexString())
|
||||
return Response()
|
||||
/**
|
||||
* Get Troop List不一定会得到服务器的回应 据推测与群数量有关
|
||||
* 因此 应对timeout方法做出处理
|
||||
* timeout时间应不小于 8s?
|
||||
*
|
||||
*/
|
||||
internal object GetTroopList :
|
||||
PacketFactory<GetTroopList.Response>("friendlist.GetTroopListReqV2") {
|
||||
override suspend fun ByteReadPacket.decode(bot: QQAndroidBot): GetTroopList.Response {
|
||||
debugPrint()
|
||||
this.discardExact(4)
|
||||
val res = this.decodeUniPacket(GetTroopListRespV2.serializer())
|
||||
println(res.contentToString())
|
||||
return Response(
|
||||
|
||||
)
|
||||
|
||||
}
|
||||
|
||||
class Response : Packet {
|
||||
class Response(
|
||||
|
||||
) : Packet {
|
||||
override fun toString(): String = "FriendList.GetFriendGroupList.Response"
|
||||
}
|
||||
|
||||
@ -49,7 +66,6 @@ internal class FriendList {
|
||||
iVersion = 3,
|
||||
cPacketType = 0x00,
|
||||
iMessageType = 0x00000,
|
||||
iRequestId = 1921334513,
|
||||
sBuffer = jceRequestSBuffer(
|
||||
"GetTroopListReqV2Simplify",
|
||||
GetTroopListReqV2Simplify.serializer(),
|
||||
@ -69,16 +85,20 @@ internal class FriendList {
|
||||
}
|
||||
}
|
||||
internal object GetFriendGroupList : PacketFactory<GetFriendGroupList.Response>("friendlist.getFriendGroupList") {
|
||||
|
||||
class Response : Packet {
|
||||
class Response(
|
||||
val totalFriendCount: Short,
|
||||
val friendList: List<FriendInfo>
|
||||
) : Packet {
|
||||
override fun toString(): String = "FriendList.GetFriendGroupList.Response"
|
||||
}
|
||||
|
||||
override suspend fun ByteReadPacket.decode(bot: QQAndroidBot): Response {
|
||||
this.discardExact(4)
|
||||
val res = this.decodeUniPacket(GetFriendListResp.serializer())
|
||||
println(res.contentToString())
|
||||
return Response()
|
||||
return Response(
|
||||
res.totoalFriendCount,
|
||||
res.vecFriendInfo.orEmpty()
|
||||
)
|
||||
}
|
||||
|
||||
operator fun invoke(
|
||||
|
Loading…
Reference in New Issue
Block a user