|
|
@@ -14,7 +14,6 @@ import kotlinx.coroutines.FlowPreview
|
|
|
import kotlinx.coroutines.flow.*
|
|
|
import kotlinx.io.core.ByteReadPacket
|
|
|
import kotlinx.io.core.discardExact
|
|
|
-import net.mamoe.mirai.LowLevelAPI
|
|
|
import net.mamoe.mirai.contact.Group
|
|
|
import net.mamoe.mirai.contact.MemberPermission
|
|
|
import net.mamoe.mirai.data.MemberInfo
|
|
|
@@ -48,13 +47,15 @@ import net.mamoe.mirai.qqandroid.utils.io.serialization.writeProtoBuf
|
|
|
import net.mamoe.mirai.qqandroid.utils.read
|
|
|
import net.mamoe.mirai.qqandroid.utils.soutv
|
|
|
import net.mamoe.mirai.qqandroid.utils.toUHexString
|
|
|
-import net.mamoe.mirai.utils.*
|
|
|
+import net.mamoe.mirai.utils.MiraiInternalAPI
|
|
|
+import net.mamoe.mirai.utils.currentTimeSeconds
|
|
|
+import net.mamoe.mirai.utils.debug
|
|
|
+import net.mamoe.mirai.utils.warning
|
|
|
|
|
|
|
|
|
/**
|
|
|
* 获取好友消息和消息记录
|
|
|
*/
|
|
|
-@OptIn(MiraiInternalAPI::class)
|
|
|
internal object MessageSvcPbGetMsg : OutgoingPacketFactory<MessageSvcPbGetMsg.Response>("MessageSvc.PbGetMsg") {
|
|
|
@Suppress("SpellCheckingInspection")
|
|
|
operator fun invoke(
|
|
|
@@ -86,7 +87,6 @@ internal object MessageSvcPbGetMsg : OutgoingPacketFactory<MessageSvcPbGetMsg.Re
|
|
|
)
|
|
|
}
|
|
|
|
|
|
- @OptIn(MiraiInternalAPI::class)
|
|
|
open class GetMsgSuccess(delegate: List<Packet>) : Response(MsgSvc.SyncFlag.STOP, delegate), Event,
|
|
|
Packet.NoLog {
|
|
|
override fun toString(): String = "MessageSvcPbGetMsg.GetMsgSuccess(messages=<Iterable>))"
|
|
|
@@ -143,7 +143,6 @@ internal object MessageSvcPbGetMsg : OutgoingPacketFactory<MessageSvcPbGetMsg.Re
|
|
|
)
|
|
|
}
|
|
|
|
|
|
- @OptIn(LowLevelAPI::class)
|
|
|
private fun MsgComm.Msg.getNewMemberInfo(): MemberInfo {
|
|
|
return object : MemberInfo {
|
|
|
override val nameCard: String get() = ""
|
|
|
@@ -156,7 +155,7 @@ internal object MessageSvcPbGetMsg : OutgoingPacketFactory<MessageSvcPbGetMsg.Re
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- @OptIn(MiraiInternalAPI::class, MiraiExperimentalAPI::class, FlowPreview::class, LowLevelAPI::class)
|
|
|
+ @OptIn(FlowPreview::class)
|
|
|
override suspend fun ByteReadPacket.decode(bot: QQAndroidBot): Response {
|
|
|
// 00 00 01 0F 08 00 12 00 1A 34 08 FF C1 C4 F1 05 10 FF C1 C4 F1 05 18 E6 ED B9 C3 02 20 89 FE BE A4 06 28 8A CA 91 D1 0C 48 9B A5 BD 9B 0A 58 DE 9D 99 F8 08 60 1D 68 FF C1 C4 F1 05 70 00 20 02 2A 9D 01 08 F3 C1 C4 F1 05 10 A2 FF 8C F0 03 18 01 22 8A 01 0A 2A 08 A2 FF 8C F0 03 10 DD F1 92 B7 07 18 A6 01 20 0B 28 AE F9 01 30 F4 C1 C4 F1 05 38 A7 E3 D8 D4 84 80 80 80 01 B8 01 CD B5 01 12 08 08 01 10 00 18 00 20 00 1A 52 0A 50 0A 27 08 00 10 F4 C1 C4 F1 05 18 A7 E3 D8 D4 04 20 00 28 0C 30 00 38 86 01 40 22 4A 0C E5 BE AE E8 BD AF E9 9B 85 E9 BB 91 12 08 0A 06 0A 04 4E 4D 53 4C 12 15 AA 02 12 9A 01 0F 80 01 01 C8 01 00 F0 01 00 F8 01 00 90 02 00 12 04 4A 02 08 00 30 01 2A 15 08 97 A2 C1 F1 05 10 95 A6 F5 E5 0C 18 01 30 01 40 01 48 81 01 2A 10 08 D3 F7 B5 F1 05 10 DD F1 92 B7 07 18 01 30 01 38 00 42 00 48 00
|
|
|
val resp = readProtoBuf(MsgSvc.PbGetMsgResp.serializer())
|
|
|
@@ -179,9 +178,7 @@ internal object MessageSvcPbGetMsg : OutgoingPacketFactory<MessageSvcPbGetMsg.Re
|
|
|
.filterNot { it.msg == null }
|
|
|
.flatMapConcat { it.msg!!.asFlow() }
|
|
|
.also {
|
|
|
- MessageSvcPbDeleteMsg.delete(
|
|
|
- bot,
|
|
|
- it)
|
|
|
+ MessageSvcPbDeleteMsg.delete(bot, it)
|
|
|
} // 删除消息
|
|
|
.mapNotNull<MsgComm.Msg, Packet> { msg ->
|
|
|
|
|
|
@@ -375,12 +372,9 @@ internal object MessageSvcPbGetMsg : OutgoingPacketFactory<MessageSvcPbGetMsg.Re
|
|
|
|
|
|
val list: List<Packet> = messages.toList()
|
|
|
if (resp.syncFlag == MsgSvc.SyncFlag.STOP) {
|
|
|
- return GetMsgSuccess(
|
|
|
- list)
|
|
|
+ return GetMsgSuccess(list)
|
|
|
}
|
|
|
- return Response(
|
|
|
- resp.syncFlag,
|
|
|
- list)
|
|
|
+ return Response(resp.syncFlag, list)
|
|
|
}
|
|
|
|
|
|
override suspend fun QQAndroidBot.handle(packet: Response) {
|
|
|
@@ -388,20 +382,14 @@ internal object MessageSvcPbGetMsg : OutgoingPacketFactory<MessageSvcPbGetMsg.Re
|
|
|
MsgSvc.SyncFlag.STOP -> return
|
|
|
MsgSvc.SyncFlag.START -> {
|
|
|
network.run {
|
|
|
- MessageSvcPbGetMsg(
|
|
|
- client,
|
|
|
- MsgSvc.SyncFlag.CONTINUE,
|
|
|
- currentTimeSeconds).sendAndExpect<Packet>()
|
|
|
+ MessageSvcPbGetMsg(client, MsgSvc.SyncFlag.CONTINUE, currentTimeSeconds).sendAndExpect<Packet>()
|
|
|
}
|
|
|
return
|
|
|
}
|
|
|
|
|
|
MsgSvc.SyncFlag.CONTINUE -> {
|
|
|
network.run {
|
|
|
- MessageSvcPbGetMsg(
|
|
|
- client,
|
|
|
- MsgSvc.SyncFlag.CONTINUE,
|
|
|
- currentTimeSeconds).sendAndExpect<Packet>()
|
|
|
+ MessageSvcPbGetMsg(client, MsgSvc.SyncFlag.CONTINUE, currentTimeSeconds).sendAndExpect<Packet>()
|
|
|
}
|
|
|
return
|
|
|
}
|