Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[core] 增加群待办相关事件 #2723

Open
wants to merge 20 commits into
base: dev
Choose a base branch
from
44 changes: 43 additions & 1 deletion mirai-core-api/src/commonMain/kotlin/event/events/group.kt
Original file line number Diff line number Diff line change
Expand Up @@ -520,6 +520,29 @@ public data class MemberSpecialTitleChangeEvent @MiraiInternalApi constructor(
public override val operator: NormalMember?
) : GroupMemberEvent, GroupOperableEvent, AbstractEvent(), Packet, GroupMemberInfoChangeEvent

/**
* [Member] 活跃度头衔改变时的事件,目前只有 Bot 自身会触发
*/
@MiraiExperimentalApi
public class MemberTemperatureTitleChangeEvent(
/**
* 改变活跃度头衔的群成员
*/
public override val member: NormalMember,
/**
* 活跃度
*/
public val temperature: Int,
/**
* 当前头衔
*/
public val title: String
) : Packet, GroupMemberEvent, BotPassiveEvent, AbstractEvent() {
override fun toString(): String {
return "MemberTemperatureTitleChangeEvent(group=${group.id}, member=${member.id}, temperature=${temperature}, title=${title})"
}
}

// endregion


Expand Down Expand Up @@ -570,7 +593,7 @@ public data class MemberUnmuteEvent @MiraiInternalApi constructor(

// region 群荣誉
/**
* [Member] 荣誉改变时的事件, 目前只支持龙王
* [Member] 荣誉改变时的事件
*/
@MiraiExperimentalApi
public sealed class MemberHonorChangeEvent : GroupMemberEvent, BotPassiveEvent, Packet, AbstractEvent() {
Expand Down Expand Up @@ -633,4 +656,23 @@ public data class GroupTalkativeChangeEvent(

// endregion

// region 群待办

/**
* [Member] 完成群待办事件,可能会在成员阅读完群公告(待办)时触发
*/
@MiraiExperimentalApi
public class MemberReceivedEvent(
/**
* 完成群待办的群成员
*/
public override val member: NormalMember,
) : Packet, GroupMemberEvent, BotPassiveEvent, AbstractEvent() {
override fun toString(): String {
return "MemberReceivedEvent(group=${group.id}, member=${member.id})"
}
}

// endregion

// endregion
Original file line number Diff line number Diff line change
Expand Up @@ -358,6 +358,12 @@ internal class GroupNotificationProcessor(
rank = rank
)
}
// 群待办
10134L, 10135L -> {
// 阅读群公告可能会触发
val user = grayTip.msgTemplParam["uin"]?.findMember() ?: group.botAsMember
collected += MemberReceivedEvent(member = user)
}
// 龙王
10093L, 10094L, 1053L, 1054L, 1103L -> {
val now = grayTip.msgTemplParam["uin"]?.findMember() ?: group.botAsMember
Expand All @@ -376,14 +382,14 @@ internal class GroupNotificationProcessor(
}
}
// 群聊之火
1052L, 1129L -> {
1052L, 1129L, 10095L -> {
val now = grayTip.msgTemplParam["uin"]?.findMember() ?: group.botAsMember

now.info.honors += GroupHonorType.PERFORMER
collect(MemberHonorChangeEvent.Achieve(now, GroupHonorType.PERFORMER))
}
// 群聊炽焰
1055L -> {
1055L, 10096L -> {
val now = grayTip.msgTemplParam["uin"]?.findMember() ?: group.botAsMember

now.info.honors -= GroupHonorType.PERFORMER
Expand Down Expand Up @@ -411,7 +417,19 @@ internal class GroupNotificationProcessor(
collect(MemberHonorChangeEvent.Achieve(now, GroupHonorType.RED_PACKET))
}
}
//
// 等级头衔
10097L -> {
// XXX: 目前只有机器人本身会触发
val user = grayTip.msgTemplParam["uin"]?.findMember() ?: group.botAsMember
val level = grayTip.msgTemplParam["level"]?.removePrefix("LV")?.toInt() ?: 1
val title = grayTip.msgTemplParam["title"] ?: grayTip.msgTemplParam["level"] ?: ""

collected += MemberTemperatureTitleChangeEvent(
member = user,
temperature = level,
title = title
)
}
else -> {
markNotConsumed()
logger.debug {
Expand Down