diff --git a/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/ContactImpl.kt b/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/ContactImpl.kt index 61e616291..0f068aca1 100644 --- a/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/ContactImpl.kt +++ b/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/ContactImpl.kt @@ -86,18 +86,18 @@ internal class MemberImpl( } else if (myPermission == MemberPermission.MEMBER) { return false } - try { + return try { bot.network.run { - val response = TroopManagement.Mute( + TroopManagement.Mute( client = bot.client, groupCode = group.id, memberUin = this@MemberImpl.id, timeInSecond = durationSeconds ).sendAndExpect<TroopManagement.Mute.Response>() } - return true + true } catch (e: Exception) { - return false + false } } diff --git a/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/PacketFactory.kt b/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/PacketFactory.kt index f44f87ee6..3d90c4630 100644 --- a/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/PacketFactory.kt +++ b/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/PacketFactory.kt @@ -360,7 +360,7 @@ internal object KnownPacketFactories { } @UseExperimental(ExperimentalContracts::class) -internal inline fun <I : IoBuffer, R> I.withUse(block: I.() -> R): R { +internal inline fun <R> IoBuffer.withUse(block: IoBuffer.() -> R): R { contract { callsInPlace(block, kotlin.contracts.InvocationKind.EXACTLY_ONCE) } @@ -372,7 +372,7 @@ internal inline fun <I : IoBuffer, R> I.withUse(block: I.() -> R): R { } @UseExperimental(ExperimentalContracts::class) -internal inline fun <I : ByteReadPacket, R> I.withUse(block: I.() -> R): R { +internal inline fun <R> ByteReadPacket.withUse(block: ByteReadPacket.() -> R): R { contract { callsInPlace(block, kotlin.contracts.InvocationKind.EXACTLY_ONCE) } diff --git a/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/Tlv.kt b/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/Tlv.kt index d24d6ac56..b63d1365f 100644 --- a/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/Tlv.kt +++ b/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/Tlv.kt @@ -146,8 +146,7 @@ fun BytePacketBuilder.t116( fun BytePacketBuilder.t100( appId: Long = 16, subAppId: Long = 537062845, - appClientVersion: Int, - sigMap: Int + appClientVersion: Int ) { writeShort(0x100) writeShortLVPacket { @@ -156,7 +155,7 @@ fun BytePacketBuilder.t100( writeInt(appId.toInt()) writeInt(subAppId.toInt()) writeInt(appClientVersion) - writeInt(34869472) // 34869472? + writeInt(34869472) // sigMap, 34869472? } shouldEqualsTo 22 } diff --git a/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/login/LoginPacket.kt b/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/login/LoginPacket.kt index f00915a24..f244e509a 100644 --- a/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/login/LoginPacket.kt +++ b/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/login/LoginPacket.kt @@ -72,8 +72,7 @@ internal object LoginPacket : OutgoingPacketFactory<LoginPacket.LoginPacketRespo @UseExperimental(MiraiInternalAPI::class) operator fun invoke( client: QQAndroidClient, - t402: ByteArray, - t403: ByteArray + t402: ByteArray ): OutgoingPacket = buildLoginOutgoingPacket(client, bodyType = 2) { sequenceId -> writeSsoPacket(client, subAppId, commandName, sequenceId = sequenceId) { writeOicqRequestPacket(client, EncryptMethodECDH7(client.ecdh), 0x0810) { @@ -96,10 +95,7 @@ internal object LoginPacket : OutgoingPacketFactory<LoginPacket.LoginPacketRespo private const val subAppId = 537062845L @UseExperimental(MiraiInternalAPI::class) operator fun invoke( - client: QQAndroidClient, - t174: ByteArray, - t402: ByteArray, - phoneNumber: String + client: QQAndroidClient ): OutgoingPacket = buildLoginOutgoingPacket(client, bodyType = 2) { sequenceId -> writeSsoPacket(client, subAppId, commandName, sequenceId = sequenceId, unknownHex = "01 00 00 00 00 00 00 00 00 00 01 00") { writeOicqRequestPacket(client, EncryptMethodECDH7(client.ecdh), 0x0810) { @@ -163,7 +159,7 @@ internal object LoginPacket : OutgoingPacketFactory<LoginPacket.LoginPacketRespo if (ConfigManager.get_loginWithPicSt()) appIdList = longArrayOf(1600000226L) */ t116(client.miscBitMap, client.subSigMap) - t100(appId, subAppId, client.appClientVersion, client.mainSigMap or 0xC0) + t100(appId, subAppId, client.appClientVersion) t107(0) // t108(byteArrayOf()) @@ -310,7 +306,7 @@ internal object LoginPacket : OutgoingPacketFactory<LoginPacket.LoginPacketRespo @UseExperimental(MiraiDebugAPI::class) override suspend fun ByteReadPacket.decode(bot: QQAndroidBot): LoginPacketResponse { - val subCommand = readUShort().toInt() + discardExact(2) // subCommand // println("subCommand=$subCommand") val type = readUByte() // println("type=$type") @@ -703,7 +699,7 @@ internal object LoginPacket : OutgoingPacketFactory<LoginPacket.LoginPacketRespo private fun QQAndroidClient.analysisTlv149(t149: ByteArray): LoginPacketResponse.Error { return t149.read { - val type: Short = readShort() + discardExact(2) //type val title: String = readUShortLVString() val content: String = readUShortLVString() val otherInfo: String = readUShortLVString() diff --git a/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/login/TransEmpPacket.kt b/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/login/TransEmpPacket.kt deleted file mode 100644 index f66c51d44..000000000 --- a/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/login/TransEmpPacket.kt +++ /dev/null @@ -1,31 +0,0 @@ -package net.mamoe.mirai.qqandroid.network.protocol.packet.login - - -import kotlinx.io.core.ByteReadPacket -import net.mamoe.mirai.data.Packet -import net.mamoe.mirai.qqandroid.QQAndroidBot -import net.mamoe.mirai.qqandroid.network.QQAndroidClient -import net.mamoe.mirai.qqandroid.network.protocol.packet.* - -internal object TransEmpPacket : OutgoingPacketFactory<TransEmpPacket.Response>("wtlogin.trans_emp") { - - private const val appId = 16L - private const val subAppId = 537062845L - - @Suppress("FunctionName") - fun SubCommand1( - client: QQAndroidClient - ): OutgoingPacket = buildLoginOutgoingPacket(client, bodyType = 2) { - writeOicqRequestPacket(client, EncryptMethodECDH135(client.ecdh), TODO()) { - - // oicq.wlogin_sdk.request.trans_emp_1#packTransEmpBody - } - } - - object Response : Packet - - - override suspend fun ByteReadPacket.decode(bot: QQAndroidBot): Response { - TODO("not implemented") - } -} \ No newline at end of file diff --git a/mirai-core-qqandroid/src/jvmTest/kotlin/androidPacketTests/clientToServer.kt b/mirai-core-qqandroid/src/jvmTest/kotlin/androidPacketTests/clientToServer.kt index f6616b841..58fd3faa4 100644 --- a/mirai-core-qqandroid/src/jvmTest/kotlin/androidPacketTests/clientToServer.kt +++ b/mirai-core-qqandroid/src/jvmTest/kotlin/androidPacketTests/clientToServer.kt @@ -175,7 +175,7 @@ fun ByteReadPacket.analysisOneFullPacket(): ByteReadPacket = debugIfFail("Failed readShort().toInt().takeIf { it != 8001 }?.let { println("这个包不是 oicqRequest") return@debugIfFail this - println(" got new protocolVersion=$it") + //println(" got new protocolVersion=$it") } val commandId = readUShort().toInt() println(" commandId=0x${commandId.toShort().toUHexString()}") diff --git a/mirai-demos/mirai-demo-gentleman/src/main/kotlin/demo/gentleman/Main.kt b/mirai-demos/mirai-demo-gentleman/src/main/kotlin/demo/gentleman/Main.kt index 57bd60613..ccdefcd39 100644 --- a/mirai-demos/mirai-demo-gentleman/src/main/kotlin/demo/gentleman/Main.kt +++ b/mirai-demos/mirai-demo-gentleman/src/main/kotlin/demo/gentleman/Main.kt @@ -76,7 +76,7 @@ suspend fun main() { startsWith("profile", removePrefix = true) { val account = it.trim() if (account.isNotEmpty()) { - account.toLong().qq() + bot.getFriend(account.toLong()) } else { sender }.queryProfile().toString().reply()