Skip to content

Commit

Permalink
修复戳一戳 ,机器人误以为有人戳自己 (#2844)
Browse files Browse the repository at this point in the history
* 修复戳一戳 ,机器人误以为有人戳自己

* Update GroupNotificationProcessor.kt

* 呃,我简单粗暴写成bot了,应该是group.botAsMemebr

* 代码格式fix

* Apply suggestions from code review

---------

Co-authored-by: Him188 <Him188@mamoe.net>
  • Loading branch information
zhaodice and Him188 authored Mar 30, 2024
1 parent 8768058 commit f7649d2
Showing 1 changed file with 31 additions and 9 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ package net.mamoe.mirai.internal.network.notice.group

import io.ktor.utils.io.core.*
import net.mamoe.mirai.contact.NormalMember
import net.mamoe.mirai.contact.UserOrBot
import net.mamoe.mirai.contact.getMember
import net.mamoe.mirai.data.GroupHonorType
import net.mamoe.mirai.event.events.*
Expand Down Expand Up @@ -315,6 +316,7 @@ internal class GroupNotificationProcessor(
}
}


/**
* @see NudgeEvent
* @see MemberHonorChangeEvent
Expand All @@ -324,25 +326,45 @@ internal class GroupNotificationProcessor(
private fun NoticePipelineContext.processGeneralGrayTip(
data: MsgType0x2DC,
) = data.context {

val grayTip = buf.loadAs(TroopTips0x857.NotifyMsgBody.serializer(), 1).optGeneralGrayTip
markAsConsumed()
when (grayTip?.templId) {
// 群戳一戳
10043L, 1133L, 1132L, 1134L, 1135L, 1136L -> {

fun String.findUser(): UserOrBot? {
return if (this == bot.id.toString()) {
group.botAsMember
} else {
this.findMember() ?: this.findFriendOrStranger()
}
}

// group nudge
// 预置数据,服务器将不会提供己方已知消息
val action = grayTip.msgTemplParam["action_str"].orEmpty()
val from = grayTip.msgTemplParam["uin_str1"]?.findMember() ?: group.botAsMember
val target = grayTip.msgTemplParam["uin_str2"]?.findMember() ?: group.botAsMember
val from = grayTip.msgTemplParam["uin_str1"]
val target = grayTip.msgTemplParam["uin_str2"]
val suffix = grayTip.msgTemplParam["suffix_str"].orEmpty()

collected += NudgeEvent(
from = if (from.id == bot.id) bot else from,
target = if (target.id == bot.id) bot else target,
action = action,
suffix = suffix,
subject = group,
)
val fromUser = from?.findUser()
val targetUser = target?.findUser()

if (fromUser == null || targetUser == null) {
markNotConsumed()
logger.debug {
"Cannot find from or target in Transformers528 0x14 template\ntemplId=${grayTip.templId}\nPermList=${grayTip.msgTemplParam.structureToString()}"
}
} else {
collected += NudgeEvent(
from = fromUser,
target = targetUser,
action = action,
suffix = suffix,
subject = group,
)
}
}
// 群签到/打卡
10036L, 10038L -> {
Expand Down

0 comments on commit f7649d2

Please sign in to comment.