From 2a8f7de23d2e4fa8208dae3621fac5289b3c02e7 Mon Sep 17 00:00:00 2001 From: Him188 Date: Sat, 2 Apr 2022 13:24:30 +0100 Subject: [PATCH] Throw `SendMessageFailedException` with new reason `AT_ALL_LIMITED`, fix #1948 --- .../android/api/android.api | 1 + .../compatibility-validation/jvm/api/jvm.api | 1 + .../src/commonMain/kotlin/contact/Exceptions.kt | 17 +++++++++++------ .../kotlin/contact/SendMessageHandler.kt | 6 +++++- 4 files changed, 18 insertions(+), 7 deletions(-) diff --git a/mirai-core-api/compatibility-validation/android/api/android.api b/mirai-core-api/compatibility-validation/android/api/android.api index e141f1323..c3ce9a639 100644 --- a/mirai-core-api/compatibility-validation/android/api/android.api +++ b/mirai-core-api/compatibility-validation/android/api/android.api @@ -538,6 +538,7 @@ public class net/mamoe/mirai/contact/SendMessageFailedException : java/lang/Runt } public final class net/mamoe/mirai/contact/SendMessageFailedException$Reason : java/lang/Enum { + public static final field AT_ALL_LIMITED Lnet/mamoe/mirai/contact/SendMessageFailedException$Reason; public static final field BOT_MUTED Lnet/mamoe/mirai/contact/SendMessageFailedException$Reason; public static final field GROUP_CHAT_LIMITED Lnet/mamoe/mirai/contact/SendMessageFailedException$Reason; public static final field MESSAGE_TOO_LARGE Lnet/mamoe/mirai/contact/SendMessageFailedException$Reason; diff --git a/mirai-core-api/compatibility-validation/jvm/api/jvm.api b/mirai-core-api/compatibility-validation/jvm/api/jvm.api index c640d3c90..e2133ebfc 100644 --- a/mirai-core-api/compatibility-validation/jvm/api/jvm.api +++ b/mirai-core-api/compatibility-validation/jvm/api/jvm.api @@ -538,6 +538,7 @@ public class net/mamoe/mirai/contact/SendMessageFailedException : java/lang/Runt } public final class net/mamoe/mirai/contact/SendMessageFailedException$Reason : java/lang/Enum { + public static final field AT_ALL_LIMITED Lnet/mamoe/mirai/contact/SendMessageFailedException$Reason; public static final field BOT_MUTED Lnet/mamoe/mirai/contact/SendMessageFailedException$Reason; public static final field GROUP_CHAT_LIMITED Lnet/mamoe/mirai/contact/SendMessageFailedException$Reason; public static final field MESSAGE_TOO_LARGE Lnet/mamoe/mirai/contact/SendMessageFailedException$Reason; diff --git a/mirai-core-api/src/commonMain/kotlin/contact/Exceptions.kt b/mirai-core-api/src/commonMain/kotlin/contact/Exceptions.kt index 2f636aa7c..556f5ae5f 100644 --- a/mirai-core-api/src/commonMain/kotlin/contact/Exceptions.kt +++ b/mirai-core-api/src/commonMain/kotlin/contact/Exceptions.kt @@ -1,22 +1,22 @@ /* - * Copyright 2019-2021 Mamoe Technologies and contributors. + * Copyright 2019-2022 Mamoe Technologies and contributors. * - * 此源代码的使用受 GNU AFFERO GENERAL PUBLIC LICENSE version 3 许可证的约束, 可以在以下链接找到该许可证. - * Use of this source code is governed by the GNU AGPLv3 license that can be found through the following link. + * 此源代码的使用受 GNU AFFERO GENERAL PUBLIC LICENSE version 3 许可证的约束, 可以在以下链接找到该许可证. + * Use of this source code is governed by the GNU AGPLv3 license that can be found through the following link. * - * https://github.com/mamoe/mirai/blob/master/LICENSE + * https://github.com/mamoe/mirai/blob/dev/LICENSE */ @file:Suppress("unused") package net.mamoe.mirai.contact +import net.mamoe.mirai.message.data.AtAll import net.mamoe.mirai.message.data.Message import net.mamoe.mirai.message.data.messageChainOf import net.mamoe.mirai.utils.DeprecatedSinceMirai import net.mamoe.mirai.utils.MiraiInternalApi import net.mamoe.mirai.utils.millisToHumanReadableString -import kotlin.time.ExperimentalTime /** * 发送消息时消息过长抛出的异常. @@ -43,7 +43,6 @@ public class MessageTooLargeException constructor( * * @see Group.sendMessage */ -@OptIn(ExperimentalTime::class) public class BotIsBeingMutedException @MiraiInternalApi constructor( // this constructor is since 2.9.0-RC public override val target: Group, @@ -90,5 +89,11 @@ public open class SendMessageFailedException @MiraiInternalApi constructor( * 达到群每分钟发言次数限制 */ GROUP_CHAT_LIMITED, + + /** + * 达到每日发送 [AtAll] 的次数限制 + * @since 2.11 + */ + AT_ALL_LIMITED, } } \ No newline at end of file diff --git a/mirai-core/src/commonMain/kotlin/contact/SendMessageHandler.kt b/mirai-core/src/commonMain/kotlin/contact/SendMessageHandler.kt index 109e08627..2c4c19e57 100644 --- a/mirai-core/src/commonMain/kotlin/contact/SendMessageHandler.kt +++ b/mirai-core/src/commonMain/kotlin/contact/SendMessageHandler.kt @@ -173,7 +173,11 @@ internal abstract class SendMessageHandler { val contact = contact when (resp.resultType) { 120 -> if (contact is Group) throw BotIsBeingMutedException(contact, originalMessage) - 121 -> if (AtAll in finalMessage) throw IllegalStateException("Send message to $contact failed, reached maximum AtAll times limit.") + 121 -> if (AtAll in finalMessage) throw SendMessageFailedException( + contact, + SendMessageFailedException.Reason.AT_ALL_LIMITED, + originalMessage + ) 299 -> if (contact is Group) throw SendMessageFailedException( contact, SendMessageFailedException.Reason.GROUP_CHAT_LIMITED,