diff --git a/binary-compatibility-validator/android/api/binary-compatibility-validator-android.api b/binary-compatibility-validator/android/api/binary-compatibility-validator-android.api
index 24176efc6..e676ca9ba 100644
--- a/binary-compatibility-validator/android/api/binary-compatibility-validator-android.api
+++ b/binary-compatibility-validator/android/api/binary-compatibility-validator-android.api
@@ -1829,7 +1829,7 @@ public class net/mamoe/mirai/event/MessageSubscribersBuilder {
 	public final fun sentByOwner ()Lnet/mamoe/mirai/event/MessageSubscribersBuilder$ListeningFilter;
 	public final fun sentByStranger ()Lnet/mamoe/mirai/event/MessageSubscribersBuilder$ListeningFilter;
 	public final fun sentByStranger (Lkotlin/jvm/functions/Function3;)Ljava/lang/Object;
-	public final fun sentByTemp ()Lnet/mamoe/mirai/event/MessageSubscribersBuilder$ListeningFilter;
+	public final synthetic fun sentByTemp ()Lnet/mamoe/mirai/event/MessageSubscribersBuilder$ListeningFilter;
 	public final fun sentFrom (J)Lnet/mamoe/mirai/event/MessageSubscribersBuilder$ListeningFilter;
 	public final fun sentFrom (Lnet/mamoe/mirai/contact/Group;)Lnet/mamoe/mirai/event/MessageSubscribersBuilder$ListeningFilter;
 	public final fun startsWith (Ljava/lang/String;Z)Lnet/mamoe/mirai/event/MessageSubscribersBuilder$ListeningFilter;
@@ -1890,7 +1890,7 @@ public final class net/mamoe/mirai/event/SubscribeMessagesKt {
 	public static synthetic fun subscribeOtherClientMessages$default (Lnet/mamoe/mirai/event/EventChannel;Lkotlin/coroutines/CoroutineContext;Lnet/mamoe/mirai/event/ConcurrencyKind;Lnet/mamoe/mirai/event/EventPriority;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Ljava/lang/Object;
 	public static final fun subscribeStrangerMessages (Lnet/mamoe/mirai/event/EventChannel;Lkotlin/coroutines/CoroutineContext;Lnet/mamoe/mirai/event/ConcurrencyKind;Lnet/mamoe/mirai/event/EventPriority;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;
 	public static synthetic fun subscribeStrangerMessages$default (Lnet/mamoe/mirai/event/EventChannel;Lkotlin/coroutines/CoroutineContext;Lnet/mamoe/mirai/event/ConcurrencyKind;Lnet/mamoe/mirai/event/EventPriority;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Ljava/lang/Object;
-	public static final fun subscribeTempMessages (Lnet/mamoe/mirai/event/EventChannel;Lkotlin/coroutines/CoroutineContext;Lnet/mamoe/mirai/event/ConcurrencyKind;Lnet/mamoe/mirai/event/EventPriority;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;
+	public static final synthetic fun subscribeTempMessages (Lnet/mamoe/mirai/event/EventChannel;Lkotlin/coroutines/CoroutineContext;Lnet/mamoe/mirai/event/ConcurrencyKind;Lnet/mamoe/mirai/event/EventPriority;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;
 	public static synthetic fun subscribeTempMessages$default (Lnet/mamoe/mirai/event/EventChannel;Lkotlin/coroutines/CoroutineContext;Lnet/mamoe/mirai/event/ConcurrencyKind;Lnet/mamoe/mirai/event/EventPriority;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Ljava/lang/Object;
 	public static final fun subscribeUserMessages (Lnet/mamoe/mirai/event/EventChannel;Lkotlin/coroutines/CoroutineContext;Lnet/mamoe/mirai/event/ConcurrencyKind;Lnet/mamoe/mirai/event/EventPriority;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;
 	public static synthetic fun subscribeUserMessages$default (Lnet/mamoe/mirai/event/EventChannel;Lkotlin/coroutines/CoroutineContext;Lnet/mamoe/mirai/event/ConcurrencyKind;Lnet/mamoe/mirai/event/EventPriority;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Ljava/lang/Object;
@@ -5139,7 +5139,7 @@ public final class net/mamoe/mirai/message/data/RichMessageOrigin : net/mamoe/mi
 	public static final field Key Lnet/mamoe/mirai/message/data/RichMessageOrigin$Key;
 	public static final field SERIAL_NAME Ljava/lang/String;
 	public synthetic fun <init> (ILnet/mamoe/mirai/message/data/RichMessage;Ljava/lang/String;Lnet/mamoe/mirai/message/data/RichMessageKind;Lkotlinx/serialization/internal/SerializationConstructorMarker;)V
-	public fun <init> (Lnet/mamoe/mirai/message/data/RichMessage;Ljava/lang/String;Lnet/mamoe/mirai/message/data/RichMessageKind;)V
+	public synthetic fun <init> (Lnet/mamoe/mirai/message/data/RichMessage;Ljava/lang/String;Lnet/mamoe/mirai/message/data/RichMessageKind;)V
 	public fun contentToString ()Ljava/lang/String;
 	public fun equals (Ljava/lang/Object;)Z
 	public synthetic fun getKey ()Lnet/mamoe/mirai/message/data/MessageKey;
diff --git a/binary-compatibility-validator/api/binary-compatibility-validator.api b/binary-compatibility-validator/api/binary-compatibility-validator.api
index da1426bbc..67af440a4 100644
--- a/binary-compatibility-validator/api/binary-compatibility-validator.api
+++ b/binary-compatibility-validator/api/binary-compatibility-validator.api
@@ -1829,7 +1829,7 @@ public class net/mamoe/mirai/event/MessageSubscribersBuilder {
 	public final fun sentByOwner ()Lnet/mamoe/mirai/event/MessageSubscribersBuilder$ListeningFilter;
 	public final fun sentByStranger ()Lnet/mamoe/mirai/event/MessageSubscribersBuilder$ListeningFilter;
 	public final fun sentByStranger (Lkotlin/jvm/functions/Function3;)Ljava/lang/Object;
-	public final fun sentByTemp ()Lnet/mamoe/mirai/event/MessageSubscribersBuilder$ListeningFilter;
+	public final synthetic fun sentByTemp ()Lnet/mamoe/mirai/event/MessageSubscribersBuilder$ListeningFilter;
 	public final fun sentFrom (J)Lnet/mamoe/mirai/event/MessageSubscribersBuilder$ListeningFilter;
 	public final fun sentFrom (Lnet/mamoe/mirai/contact/Group;)Lnet/mamoe/mirai/event/MessageSubscribersBuilder$ListeningFilter;
 	public final fun startsWith (Ljava/lang/String;Z)Lnet/mamoe/mirai/event/MessageSubscribersBuilder$ListeningFilter;
@@ -1890,7 +1890,7 @@ public final class net/mamoe/mirai/event/SubscribeMessagesKt {
 	public static synthetic fun subscribeOtherClientMessages$default (Lnet/mamoe/mirai/event/EventChannel;Lkotlin/coroutines/CoroutineContext;Lnet/mamoe/mirai/event/ConcurrencyKind;Lnet/mamoe/mirai/event/EventPriority;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Ljava/lang/Object;
 	public static final fun subscribeStrangerMessages (Lnet/mamoe/mirai/event/EventChannel;Lkotlin/coroutines/CoroutineContext;Lnet/mamoe/mirai/event/ConcurrencyKind;Lnet/mamoe/mirai/event/EventPriority;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;
 	public static synthetic fun subscribeStrangerMessages$default (Lnet/mamoe/mirai/event/EventChannel;Lkotlin/coroutines/CoroutineContext;Lnet/mamoe/mirai/event/ConcurrencyKind;Lnet/mamoe/mirai/event/EventPriority;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Ljava/lang/Object;
-	public static final fun subscribeTempMessages (Lnet/mamoe/mirai/event/EventChannel;Lkotlin/coroutines/CoroutineContext;Lnet/mamoe/mirai/event/ConcurrencyKind;Lnet/mamoe/mirai/event/EventPriority;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;
+	public static final synthetic fun subscribeTempMessages (Lnet/mamoe/mirai/event/EventChannel;Lkotlin/coroutines/CoroutineContext;Lnet/mamoe/mirai/event/ConcurrencyKind;Lnet/mamoe/mirai/event/EventPriority;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;
 	public static synthetic fun subscribeTempMessages$default (Lnet/mamoe/mirai/event/EventChannel;Lkotlin/coroutines/CoroutineContext;Lnet/mamoe/mirai/event/ConcurrencyKind;Lnet/mamoe/mirai/event/EventPriority;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Ljava/lang/Object;
 	public static final fun subscribeUserMessages (Lnet/mamoe/mirai/event/EventChannel;Lkotlin/coroutines/CoroutineContext;Lnet/mamoe/mirai/event/ConcurrencyKind;Lnet/mamoe/mirai/event/EventPriority;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;
 	public static synthetic fun subscribeUserMessages$default (Lnet/mamoe/mirai/event/EventChannel;Lkotlin/coroutines/CoroutineContext;Lnet/mamoe/mirai/event/ConcurrencyKind;Lnet/mamoe/mirai/event/EventPriority;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Ljava/lang/Object;
@@ -5139,7 +5139,7 @@ public final class net/mamoe/mirai/message/data/RichMessageOrigin : net/mamoe/mi
 	public static final field Key Lnet/mamoe/mirai/message/data/RichMessageOrigin$Key;
 	public static final field SERIAL_NAME Ljava/lang/String;
 	public synthetic fun <init> (ILnet/mamoe/mirai/message/data/RichMessage;Ljava/lang/String;Lnet/mamoe/mirai/message/data/RichMessageKind;Lkotlinx/serialization/internal/SerializationConstructorMarker;)V
-	public fun <init> (Lnet/mamoe/mirai/message/data/RichMessage;Ljava/lang/String;Lnet/mamoe/mirai/message/data/RichMessageKind;)V
+	public synthetic fun <init> (Lnet/mamoe/mirai/message/data/RichMessage;Ljava/lang/String;Lnet/mamoe/mirai/message/data/RichMessageKind;)V
 	public fun contentToString ()Ljava/lang/String;
 	public fun equals (Ljava/lang/Object;)Z
 	public synthetic fun getKey ()Lnet/mamoe/mirai/message/data/MessageKey;
diff --git a/mirai-core-api/src/commonMain/kotlin/contact/Group.kt b/mirai-core-api/src/commonMain/kotlin/contact/Group.kt
index 7de30e23b..f34456571 100644
--- a/mirai-core-api/src/commonMain/kotlin/contact/Group.kt
+++ b/mirai-core-api/src/commonMain/kotlin/contact/Group.kt
@@ -193,7 +193,7 @@ public interface Group : Contact, CoroutineScope, FileSupported, AudioSupported
         "use uploadAudio",
         replaceWith = ReplaceWith("uploadAudio(resource)"),
         level = DeprecationLevel.WARNING
-    )
+    ) // deprecated since 2.7
     public suspend fun uploadVoice(resource: ExternalResource): Voice
 
     /**
@@ -241,7 +241,7 @@ public interface GroupSettings {
     @Deprecated(
         level = DeprecationLevel.WARNING,
         message = "group.announcements.asFlow().filter { it.parameters.sendToNewMember }.firstOrNull()",
-    )
+    ) // deprecated since 2.7
     public var entranceAnnouncement: String
 
     /**
diff --git a/mirai-core-api/src/commonMain/kotlin/event/MessageSubscribersBuilder.kt b/mirai-core-api/src/commonMain/kotlin/event/MessageSubscribersBuilder.kt
index 3404d14b2..6e830b193 100644
--- a/mirai-core-api/src/commonMain/kotlin/event/MessageSubscribersBuilder.kt
+++ b/mirai-core-api/src/commonMain/kotlin/event/MessageSubscribersBuilder.kt
@@ -272,7 +272,7 @@ public open class MessageSubscribersBuilder<M : MessageEvent, out Ret, R : RR, R
 
     /** 如果是群临时会话消息 */
     @MessageDsl
-    @Deprecated("use sentByGroupTemp()", ReplaceWith("sentByGroupTemp()"), DeprecationLevel.ERROR)
+    @Deprecated("use sentByGroupTemp()", ReplaceWith("sentByGroupTemp()"), DeprecationLevel.HIDDEN)
     public fun sentByTemp(): ListeningFilter = sentByGroupTemp()
 
     /** 如果是群临时会话消息 */
diff --git a/mirai-core-api/src/commonMain/kotlin/event/events/MessageEvent.kt b/mirai-core-api/src/commonMain/kotlin/event/events/MessageEvent.kt
index 50b6a65a3..a62f89539 100644
--- a/mirai-core-api/src/commonMain/kotlin/event/events/MessageEvent.kt
+++ b/mirai-core-api/src/commonMain/kotlin/event/events/MessageEvent.kt
@@ -193,7 +193,7 @@ public class GroupMessageEvent(
 @Deprecated(
     "mirai 正计划支持其他渠道发起的临时会话, 届时此事件会变动. 原 TempMessageEvent 已更改为 GroupTempMessageEvent",
     replaceWith = ReplaceWith("GroupTempMessageEvent", "net.mamoe.mirai.event.events.GroupTempMessageEvent"),
-    DeprecationLevel.ERROR
+    DeprecationLevel.HIDDEN
 )
 public sealed class TempMessageEvent constructor(
     public override val sender: NormalMember,
diff --git a/mirai-core-api/src/commonMain/kotlin/event/events/MessagePostSendEvent.kt b/mirai-core-api/src/commonMain/kotlin/event/events/MessagePostSendEvent.kt
index 426ba6ab5..0e16e5b30 100644
--- a/mirai-core-api/src/commonMain/kotlin/event/events/MessagePostSendEvent.kt
+++ b/mirai-core-api/src/commonMain/kotlin/event/events/MessagePostSendEvent.kt
@@ -154,7 +154,7 @@ public data class FriendMessagePostSendEvent @MiraiInternalApi constructor(
         "GroupTempMessagePostSendEvent",
         "net.mamoe.mirai.event.events.GroupTempMessagePostSendEvent"
     ),
-    DeprecationLevel.ERROR
+    DeprecationLevel.HIDDEN
 )
 public sealed class TempMessagePostSendEvent @MiraiInternalApi constructor(
     /** 发信目标. */
diff --git a/mirai-core-api/src/commonMain/kotlin/event/events/MessagePreSendEvent.kt b/mirai-core-api/src/commonMain/kotlin/event/events/MessagePreSendEvent.kt
index e272f5357..3be64aaa7 100644
--- a/mirai-core-api/src/commonMain/kotlin/event/events/MessagePreSendEvent.kt
+++ b/mirai-core-api/src/commonMain/kotlin/event/events/MessagePreSendEvent.kt
@@ -83,7 +83,7 @@ public data class FriendMessagePreSendEvent @MiraiInternalApi constructor(
         "GroupTempMessagePreSendEvent",
         "net.mamoe.mirai.event.events.GroupTempMessagePreSendEvent"
     ),
-    DeprecationLevel.ERROR
+    DeprecationLevel.HIDDEN
 )
 public sealed class TempMessagePreSendEvent @MiraiInternalApi constructor(
     /** 发信目标. */
diff --git a/mirai-core-api/src/commonMain/kotlin/event/subscribeMessages.kt b/mirai-core-api/src/commonMain/kotlin/event/subscribeMessages.kt
index 1ee55dbc3..c87403261 100644
--- a/mirai-core-api/src/commonMain/kotlin/event/subscribeMessages.kt
+++ b/mirai-core-api/src/commonMain/kotlin/event/subscribeMessages.kt
@@ -149,7 +149,7 @@ public fun <R> EventChannel<*>.subscribeUserMessages(
         "GroupTempMessageSubscribersBuilder",
         "net.mamoe.mirai.event.GroupTempMessageSubscribersBuilder"
     ),
-    DeprecationLevel.ERROR
+    DeprecationLevel.HIDDEN
 )
 public typealias TempMessageSubscribersBuilder = MessageSubscribersBuilder<GroupTempMessageEvent, Listener<GroupTempMessageEvent>, Unit, Unit>
 
@@ -165,7 +165,7 @@ public typealias TempMessageSubscribersBuilder = MessageSubscribersBuilder<Group
         "subscribeGroupTempMessages(coroutineContext, concurrencyKind, priority, listeners)",
         "net.mamoe.mirai.event.subscribeGroupTempMessages"
     ),
-    DeprecationLevel.ERROR
+    DeprecationLevel.HIDDEN
 )
 public fun <R> EventChannel<*>.subscribeTempMessages(
     coroutineContext: CoroutineContext = EmptyCoroutineContext,
diff --git a/mirai-core-api/src/commonMain/kotlin/message/data/Deprecated.kt b/mirai-core-api/src/commonMain/kotlin/message/data/Deprecated.kt
index 5037aa54b..74e83334e 100644
--- a/mirai-core-api/src/commonMain/kotlin/message/data/Deprecated.kt
+++ b/mirai-core-api/src/commonMain/kotlin/message/data/Deprecated.kt
@@ -35,7 +35,7 @@ import net.mamoe.mirai.utils.safeCast
         "MessageOrigin",
         "net.mamoe.mirai.message.data.MessageOrigin",
     ),
-    level = DeprecationLevel.ERROR
+    level = DeprecationLevel.HIDDEN
 )
 public class RichMessageOrigin
 @Deprecated(
@@ -44,7 +44,7 @@ public class RichMessageOrigin
         "MessageOrigin(origin, resourceId, kind)",
         "net.mamoe.mirai.message.data.MessageOrigin",
     ),
-    level = DeprecationLevel.ERROR
+    level = DeprecationLevel.HIDDEN
 )
 constructor(
     /**
@@ -104,7 +104,7 @@ constructor(
             "MessageOrigin",
             "net.mamoe.mirai.message.data.MessageOrigin",
         ),
-        level = DeprecationLevel.ERROR
+        level = DeprecationLevel.HIDDEN
     )
     @Suppress("DEPRECATION_ERROR")
     public companion object Key : AbstractMessageKey<RichMessageOrigin>({ it.safeCast() }) {
@@ -120,7 +120,7 @@ constructor(
 @Deprecated(
     "Use MessageOriginKind",
     ReplaceWith("MessageOriginKind", "net.mamoe.mirai.message.data.MessageOriginKind"),
-    level = DeprecationLevel.ERROR
+    level = DeprecationLevel.HIDDEN
 )
 public enum class RichMessageKind {
     /**
diff --git a/mirai-core-api/src/commonMain/kotlin/message/data/SingleMessage.kt b/mirai-core-api/src/commonMain/kotlin/message/data/SingleMessage.kt
index 86cadcda1..fbbe162b0 100644
--- a/mirai-core-api/src/commonMain/kotlin/message/data/SingleMessage.kt
+++ b/mirai-core-api/src/commonMain/kotlin/message/data/SingleMessage.kt
@@ -37,8 +37,8 @@ public interface SingleMessage : Message {
             "kotlinx.serialization.PolymorphicSerializer",
             "net.mamoe.mirai.message.data.SingleMessage",
         ),
-        level = DeprecationLevel.WARNING
-    )
+        level = DeprecationLevel.ERROR // ERROR since 2.8
+    ) // error since 2.8
     public object Serializer : KSerializer<SingleMessage> by PolymorphicSerializer(SingleMessage::class)
 }
 
diff --git a/mirai-core-api/src/commonMain/kotlin/message/data/Voice.kt b/mirai-core-api/src/commonMain/kotlin/message/data/Voice.kt
index 34e26784b..50ab33248 100644
--- a/mirai-core-api/src/commonMain/kotlin/message/data/Voice.kt
+++ b/mirai-core-api/src/commonMain/kotlin/message/data/Voice.kt
@@ -73,7 +73,7 @@ public abstract class PttMessage : MessageContent {
     "Please use Audio instead.",
     replaceWith = ReplaceWith("Audio", "net.mamoe.mirai.message.data.Audio"),
     level = DeprecationLevel.WARNING
-)
+) // deprecated since 2.7
 public open class Voice @MiraiInternalApi constructor(
     @MiraiExperimentalApi public override val fileName: String,
     @MiraiExperimentalApi public override val md5: ByteArray,
@@ -96,7 +96,7 @@ public open class Voice @MiraiInternalApi constructor(
         @Deprecated(
             "Please consider migrating to Audio",
             level = DeprecationLevel.WARNING
-        )
+        ) // deprecated since 2.7
         @JvmStatic
         public fun fromAudio(audio: Audio): Voice {
             audio.run {
@@ -179,6 +179,6 @@ public open class Voice @MiraiInternalApi constructor(
 @Deprecated(
     "Please migrate to Audio",
     level = DeprecationLevel.WARNING
-)
+) // deprecated since 2.7
 @JvmSynthetic
 public inline fun Audio.toVoice(): Voice = Voice.fromAudio(this)
\ No newline at end of file
diff --git a/mirai-core-api/src/commonMain/kotlin/network/ForceOfflineException.kt b/mirai-core-api/src/commonMain/kotlin/network/ForceOfflineException.kt
index d2456a72a..deff7319b 100644
--- a/mirai-core-api/src/commonMain/kotlin/network/ForceOfflineException.kt
+++ b/mirai-core-api/src/commonMain/kotlin/network/ForceOfflineException.kt
@@ -16,7 +16,7 @@ import net.mamoe.mirai.Bot
 /**
  * 当 [Bot] 被迫下线时抛出, 作为 [Job.cancel] 的 `cause`
  */
-@Deprecated("Not used anymore since 2.7", level = DeprecationLevel.WARNING)
+@Deprecated("Not used anymore since 2.7", level = DeprecationLevel.ERROR) // deprecated since 2.7, error since 2.8
 public class ForceOfflineException
 @JvmOverloads constructor(
     public override val message: String? = null,
diff --git a/mirai-core-api/src/commonMain/kotlin/utils/BotConfiguration.kt b/mirai-core-api/src/commonMain/kotlin/utils/BotConfiguration.kt
index 74f468c23..e1b015961 100644
--- a/mirai-core-api/src/commonMain/kotlin/utils/BotConfiguration.kt
+++ b/mirai-core-api/src/commonMain/kotlin/utils/BotConfiguration.kt
@@ -193,11 +193,17 @@ public open class BotConfiguration { // open for Java
     public var heartbeatTimeoutMillis: Long = 5.secondsToMillis
 
     /** 心跳失败后的第一次重连前的等待时间. */
-    @Deprecated("Useless since new network. Please just remove this.", level = DeprecationLevel.WARNING)
+    @Deprecated(
+        "Useless since new network. Please just remove this.",
+        level = DeprecationLevel.ERROR
+    ) // deprecated since 2.7, error since 2.8
     public var firstReconnectDelayMillis: Long = 5.secondsToMillis
 
     /** 重连失败后, 继续尝试的每次等待时间 */
-    @Deprecated("Useless since new network. Please just remove this.", level = DeprecationLevel.WARNING)
+    @Deprecated(
+        "Useless since new network. Please just remove this.",
+        level = DeprecationLevel.ERROR
+    ) // deprecated since 2.7, error since 2.8
     public var reconnectPeriodMillis: Long = 5.secondsToMillis
 
     /** 最多尝试多少次重连 */
diff --git a/mirai-core-api/src/commonMain/kotlin/utils/ExternalResource.kt b/mirai-core-api/src/commonMain/kotlin/utils/ExternalResource.kt
index 52b9a27d3..e6cf146c1 100644
--- a/mirai-core-api/src/commonMain/kotlin/utils/ExternalResource.kt
+++ b/mirai-core-api/src/commonMain/kotlin/utils/ExternalResource.kt
@@ -450,7 +450,10 @@ public interface ExternalResource : Closeable {
         @Suppress("DEPRECATION")
         @JvmBlockingBridge
         @JvmStatic
-        @Deprecated("Use `contact.uploadAudio(resource)` instead", level = DeprecationLevel.WARNING)
+        @Deprecated(
+            "Use `contact.uploadAudio(resource)` instead",
+            level = DeprecationLevel.WARNING
+        ) // deprecated since 2.7
         public suspend fun ExternalResource.uploadAsVoice(contact: Contact): net.mamoe.mirai.message.data.Voice {
             @Suppress("DEPRECATION")
             if (contact is Group) return contact.uploadVoice(this)
diff --git a/mirai-core-api/src/commonMain/kotlin/utils/MiraiLogger.kt b/mirai-core-api/src/commonMain/kotlin/utils/MiraiLogger.kt
index f4ae5d1f5..e1b22e3bb 100644
--- a/mirai-core-api/src/commonMain/kotlin/utils/MiraiLogger.kt
+++ b/mirai-core-api/src/commonMain/kotlin/utils/MiraiLogger.kt
@@ -94,7 +94,7 @@ public interface MiraiLogger {
          */
         @MiraiInternalApi
         @MiraiExperimentalApi
-        @Deprecated("Deprecated.")
+        @Deprecated("Deprecated.") // deprecated since 2.7
         public val TopLevel: MiraiLogger by lazy { Factory.create(MiraiLogger::class, "Mirai") }
 
         /**
@@ -104,7 +104,7 @@ public interface MiraiLogger {
         @Deprecated(
             "Please set factory by providing an service of type net.mamoe.mirai.utils.MiraiLogger.Factory",
             level = DeprecationLevel.WARNING
-        )
+        ) // deprecated since 2.7
         @JvmStatic
         public fun setDefaultLoggerCreator(creator: (identity: String?) -> MiraiLogger) {
             DefaultFactoryOverrides.override { _, identity -> creator(identity) }
@@ -120,7 +120,7 @@ public interface MiraiLogger {
                 "MiraiLogger.Factory.create(YourClass::class, identity)",
                 "net.mamoe.mirai.utils.MiraiLogger"
             ), level = DeprecationLevel.WARNING
-        )
+        ) // deprecated since 2.7
         @JvmStatic
         public fun create(identity: String?): MiraiLogger = Factory.create(MiraiLogger::class, identity)
     }
diff --git a/mirai-core-api/src/commonMain/kotlin/utils/RemoteFile.kt b/mirai-core-api/src/commonMain/kotlin/utils/RemoteFile.kt
index 2c876d760..6c06a8db9 100644
--- a/mirai-core-api/src/commonMain/kotlin/utils/RemoteFile.kt
+++ b/mirai-core-api/src/commonMain/kotlin/utils/RemoteFile.kt
@@ -300,7 +300,7 @@ public interface RemoteFile {
         "Use moveTo(RemoteFile) instead.",
         replaceWith = ReplaceWith("this.moveTo(this.resolveSibling(path))"),
         level = DeprecationLevel.WARNING
-    )
+    ) // deprecated since 2.7
     public suspend fun moveTo(path: String): Boolean {
         // Impl notes:
         // if `path` is absolute, this works as intended.
diff --git a/mirai-core-utils/src/commonMain/kotlin/CoroutineUtils.kt b/mirai-core-utils/src/commonMain/kotlin/CoroutineUtils.kt
index 709f35b60..a1086b250 100644
--- a/mirai-core-utils/src/commonMain/kotlin/CoroutineUtils.kt
+++ b/mirai-core-utils/src/commonMain/kotlin/CoroutineUtils.kt
@@ -22,7 +22,7 @@ import kotlin.coroutines.EmptyCoroutineContext
 @Deprecated(
     message = "Use runBIO which delegates to `runInterruptible`. " +
             "Technically remove suspend call in `block` and remove CoroutineScope parameter usages.",
-    level = DeprecationLevel.WARNING
+    level = DeprecationLevel.HIDDEN
 )
 @kotlin.internal.LowPriorityInOverloadResolution
 public suspend inline fun <R> runBIO(
diff --git a/mirai-core/src/commonMain/kotlin/contact/GroupImpl.kt b/mirai-core/src/commonMain/kotlin/contact/GroupImpl.kt
index 1a0cedc5a..6f0ceabb0 100644
--- a/mirai-core/src/commonMain/kotlin/contact/GroupImpl.kt
+++ b/mirai-core/src/commonMain/kotlin/contact/GroupImpl.kt
@@ -297,22 +297,6 @@ internal class GroupImpl constructor(
     override fun toString(): String = "Group($id)"
 }
 
-@Deprecated("use addNewNormalMember or newAnonymousMember")
-internal fun Group.newMember(memberInfo: MemberInfo): Member {
-    this.checkIsGroupImpl()
-    memberInfo.anonymousId?.let {
-        return AnonymousMemberImpl(
-            this, this.coroutineContext,
-            memberInfo
-        )
-    }
-    return NormalMemberImpl(
-        this,
-        this.coroutineContext,
-        memberInfo
-    )
-}
-
 internal fun Group.addNewNormalMember(memberInfo: MemberInfo): NormalMemberImpl? {
     if (members.contains(memberInfo.uin)) return null
     return newNormalMember(memberInfo).also {
diff --git a/mirai-core/src/commonMain/kotlin/network/protocol/packet/PacketFactory.kt b/mirai-core/src/commonMain/kotlin/network/protocol/packet/PacketFactory.kt
index 2bd2d04cf..f6780679d 100644
--- a/mirai-core/src/commonMain/kotlin/network/protocol/packet/PacketFactory.kt
+++ b/mirai-core/src/commonMain/kotlin/network/protocol/packet/PacketFactory.kt
@@ -114,7 +114,7 @@ internal suspend inline fun <P : Packet?> IncomingPacketFactory<P>.decode(
 @Deprecated(
     "Kept for binary compatibility.",
     ReplaceWith("PacketCodec.PacketLogger", "net.mamoe.mirai.internal.network.components.PacketCodec"),
-    level = DeprecationLevel.ERROR,
+    level = DeprecationLevel.HIDDEN,
 )
 @PublishedApi
 internal val PacketLogger: MiraiLoggerWithSwitch