diff --git a/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/event/subscribeMessages.kt b/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/event/subscribeMessages.kt
index 50dd37c9f..44ac0ba08 100644
--- a/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/event/subscribeMessages.kt
+++ b/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/event/subscribeMessages.kt
@@ -23,6 +23,7 @@ import net.mamoe.mirai.event.events.BotEvent
 import net.mamoe.mirai.message.ContactMessage
 import net.mamoe.mirai.message.FriendMessage
 import net.mamoe.mirai.message.GroupMessage
+import net.mamoe.mirai.message.TempMessage
 import net.mamoe.mirai.message.data.Message
 import net.mamoe.mirai.message.data.firstIsInstance
 import net.mamoe.mirai.utils.SinceMirai
@@ -115,6 +116,31 @@ fun <R> CoroutineScope.subscribeFriendMessages(
     }.run(listeners)
 }
 
+typealias TempMessageSubscribersBuilder = MessageSubscribersBuilder<TempMessage, Listener<TempMessage>, Unit, Unit>
+
+/**
+ * 订阅来自所有 [Bot] 的所有临时会话消息事件
+ *
+ * @see CoroutineScope.incoming 打开一个指定事件的接收通道
+ */
+@OptIn(ExperimentalContracts::class)
+fun <R> CoroutineScope.subscribeTempMessages(
+    coroutineContext: CoroutineContext = EmptyCoroutineContext,
+    concurrencyKind: Listener.ConcurrencyKind = Listener.ConcurrencyKind.CONCURRENT,
+    listeners: TempMessageSubscribersBuilder.() -> R
+): R {
+    contract {
+        callsInPlace(listeners, InvocationKind.EXACTLY_ONCE)
+    }
+    return TempMessageSubscribersBuilder(Unit) { filter, listener ->
+        subscribeAlways(coroutineContext, concurrencyKind) {
+            val toString = this.message.contentToString()
+            if (filter(this, toString))
+                listener(this, toString)
+        }
+    }.run(listeners)
+}
+
 /**
  * 订阅来自这个 [Bot] 的所有联系人的消息事件. 联系人可以是任意群或任意好友或临时会话.
  *
@@ -186,6 +212,31 @@ fun <R> Bot.subscribeFriendMessages(
     }.run(listeners)
 }
 
+
+/**
+ * 订阅来自这个 [Bot] 的所有临时会话消息事件.
+ *
+ * @see CoroutineScope.incoming 打开一个指定事件的接收通道
+ */
+@SinceMirai("0.35.0")
+@OptIn(ExperimentalContracts::class)
+fun <R> Bot.subscribeTempMessages(
+    coroutineContext: CoroutineContext = EmptyCoroutineContext,
+    concurrencyKind: Listener.ConcurrencyKind = Listener.ConcurrencyKind.CONCURRENT,
+    listeners: TempMessageSubscribersBuilder.() -> R
+): R {
+    contract {
+        callsInPlace(listeners, InvocationKind.EXACTLY_ONCE)
+    }
+    return TempMessageSubscribersBuilder(Unit) { filter, listener ->
+        this.subscribeAlways(coroutineContext, concurrencyKind) {
+            val toString = this.message.contentToString()
+            if (filter(this, toString))
+                listener(this, toString)
+        }
+    }.run(listeners)
+}
+
 /**
  * 打开一个指定事件的接收通道
  *
@@ -582,6 +633,10 @@ open class MessageSubscribersBuilder<M : ContactMessage, out Ret, R : RR, RR>(
     @MessageDsl
     fun sentByFriend(): ListeningFilter = newListeningFilter { this is FriendMessage }
 
+    /** 如果是好友发来的消息 */
+    @MessageDsl
+    fun sentByTemp(): ListeningFilter = newListeningFilter { this is TempMessage }
+
     /** 如果是管理员或群主发的消息 */
     @MessageDsl
     fun sentByOperator(): ListeningFilter =