From 346aecd68b433b46a8cbe84d731e720e13e23b58 Mon Sep 17 00:00:00 2001 From: Him188 Date: Sat, 9 May 2020 22:23:02 +0800 Subject: [PATCH] Enable progressiveMode --- mirai-core-qqandroid/build.gradle.kts | 1 + mirai-core/build.gradle.kts | 1 + .../event/MessageSubscribersBuilder.kt | 71 ++++++++++++++----- 3 files changed, 55 insertions(+), 18 deletions(-) diff --git a/mirai-core-qqandroid/build.gradle.kts b/mirai-core-qqandroid/build.gradle.kts index 2778938e5..b20a1ff8b 100644 --- a/mirai-core-qqandroid/build.gradle.kts +++ b/mirai-core-qqandroid/build.gradle.kts @@ -40,6 +40,7 @@ kotlin { all { languageSettings.enableLanguageFeature("InlineClasses") languageSettings.useExperimentalAnnotation("kotlin.Experimental") + languageSettings.progressiveMode = true dependencies { api(project(":mirai-core")) diff --git a/mirai-core/build.gradle.kts b/mirai-core/build.gradle.kts index eb32ce509..dd5041424 100644 --- a/mirai-core/build.gradle.kts +++ b/mirai-core/build.gradle.kts @@ -41,6 +41,7 @@ kotlin { all { languageSettings.enableLanguageFeature("InlineClasses") languageSettings.useExperimentalAnnotation("kotlin.Experimental") + languageSettings.progressiveMode = true } commonMain { diff --git a/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/event/MessageSubscribersBuilder.kt b/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/event/MessageSubscribersBuilder.kt index 80677c728..89e6c3dc2 100644 --- a/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/event/MessageSubscribersBuilder.kt +++ b/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/event/MessageSubscribersBuilder.kt @@ -97,12 +97,14 @@ open class MessageSubscribersBuilder( /** 启动这个监听器, 在满足条件时回复原消息 */ @MessageDsl - open infix fun ListeningFilter.reply(toReply: String): Ret = content(filter) { reply(toReply);stub } + open infix fun ListeningFilter.reply(toReply: String): Ret = + content(filter) { reply(toReply);this@MessageSubscribersBuilder.stub } /** 启动这个监听器, 在满足条件时回复原消息 */ @MessageDsl - open infix fun ListeningFilter.reply(message: Message): Ret = content(filter) { reply(message);stub } + open infix fun ListeningFilter.reply(message: Message): Ret = + content(filter) { reply(message);this@MessageSubscribersBuilder.stub } /** 启动这个监听器, 在满足条件时回复原消息 */ @JvmName("reply3") @@ -117,22 +119,22 @@ open class MessageSubscribersBuilder( /** 启动这个监听器, 在满足条件时回复原消息 */ @MessageDsl open infix fun ListeningFilter.reply(replier: (@MessageDsl suspend M.(String) -> Any?)): Ret = - content(filter) { executeAndReply(this, replier) } + content(filter) { this@MessageSubscribersBuilder.executeAndReply(this, replier) } /** 启动这个监听器, 在满足条件时引用回复原消息 */ @MessageDsl open infix fun ListeningFilter.quoteReply(toReply: String): Ret = - content(filter) { quoteReply(toReply);stub } + content(filter) { quoteReply(toReply);this@MessageSubscribersBuilder.stub } /** 启动这个监听器, 在满足条件时引用回复原消息 */ @MessageDsl open infix fun ListeningFilter.quoteReply(toReply: Message): Ret = - content(filter) { quoteReply(toReply);stub } + content(filter) { quoteReply(toReply);this@MessageSubscribersBuilder.stub } /** 启动这个监听器, 在满足条件时执行 [replier] 并引用回复原消息 */ @MessageDsl open infix fun ListeningFilter.quoteReply(replier: (@MessageDsl suspend M.(String) -> Any?)): Ret = - content(filter) { executeAndQuoteReply(this, replier) } + content(filter) { this@MessageSubscribersBuilder.executeAndQuoteReply(this, replier) } /** 无任何触发条件, 每次收到消息都执行 [onEvent] */ @MessageDsl @@ -158,7 +160,7 @@ open class MessageSubscribersBuilder( @JvmSynthetic @JvmName("findingExtension") infix fun Regex.finding(block: @MessageDsl suspend M.(MatchResult) -> R): Ret = - always { content -> this@finding.find(content)?.let { block(this, it) } ?: stub } + always { content -> this@finding.find(content)?.let { block(this, it) } ?: this@MessageSubscribersBuilder.stub } /** * [消息内容][Message.contentToString] `==` [equals] @@ -313,7 +315,12 @@ open class MessageSubscribersBuilder( /** 如果 [mapper] 返回值非空, 就执行 [onEvent] */ @MessageDsl open fun mapping(mapper: M.(String) -> N?, onEvent: @MessageDsl suspend M.(N) -> R): Ret = - always { onEvent.invoke(this, mapper(this, message.contentToString()) ?: return@always stub) } + always { + onEvent.invoke( + this, + mapper(this, message.contentToString()) ?: return@always this@MessageSubscribersBuilder.stub + ) + } /** 如果 [filter] 返回 `true` */ @MessageDsl @@ -327,7 +334,14 @@ open class MessageSubscribersBuilder( /** [消息内容][Message.contentToString]可由正则表达式匹配([Regex.matchEntire]), 就执行 `onEvent` */ @MessageDsl fun matching(regex: Regex, onEvent: @MessageDsl suspend M.(MatchResult) -> Unit): Ret = - always { executeAndReply(this) { onEvent.invoke(this, regex.matchEntire(it) ?: return@always stub) } } + always { + this@MessageSubscribersBuilder.executeAndReply(this) { + onEvent.invoke( + this, + regex.matchEntire(it) ?: return@always this@MessageSubscribersBuilder.stub + ) + } + } /** [消息内容][Message.contentToString]可由正则表达式查找([Regex.find]) */ @MessageDsl @@ -336,13 +350,20 @@ open class MessageSubscribersBuilder( /** [消息内容][Message.contentToString]可由正则表达式查找([Regex.find]), 就执行 `onEvent` */ @MessageDsl fun finding(regex: Regex, onEvent: @MessageDsl suspend M.(MatchResult) -> Unit): Ret = - always { executeAndReply(this) { onEvent.invoke(this, regex.find(it) ?: return@always stub) } } + always { + this@MessageSubscribersBuilder.executeAndReply(this) { + onEvent.invoke( + this, + regex.find(it) ?: return@always this@MessageSubscribersBuilder.stub + ) + } + } /** [消息内容][Message.contentToString]包含 [this] 则回复 [reply] */ @MessageDsl open infix fun String.containsReply(reply: String): Ret = - content({ this@containsReply in it }, { reply(reply); stub }) + content({ this@containsReply in it }, { reply(reply); this@MessageSubscribersBuilder.stub }) /** * [消息内容][Message.contentToString]包含 [this] 则执行 [replier] 并将其返回值回复给发信对象. @@ -353,7 +374,7 @@ open class MessageSubscribersBuilder( */ @MessageDsl open infix fun String.containsReply(replier: @MessageDsl suspend M.(String) -> Any?): Ret = - content({ this@containsReply in it }, { executeAndReply(this, replier) }) + content({ this@containsReply in it }, { this@MessageSubscribersBuilder.executeAndReply(this, replier) }) /** * [消息内容][Message.contentToString]可由正则表达式匹配([Regex.matchEntire]), 则执行 [replier] 并将其返回值回复给发信对象. @@ -364,7 +385,14 @@ open class MessageSubscribersBuilder( */ @MessageDsl open infix fun Regex.matchingReply(replier: @MessageDsl suspend M.(MatchResult) -> Any?): Ret = - always { executeAndReply(this) { replier.invoke(this, matchEntire(it) ?: return@always stub) } } + always { + this@MessageSubscribersBuilder.executeAndReply(this) { + replier.invoke( + this, + matchEntire(it) ?: return@always this@MessageSubscribersBuilder.stub + ) + } + } /** * [消息内容][Message.contentToString]可由正则表达式查找([Regex.find]), 则执行 [replier] 并将其返回值回复给发信对象. @@ -375,7 +403,14 @@ open class MessageSubscribersBuilder( */ @MessageDsl open infix fun Regex.findingReply(replier: @MessageDsl suspend M.(MatchResult) -> Any?): Ret = - always { executeAndReply(this) { replier.invoke(this, this@findingReply.find(it) ?: return@always stub) } } + always { + this@MessageSubscribersBuilder.executeAndReply(this) { + replier.invoke( + this, + this@findingReply.find(it) ?: return@always this@MessageSubscribersBuilder.stub + ) + } + } /** @@ -386,7 +421,7 @@ open class MessageSubscribersBuilder( open infix fun String.endsWithReply(replier: @MessageDsl suspend M.(String) -> Any?): Ret { val toCheck = this.trimEnd() return content({ it.trim().endsWith(toCheck) }, { - executeAndReply(this) { replier(this, it.trim().removeSuffix(toCheck)) } + this@MessageSubscribersBuilder.executeAndReply(this) { replier(this, it.trim().removeSuffix(toCheck)) } }) } @@ -394,14 +429,14 @@ open class MessageSubscribersBuilder( @MessageDsl open infix fun String.reply(reply: String): Ret { val toCheck = this.trim() - return content({ it.trim() == toCheck }, { reply(reply);stub }) + return content({ it.trim() == toCheck }, { reply(reply);this@MessageSubscribersBuilder.stub }) } /** 当发送的消息内容为 [this] 就回复 [reply] */ @MessageDsl open infix fun String.reply(reply: Message): Ret { val toCheck = this.trim() - return content({ it.trim() == toCheck }, { reply(reply);stub }) + return content({ it.trim() == toCheck }, { reply(reply);this@MessageSubscribersBuilder.stub }) } /** 当发送的消息内容为 [this] 就执行并回复 [replier] 的返回值 */ @@ -410,7 +445,7 @@ open class MessageSubscribersBuilder( val toCheck = this.trim() return content({ it.trim() == toCheck }, { @Suppress("DSL_SCOPE_VIOLATION_WARNING") - executeAndReply(this) { replier(this, it.trim()) } + this@MessageSubscribersBuilder.executeAndReply(this) { replier(this, it.trim()) } }) }