Skip to content

Commit 283cf03

Browse files
committed
feat(core): refresh cached member role on receiving message
1 parent dc427ab commit 283cf03

3 files changed

Lines changed: 26 additions & 2 deletions

File tree

acidify-core/src/commonMain/kotlin/org/ntqqrev/acidify/event/internal/MsgPushTransformer.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ internal object MsgPushTransformer : AbstractTransformer("trpc.msg.olpush.OlPush
6969
memberData.copy(
7070
nickname = msg.extraInfo.nick.ifEmpty { memberData.nickname },
7171
card = msg.extraInfo.groupCard,
72+
role = msg.extraInfo.role,
7273
specialTitle = msg.extraInfo.specialTitle,
7374
level = msg.extraInfo.level,
7475
lastSpokeAt = msg.timestamp,

acidify-core/src/commonMain/kotlin/org/ntqqrev/acidify/message/BotIncomingMessage.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package org.ntqqrev.acidify.message
22

33
import org.ntqqrev.acidify.internal.proto.message.CommonMessage
4+
import org.ntqqrev.acidify.struct.GroupMemberRole
45
import kotlin.js.JsExport
56

67
/**
@@ -47,6 +48,7 @@ data class BotIncomingMessage internal constructor(
4748
data class ExtraInfo internal constructor(
4849
val nick: String,
4950
val groupCard: String,
51+
val role: GroupMemberRole,
5052
val specialTitle: String,
5153
val level: Int,
5254
)

acidify-core/src/commonMain/kotlin/org/ntqqrev/acidify/message/internal/MessageParsingExt.kt

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import org.ntqqrev.acidify.internal.proto.message.extra.PrivateFileExtra
1111
import org.ntqqrev.acidify.internal.util.pbDecode
1212
import org.ntqqrev.acidify.message.*
1313
import org.ntqqrev.acidify.message.BotIncomingMessage.ExtraInfo
14+
import org.ntqqrev.acidify.struct.GroupMemberRole
1415

1516
internal fun AbstractBot.parseMessage(raw: CommonMessage): BotIncomingMessage? {
1617
val contentHead = raw.contentHead
@@ -93,13 +94,19 @@ internal inline fun AbstractBot.buildSegments(
9394

9495
var extraInfoNick: String? = null
9596
var extraInfoGroupCard: String? = null
97+
var extraInfoRole: GroupMemberRole? = null
9698
var extraInfoSpecialTitle: String? = null
9799
var extraInfoLevel: Int? = null
98100

99101
while (ctx.hasNext()) {
100102
ctx.tryPeekType { extraInfo }?.let {
101103
extraInfoNick = it.nick
102104
extraInfoGroupCard = it.groupCard
105+
extraInfoRole = when {
106+
it.flags and 0b01000 > 0 -> GroupMemberRole.OWNER
107+
it.flags and 0b10000 > 0 -> GroupMemberRole.ADMIN
108+
else -> GroupMemberRole.MEMBER
109+
}
103110
extraInfoSpecialTitle = it.senderTitle
104111
ctx.consume()
105112
continue
@@ -122,8 +129,22 @@ internal inline fun AbstractBot.buildSegments(
122129
}
123130
}
124131

125-
if (extraInfoNick != null && extraInfoGroupCard != null && extraInfoSpecialTitle != null && extraInfoLevel != null) {
126-
onExtraInfo(ExtraInfo(extraInfoNick, extraInfoGroupCard, extraInfoSpecialTitle, extraInfoLevel))
132+
if (
133+
extraInfoNick != null
134+
&& extraInfoGroupCard != null
135+
&& extraInfoRole != null
136+
&& extraInfoSpecialTitle != null
137+
&& extraInfoLevel != null
138+
) {
139+
onExtraInfo(
140+
ExtraInfo(
141+
extraInfoNick,
142+
extraInfoGroupCard,
143+
extraInfoRole,
144+
extraInfoSpecialTitle,
145+
extraInfoLevel
146+
)
147+
)
127148
}
128149

129150
return segments

0 commit comments

Comments
 (0)