From 8042249f515de55b559b51eca520e52afe4e2abd Mon Sep 17 00:00:00 2001 From: Him188 Date: Tue, 3 Mar 2020 09:31:01 +0800 Subject: [PATCH] Rename `toChain` to `asMessageChain`, add more java-friendly apis --- .../kotlin/test/ProtoBufDataClassGenerator.kt | 4 ++ .../kotlin/net.mamoe.mirai/contact/Contact.kt | 2 +- .../net.mamoe.mirai/message/MessagePacket.kt | 10 +++-- .../net.mamoe.mirai/message/MessageReceipt.kt | 4 +- .../message/data/MessageChain.kt | 39 +++++++++++++++---- 5 files changed, 45 insertions(+), 14 deletions(-) diff --git a/mirai-core-qqandroid/src/jvmTest/kotlin/test/ProtoBufDataClassGenerator.kt b/mirai-core-qqandroid/src/jvmTest/kotlin/test/ProtoBufDataClassGenerator.kt index 1a8f04ff1..860aa0b78 100644 --- a/mirai-core-qqandroid/src/jvmTest/kotlin/test/ProtoBufDataClassGenerator.kt +++ b/mirai-core-qqandroid/src/jvmTest/kotlin/test/ProtoBufDataClassGenerator.kt @@ -7,8 +7,11 @@ * https://github.com/mamoe/mirai/blob/master/LICENSE */ +@file:Suppress("EXPERIMENTAL_API_USAGE") + package test +import net.mamoe.mirai.utils.MiraiDebugAPI import net.mamoe.mirai.utils.cryptor.ProtoType import net.mamoe.mirai.utils.cryptor.protoFieldNumber import java.io.File @@ -364,6 +367,7 @@ fun String.getNumericalValue(): Int? { return this.filter { it in '0'..'9' }.toDoubleOrNull()?.toInt() } +@UseExperimental(MiraiDebugAPI::class) fun ProtoType.mapToKotlinType(): String { return when (this) { ProtoType.VAR_INT -> "Int" diff --git a/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/contact/Contact.kt b/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/contact/Contact.kt index eda66ee03..24e655a7b 100644 --- a/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/contact/Contact.kt +++ b/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/contact/Contact.kt @@ -140,7 +140,7 @@ fun Contact.recallIn( */ @Suppress("UNCHECKED_CAST") suspend inline fun C.sendMessage(message: Message): MessageReceipt = - sendMessage(message.toChain()) as? MessageReceipt ?: error("Internal class cast mistake") + sendMessage(message.asMessageChain()) as? MessageReceipt ?: error("Internal class cast mistake") /** * @see Contact.sendMessage diff --git a/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/message/MessagePacket.kt b/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/message/MessagePacket.kt index 428b7b847..08a537439 100644 --- a/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/message/MessagePacket.kt +++ b/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/message/MessagePacket.kt @@ -76,10 +76,14 @@ abstract class MessagePacketBase : Packet, Bot * 对于好友消息事件, 这个方法将会给好友 ([subject]) 发送消息 * 对于群消息事件, 这个方法将会给群 ([subject]) 发送消息 */ - suspend inline fun reply(message: MessageChain): MessageReceipt = subject.sendMessage(message) as MessageReceipt + suspend inline fun reply(message: MessageChain): MessageReceipt = + subject.sendMessage(message) as MessageReceipt - suspend inline fun reply(message: Message): MessageReceipt = subject.sendMessage(message.toChain()) as MessageReceipt - suspend inline fun reply(plain: String): MessageReceipt = subject.sendMessage(plain.toMessage().toChain()) as MessageReceipt + suspend inline fun reply(message: Message): MessageReceipt = + subject.sendMessage(message.asMessageChain()) as MessageReceipt + + suspend inline fun reply(plain: String): MessageReceipt = + subject.sendMessage(plain.toMessage().asMessageChain()) as MessageReceipt @JvmName("reply1") suspend inline fun String.reply(): MessageReceipt = reply(this) diff --git a/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/message/MessageReceipt.kt b/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/message/MessageReceipt.kt index 380f7b27b..a3469caae 100644 --- a/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/message/MessageReceipt.kt +++ b/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/message/MessageReceipt.kt @@ -107,10 +107,10 @@ inline val MessageReceipt<*>.sourceSequenceId: Int get() = this.source.sequenceI inline val MessageReceipt<*>.sourceTime: Long get() = this.source.time suspend inline fun MessageReceipt.quoteReply(message: Message) { - return this.quoteReply(message.toChain()) + return this.quoteReply(message.asMessageChain()) } suspend inline fun MessageReceipt.quoteReply(message: String) { - return this.quoteReply(message.toMessage().toChain()) + return this.quoteReply(message.toMessage().asMessageChain()) } diff --git a/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/message/data/MessageChain.kt b/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/message/data/MessageChain.kt index d1970d37c..61a597034 100644 --- a/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/message/data/MessageChain.kt +++ b/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/message/data/MessageChain.kt @@ -31,7 +31,7 @@ import kotlin.reflect.KProperty * 要获取更多信息, 请查看 [Message] * * @see buildMessageChain 构造一个 [MessageChain] - * @see toChain 将单个 [Message] 转换为 [MessageChain] + * @see asMessageChain 将单个 [Message] 转换为 [MessageChain] * @see asMessageChain 将 [Iterable] 或 [Sequence] 委托为 [MessageChain] * * @see foreachContent 遍历内容 @@ -188,7 +188,7 @@ inline fun MessageChain.orNull(): OrNullDelegate = OrN inline fun MessageChain.orElse( lazyDefault: () -> T ): OrNullDelegate = - OrNullDelegate(this.firstOrNull() ?: lazyDefault()) + OrNullDelegate(this.firstOrNull() ?: lazyDefault()) // endregion delegate @@ -204,12 +204,15 @@ inline fun MessageChain.orElse( @JvmName("newChain") @JsName("newChain") @Suppress("UNCHECKED_CAST") -fun Message.toChain(): MessageChain = when (this) { +fun Message.asMessageChain(): MessageChain = when (this) { is MessageChain -> this is CombinedMessage -> (this as Iterable).asMessageChain() else -> SingleMessageChainImpl(this as SingleMessage) } +@Deprecated("use asMessageChain instead", ReplaceWith("this.asMessageChain()"), DeprecationLevel.ERROR) +fun Message.toChain(): MessageChain = this.asMessageChain() + /** * 直接将 [this] 委托为一个 [MessageChain] */ @@ -220,7 +223,7 @@ fun Collection.asMessageChain(): MessageChain = MessageChainImplB * 将 [this] [扁平化后][flatten] 委托为一个 [MessageChain] */ @JvmName("newChain") -@JsName("newChain") +// @JsName("newChain") fun Collection.asMessageChain(): MessageChain = MessageChainImplBySequence(this.flatten()) /** @@ -235,7 +238,7 @@ inline fun MessageChain.asMessageChain(): MessageChain = this // 避免套娃 * 将 [this] [扁平化后][flatten] 委托为一个 [MessageChain] */ @JvmName("newChain") -@JsName("newChain") +// @JsName("newChain") fun Iterable.asMessageChain(): MessageChain = MessageChainImplBySequence(this.flatten()) /** @@ -248,9 +251,29 @@ fun Sequence.asMessageChain(): MessageChain = MessageChainImplByS * 将 [this] [扁平化后][flatten] 委托为一个 [MessageChain] */ @JvmName("newChain") -@JsName("newChain") +// @JsName("newChain") fun Sequence.asMessageChain(): MessageChain = MessageChainImplBySequence(this.flatten()) +/** + * 构造一个 [MessageChain] + * 为提供更好的 Java API. + */ +@Suppress("FunctionName") +@JvmName("newChain") +fun _____newChain______(vararg messages: Message): MessageChain { + return messages.asIterable().asMessageChain() +} + +/** + * 构造一个 [MessageChain] + * 为提供更好的 Java API. + */ +@Suppress("FunctionName") +@JvmName("newChain") +fun _____newChain______(messages: String): MessageChain { + return messages.toMessage().asMessageChain() +} + /** * 扁平化消息序列. * @@ -265,8 +288,8 @@ fun Sequence.asMessageChain(): MessageChain = MessageChainImplBySequenc */ fun Iterable.flatten(): Sequence = asSequence().flatten() -@JsName("flatten1") // avoid platform declare clash -@JvmName("flatten1") +// @JsName("flatten1") +@JvmName("flatten1")// avoid platform declare clash @JvmSynthetic fun Iterable.flatten(): Sequence = this.asSequence() // fast path