@@ -15,6 +15,7 @@ import kotlinx.io.core.*
15
15
import kotlinx.serialization.Serializable
16
16
import net.mamoe.mirai.contact.MemberPermission
17
17
import net.mamoe.mirai.event.Event
18
+ import net.mamoe.mirai.event.broadcast
18
19
import net.mamoe.mirai.event.events.*
19
20
import net.mamoe.mirai.message.GroupMessage
20
21
import net.mamoe.mirai.qqandroid.QQAndroidBot
@@ -28,16 +29,21 @@ import net.mamoe.mirai.qqandroid.network.Packet
28
29
import net.mamoe.mirai.qqandroid.network.protocol.data.jce.MsgInfo
29
30
import net.mamoe.mirai.qqandroid.network.protocol.data.jce.OnlinePushPack
30
31
import net.mamoe.mirai.qqandroid.network.protocol.data.jce.RequestPacket
32
+ import net.mamoe.mirai.qqandroid.network.protocol.data.proto.*
31
33
import net.mamoe.mirai.qqandroid.network.protocol.data.proto.ImMsgBody
32
34
import net.mamoe.mirai.qqandroid.network.protocol.data.proto.MsgOnlinePush
35
+ import net.mamoe.mirai.qqandroid.network.protocol.data.proto.Oidb0x8fc
33
36
import net.mamoe.mirai.qqandroid.network.protocol.data.proto.OnlinePushTrans
34
37
import net.mamoe.mirai.qqandroid.network.protocol.data.proto.TroopTips0x857
38
+ import net.mamoe.mirai.qqandroid.network.protocol.packet.EMPTY_BYTE_ARRAY
35
39
import net.mamoe.mirai.qqandroid.network.protocol.packet.IncomingPacketFactory
36
40
import net.mamoe.mirai.qqandroid.network.protocol.packet.OutgoingPacket
37
41
import net.mamoe.mirai.qqandroid.network.protocol.packet.buildResponseUniPacket
38
42
import net.mamoe.mirai.qqandroid.utils._miraiContentToString
43
+ import net.mamoe.mirai.qqandroid.utils.encodeToString
39
44
import net.mamoe.mirai.qqandroid.utils.io.JceStruct
40
45
import net.mamoe.mirai.qqandroid.utils.io.readString
46
+ import net.mamoe.mirai.qqandroid.utils.io.serialization.*
41
47
import net.mamoe.mirai.qqandroid.utils.io.serialization.decodeUniPacket
42
48
import net.mamoe.mirai.qqandroid.utils.io.serialization.jce.JceId
43
49
import net.mamoe.mirai.qqandroid.utils.io.serialization.jceRequestSBuffer
@@ -79,12 +85,26 @@ internal class OnlinePush {
79
85
}
80
86
81
87
val group = bot.getGroup(pbPushMsg.msg.msgHead.groupInfo!! .groupCode)
88
+ val sender = group[pbPushMsg.msg.msgHead.fromUin] as MemberImpl
89
+ val name = extraInfo?.groupCard?.run {
90
+ try {
91
+ loadAs(Oidb0x8fc .CommCardNameBuf .serializer()).richCardName!! .first { it.text.isNotEmpty() }
92
+ .text.encodeToString()
93
+ } catch (e: Exception ) {
94
+ encodeToString()
95
+ }
96
+ } ? : pbPushMsg.msg.msgHead.groupInfo.groupCard // 没有 extraInfo 就从 head 里取
82
97
83
- // println(pbPushMsg.msg.msgBody.richText.contentToString())
84
98
val flags = extraInfo?.flags ? : 0
85
99
return GroupMessage (
86
- senderName = pbPushMsg.msg.msgHead.groupInfo.groupCard,
87
- sender = group[pbPushMsg.msg.msgHead.fromUin],
100
+ senderName = name.also {
101
+ if (it != sender.nameCard) {
102
+ val origin = sender._nameCard
103
+ sender._nameCard = name
104
+ MemberCardChangeEvent (origin, name, sender, sender).broadcast() // 不知道operator
105
+ }
106
+ },
107
+ sender = sender,
88
108
message = pbPushMsg.msg.toMessageChain(bot, groupIdOrZero = group.id, onlineSource = true ),
89
109
permission = when {
90
110
flags and 16 != 0 -> MemberPermission .ADMINISTRATOR
0 commit comments