troop List

This commit is contained in:
jiahua.liu 2020-01-31 18:06:23 +08:00
parent 288d0df738
commit 0b01fd7b36
6 changed files with 99 additions and 8 deletions

View File

@ -1,5 +1,6 @@
package net.mamoe.mirai.qqandroid.network
import io.ktor.client.HttpClient
import kotlinx.atomicfu.AtomicRef
import kotlinx.atomicfu.atomic
import kotlinx.coroutines.*
@ -98,6 +99,7 @@ internal class QQAndroidBotNetworkHandler(bot: QQAndroidBot) : BotNetworkHandler
suspend fun doInit() {
//start updating friend/group list
bot.logger.info("Start updating friend/group list")
/*
val data = FriendList.GetFriendGroupList(
bot.client,
@ -106,11 +108,14 @@ internal class QQAndroidBotNetworkHandler(bot: QQAndroidBot) : BotNetworkHandler
0,
2
).sendAndExpect<FriendList.GetFriendGroupList.Response>()
*/
val data = FriendList.GetTroopList(
*/
val data = FriendList.GetTroopListSimplify(
bot.client
).sendAndExpect<FriendList.GetFriendGroupList.Response>()
).sendAndExpect<FriendList.GetTroopListSimplify.Response>(100000)
println(data.contentToString())
}
doLogin()

View File

@ -0,0 +1,81 @@
package net.mamoe.mirai.qqandroid.network.http
import io.ktor.client.HttpClient
import io.ktor.client.request.*
import io.ktor.client.response.HttpResponse
import io.ktor.http.ContentType
import io.ktor.http.URLProtocol
import io.ktor.http.setCookie
import io.ktor.http.userAgent
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.io.readRemaining
import kotlinx.coroutines.withContext
import net.mamoe.mirai.qqandroid.QQAndroidBot
import net.mamoe.mirai.qqandroid.network.QQAndroidClient
import net.mamoe.mirai.utils.cryptor.contentToString
import net.mamoe.mirai.utils.currentTimeMillis
import net.mamoe.mirai.utils.io.readRemainingBytes
import net.mamoe.mirai.utils.io.toUHexString
/**
* 好像不需要了
*/
object HttpRequest {
private lateinit var cookie: String
}
internal suspend fun HttpClient.getPTLoginCookies(
client: QQAndroidClient
): String {
//$"https://ssl.ptlogin2.qq.com/jump?pt_clientver=5593&pt_src=1&keyindex=9&ptlang=2052&clientuin={QQ}&clientkey={Util.ToHex(TXProtocol.BufServiceTicketHttp, "", "{0}")}&u1=https:%2F%2Fuser.qzone.qq.com%2F417085811%3FADUIN=417085811%26ADSESSION={Util.GetTimeMillis(DateTime.Now)}%26ADTAG=CLIENT.QQ.5593_MyTip.0%26ADPUBNO=26841&source=namecardhoverstar"
// "https://ssl.ptlogin2.qq.com/jump?pt_clientver=5509&pt_src=1&keyindex=9&clientuin={0}&clientkey={1}&u1=http%3A%2F%2Fqun.qq.com%2Fmember.html%23gid%3D168209441",
val res = post<HttpResponse> {
println(client.wLoginSigInfo.userStWebSig.data.toUHexString().replace(" ", "").toLowerCase())
url {
protocol = URLProtocol.HTTPS
host = "ssl.ptlogin2.qq.com"
path(
"/jump?pt_clientver=5509&pt_src=1&keyindex=9&clientuin=${client.uin}&clientkey=${client.wLoginSigInfo.userStWebSig.data.toUHexString().replace(
" ",
""
)}&u1=http%3A%2F%2Fqun.qq.com%2Fmember.html%23gid%3D168209441&FADUIN=417085811&ADSESSION=${currentTimeMillis}&source=namecardhoverstar"
)
}
headers {
userAgent("Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36")
}
}
println(res.status)
println(res.setCookie())
println(res.content.readRemaining().readRemainingBytes().toUHexString())
return "done";
}
internal suspend fun HttpClient.getGroupList(
client: QQAndroidClient
): String {
// "https://ssl.ptlogin2.qq.com/jump?pt_clientver=5509&pt_src=1&keyindex=9&clientuin={0}&clientkey={1}&u1=http%3A%2F%2Fqun.qq.com%2Fmember.html%23gid%3D168209441",
val res = get<HttpResponse> {
url {
protocol = URLProtocol.HTTPS
host = "ssl.ptlogin2.qq.com"
path("jump")
parameters["pt_clientver"] = "5509"
parameters["pt_src"] = "1"
parameters["keyindex"] = "9"
parameters["u1"] = "http%3A%2F%2Fqun.qq.com%2Fmember.html%23gid%3D168209441"
parameters["clientuin"] = client.uin.toString()
parameters["clientkey"] = client.wLoginSigInfo.userStWebSig.data.toUHexString()
}
headers {
userAgent("Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36")
}
}
println(res.status)
println(res.setCookie())
return "done";
}

View File

@ -67,7 +67,7 @@ internal object KnownPacketFactories : List<PacketFactory<*>> by mutableListOf(
MessageSvc.PushForceOffline,
MessageSvc.PbSendMsg,
FriendList.GetFriendGroupList,
FriendList.GetTroopList
FriendList.GetTroopListSimplify
) {
// SvcReqMSFLoginNotify 自己的其他设备上限
// MessageSvc.PushReaded 电脑阅读了别人的消息, 告知手机

View File

@ -15,7 +15,6 @@ 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.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
@ -23,8 +22,9 @@ import net.mamoe.mirai.utils.io.toUHexString
internal class FriendList {
internal object GetTroopList : PacketFactory<GetTroopList.Response>("friendlist.GetTroopListReqV2") {
override suspend fun ByteReadPacket.decode(bot: QQAndroidBot): GetTroopList.Response {
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()
@ -65,7 +65,6 @@ internal class FriendList {
}
}
}
internal object GetFriendGroupList : PacketFactory<GetFriendGroupList.Response>("friendlist.getFriendGroupList") {
class Response : Packet {

View File

@ -276,6 +276,9 @@ fun ByteReadPacket.decodeUni() {
//return
readBytes(readInt() - 4).debugPrint("head").toReadPacket().apply {
val commandName = readString(readInt() - 4).also { PacketLogger.warning("commandName=$it") }
if(commandName.contains("GetTroopList")){
println("!\n".repeat(100))
}
println(commandName)
println(" unknown4Bytes=" + readBytes(readInt() - 4).toUHexString())
// 00 00 00 1A 43 6F 6E 66 69 67 50 75 73 68 53 76 63 2E 50 75 73 68 52 65 73 70

View File

@ -219,6 +219,9 @@ private fun parseSsoFrame(input: ByteReadPacket): KnownPacketFactories.IncomingP
commandName = readString(readInt() - 4)
DebugLogger.warning("commandName=$commandName")
if(commandName.contains("GetTroopList")){
println("!\n".repeat(100))
}
val unknown = readBytes(readInt() - 4)
//if (unknown.toInt() != 0x02B05B8B) DebugLogger.debug("got new unknown: ${unknown.toUHexString()}")