diff --git a/mirai-core-api/src/commonMain/kotlin/event/MessageSubscribersBuilder.kt b/mirai-core-api/src/commonMain/kotlin/event/MessageSubscribersBuilder.kt index b1c00cc76..41912730b 100644 --- a/mirai-core-api/src/commonMain/kotlin/event/MessageSubscribersBuilder.kt +++ b/mirai-core-api/src/commonMain/kotlin/event/MessageSubscribersBuilder.kt @@ -19,6 +19,7 @@ import net.mamoe.mirai.contact.* import net.mamoe.mirai.event.events.* import net.mamoe.mirai.event.internal.* import net.mamoe.mirai.message.data.* +import net.mamoe.mirai.message.data.MessageSource.Key.quote /** @@ -92,13 +93,13 @@ public open class MessageSubscribersBuilder Any?): RR { when (val message = replier(m, m.message.contentToString())) { - is Message -> m.reply(message) + is Message -> m.subject.sendMessage(message) is Unit -> Unit - else -> m.reply(message.toString()) + else -> m.subject.sendMessage(message.toString()) } return stub } @@ -468,9 +469,9 @@ public open class MessageSubscribersBuilder Any?): RR { when (val message = replier(m, m.message.contentToString())) { - is Message -> m.quoteReply(message) + is Message -> m.subject.sendMessage(m.message.quote() + message) is Unit -> Unit - else -> m.quoteReply(message.toString()) + else -> m.subject.sendMessage(m.message.quote() + message.toString()) } return stub } diff --git a/mirai-core-api/src/commonMain/kotlin/event/events/message.kt b/mirai-core-api/src/commonMain/kotlin/event/events/message.kt index d7998e1d0..f35344d82 100644 --- a/mirai-core-api/src/commonMain/kotlin/event/events/message.kt +++ b/mirai-core-api/src/commonMain/kotlin/event/events/message.kt @@ -32,6 +32,7 @@ import net.mamoe.mirai.utils.ExternalResource.Companion.sendAsImageTo import net.mamoe.mirai.utils.ExternalResource.Companion.uploadAsImage import java.io.File import java.io.InputStream +import kotlin.DeprecationLevel.ERROR import kotlin.internal.InlineOnly @@ -359,6 +360,7 @@ public sealed class MessageRecallEvent : BotEvent, AbstractEvent() { ) : MessageRecallEvent(), GroupOperableEvent, Packet { override val author: NormalMember? get() = group[authorId] + @Suppress("DuplicatedCode") override fun equals(other: Any?): Boolean { if (this === other) return true if (javaClass != other?.javaClass) return false @@ -462,6 +464,7 @@ public sealed class ImageUploadEvent : BotEvent, BotActiveEvent, AbstractEvent() * * @see MessageEvent */ +@Suppress("DEPRECATION") public class FriendMessageEvent constructor( public override val sender: Friend, public override val message: MessageChain, @@ -487,6 +490,7 @@ public class FriendMessageEvent constructor( * * @see MessageEvent */ +@Suppress("DEPRECATION") public class OtherClientMessageEvent constructor( public override val client: OtherClient, public override val message: MessageChain, @@ -626,22 +630,30 @@ public interface UserMessageEvent : MessageEvent { public override val subject: User } +@Suppress("OverridingDeprecatedMember") @MiraiInternalApi public abstract class AbstractMessageEvent : MessageEvent, AbstractEvent() { + @Deprecated(DEPRECATED_MESSAGE_EXTENSIONS, ReplaceWith("subject.sendMessage(message)"), ERROR) public override suspend fun reply(message: Message): MessageReceipt = subject.sendMessage(message.asMessageChain()) + @Deprecated(DEPRECATED_MESSAGE_EXTENSIONS, ReplaceWith("subject.sendMessage(plain)"), ERROR) public override suspend fun reply(plain: String): MessageReceipt = subject.sendMessage(PlainText(plain).asMessageChain()) + @Deprecated(DEPRECATED_MESSAGE_EXTENSIONS, ReplaceWith("this.uploadAsImage(subject)"), ERROR) public override suspend fun ExternalResource.uploadAsImage(): Image = this.uploadAsImage(subject) + @Deprecated(DEPRECATED_MESSAGE_EXTENSIONS, ReplaceWith("this.sendAsImageTo(subject)"), ERROR) public override suspend fun ExternalResource.sendAsImage(): MessageReceipt = this.sendAsImageTo(subject) + @Deprecated(DEPRECATED_MESSAGE_EXTENSIONS, ReplaceWith("subject.sendMessage(message)"), ERROR) public override suspend fun Image.send(): MessageReceipt = this.sendTo(subject) + @Deprecated(DEPRECATED_MESSAGE_EXTENSIONS, ReplaceWith("subject.sendMessage(message)"), ERROR) public override suspend fun Message.send(): MessageReceipt = this.sendTo(subject) + @Deprecated(DEPRECATED_MESSAGE_EXTENSIONS, ReplaceWith("subject.sendMessage(message)"), ERROR) public override suspend fun String.send(): MessageReceipt = PlainText(this).sendTo(subject) // region 引用回复 @@ -650,14 +662,40 @@ public abstract class AbstractMessageEvent : MessageEvent, AbstractEvent() { * 对于好友消息事件, 这个方法将会给好友 ([subject]) 发送消息 * 对于群消息事件, 这个方法将会给群 ([subject]) 发送消息 */ - public override suspend fun quoteReply(message: MessageChain): MessageReceipt = - reply(this.message.quote() + message) + @Deprecated( + DEPRECATED_MESSAGE_EXTENSIONS, + ReplaceWith( + "subject.sendMessage(message.quote() + msg)", + "net.mamoe.mirai.message.data.MessageSource.Key.quote" + ), + ERROR + ) + public override suspend fun quoteReply(msg: MessageChain): MessageReceipt = + subject.sendMessage(this.message.quote() + msg) - public override suspend fun quoteReply(message: Message): MessageReceipt = - reply(this.message.quote() + message) + @Deprecated( + DEPRECATED_MESSAGE_EXTENSIONS, + ReplaceWith( + "subject.sendMessage(message.quote() + msg)", + "net.mamoe.mirai.message.data.MessageSource.Key.quote" + ), + ERROR + ) + public override suspend fun quoteReply(msg: Message): MessageReceipt = + subject.sendMessage(this.message.quote() + msg) - public override suspend fun quoteReply(plain: String): MessageReceipt = reply(this.message.quote() + plain) + @Deprecated( + DEPRECATED_MESSAGE_EXTENSIONS, + ReplaceWith( + "subject.sendMessage(message.quote() + plain)", + "net.mamoe.mirai.message.data.MessageSource.Key.quote" + ), + ERROR + ) + public override suspend fun quoteReply(plain: String): MessageReceipt = + subject.sendMessage(this.message.quote() + plain) + @Deprecated(DEPRECATED_MESSAGE_EXTENSIONS, ReplaceWith("this.target == bot.id"), ERROR) public override fun At.isBot(): Boolean = target == bot.id @@ -665,27 +703,76 @@ public abstract class AbstractMessageEvent : MessageEvent, AbstractEvent() { * 获取图片下载链接 * @return "http://gchat.qpic.cn/gchatpic_new/..." */ + @Deprecated( + DEPRECATED_MESSAGE_EXTENSIONS, + ReplaceWith("image.queryUrl()", "net.mamoe.mirai.message.data.Image.Key.queryUrl"), + ERROR + ) public override suspend fun Image.url(): String = this@url.queryUrl() // region 上传图片 + @Deprecated( + DEPRECATED_MESSAGE_EXTENSIONS, + ReplaceWith("subject.uploadImage(image)", "net.mamoe.mirai.contact.Contact.Companion.uploadImage"), + ERROR, + ) public override suspend fun uploadImage(image: InputStream): Image = subject.uploadImage(image) + + @Deprecated( + DEPRECATED_MESSAGE_EXTENSIONS, + ReplaceWith("subject.uploadImage(image)", "net.mamoe.mirai.contact.Contact.Companion.uploadImage"), + ERROR, + ) public override suspend fun uploadImage(image: File): Image = subject.uploadImage(image) // endregion // region 发送图片 + @Deprecated( + DEPRECATED_MESSAGE_EXTENSIONS, + ReplaceWith("subject.uploadImage(image)", "net.mamoe.mirai.contact.Contact.Companion.sendImage"), + ERROR, + ) public override suspend fun sendImage(image: InputStream): MessageReceipt = subject.sendImage(image) + + @Deprecated( + DEPRECATED_MESSAGE_EXTENSIONS, + ReplaceWith("subject.uploadImage(image)", "net.mamoe.mirai.contact.Contact.Companion.uploadImage"), + ERROR, + ) public override suspend fun sendImage(image: File): MessageReceipt = subject.sendImage(image) // endregion // region 上传图片 (扩展) + @Deprecated( + DEPRECATED_MESSAGE_EXTENSIONS, + ReplaceWith("this.sendAsImageTo(subject)", "net.mamoe.mirai.utils.ExternalResource.Companion.uploadAsImage"), + ERROR, + ) public override suspend fun InputStream.uploadAsImage(): Image = uploadAsImage(subject) + + @Deprecated( + DEPRECATED_MESSAGE_EXTENSIONS, + ReplaceWith("this.sendAsImageTo(subject)", "net.mamoe.mirai.utils.ExternalResource.Companion.uploadAsImage"), + ERROR, + ) public override suspend fun File.uploadAsImage(): Image = uploadAsImage(subject) // endregion 上传图片 (扩展) // region 发送图片 (扩展) + @Deprecated( + DEPRECATED_MESSAGE_EXTENSIONS, + ReplaceWith("this.sendAsImageTo(subject)", "net.mamoe.mirai.utils.ExternalResource.Companion.sendAsImageTo"), + ERROR, + ) public override suspend fun InputStream.sendAsImage(): MessageReceipt = sendAsImageTo(subject) + + @Deprecated( + DEPRECATED_MESSAGE_EXTENSIONS, + ReplaceWith("this.sendAsImageTo(subject)", "net.mamoe.mirai.utils.ExternalResource.Companion.sendAsImageTo"), + ERROR, + ) public override suspend fun File.sendAsImage(): MessageReceipt = sendAsImageTo(subject) // endregion 发送图片 (扩展) @@ -703,7 +790,7 @@ public abstract class AbstractMessageEvent : MessageEvent, AbstractEvent() { * * @see isContextIdenticalWith 判断语境是否相同 */ -@Suppress("DEPRECATION_ERROR") +@Suppress("DEPRECATION") public interface MessageEvent : Event, Packet, BotEvent, MessageEventExtensions { /** @@ -751,8 +838,17 @@ public interface MessageEvent : Event, Packet, BotEvent, MessageEventExtensions< public val source: OnlineMessageSource.Incoming get() = message.source as OnlineMessageSource.Incoming } +internal const val DEPRECATED_MESSAGE_EXTENSIONS = """ + MessageEvent 的扩展已被弃用. + Kotlin 编译器在编译这些扩展的时候很容易出问题, 而且这些扩展有泛型冲突. + 在 Kotlin 支持多个接收者的函数前 mirai 不提供消息事件里的扩展. +""" + /** 消息事件的扩展函数 */ -@Suppress("UNCHECKED_CAST") + +@Deprecated(DEPRECATED_MESSAGE_EXTENSIONS) +@Suppress("UNCHECKED_CAST", "DEPRECATION") +@PlannedRemoval("2.0-RC") public interface MessageEventExtensions : MessageEventPlatformExtensions { @@ -763,26 +859,33 @@ public interface MessageEventExtensions + @Deprecated(DEPRECATED_MESSAGE_EXTENSIONS, ReplaceWith("subject.sendMessage(plain)"), ERROR) @JvmBlockingBridge public suspend fun reply(plain: String): MessageReceipt // endregion + @Deprecated(DEPRECATED_MESSAGE_EXTENSIONS, ReplaceWith("this.uploadAsImage(subject)"), ERROR) @JvmSynthetic public suspend fun ExternalResource.uploadAsImage(): Image + @Deprecated(DEPRECATED_MESSAGE_EXTENSIONS, ReplaceWith("this.sendAsImageTo(subject)"), ERROR) @JvmSynthetic public suspend fun ExternalResource.sendAsImage(): MessageReceipt + @Deprecated(DEPRECATED_MESSAGE_EXTENSIONS, ReplaceWith("subject.sendMessage(message)"), ERROR) @JvmSynthetic public suspend fun Image.send(): MessageReceipt + @Deprecated(DEPRECATED_MESSAGE_EXTENSIONS, ReplaceWith("subject.sendMessage(message)"), ERROR) @JvmSynthetic public suspend fun Message.send(): MessageReceipt + @Deprecated(DEPRECATED_MESSAGE_EXTENSIONS, ReplaceWith("subject.sendMessage(message)"), ERROR) @JvmSynthetic public suspend fun String.send(): MessageReceipt @@ -792,15 +895,40 @@ public interface MessageEventExtensions + public suspend fun quoteReply(msg: MessageChain): MessageReceipt + @Deprecated( + DEPRECATED_MESSAGE_EXTENSIONS, + ReplaceWith( + "subject.sendMessage(message.quote() + msg)", + "net.mamoe.mirai.message.data.MessageSource.Key.quote" + ), + ERROR + ) @JvmBlockingBridge - public suspend fun quoteReply(message: Message): MessageReceipt + public suspend fun quoteReply(msg: Message): MessageReceipt + @Deprecated( + DEPRECATED_MESSAGE_EXTENSIONS, + ReplaceWith( + "subject.sendMessage(message.quote() + plain)", + "net.mamoe.mirai.message.data.MessageSource.Key.quote" + ), + ERROR + ) @JvmBlockingBridge public suspend fun quoteReply(plain: String): MessageReceipt + @Deprecated(DEPRECATED_MESSAGE_EXTENSIONS, ReplaceWith("this.target == bot.id"), ERROR) @JvmSynthetic public fun At.isBot(): Boolean @@ -809,16 +937,21 @@ public interface MessageEventExtensions { public val subject: TSubject public val sender: TSender @@ -827,33 +960,73 @@ public interface MessageEventPlatformExtensions + @Deprecated( + DEPRECATED_MESSAGE_EXTENSIONS, + ReplaceWith("subject.uploadImage(image)", "net.mamoe.mirai.contact.Contact.Companion.uploadImage"), + ERROR, + ) @JvmBlockingBridge public suspend fun sendImage(image: File): MessageReceipt // endregion // region 上传图片 (扩展) @JvmSynthetic + @Deprecated( + DEPRECATED_MESSAGE_EXTENSIONS, + ReplaceWith("this.sendAsImageTo(subject)", "net.mamoe.mirai.utils.ExternalResource.Companion.uploadAsImage"), + ERROR, + ) public suspend fun InputStream.uploadAsImage(): Image + @Deprecated( + DEPRECATED_MESSAGE_EXTENSIONS, + ReplaceWith("this.sendAsImageTo(subject)", "net.mamoe.mirai.utils.ExternalResource.Companion.uploadAsImage"), + ERROR, + ) @JvmSynthetic public suspend fun File.uploadAsImage(): Image // endregion 上传图片 (扩展) // region 发送图片 (扩展) + @Deprecated( + DEPRECATED_MESSAGE_EXTENSIONS, + ReplaceWith("this.sendAsImageTo(subject)", "net.mamoe.mirai.utils.ExternalResource.Companion.sendAsImageTo"), + ERROR, + ) @JvmSynthetic public suspend fun InputStream.sendAsImage(): MessageReceipt + @Deprecated( + DEPRECATED_MESSAGE_EXTENSIONS, + ReplaceWith("this.sendAsImageTo(subject)", "net.mamoe.mirai.utils.ExternalResource.Companion.sendAsImageTo"), + ERROR, + ) @JvmSynthetic public suspend fun File.sendAsImage(): MessageReceipt // endregion 发送图片 (扩展) diff --git a/mirai-core-api/src/commonMain/kotlin/event/select.kt b/mirai-core-api/src/commonMain/kotlin/event/select.kt index 07dd1ffcb..55ff69c80 100644 --- a/mirai-core-api/src/commonMain/kotlin/event/select.kt +++ b/mirai-core-api/src/commonMain/kotlin/event/select.kt @@ -14,6 +14,7 @@ package net.mamoe.mirai.event import kotlinx.coroutines.* import net.mamoe.mirai.event.events.MessageEvent import net.mamoe.mirai.message.data.Message +import net.mamoe.mirai.message.data.MessageSource.Key.quote import net.mamoe.mirai.message.data.PlainText import net.mamoe.mirai.message.isContextIdenticalWith import net.mamoe.mirai.message.nextMessage @@ -25,7 +26,7 @@ import net.mamoe.mirai.utils.MiraiExperimentalApi * * 创建的所有事件监听器都会判断发送人信息 ([isContextIdenticalWith]), 监听之后的所有消息. * - * [selectBuilder] DSL 类似于 [CoroutineScope.subscribeMessages] 的 DSL, 屏蔽了一些 `reply` DSL 以确保类型安全 + * [selectBuilder] DSL 类似于 [EventChannel.subscribeMessages] 的 DSL, 屏蔽了一些 `reply` DSL 以确保类型安全 * * ```kotlin * reply("开启复读模式") @@ -83,7 +84,7 @@ public suspend inline fun T.selectMessagesUnit( * * 创建的所有事件监听器都会判断发送人信息 ([isContextIdenticalWith]), 监听之后的所有消息. * - * [selectBuilder] DSL 类似于 [CoroutineScope.subscribeMessages] 的 DSL, 屏蔽了一些 `reply` DSL 以确保类型安全 + * [selectBuilder] DSL 类似于 [EventChannel.subscribeMessages] 的 DSL, 屏蔽了一些 `reply` DSL 以确保类型安全 * * ```kotlin * val value: String = selectMessages { @@ -117,7 +118,7 @@ public suspend inline fun T.selectMessages( /** * [selectMessages] 时的 DSL 构建器. * - * 它是特殊化的消息监听 ([CoroutineScope.subscribeMessages]) DSL, 屏蔽了一些 `reply` DSL 以确保作用域安全性 + * 它是特殊化的消息监听 ([EventChannel.subscribeMessages]) DSL, 屏蔽了一些 `reply` DSL 以确保作用域安全性 * * @see MessageSelectBuilderUnit 查看上层 API */ @@ -222,7 +223,7 @@ public abstract class MessageSelectBuilder @PublishedApi in /** * [selectMessagesUnit] 或 [selectMessages] 时的 DSL 构建器. * - * 它是特殊化的消息监听 ([CoroutineScope.subscribeMessages]) DSL + * 它是特殊化的消息监听 ([EventChannel.subscribeMessages]) DSL * * @see MessageSubscribersBuilder 查看上层 API */ @@ -316,7 +317,7 @@ public abstract class MessageSelectBuilderUnit @PublishedAp @Suppress("unused", "UNCHECKED_CAST") public open infix fun MessageSelectionTimeoutChecker.reply(message: Message) { return timeout(this.timeoutMillis) { - ownerMessagePacket.reply(message) + ownerMessagePacket.subject.sendMessage(message) Unit as R } } @@ -324,7 +325,7 @@ public abstract class MessageSelectBuilderUnit @PublishedAp @Suppress("unused", "UNCHECKED_CAST") public open infix fun MessageSelectionTimeoutChecker.reply(message: String) { return timeout(this.timeoutMillis) { - ownerMessagePacket.reply(message) + ownerMessagePacket.subject.sendMessage(message) Unit as R } } @@ -366,7 +367,7 @@ public abstract class MessageSelectBuilderUnit @PublishedAp @Suppress("unused", "UNCHECKED_CAST") public open infix fun MessageSelectionTimeoutChecker.quoteReply(message: Message) { return timeout(this.timeoutMillis) { - ownerMessagePacket.quoteReply(message) + ownerMessagePacket.subject.sendMessage(ownerMessagePacket.message.quote() + message) Unit as R } } @@ -374,7 +375,7 @@ public abstract class MessageSelectBuilderUnit @PublishedAp @Suppress("unused", "UNCHECKED_CAST") public open infix fun MessageSelectionTimeoutChecker.quoteReply(message: String) { return timeout(this.timeoutMillis) { - ownerMessagePacket.quoteReply(message) + ownerMessagePacket.subject.sendMessage(ownerMessagePacket.message.quote() + message) Unit as R } } @@ -405,8 +406,8 @@ public abstract class MessageSelectBuilderUnit @PublishedAp Unit -> { } - is Message -> ownerMessagePacket.reply(result) - else -> ownerMessagePacket.reply(result.toString()) + is Message -> ownerMessagePacket.subject.sendMessage(result) + else -> ownerMessagePacket.subject.sendMessage(result.toString()) } } @@ -415,8 +416,8 @@ public abstract class MessageSelectBuilderUnit @PublishedAp Unit -> { } - is Message -> ownerMessagePacket.quoteReply(result) - else -> ownerMessagePacket.quoteReply(result.toString()) + is Message -> ownerMessagePacket.subject.sendMessage(ownerMessagePacket.message.quote() + result) + else -> ownerMessagePacket.subject.sendMessage(ownerMessagePacket.message.quote() + result.toString()) } }