Skip to content

Commit 56c6372

Browse files
committed
Fix rich group name card, and support name card changed event. close #210
1 parent 2053ab1 commit 56c6372

File tree

1 file changed

+23
-3
lines changed
  • mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/chat/receive

1 file changed

+23
-3
lines changed

mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/chat/receive/OnlinePush.kt

+23-3
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import kotlinx.io.core.*
1515
import kotlinx.serialization.Serializable
1616
import net.mamoe.mirai.contact.MemberPermission
1717
import net.mamoe.mirai.event.Event
18+
import net.mamoe.mirai.event.broadcast
1819
import net.mamoe.mirai.event.events.*
1920
import net.mamoe.mirai.message.GroupMessage
2021
import net.mamoe.mirai.qqandroid.QQAndroidBot
@@ -28,16 +29,21 @@ import net.mamoe.mirai.qqandroid.network.Packet
2829
import net.mamoe.mirai.qqandroid.network.protocol.data.jce.MsgInfo
2930
import net.mamoe.mirai.qqandroid.network.protocol.data.jce.OnlinePushPack
3031
import net.mamoe.mirai.qqandroid.network.protocol.data.jce.RequestPacket
32+
import net.mamoe.mirai.qqandroid.network.protocol.data.proto.*
3133
import net.mamoe.mirai.qqandroid.network.protocol.data.proto.ImMsgBody
3234
import net.mamoe.mirai.qqandroid.network.protocol.data.proto.MsgOnlinePush
35+
import net.mamoe.mirai.qqandroid.network.protocol.data.proto.Oidb0x8fc
3336
import net.mamoe.mirai.qqandroid.network.protocol.data.proto.OnlinePushTrans
3437
import net.mamoe.mirai.qqandroid.network.protocol.data.proto.TroopTips0x857
38+
import net.mamoe.mirai.qqandroid.network.protocol.packet.EMPTY_BYTE_ARRAY
3539
import net.mamoe.mirai.qqandroid.network.protocol.packet.IncomingPacketFactory
3640
import net.mamoe.mirai.qqandroid.network.protocol.packet.OutgoingPacket
3741
import net.mamoe.mirai.qqandroid.network.protocol.packet.buildResponseUniPacket
3842
import net.mamoe.mirai.qqandroid.utils._miraiContentToString
43+
import net.mamoe.mirai.qqandroid.utils.encodeToString
3944
import net.mamoe.mirai.qqandroid.utils.io.JceStruct
4045
import net.mamoe.mirai.qqandroid.utils.io.readString
46+
import net.mamoe.mirai.qqandroid.utils.io.serialization.*
4147
import net.mamoe.mirai.qqandroid.utils.io.serialization.decodeUniPacket
4248
import net.mamoe.mirai.qqandroid.utils.io.serialization.jce.JceId
4349
import net.mamoe.mirai.qqandroid.utils.io.serialization.jceRequestSBuffer
@@ -79,12 +85,26 @@ internal class OnlinePush {
7985
}
8086

8187
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 里取
8297

83-
// println(pbPushMsg.msg.msgBody.richText.contentToString())
8498
val flags = extraInfo?.flags ?: 0
8599
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,
88108
message = pbPushMsg.msg.toMessageChain(bot, groupIdOrZero = group.id, onlineSource = true),
89109
permission = when {
90110
flags and 16 != 0 -> MemberPermission.ADMINISTRATOR

0 commit comments

Comments
 (0)