From f61f738daf1b86b4983feac46d69ac05ef87293e Mon Sep 17 00:00:00 2001 From: Him188moe Date: Sun, 1 Sep 2019 01:02:25 +0800 Subject: [PATCH] Message receiver is working! --- .../mirai/network/RobotNetworkHandler.kt | 1 + .../mirai/network/packet/ClientPacket.kt | 4 +- .../mirai/network/packet/MessageEvent.kt | 2 +- .../mamoe/mirai/network/packet/ServerEvent.kt | 5 +- .../message/ClientSendFriendMessagePacket.kt | 54 +++++++++++++++++++ ...ket.kt => ClientSendGroupMessagePacket.kt} | 11 +++- 6 files changed, 69 insertions(+), 8 deletions(-) create mode 100644 mirai-core/src/main/java/net/mamoe/mirai/network/packet/message/ClientSendFriendMessagePacket.kt rename mirai-core/src/main/java/net/mamoe/mirai/network/packet/message/{ClientFriendMessagePacket.kt => ClientSendGroupMessagePacket.kt} (51%) diff --git a/mirai-core/src/main/java/net/mamoe/mirai/network/RobotNetworkHandler.kt b/mirai-core/src/main/java/net/mamoe/mirai/network/RobotNetworkHandler.kt index 1fc5b887f..b6640ffb4 100644 --- a/mirai-core/src/main/java/net/mamoe/mirai/network/RobotNetworkHandler.kt +++ b/mirai-core/src/main/java/net/mamoe/mirai/network/RobotNetworkHandler.kt @@ -229,6 +229,7 @@ class RobotNetworkHandler(val robot: Robot, val number: Int, private val passwor is ServerFriendMessageEventPacket -> { + println(packet.toString()) //friend message } diff --git a/mirai-core/src/main/java/net/mamoe/mirai/network/packet/ClientPacket.kt b/mirai-core/src/main/java/net/mamoe/mirai/network/packet/ClientPacket.kt index e707017ea..117f9bbcf 100644 --- a/mirai-core/src/main/java/net/mamoe/mirai/network/packet/ClientPacket.kt +++ b/mirai-core/src/main/java/net/mamoe/mirai/network/packet/ClientPacket.kt @@ -201,9 +201,9 @@ fun Int.toLByteArray(): ByteArray = byteArrayOf( @ExperimentalUnsignedTypes fun Int.toHexString(separator: String = " "): String = this.toByteArray().toUByteArray().toUHexString(separator); -private fun md5(str: String): ByteArray = MessageDigest.getInstance("MD5").digest(str.toByteArray()) +internal fun md5(str: String): ByteArray = MessageDigest.getInstance("MD5").digest(str.toByteArray()) -private fun md5(byteArray: ByteArray): ByteArray = MessageDigest.getInstance("MD5").digest(byteArray) +internal fun md5(byteArray: ByteArray): ByteArray = MessageDigest.getInstance("MD5").digest(byteArray) @ExperimentalUnsignedTypes @Throws(IOException::class) diff --git a/mirai-core/src/main/java/net/mamoe/mirai/network/packet/MessageEvent.kt b/mirai-core/src/main/java/net/mamoe/mirai/network/packet/MessageEvent.kt index da5a0af7a..800c3c160 100644 --- a/mirai-core/src/main/java/net/mamoe/mirai/network/packet/MessageEvent.kt +++ b/mirai-core/src/main/java/net/mamoe/mirai/network/packet/MessageEvent.kt @@ -11,7 +11,7 @@ import java.io.DataInputStream */ @PacketId("")//随后写入 @ExperimentalUnsignedTypes -open class ClientMessageResponsePacket( +class ClientMessageResponsePacket( private val qq: Int, private val packetIdFromServer: ByteArray, private val sessionKey: ByteArray, diff --git a/mirai-core/src/main/java/net/mamoe/mirai/network/packet/ServerEvent.kt b/mirai-core/src/main/java/net/mamoe/mirai/network/packet/ServerEvent.kt index 8f403558c..475dc291a 100644 --- a/mirai-core/src/main/java/net/mamoe/mirai/network/packet/ServerEvent.kt +++ b/mirai-core/src/main/java/net/mamoe/mirai/network/packet/ServerEvent.kt @@ -1,6 +1,6 @@ package net.mamoe.mirai.network.packet -import net.mamoe.mirai.utils.MiraiLogger +import net.mamoe.mirai.util.toUHexString import java.io.ByteArrayOutputStream import java.io.DataInputStream import java.util.zip.GZIPInputStream @@ -136,9 +136,6 @@ class ServerGroupMessageEventPacket(input: DataInputStream, packetId: ByteArray, }*/ } } - - - MiraiLogger info this.toString() } } diff --git a/mirai-core/src/main/java/net/mamoe/mirai/network/packet/message/ClientSendFriendMessagePacket.kt b/mirai-core/src/main/java/net/mamoe/mirai/network/packet/message/ClientSendFriendMessagePacket.kt new file mode 100644 index 000000000..664b74811 --- /dev/null +++ b/mirai-core/src/main/java/net/mamoe/mirai/network/packet/message/ClientSendFriendMessagePacket.kt @@ -0,0 +1,54 @@ +package net.mamoe.mirai.network.packet.message + +import net.mamoe.mirai.network.Protocol +import net.mamoe.mirai.network.packet.* +import net.mamoe.mirai.util.lazyEncode + +/** + * @author Him188moe + */ +@PacketId("00 CD") +@ExperimentalUnsignedTypes +class ClientSendFriendMessagePacket( + val qq: Int, + val sessionKey: ByteArray, + val message: String +) : ClientPacket() { + override fun encode() { + this.writeRandom(2)//part of packet id + this.writeQQ(qq) + this.writeHex(Protocol._fixVer) + + this.encryptAndWrite(sessionKey) { + it.writeQQ(qq) + it.writeQQ(qq)//that's correct + it.writeHex("00 00 00 08 00 01 00 04 00 00 00 00") + it.writeHex("37 0F") + it.writeQQ(qq) + it.write(md5(lazyEncode { md5Key -> md5Key.writeQQ(qq); md5Key.write(sessionKey) })) + it.writeHex("00 0B") + it.writeRandom(2) + it.writeInt(System.currentTimeMillis().toInt()) + it.writeHex("00 00 00 00 00 00 01 00 00 00 01 4D 53 47 00 00 00 00 00") + it.writeInt(System.currentTimeMillis().toInt()) + it.writeRandom(4) + it.writeHex("00 00 00 00 09 00 86 00 00 0C E5 BE AE E8 BD AF E9 9B 85 E9 BB 91") + it.writeZero(2) + + if ("[face" in message + || ".gif]" in message + || ".jpg]" in message + || ".png]" in message + ) { + TODO("复合消息构建") + } else { + //Plain text + this.writeByte(0x01) + this.writeInt(message.length + 3) + this.writeByte(0x01) + this.writeInt(message.length) + this.write(message.toByteArray()) + } + } + } +} \ No newline at end of file diff --git a/mirai-core/src/main/java/net/mamoe/mirai/network/packet/message/ClientFriendMessagePacket.kt b/mirai-core/src/main/java/net/mamoe/mirai/network/packet/message/ClientSendGroupMessagePacket.kt similarity index 51% rename from mirai-core/src/main/java/net/mamoe/mirai/network/packet/message/ClientFriendMessagePacket.kt rename to mirai-core/src/main/java/net/mamoe/mirai/network/packet/message/ClientSendGroupMessagePacket.kt index 568abc8d4..fa811f59a 100644 --- a/mirai-core/src/main/java/net/mamoe/mirai/network/packet/message/ClientFriendMessagePacket.kt +++ b/mirai-core/src/main/java/net/mamoe/mirai/network/packet/message/ClientSendGroupMessagePacket.kt @@ -1,17 +1,26 @@ package net.mamoe.mirai.network.packet.message import net.mamoe.mirai.network.packet.ClientPacket +import net.mamoe.mirai.network.packet.PacketId +import net.mamoe.mirai.network.packet.encryptAndWrite /** * @author Him188moe */ +@PacketId("00 CD") @ExperimentalUnsignedTypes -class ClientFriendMessagePacket( +class ClientSendGroupMessagePacket( + val group: Int, val qq: Int, val sessionKey: ByteArray, val message: String ) : ClientPacket() { override fun encode() { + TODO() + this.encryptAndWrite(sessionKey) { + // it.write() + + } } } \ No newline at end of file