Переглянути джерело

Blocking bridges for contacts, MessageReceipt and Bot

Him188 5 роки тому
батько
коміт
970f51fbe1

+ 2 - 1
mirai-core-api/src/commonMain/kotlin/Bot.kt

@@ -15,6 +15,7 @@
 package net.mamoe.mirai
 
 import kotlinx.coroutines.*
+import net.mamoe.kjbb.JvmBlockingBridge
 import net.mamoe.mirai.contact.*
 import net.mamoe.mirai.message.action.BotNudge
 import net.mamoe.mirai.message.action.MemberNudge
@@ -165,7 +166,7 @@ public abstract class Bot internal constructor(
      * @throws LoginFailedException 正常登录失败时抛出
      * @see alsoLogin `.apply { login() }` 捷径
      */
-    @JvmSynthetic
+    @JvmBlockingBridge
     public abstract suspend fun login()
 
     /**

+ 5 - 4
mirai-core-api/src/commonMain/kotlin/contact/Contact.kt

@@ -13,12 +13,13 @@
 package net.mamoe.mirai.contact
 
 import kotlinx.coroutines.CoroutineScope
+import net.mamoe.kjbb.JvmBlockingBridge
 import net.mamoe.mirai.*
 import net.mamoe.mirai.event.events.*
 import net.mamoe.mirai.message.MessageReceipt
+import net.mamoe.mirai.message.MessageReceipt.Companion.quote
+import net.mamoe.mirai.message.MessageReceipt.Companion.recall
 import net.mamoe.mirai.message.data.*
-import net.mamoe.mirai.message.quote
-import net.mamoe.mirai.message.recall
 import net.mamoe.mirai.utils.ExternalImage
 import net.mamoe.mirai.utils.OverFileSizeMaxException
 import net.mamoe.mirai.utils.WeakRefProperty
@@ -57,7 +58,7 @@ public interface Contact : ContactOrBot, CoroutineScope {
      *
      * @return 消息回执. 可 [引用回复][MessageReceipt.quote](仅群聊)或 [撤回][MessageReceipt.recall] 这条消息.
      */
-    @JvmSynthetic
+    @JvmBlockingBridge
     public suspend fun sendMessage(message: Message): MessageReceipt<Contact>
 
     /**
@@ -71,7 +72,7 @@ public interface Contact : ContactOrBot, CoroutineScope {
      * @throws EventCancelledException 当发送消息事件被取消时抛出
      * @throws OverFileSizeMaxException 当图片文件过大而被服务器拒绝上传时抛出. (最大大小约为 20 MB, 但 mirai 限制的大小为 30 MB)
      */
-    @JvmSynthetic
+    @JvmBlockingBridge
     public suspend fun uploadImage(image: ExternalImage): Image
 
     /**

+ 4 - 3
mirai-core-api/src/commonMain/kotlin/contact/Friend.kt

@@ -12,16 +12,17 @@
 package net.mamoe.mirai.contact
 
 import kotlinx.coroutines.CoroutineScope
+import net.mamoe.kjbb.JvmBlockingBridge
 import net.mamoe.mirai.Bot
 import net.mamoe.mirai.event.events.EventCancelledException
 import net.mamoe.mirai.event.events.FriendMessagePostSendEvent
 import net.mamoe.mirai.event.events.FriendMessagePreSendEvent
 import net.mamoe.mirai.message.FriendMessageEvent
 import net.mamoe.mirai.message.MessageReceipt
+import net.mamoe.mirai.message.MessageReceipt.Companion.recall
 import net.mamoe.mirai.message.action.FriendNudge
 import net.mamoe.mirai.message.data.Message
 import net.mamoe.mirai.message.data.isContentEmpty
-import net.mamoe.mirai.message.recall
 import net.mamoe.mirai.utils.MiraiExperimentalApi
 
 /**
@@ -70,8 +71,8 @@ public interface Friend : User, CoroutineScope {
      *
      * @return 消息回执. 可进行撤回 ([MessageReceipt.recall])
      */
-    @JvmSynthetic
-    override suspend fun sendMessage(message: Message): MessageReceipt<Friend>
+    @JvmBlockingBridge
+    public override suspend fun sendMessage(message: Message): MessageReceipt<Friend>
 
     /**
      * 创建一个 "戳一戳" 消息

+ 4 - 4
mirai-core-api/src/commonMain/kotlin/contact/Group.kt

@@ -18,11 +18,11 @@ import net.mamoe.mirai.LowLevelApi
 import net.mamoe.mirai.data.MemberInfo
 import net.mamoe.mirai.event.events.*
 import net.mamoe.mirai.message.MessageReceipt
+import net.mamoe.mirai.message.MessageReceipt.Companion.recall
 import net.mamoe.mirai.message.data.Image
 import net.mamoe.mirai.message.data.Message
 import net.mamoe.mirai.message.data.Voice
 import net.mamoe.mirai.message.data.isContentEmpty
-import net.mamoe.mirai.message.recall
 import net.mamoe.mirai.utils.ExternalImage
 import net.mamoe.mirai.utils.MiraiExperimentalApi
 import net.mamoe.mirai.utils.OverFileSizeMaxException
@@ -121,7 +121,7 @@ public interface Group : Contact, CoroutineScope {
      * @throws IllegalStateException 当机器人为群主时
      * @return 退出成功时 true; 已经退出时 false
      */
-    @JvmSynthetic
+    @JvmBlockingBridge
     public suspend fun quit(): Boolean
 
     /**
@@ -147,7 +147,7 @@ public interface Group : Contact, CoroutineScope {
      *
      * @return 消息回执. 可进行撤回 ([MessageReceipt.recall])
      */
-    @JvmSynthetic
+    @JvmBlockingBridge
     public override suspend fun sendMessage(message: Message): MessageReceipt<Group>
 
 
@@ -162,7 +162,7 @@ public interface Group : Contact, CoroutineScope {
      * @throws EventCancelledException 当发送消息事件被取消
      * @throws OverFileSizeMaxException 当图片文件过大而被服务器拒绝上传时. (最大大小约为 20 MB)
      */
-    @JvmSynthetic
+    @JvmBlockingBridge
     public override suspend fun uploadImage(image: ExternalImage): Image
 
     /**

+ 6 - 5
mirai-core-api/src/commonMain/kotlin/contact/Member.kt

@@ -11,16 +11,17 @@
 
 package net.mamoe.mirai.contact
 
+import net.mamoe.kjbb.JvmBlockingBridge
 import net.mamoe.mirai.Bot
 import net.mamoe.mirai.JavaFriendlyAPI
 import net.mamoe.mirai.event.events.*
 import net.mamoe.mirai.getFriendOrNull
 import net.mamoe.mirai.message.MessageReceipt
+import net.mamoe.mirai.message.MessageReceipt.Companion.recall
 import net.mamoe.mirai.message.action.MemberNudge
 import net.mamoe.mirai.message.action.Nudge
 import net.mamoe.mirai.message.data.Message
 import net.mamoe.mirai.message.data.isContentEmpty
-import net.mamoe.mirai.message.recall
 import net.mamoe.mirai.utils.MiraiExperimentalApi
 import net.mamoe.mirai.utils.WeakRefProperty
 import kotlin.time.Duration
@@ -108,7 +109,7 @@ public interface Member : User {
      *
      * @throws PermissionDeniedException 无权限修改时抛出
      */
-    @JvmSynthetic
+    @JvmBlockingBridge
     public suspend fun mute(durationSeconds: Int)
 
     /**
@@ -122,7 +123,7 @@ public interface Member : User {
      *
      * @throws PermissionDeniedException 无权限修改时抛出
      */
-    @JvmSynthetic
+    @JvmBlockingBridge
     public suspend fun unmute()
 
     /**
@@ -133,7 +134,7 @@ public interface Member : User {
      * @see MemberLeaveEvent.Kick 成员被踢出事件.
      * @throws PermissionDeniedException 无权限修改时
      */
-    @JvmSynthetic
+    @JvmBlockingBridge
     public suspend fun kick(message: String = "")
 
     /**
@@ -155,7 +156,7 @@ public interface Member : User {
      *
      * @return 消息回执. 可进行撤回 ([MessageReceipt.recall])
      */
-    @JvmSynthetic
+    @JvmBlockingBridge
     public override suspend fun sendMessage(message: Message): MessageReceipt<Member>
 
     /**

+ 4 - 3
mirai-core-api/src/commonMain/kotlin/contact/User.kt

@@ -12,15 +12,16 @@
 package net.mamoe.mirai.contact
 
 import kotlinx.coroutines.CoroutineScope
+import net.mamoe.kjbb.JvmBlockingBridge
 import net.mamoe.mirai.Bot
 import net.mamoe.mirai.event.events.*
 import net.mamoe.mirai.message.MessageReceipt
+import net.mamoe.mirai.message.MessageReceipt.Companion.recall
 import net.mamoe.mirai.message.action.FriendNudge
 import net.mamoe.mirai.message.action.Nudge
 import net.mamoe.mirai.message.data.Image
 import net.mamoe.mirai.message.data.Message
 import net.mamoe.mirai.message.data.isContentEmpty
-import net.mamoe.mirai.message.recall
 import net.mamoe.mirai.utils.ExternalImage
 import net.mamoe.mirai.utils.MiraiExperimentalApi
 import net.mamoe.mirai.utils.OverFileSizeMaxException
@@ -78,7 +79,7 @@ public interface User : Contact, CoroutineScope {
      *
      * @return 消息回执. 可进行撤回 ([MessageReceipt.recall])
      */
-    @JvmSynthetic
+    @JvmBlockingBridge
     public override suspend fun sendMessage(message: Message): MessageReceipt<User>
 
     /**
@@ -100,7 +101,7 @@ public interface User : Contact, CoroutineScope {
      * @throws EventCancelledException 当发送消息事件被取消
      * @throws OverFileSizeMaxException 当图片文件过大而被服务器拒绝上传时. (最大大小约为 20 MB)
      */
-    @JvmSynthetic
+    @JvmBlockingBridge
     public override suspend fun uploadImage(image: ExternalImage): Image
 }
 

+ 37 - 38
mirai-core-api/src/commonMain/kotlin/message/MessageReceipt.kt

@@ -11,9 +11,12 @@
 
 package net.mamoe.mirai.message
 
+import net.mamoe.kjbb.JvmBlockingBridge
 import net.mamoe.mirai.IMirai
 import net.mamoe.mirai.Mirai
 import net.mamoe.mirai.contact.*
+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.utils.MiraiExperimentalApi
@@ -55,61 +58,59 @@ public open class MessageReceipt<out C : Contact> @MiraiExperimentalApi("The con
      * 是否为发送给群的消息的回执
      */
     public val isToGroup: Boolean get() = target is Group
-}
 
-/**
- * 撤回这条消息. [recallMessage] 或 [recallIn] 只能被调用一次.
- *
- * @see IMirai.recallMessage
- * @throws IllegalStateException 当此消息已经被撤回或正计划撤回时
- */
-public suspend inline fun MessageReceipt<*>.recall() {
-    return Mirai.recallMessage(target.bot, source)
-}
+    public companion object {
+        /**
+         * 撤回这条消息. [recallMessage] 或 [recallIn] 只能被调用一次.
+         *
+         * @see IMirai.recallMessage
+         * @throws IllegalStateException 当此消息已经被撤回或正计划撤回时
+         */
+        @JvmBlockingBridge
+        public suspend inline fun MessageReceipt<*>.recall() {
+            return Mirai.recallMessage(target.bot, source)
+        }
 
-/**
- * 引用这条消息.
- * @see MessageChain.quote 引用一条消息
- */
-@JvmSynthetic
-public inline fun MessageReceipt<*>.quote(): QuoteReply = this.source.quote()
+        /**
+         * 引用这条消息.
+         * @see MessageChain.quote 引用一条消息
+         */
+        public inline fun MessageReceipt<*>.quote(): QuoteReply = this.source.quote()
 
-/**
- * 引用这条消息并回复.
- * @see MessageChain.quote 引用一条消息
- */
-@JvmSynthetic
-public suspend inline fun <C : Contact> MessageReceipt<C>.quoteReply(message: Message): MessageReceipt<C> {
-    @Suppress("UNCHECKED_CAST")
-    return target.sendMessage(this.quote() + message) as MessageReceipt<C>
-}
+        /**
+         * 引用这条消息并回复.
+         * @see MessageChain.quote 引用一条消息
+         */
+        @JvmBlockingBridge
+        public suspend inline fun <C : Contact> MessageReceipt<C>.quoteReply(message: Message): MessageReceipt<C> {
+            @Suppress("UNCHECKED_CAST")
+            return target.sendMessage(this.quote() + message) as MessageReceipt<C>
+        }
 
-/**
- * 引用这条消息并回复.
- * @see MessageChain.quote 引用一条消息
- */
-@JvmSynthetic
-public suspend inline fun <C : Contact> MessageReceipt<C>.quoteReply(message: String): MessageReceipt<C> {
-    return this.quoteReply(PlainText(message))
+        /**
+         * 引用这条消息并回复.
+         * @see MessageChain.quote 引用一条消息
+         */
+        @JvmBlockingBridge
+        public suspend inline fun <C : Contact> MessageReceipt<C>.quoteReply(message: String): MessageReceipt<C> {
+            return this.quoteReply(PlainText(message))
+        }
+    }
 }
 
-
 /**
  * 获取源消息 [MessageSource.ids]
  *
  * @see MessageSource.ids
  */
-@get:JvmSynthetic
 public inline val MessageReceipt<*>.sourceIds: IntArray
     get() = this.source.ids
 
-
 /**
  * 获取源消息 [MessageSource.internalIds]
  *
  * @see MessageSource.ids
  */
-@get:JvmSynthetic
 public inline val MessageReceipt<*>.sourceInternalIds: IntArray
     get() = this.source.internalIds
 
@@ -118,7 +119,5 @@ public inline val MessageReceipt<*>.sourceInternalIds: IntArray
  *
  * @see MessageSource.time
  */
-@get:JvmSynthetic
 public inline val MessageReceipt<*>.sourceTime: Int
     get() = this.source.time
-

+ 1 - 3
mirai-core/src/commonMain/kotlin/contact/FriendImpl.kt

@@ -93,7 +93,6 @@ internal class FriendImpl(
     override val remark: String
         get() = friendInfo.remark
 
-    @JvmSynthetic
     @Suppress("DuplicatedCode")
     override suspend fun sendMessage(message: Message): MessageReceipt<Friend> {
         require(message.isContentNotEmpty()) { "message is empty" }
@@ -108,8 +107,7 @@ internal class FriendImpl(
 
     override fun toString(): String = "Friend($id)"
 
-    @JvmSynthetic
-    @Suppress("INVISIBLE_MEMBER", "INVISIBLE_REFERENCE")
+   @Suppress("INVISIBLE_MEMBER", "INVISIBLE_REFERENCE")
     override suspend fun uploadImage(image: ExternalImage): Image = try {
         if (image.input is net.mamoe.mirai.utils.internal.DeferredReusableInput) {
             image.input.init(bot.configuration.fileCacheStrategy)

+ 0 - 2
mirai-core/src/commonMain/kotlin/contact/GroupImpl.kt

@@ -268,7 +268,6 @@ internal class GroupImpl(
         return members.firstOrNull { it.id == id }
     }
 
-    @JvmSynthetic
     override suspend fun sendMessage(message: Message): MessageReceipt<Group> {
         require(message.isContentNotEmpty()) { "message is empty" }
         check(!isBotMuted) { throw BotIsBeingMutedException(this) }
@@ -381,7 +380,6 @@ internal class GroupImpl(
 
     @Suppress("DEPRECATION", "INVISIBLE_MEMBER", "INVISIBLE_REFERENCE")
     @OptIn(ExperimentalTime::class)
-    @JvmSynthetic
     override suspend fun uploadImage(image: ExternalImage): Image = try {
         if (image.input is net.mamoe.mirai.utils.internal.DeferredReusableInput) {
             image.input.init(bot.configuration.fileCacheStrategy)