diff --git a/UpdateLog.md b/UpdateLog.md index 91224d7b0..336354f3a 100644 --- a/UpdateLog.md +++ b/UpdateLog.md @@ -4,6 +4,10 @@ 开发版本. 频繁更新, 不保证高稳定性 +### `0.8.1` *2019/12/15* +- 修复有时群资料无法获取的情况 +- 现在 `At.qq`, `Long.qq` 等函数不再是 `suspend` + ### `0.8.0` *2019/12/14* 协议 - 现在查询群资料时可处理群号无效的情况 diff --git a/gradle.properties b/gradle.properties index 951fc616e..35e0fca5d 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,7 +1,7 @@ # style guide kotlin.code.style=official # config -mirai_version=0.8.0 +mirai_version=0.8.1 kotlin.incremental.multiplatform=true kotlin.parallel.tasks.in.project=true # kotlin diff --git a/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/event/MessageSubscribers.kt b/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/event/MessageSubscribers.kt index 19b001d81..fc3deaf2e 100644 --- a/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/event/MessageSubscribers.kt +++ b/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/event/MessageSubscribers.kt @@ -139,7 +139,7 @@ class MessageSubscribersBuilder>( @MessageDsl suspend inline fun always(noinline onEvent: @MessageDsl suspend T.(String) -> Unit) { content({ true }, onEvent) - } // TODO: 2019/12/4 这些 onEvent 都应该为 crossinline, 而这会导致一个 CompilationException + } // TODO: 2019/12/4 这些 onEvent 都应该为 cross-inline, 而这会导致一个 CompilationException /** * 如果消息内容 `==` [equals], 就执行 [onEvent] diff --git a/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/network/protocol/tim/packet/event/MessageEvent.kt b/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/network/protocol/tim/packet/event/MessageEvent.kt index 3c5a06195..93865ae78 100644 --- a/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/network/protocol/tim/packet/event/MessageEvent.kt +++ b/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/network/protocol/tim/packet/event/MessageEvent.kt @@ -17,7 +17,10 @@ import net.mamoe.mirai.network.protocol.tim.packet.PacketVersion import net.mamoe.mirai.network.protocol.tim.packet.action.ImageLink import net.mamoe.mirai.utils.* import net.mamoe.mirai.utils.internal.coerceAtLeastOrFail -import net.mamoe.mirai.utils.io.* +import net.mamoe.mirai.utils.io.printTLVMap +import net.mamoe.mirai.utils.io.read +import net.mamoe.mirai.utils.io.readTLVMap +import net.mamoe.mirai.utils.io.readUShortLVByteArray import net.mamoe.mirai.withSession import kotlin.jvm.JvmName @@ -89,11 +92,11 @@ abstract class MessagePacketBase : EventPacket suspend inline fun Image.download(): ByteReadPacket = getLink().download() // endregion - suspend inline fun At.qq(): QQ = bot.getQQ(this.target) + fun At.qq(): QQ = bot.getQQ(this.target) - suspend inline fun Int.qq(): QQ = bot.getQQ(this.coerceAtLeastOrFail(0).toUInt()) - suspend inline fun Long.qq(): QQ = bot.getQQ(this.coerceAtLeastOrFail(0)) - suspend inline fun UInt.qq(): QQ = bot.getQQ(this) + fun Int.qq(): QQ = bot.getQQ(this.coerceAtLeastOrFail(0).toUInt()) + fun Long.qq(): QQ = bot.getQQ(this.coerceAtLeastOrFail(0)) + fun UInt.qq(): QQ = bot.getQQ(this) suspend inline fun Int.group(): Group = bot.getGroup(this.coerceAtLeastOrFail(0).toUInt()) suspend inline fun Long.group(): Group = bot.getGroup(this.coerceAtLeastOrFail(0)) @@ -140,42 +143,42 @@ internal object GroupMessageEventParserAndHandler : KnownEventParserAndHandler MemberPermission.MEMBER - 0x08u -> MemberPermission.OWNER - 0x10u -> MemberPermission.ADMINISTRATOR - else -> { - tlv.printTLVMap("TLV(tag=18) Map") - MiraiLogger.warning("Could not determine member permission, default permission MEMBER is being used") - MemberPermission.MEMBER - } + var senderPermission: MemberPermission = MemberPermission.MEMBER + var senderName = "" + val map = readTLVMap(true) + if (map.containsKey(18u)) { + map.getValue(18u).read { + val tlv = readTLVMap(true) + senderPermission = when (tlv.takeIf { it.containsKey(0x04u) }?.get(0x04u)?.getOrNull(3)?.toUInt()) { + null -> MemberPermission.MEMBER + 0x08u -> MemberPermission.OWNER + 0x10u -> MemberPermission.ADMINISTRATOR + else -> { + tlv.printTLVMap("TLV(tag=18) Map") + MiraiLogger.warning("Could not determine member permission, default permission MEMBER is being used") + MemberPermission.MEMBER } + } - senderName = when { - tlv.containsKey(0x01u) -> String(tlv.getValue(0x01u))//这个人的qq昵称 - tlv.containsKey(0x02u) -> String(tlv.getValue(0x02u))//这个人的群名片 - else -> { - tlv.printTLVMap("TLV(tag=18) Map") - MiraiLogger.warning("Could not determine senderName") - "null" - } + senderName = when { + tlv.containsKey(0x01u) -> String(tlv.getValue(0x01u))//这个人的qq昵称 + tlv.containsKey(0x02u) -> String(tlv.getValue(0x02u))//这个人的群名片 + else -> { + tlv.printTLVMap("TLV(tag=18) Map") + MiraiLogger.warning("Could not determine senderName") + "null" } } } - - val group = bot.getGroup(groupNumber) - return GroupMessage(group, senderName, senderPermission, group.getMember(qq), message).apply { this.botVar = bot } } + val group = bot.getGroup(groupNumber) + return GroupMessage(group, senderName, senderPermission, group.getMember(qq), message).apply { this.botVar = bot } + // } + } } diff --git a/mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/MiraiEnvironmentJvm.kt b/mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/MiraiEnvironmentJvm.kt index 976404c16..23e44014e 100644 --- a/mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/MiraiEnvironmentJvm.kt +++ b/mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/MiraiEnvironmentJvm.kt @@ -2,26 +2,8 @@ package net.mamoe.mirai -import kotlinx.io.core.buildPacket -import kotlinx.io.core.readBytes -import net.mamoe.mirai.contact.GroupInternalId -import net.mamoe.mirai.contact.toId -import net.mamoe.mirai.utils.io.toByteArray -import net.mamoe.mirai.utils.io.toUHexString - actual object MiraiEnvironment { @JvmStatic actual val platform: Platform get() = Platform.JVM -} - -@ExperimentalUnsignedTypes -fun main() { - println(GroupInternalId(2793514141u).toId().value.toLong()) - println(GroupInternalId(2040208217u).toId().value.toLong()) - println(289942298u.toByteArray().toUHexString()) - println(1040400290u.toByteArray().toUHexString()) - println(buildPacket { - writeStringUtf8("信用卡") - }.readBytes().toUByteArray().toUHexString()) } \ No newline at end of file