diff --git a/.github/event hook.png b/.github/event hook.png new file mode 100644 index 000000000..a76f875d8 Binary files /dev/null and b/.github/event hook.png differ diff --git a/README.md b/README.md index 11bec757f..bdfe16c1b 100644 --- a/README.md +++ b/README.md @@ -24,8 +24,12 @@ Network部分使用 Kotlin 完成(因为kt有对 unsigned byte 的支持). 1. Clone 2. Import as Maven project 3. Run [MiraiMain](mirai-core/src/main/java/net/mamoe/mirai/MiraiMain.java#L7) + 简略阅读源码便可测试接收和发送消息 +Hook 一个事件(Kotlin): +![event hook.png](.github/event%20hook.png) + ### TODO - [x] 事件(Event)模块 - [ ] 插件(Plugin)模块 **(Working on)** diff --git a/mirai-core/src/main/java/net/mamoe/mirai/MiraiServer.java b/mirai-core/src/main/java/net/mamoe/mirai/MiraiServer.java index 59f8f01ad..d34a6359d 100644 --- a/mirai-core/src/main/java/net/mamoe/mirai/MiraiServer.java +++ b/mirai-core/src/main/java/net/mamoe/mirai/MiraiServer.java @@ -178,7 +178,13 @@ public class MiraiServer { getLogger().info("Initializing [Robot]s"); + try { + getAvailableRobot(); + } catch (ExecutionException | InterruptedException e) { + e.printStackTrace(); + } + /* this.qqs.keySet().stream().map(key -> this.qqs.getSection(key)).forEach(section -> { getLogger().info("Initializing [Robot] " + section.getString("account")); try { @@ -199,7 +205,7 @@ public class MiraiServer { getLogger().error("Could not load QQ robots config!"); System.exit(1); } - }); + });*/ } @@ -209,20 +215,9 @@ public class MiraiServer { "3145561616----987654321\n" + "2374150554----12345678910\n" + "2375307394----12345678910\n" + - "1531848970----1234567890\n" + - "1947293188----a123456789\n" + - "1771231721----123456789a\n" + "2401645747----12345678910\n" + - "3338427598----987654321\n" + - "3055657369----1234567890\n" + - "3502771486----987654321\n" + "1515419818----1234567890\n" + - "2402273360----12345678910\n" + - "3107367848----987654321\n" + - "3487109947----123456789a\n" + - "3489288352----123456789a\n" + - "2385617018----12345678910\n" + - "1251003390----123456789a\n"; + "3107367848----987654321\n"; private Robot getAvailableRobot() throws ExecutionException, InterruptedException { for (String it : qqList.split("\n")) { diff --git a/mirai-core/src/main/java/net/mamoe/mirai/message/Message.kt b/mirai-core/src/main/java/net/mamoe/mirai/message/Message.kt index 65adab3dd..ddba4dec2 100644 --- a/mirai-core/src/main/java/net/mamoe/mirai/message/Message.kt +++ b/mirai-core/src/main/java/net/mamoe/mirai/message/Message.kt @@ -15,7 +15,17 @@ import java.util.* * 可发送的或从服务器接收的消息. * 采用这样的消息模式是因为 QQ 的消息多元化, 一条消息中可包含 [纯文本][PlainText], [图片][Image] 等. * - * 在 Kotlin, 使用 [Message] 与使用 [String] 几乎没有什么用法上的区别, 除了 + * #### 在 Kotlin 使用 [Message] + * 这与使用 [String] 的使用非常类似. + * + * 比较 [Message] 与 [String] (使用 infix [Message.valueEquals]): + * `if(message valueEquals "你好") qq.sendMessage(message)` + * + * 连接 [Message] 与 [Message], [String], [BufferedImage] (使用 operator [Message.plus]): + * ``` + * message = PlainText("Hello ") + * qq.sendMessage(message + "world") + * ``` * * @author Him188moe * @see Contact.sendMessage diff --git a/mirai-core/src/main/java/net/mamoe/mirai/message/defaults/MessageChain.kt b/mirai-core/src/main/java/net/mamoe/mirai/message/defaults/MessageChain.kt index 18dd74ad4..1273784a9 100644 --- a/mirai-core/src/main/java/net/mamoe/mirai/message/defaults/MessageChain.kt +++ b/mirai-core/src/main/java/net/mamoe/mirai/message/defaults/MessageChain.kt @@ -3,6 +3,7 @@ package net.mamoe.mirai.message.defaults import net.mamoe.mirai.message.Message import net.mamoe.mirai.message.MessageId import net.mamoe.mirai.utils.lazyEncode +import org.intellij.lang.annotations.MagicConstant import java.util.* import java.util.stream.Collectors import java.util.stream.Stream @@ -31,6 +32,20 @@ class MessageChain : Message { return list.toList() } + fun size(): Int { + return list.size + } + + @Synchronized + fun containsType(@MagicConstant(valuesFromClass = MessageId::class) type: Int): Boolean { + for (message in list) { + if (message.type == type) { + return true + } + } + return false + } + fun stream(): Stream { return ArrayList(list).stream() } 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 842c889ef..680de7dd4 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 @@ -12,6 +12,7 @@ import net.mamoe.mirai.event.events.network.PacketSentEvent import net.mamoe.mirai.event.events.network.ServerPacketReceivedEvent import net.mamoe.mirai.event.events.qq.FriendMessageEvent import net.mamoe.mirai.event.events.robot.RobotLoginSucceedEvent +import net.mamoe.mirai.event.hookAlways import net.mamoe.mirai.event.hookWhile import net.mamoe.mirai.message.Message import net.mamoe.mirai.message.defaults.MessageChain @@ -483,6 +484,16 @@ class RobotNetworkHandler(private val robot: Robot) : Closeable { inner class MessageHandler : PacketHandler() { internal var ignoreMessage: Boolean = false + init { + FriendMessageEvent::class.hookAlways { + if (it.message() valueEquals "你好") { + it.qq.sendMessage("你好!") + } else if (it.message().toString().startsWith("复读")) { + it.qq.sendMessage(it.message()) + } + } + } + override fun onPacketReceived(packet: ServerPacket) { when (packet) { is ServerGroupUploadFileEventPacket -> { @@ -494,12 +505,7 @@ class RobotNetworkHandler(private val robot: Robot) : Closeable { return } - val friendMessageEvent = FriendMessageEvent(robot, robot.contacts.getQQ(packet.qq), packet.message) - friendMessageEvent.broadcast() - - if (friendMessageEvent.message() valueEquals "你好") { - friendMessageEvent.qq.sendMessage("你好") - } + FriendMessageEvent(robot, robot.contacts.getQQ(packet.qq), packet.message).broadcast() } is ServerGroupMessageEventPacket -> { 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 3427bdc5d..d0f8547a4 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 @@ -70,7 +70,7 @@ abstract class ClientPacket : ByteArrayDataOutputStream(), Packet { override fun toString(): String { - return adjustName(this.javaClass.simpleName + "(${this.getFixedId()})") + this.getAllDeclaredFields().filterNot { it.name == "idHex" || it.name == "encoded" }.joinToString(", ", "{", "}") { + return adjustName(this.javaClass.simpleName + "(${this.getFixedId()})") + this.getAllDeclaredFields().filterNot { it.name == "idHex" || it.name == "idByteArray" || it.name == "encoded" }.joinToString(", ", "{", "}") { it.trySetAccessible(); it.name + "=" + it.get(this).let { value -> when (value) { null -> null diff --git a/mirai-core/src/main/java/net/mamoe/mirai/network/packet/Touch.kt b/mirai-core/src/main/java/net/mamoe/mirai/network/packet/Touch.kt index a6a4efb65..57b0b9742 100644 --- a/mirai-core/src/main/java/net/mamoe/mirai/network/packet/Touch.kt +++ b/mirai-core/src/main/java/net/mamoe/mirai/network/packet/Touch.kt @@ -16,7 +16,7 @@ import java.io.IOException * * @author Him188moe */ -@PacketId("08 25 31 0?") +@PacketId("08 25 31 01") class ServerTouchResponsePacket(inputStream: DataInputStream) : ServerPacket(inputStream) { var serverIP: String? = null diff --git a/mirai-core/src/main/java/net/mamoe/mirai/network/packet/login/ClientLogin.kt b/mirai-core/src/main/java/net/mamoe/mirai/network/packet/login/ClientLogin.kt index b83597ad1..ccd4edbe1 100644 --- a/mirai-core/src/main/java/net/mamoe/mirai/network/packet/login/ClientLogin.kt +++ b/mirai-core/src/main/java/net/mamoe/mirai/network/packet/login/ClientLogin.kt @@ -101,7 +101,7 @@ private fun DataOutputStream.writePart1(qq: Long, password: String, loginTime: I this.writeHex("00 38")//length this.write(token0825)//length this.writeHex("03 0F")//tag - this.writeDeviceName(false) + this.writeDeviceName(true) this.writeHex("00 05 00 06 00 02") this.writeQQ(qq) diff --git a/mirai-native/pom.xml b/mirai-native/pom.xml deleted file mode 100644 index d708da28a..000000000 --- a/mirai-native/pom.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - mirai - net.mamoe - 1.0 - - 4.0.0 - - mirai-native - 1.0 - diff --git a/mirai-native/src/main/java/net/mamoe/mirai/util/TeaEncryption.java b/mirai-native/src/main/java/net/mamoe/mirai/util/TeaEncryption.java deleted file mode 100644 index d09be5855..000000000 --- a/mirai-native/src/main/java/net/mamoe/mirai/util/TeaEncryption.java +++ /dev/null @@ -1,9 +0,0 @@ -package net.mamoe.mirai.util; - -/** - * @author Him188moe - */ -public final class TeaEncryption { - - public static native int Decrypt(); -} diff --git a/pom.xml b/pom.xml index b09b4bdbf..05635a905 100644 --- a/pom.xml +++ b/pom.xml @@ -11,7 +11,6 @@ mirai-core - mirai-native mirai-ui mirai-console mirai-api