From c4791b0a5fb32d53f4b0f7fc4d02595e4c671c82 Mon Sep 17 00:00:00 2001 From: Him188 Date: Thu, 24 Dec 2020 14:54:08 +0800 Subject: [PATCH] Add recallIn --- .../kotlin/message/MessageReceipt.kt | 26 ++++++++++++++----- .../kotlin/message/data/MessageSource.kt | 26 +++++++++++++++++++ 2 files changed, 46 insertions(+), 6 deletions(-) diff --git a/mirai-core-api/src/commonMain/kotlin/message/MessageReceipt.kt b/mirai-core-api/src/commonMain/kotlin/message/MessageReceipt.kt index 574d74dbe..8ff799bd4 100644 --- a/mirai-core-api/src/commonMain/kotlin/message/MessageReceipt.kt +++ b/mirai-core-api/src/commonMain/kotlin/message/MessageReceipt.kt @@ -11,6 +11,7 @@ package net.mamoe.mirai.message +import kotlinx.coroutines.Deferred import net.mamoe.kjbb.JvmBlockingBridge import net.mamoe.mirai.Bot import net.mamoe.mirai.IMirai @@ -20,6 +21,7 @@ import net.mamoe.mirai.message.MessageReceipt.Companion.quote import net.mamoe.mirai.message.MessageReceipt.Companion.quoteReply import net.mamoe.mirai.message.data.* import net.mamoe.mirai.message.data.MessageSource.Key.quote +import net.mamoe.mirai.message.data.MessageSource.Key.recallIn import net.mamoe.mirai.utils.MiraiInternalApi /** @@ -56,26 +58,37 @@ public open class MessageReceipt @MiraiInternalApi constructor( public companion object { /** - * 撤回这条消息. [recallMessage] 或 [recallIn] 只能被调用一次. + * 撤回这条消息. * * @see IMirai.recallMessage - * @throws IllegalStateException 当此消息已经被撤回或正计划撤回时 */ @JvmBlockingBridge + @JvmStatic public suspend inline fun MessageReceipt<*>.recall() { return Mirai.recallMessage(target.bot, source) } /** - * 引用这条消息. - * @see MessageChain.quote 引用一条消息 + * 在一段时间后撤回这条消息. + * + * @see IMirai.recallMessage */ + @JvmStatic + @Suppress("DeferredIsResult") + public fun MessageReceipt<*>.recallIn(millis: Long): Deferred = this.source.recallIn(millis) + + /** + * 引用这条消息. + * @see MessageSource.quote 引用一条消息 + */ + @JvmStatic public inline fun MessageReceipt<*>.quote(): QuoteReply = this.source.quote() /** * 引用这条消息并回复. - * @see MessageChain.quote 引用一条消息 + * @see MessageSource.quote 引用一条消息 */ + @JvmStatic @JvmBlockingBridge public suspend inline fun MessageReceipt.quoteReply(message: Message): MessageReceipt { @Suppress("UNCHECKED_CAST") @@ -84,9 +97,10 @@ public open class MessageReceipt @MiraiInternalApi constructor( /** * 引用这条消息并回复. - * @see MessageChain.quote 引用一条消息 + * @see MessageSource.quote 引用一条消息 */ @JvmBlockingBridge + @JvmStatic public suspend inline fun MessageReceipt.quoteReply(message: String): MessageReceipt { return this.quoteReply(PlainText(message)) } diff --git a/mirai-core-api/src/commonMain/kotlin/message/data/MessageSource.kt b/mirai-core-api/src/commonMain/kotlin/message/data/MessageSource.kt index 478529c40..095db54a1 100644 --- a/mirai-core-api/src/commonMain/kotlin/message/data/MessageSource.kt +++ b/mirai-core-api/src/commonMain/kotlin/message/data/MessageSource.kt @@ -13,6 +13,9 @@ package net.mamoe.mirai.message.data +import kotlinx.coroutines.Deferred +import kotlinx.coroutines.async +import kotlinx.coroutines.delay import kotlinx.serialization.Serializable import net.mamoe.kjbb.JvmBlockingBridge import net.mamoe.mirai.Bot @@ -191,6 +194,29 @@ public sealed class MessageSource : Message, MessageMetadata, ConstrainSingle { @JvmBlockingBridge public suspend inline fun MessageChain.recall(): Unit = this.source.recall() + /** + * 在一段时间后撤回这条消息. + * + * @see IMirai.recallMessage + */ + @JvmStatic + @Suppress("DeferredIsResult") + public fun MessageChain.recallIn(millis: Long): Deferred = this.source.recallIn(millis) + + /** + * 在一段时间后撤回这条消息. + * + * @see IMirai.recallMessage + */ + @JvmStatic + @Suppress("DeferredIsResult") + public fun MessageSource.recallIn(millis: Long): Deferred { + return bot.async { + delay(millis) + Mirai.recallMessage(bot, this@recallIn) + } + } + /** * 判断是否是发送给群, 或从群接收的消息的消息源 */