Forráskód Böngészése

Unified message logs

Him188 6 éve
szülő
commit
f6cc90a893

+ 57 - 0
mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/contact/util.kt

@@ -0,0 +1,57 @@
+/*
+ * Copyright 2020 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.
+ *
+ * https://github.com/mamoe/mirai/blob/master/LICENSE
+ */
+
+package net.mamoe.mirai.qqandroid.contact
+
+import net.mamoe.mirai.contact.Contact
+import net.mamoe.mirai.contact.QQ
+import net.mamoe.mirai.event.broadcast
+import net.mamoe.mirai.event.events.EventCancelledException
+import net.mamoe.mirai.event.events.MessageSendEvent
+import net.mamoe.mirai.message.MessageReceipt
+import net.mamoe.mirai.message.data.LongMessage
+import net.mamoe.mirai.message.data.Message
+import net.mamoe.mirai.message.data.QuoteReply
+import net.mamoe.mirai.message.data.asMessageChain
+import net.mamoe.mirai.qqandroid.asQQAndroidBot
+import net.mamoe.mirai.qqandroid.message.MessageSourceToFriendImpl
+import net.mamoe.mirai.qqandroid.message.ensureSequenceIdAvailable
+import net.mamoe.mirai.qqandroid.message.firstIsInstanceOrNull
+import net.mamoe.mirai.qqandroid.network.QQAndroidBotNetworkHandler
+import net.mamoe.mirai.qqandroid.network.protocol.packet.chat.receive.MessageSvc
+import net.mamoe.mirai.utils.MiraiExperimentalAPI
+import net.mamoe.mirai.utils.MiraiInternalAPI
+
+internal suspend fun QQ.sendMessageImpl(message: Message): MessageReceipt<QQ> {
+    val event = MessageSendEvent.FriendMessageSendEvent(this, message.asMessageChain()).broadcast()
+    if (event.isCancelled) {
+        throw EventCancelledException("cancelled by FriendMessageSendEvent")
+    }
+    event.message.firstIsInstanceOrNull<QuoteReply>()?.source?.ensureSequenceIdAvailable()
+    lateinit var source: MessageSourceToFriendImpl
+    (bot.network as QQAndroidBotNetworkHandler).run {
+        check(
+            MessageSvc.PbSendMsg.createToFriend(
+                bot.asQQAndroidBot().client,
+                this@sendMessageImpl,
+                event.message
+            ) {
+                source = it
+            }.sendAndExpect<MessageSvc.PbSendMsg.Response>() is MessageSvc.PbSendMsg.Response.SUCCESS
+        ) { "send message failed" }
+    }
+    return MessageReceipt(source, this, null)
+}
+
+@OptIn(MiraiInternalAPI::class, MiraiExperimentalAPI::class)
+internal fun Contact.logMessageSent(message: Message) {
+    if (message !is LongMessage) {
+        bot.logger.verbose("$this <- $message")
+    }
+}