소스 검색

[core] Mock private message source implementation

Karlatemp 2 년 전
부모
커밋
9c77c22b32

+ 1 - 1
mirai-core-mock/src/internal/contact/MockFriendImpl.kt

@@ -124,7 +124,7 @@ internal class MockFriendImpl(
 
     override suspend fun says(message: MessageChain): MessageChain {
         val src = newMsgSrc(true, message) { ids, internalIds, time ->
-            OnlineMsgSrcFromFriend(ids, internalIds, time, message, bot, this)
+            OnlineMsgSrcFromFriend(ids, internalIds, time, message, bot, this, bot)
         }
         val msg = src.withMessage(message)
         FriendMessageEvent(this, msg, src.time).broadcast()

+ 1 - 1
mirai-core-mock/src/internal/contact/MockStrangerImpl.kt

@@ -87,7 +87,7 @@ internal class MockStrangerImpl(
 
     override suspend fun says(message: MessageChain): MessageChain {
         val src = newMsgSrc(true, message) { ids, internalIds, time ->
-            OnlineMsgSrcFromStranger(ids, internalIds, time, message, bot, this)
+            OnlineMsgSrcFromStranger(ids, internalIds, time, message, bot, this, bot)
         }
         val msg = src.withMessage(message)
         StrangerMessageEvent(this, msg, src.time).broadcast()

+ 24 - 3
mirai-core-mock/src/internal/msgsrc/OnlineMsgSrc.kt

@@ -23,6 +23,7 @@ import net.mamoe.mirai.message.MessageSerializers
 import net.mamoe.mirai.message.data.*
 import net.mamoe.mirai.mock.internal.contact.AbstractMockContact
 import net.mamoe.mirai.mock.internal.contact.MockImage
+import net.mamoe.mirai.utils.cast
 import net.mamoe.mirai.utils.currentTimeSeconds
 
 internal fun registerMockMsgSerializers() {
@@ -174,10 +175,17 @@ internal class OnlineMsgSrcFromFriend(
     override val time: Int,
     override val originalMessage: MessageChain,
     override val bot: Bot,
-    override val sender: Friend
+    override val sender: Friend,
+    override val target: ContactOrBot,
 ) : OnlineMessageSource.Incoming.FromFriend() {
     override val isOriginalMessageInitialized: Boolean get() = true
 
+    override val subject: Friend
+        get() {
+            if (target is Bot) return sender
+            return target.cast()
+        }
+
     object Serializer : KSerializer<MessageSource> by MessageSourceSerializerImpl("Mock_OnlineMessageSourceFromFriend")
 }
 
@@ -189,10 +197,17 @@ internal class OnlineMsgSrcFromStranger(
     override val time: Int,
     override val originalMessage: MessageChain,
     override val bot: Bot,
-    override val sender: Stranger
+    override val sender: Stranger,
+    override val target: ContactOrBot,
 ) : OnlineMessageSource.Incoming.FromStranger() {
     override val isOriginalMessageInitialized: Boolean get() = true
 
+    override val subject: Stranger
+        get() {
+            if (target is Bot) return sender
+            return target.cast()
+        }
+
     object Serializer : KSerializer<MessageSource> by MessageSourceSerializerImpl(
         "Mock_OnlineMessageSourceFromStranger"
     )
@@ -206,9 +221,15 @@ internal class OnlineMsgSrcFromTemp(
     override val time: Int,
     override val originalMessage: MessageChain,
     override val bot: Bot,
-    override val sender: Member
+    override val sender: Member,
+    override val target: ContactOrBot,
 ) : OnlineMessageSource.Incoming.FromTemp() {
     override val isOriginalMessageInitialized: Boolean get() = true
+    override val subject: Member
+        get() {
+            if (target is Bot) return sender
+            return target.cast()
+        }
 
     object Serializer : KSerializer<MessageSource> by MessageSourceSerializerImpl("Mock_OnlineMessageSourceFromTemp")