diff --git a/mirai-core/src/commonMain/kotlin/message/protocol/impl/FileMessageProtocol.kt b/mirai-core/src/commonMain/kotlin/message/protocol/impl/FileMessageProtocol.kt
index 841c4161b..20047b36d 100644
--- a/mirai-core/src/commonMain/kotlin/message/protocol/impl/FileMessageProtocol.kt
+++ b/mirai-core/src/commonMain/kotlin/message/protocol/impl/FileMessageProtocol.kt
@@ -224,16 +224,19 @@ internal class FileMessageProtocol : MessageProtocol() {
             if (originalMsg != null && originalMsg.msgHead.msgType == 529) {
                 markAsConsumed()
                 val sub0x4 = originalMsg.msgBody.msgContent.loadAs(SubMsgType0x4.MsgBody.serializer())
-                if (sub0x4.msgNotOnlineFile != null) {
-                    collect(
-                        FriendFileMessageImpl(
-                            sub0x4.msgNotOnlineFile.fileUuid.decodeToString(),
-                            sub0x4.msgNotOnlineFile.fileName.decodeToString(),
-                            sub0x4.msgNotOnlineFile.fileSize,
-                            sub0x4.msgNotOnlineFile.fileMd5
-                        )
+                val msgNotOnline = sub0x4.msgNotOnlineFile ?: return
+
+                // notify that friend had downloaded the file.
+                if (msgNotOnline.subcmd == 2) return
+
+                collect(
+                    FriendFileMessageImpl(
+                        sub0x4.msgNotOnlineFile.fileUuid.decodeToString(),
+                        sub0x4.msgNotOnlineFile.fileName.decodeToString(),
+                        sub0x4.msgNotOnlineFile.fileSize,
+                        sub0x4.msgNotOnlineFile.fileMd5
                     )
-                }
+                )
                 return
             }
         }