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
36 changes: 36 additions & 0 deletions mirai-core-api/compatibility-validation/android/api/android.api
Original file line number Diff line number Diff line change
Expand Up @@ -2570,6 +2570,18 @@ public final class net/mamoe/mirai/event/events/MemberCardChangeEvent : net/mamo
public fun toString ()Ljava/lang/String;
}

public final class net/mamoe/mirai/event/events/MemberCompleteTodoEvent : net/mamoe/mirai/event/AbstractEvent, net/mamoe/mirai/event/events/BotPassiveEvent, net/mamoe/mirai/event/events/GroupMemberEvent, net/mamoe/mirai/internal/network/Packet {
public fun <init> (Lnet/mamoe/mirai/contact/NormalMember;)V
public synthetic fun getMember ()Lnet/mamoe/mirai/contact/Member;
public fun getMember ()Lnet/mamoe/mirai/contact/NormalMember;
public fun toString ()Ljava/lang/String;
}

public abstract class net/mamoe/mirai/event/events/MemberHonorChangeEvent : net/mamoe/mirai/event/AbstractEvent, net/mamoe/mirai/event/events/BotPassiveEvent, net/mamoe/mirai/event/events/GroupMemberEvent, net/mamoe/mirai/internal/network/Packet {
public abstract fun getHonorType ()I
public abstract fun getMember ()Lnet/mamoe/mirai/contact/NormalMember;
}

public final class net/mamoe/mirai/event/events/MemberHonorChangeEvent$Achieve : net/mamoe/mirai/event/events/MemberHonorChangeEvent {
public synthetic fun <init> (Lnet/mamoe/mirai/contact/NormalMember;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
public final fun component1 ()Lnet/mamoe/mirai/contact/NormalMember;
Expand Down Expand Up @@ -2714,6 +2726,14 @@ public final class net/mamoe/mirai/event/events/MemberLeaveEvent$Quit : net/mamo
public fun toString ()Ljava/lang/String;
}

public final class net/mamoe/mirai/event/events/MemberLuckyWordEvent : net/mamoe/mirai/event/AbstractEvent, net/mamoe/mirai/event/events/BotPassiveEvent, net/mamoe/mirai/event/events/GroupMemberEvent, net/mamoe/mirai/internal/network/Packet {
public fun <init> (Lnet/mamoe/mirai/contact/NormalMember;Ljava/util/List;)V
public final fun getImages ()Ljava/util/List;
public synthetic fun getMember ()Lnet/mamoe/mirai/contact/Member;
public fun getMember ()Lnet/mamoe/mirai/contact/NormalMember;
public fun toString ()Ljava/lang/String;
}

public final class net/mamoe/mirai/event/events/MemberMuteEvent : net/mamoe/mirai/event/AbstractEvent, net/mamoe/mirai/event/events/GroupMemberEvent, net/mamoe/mirai/event/events/GroupMemberInfoChangeEvent, net/mamoe/mirai/event/events/GroupOperableEvent, net/mamoe/mirai/internal/network/Packet {
public final fun component1 ()Lnet/mamoe/mirai/contact/Member;
public final fun component2 ()I
Expand Down Expand Up @@ -2743,6 +2763,13 @@ public final class net/mamoe/mirai/event/events/MemberPermissionChangeEvent : ne
public fun toString ()Ljava/lang/String;
}

public final class net/mamoe/mirai/event/events/MemberSetTodoEvent : net/mamoe/mirai/event/AbstractEvent, net/mamoe/mirai/event/events/BotPassiveEvent, net/mamoe/mirai/event/events/GroupMemberEvent, net/mamoe/mirai/internal/network/Packet {
public fun <init> (Lnet/mamoe/mirai/contact/NormalMember;)V
public synthetic fun getMember ()Lnet/mamoe/mirai/contact/Member;
public fun getMember ()Lnet/mamoe/mirai/contact/NormalMember;
public fun toString ()Ljava/lang/String;
}

public final class net/mamoe/mirai/event/events/MemberSpecialTitleChangeEvent : net/mamoe/mirai/event/AbstractEvent, net/mamoe/mirai/event/events/GroupMemberEvent, net/mamoe/mirai/event/events/GroupMemberInfoChangeEvent, net/mamoe/mirai/event/events/GroupOperableEvent, net/mamoe/mirai/internal/network/Packet {
public final fun component1 ()Ljava/lang/String;
public final fun component2 ()Ljava/lang/String;
Expand All @@ -2761,6 +2788,15 @@ public final class net/mamoe/mirai/event/events/MemberSpecialTitleChangeEvent :
public fun toString ()Ljava/lang/String;
}

public final class net/mamoe/mirai/event/events/MemberTemperatureTitleChangeEvent : net/mamoe/mirai/event/AbstractEvent, net/mamoe/mirai/event/events/BotPassiveEvent, net/mamoe/mirai/event/events/GroupMemberEvent, net/mamoe/mirai/internal/network/Packet {
public fun <init> (Lnet/mamoe/mirai/contact/NormalMember;ILjava/lang/String;)V
public synthetic fun getMember ()Lnet/mamoe/mirai/contact/Member;
public fun getMember ()Lnet/mamoe/mirai/contact/NormalMember;
public final fun getTemperature ()I
public final fun getTitle ()Ljava/lang/String;
public fun toString ()Ljava/lang/String;
}

public final class net/mamoe/mirai/event/events/MemberUnmuteEvent : net/mamoe/mirai/event/AbstractEvent, net/mamoe/mirai/event/events/GroupMemberEvent, net/mamoe/mirai/event/events/GroupMemberInfoChangeEvent, net/mamoe/mirai/event/events/GroupOperableEvent, net/mamoe/mirai/internal/network/Packet {
public final fun component1 ()Lnet/mamoe/mirai/contact/Member;
public final fun component2 ()Lnet/mamoe/mirai/contact/Member;
Expand Down
36 changes: 36 additions & 0 deletions mirai-core-api/compatibility-validation/jvm/api/jvm.api
Original file line number Diff line number Diff line change
Expand Up @@ -2570,6 +2570,18 @@ public final class net/mamoe/mirai/event/events/MemberCardChangeEvent : net/mamo
public fun toString ()Ljava/lang/String;
}

public final class net/mamoe/mirai/event/events/MemberCompleteTodoEvent : net/mamoe/mirai/event/AbstractEvent, net/mamoe/mirai/event/events/BotPassiveEvent, net/mamoe/mirai/event/events/GroupMemberEvent, net/mamoe/mirai/internal/network/Packet {
public fun <init> (Lnet/mamoe/mirai/contact/NormalMember;)V
public synthetic fun getMember ()Lnet/mamoe/mirai/contact/Member;
public fun getMember ()Lnet/mamoe/mirai/contact/NormalMember;
public fun toString ()Ljava/lang/String;
}

public abstract class net/mamoe/mirai/event/events/MemberHonorChangeEvent : net/mamoe/mirai/event/AbstractEvent, net/mamoe/mirai/event/events/BotPassiveEvent, net/mamoe/mirai/event/events/GroupMemberEvent, net/mamoe/mirai/internal/network/Packet {
public abstract fun getHonorType ()I
public abstract fun getMember ()Lnet/mamoe/mirai/contact/NormalMember;
}

public final class net/mamoe/mirai/event/events/MemberHonorChangeEvent$Achieve : net/mamoe/mirai/event/events/MemberHonorChangeEvent {
public synthetic fun <init> (Lnet/mamoe/mirai/contact/NormalMember;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
public final fun component1 ()Lnet/mamoe/mirai/contact/NormalMember;
Expand Down Expand Up @@ -2714,6 +2726,14 @@ public final class net/mamoe/mirai/event/events/MemberLeaveEvent$Quit : net/mamo
public fun toString ()Ljava/lang/String;
}

public final class net/mamoe/mirai/event/events/MemberLuckyWordEvent : net/mamoe/mirai/event/AbstractEvent, net/mamoe/mirai/event/events/BotPassiveEvent, net/mamoe/mirai/event/events/GroupMemberEvent, net/mamoe/mirai/internal/network/Packet {
public fun <init> (Lnet/mamoe/mirai/contact/NormalMember;Ljava/util/List;)V
public final fun getImages ()Ljava/util/List;
public synthetic fun getMember ()Lnet/mamoe/mirai/contact/Member;
public fun getMember ()Lnet/mamoe/mirai/contact/NormalMember;
public fun toString ()Ljava/lang/String;
}

public final class net/mamoe/mirai/event/events/MemberMuteEvent : net/mamoe/mirai/event/AbstractEvent, net/mamoe/mirai/event/events/GroupMemberEvent, net/mamoe/mirai/event/events/GroupMemberInfoChangeEvent, net/mamoe/mirai/event/events/GroupOperableEvent, net/mamoe/mirai/internal/network/Packet {
public final fun component1 ()Lnet/mamoe/mirai/contact/Member;
public final fun component2 ()I
Expand Down Expand Up @@ -2743,6 +2763,13 @@ public final class net/mamoe/mirai/event/events/MemberPermissionChangeEvent : ne
public fun toString ()Ljava/lang/String;
}

public final class net/mamoe/mirai/event/events/MemberSetTodoEvent : net/mamoe/mirai/event/AbstractEvent, net/mamoe/mirai/event/events/BotPassiveEvent, net/mamoe/mirai/event/events/GroupMemberEvent, net/mamoe/mirai/internal/network/Packet {
public fun <init> (Lnet/mamoe/mirai/contact/NormalMember;)V
public synthetic fun getMember ()Lnet/mamoe/mirai/contact/Member;
public fun getMember ()Lnet/mamoe/mirai/contact/NormalMember;
public fun toString ()Ljava/lang/String;
}

public final class net/mamoe/mirai/event/events/MemberSpecialTitleChangeEvent : net/mamoe/mirai/event/AbstractEvent, net/mamoe/mirai/event/events/GroupMemberEvent, net/mamoe/mirai/event/events/GroupMemberInfoChangeEvent, net/mamoe/mirai/event/events/GroupOperableEvent, net/mamoe/mirai/internal/network/Packet {
public final fun component1 ()Ljava/lang/String;
public final fun component2 ()Ljava/lang/String;
Expand All @@ -2761,6 +2788,15 @@ public final class net/mamoe/mirai/event/events/MemberSpecialTitleChangeEvent :
public fun toString ()Ljava/lang/String;
}

public final class net/mamoe/mirai/event/events/MemberTemperatureTitleChangeEvent : net/mamoe/mirai/event/AbstractEvent, net/mamoe/mirai/event/events/BotPassiveEvent, net/mamoe/mirai/event/events/GroupMemberEvent, net/mamoe/mirai/internal/network/Packet {
public fun <init> (Lnet/mamoe/mirai/contact/NormalMember;ILjava/lang/String;)V
public synthetic fun getMember ()Lnet/mamoe/mirai/contact/Member;
public fun getMember ()Lnet/mamoe/mirai/contact/NormalMember;
public final fun getTemperature ()I
public final fun getTitle ()Ljava/lang/String;
public fun toString ()Ljava/lang/String;
}

public final class net/mamoe/mirai/event/events/MemberUnmuteEvent : net/mamoe/mirai/event/AbstractEvent, net/mamoe/mirai/event/events/GroupMemberEvent, net/mamoe/mirai/event/events/GroupMemberInfoChangeEvent, net/mamoe/mirai/event/events/GroupOperableEvent, net/mamoe/mirai/internal/network/Packet {
public final fun component1 ()Lnet/mamoe/mirai/contact/Member;
public final fun component2 ()Lnet/mamoe/mirai/contact/Member;
Expand Down
81 changes: 77 additions & 4 deletions mirai-core-api/src/commonMain/kotlin/event/events/group.kt
Original file line number Diff line number Diff line change
Expand Up @@ -520,8 +520,29 @@ public data class MemberSpecialTitleChangeEvent @MiraiInternalApi constructor(
public override val operator: NormalMember?
) : GroupMemberEvent, GroupOperableEvent, AbstractEvent(), Packet, GroupMemberInfoChangeEvent

// endregion
/**
* [Member] 活跃度头衔改变时的事件,目前只有 Bot 自身会触发
*/
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

// region 成员权限

Expand All @@ -536,7 +557,6 @@ public data class MemberPermissionChangeEvent @MiraiInternalApi constructor(

// endregion


// region 禁言

/**
Expand Down Expand Up @@ -570,9 +590,8 @@ public data class MemberUnmuteEvent @MiraiInternalApi constructor(

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

// endregion

// region 群幸运词

/**
* [Member] 触发群幸运词事件
*/
public class MemberLuckyWordEvent(
/**
* 触发群幸运词的群成员
*/
public override val member: NormalMember,
/**
* 群幸运词的图片链接
*/
public val images: List<String>
) : Packet, GroupMemberEvent, BotPassiveEvent, AbstractEvent() {
override fun toString(): String {
return "MemberLuckyWordEvent(group=${group.id}, member=${member.id})"
}
}

// endregion

// region 群待办

/**
* [Member] 设置群待办事件
*/
public class MemberSetTodoEvent(
/**
* 设置群待办的群成员
*/
public override val member: NormalMember,
) : Packet, GroupMemberEvent, BotPassiveEvent, AbstractEvent() {
override fun toString(): String {
return "MemberSetTodoEvent(group=${group.id}, member=${member.id})"
}
}

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

// endregion

// endregion
Original file line number Diff line number Diff line change
Expand Up @@ -325,8 +325,23 @@ internal class GroupNotificationProcessor(
data: MsgType0x2DC,
) = data.context {
val grayTip = buf.loadAs(TroopTips0x857.NotifyMsgBody.serializer(), 1).optGeneralGrayTip
?: return@context markNotConsumed()
markAsConsumed()
when (grayTip?.templId) {
when (grayTip.templId) {
// 群幸运词
10047L, 10048L -> {
val user = grayTip.msgTemplParam["uin"]?.findMember() ?: group.botAsMember
val images = listOfNotNull(
grayTip.msgTemplParam["img_url"],
grayTip.msgTemplParam["img_url_1"],
grayTip.msgTemplParam["img_url_2"]
)

collected += MemberLuckyWordEvent(
member = user,
images = images
)
}
// 群戳一戳
10043L, 1133L, 1132L, 1134L, 1135L, 1136L -> {
// group nudge
Expand Down Expand Up @@ -358,6 +373,14 @@ internal class GroupNotificationProcessor(
rank = rank
)
}
// 群待办
10134L, 10135L -> {
val user = grayTip.msgTemplParam["uin"]?.findMember() ?: group.botAsMember
when (grayTip.templId) {
10134L -> collected += MemberSetTodoEvent(member = user)
10135L -> collected += MemberCompleteTodoEvent(member = user)
}
}
// 龙王
10093L, 10094L, 1053L, 1054L, 1103L -> {
val now = grayTip.msgTemplParam["uin"]?.findMember() ?: group.botAsMember
Expand All @@ -376,14 +399,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,11 +434,23 @@ 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")?.toIntOrNull() ?: 1
val title = grayTip.msgTemplParam["title"] ?: grayTip.msgTemplParam["level"] ?: ""

collected += MemberTemperatureTitleChangeEvent(
member = user,
temperature = level,
title = title
)
}
else -> {
markNotConsumed()
logger.debug {
"Unknown Transformers528 0x14 template\ntemplId=${grayTip?.templId}\nPermList=${grayTip?.msgTemplParam?.structureToString()}"
"Unknown Transformers528 0x14 template\ntemplId=${grayTip.templId}\nPermList=${grayTip.msgTemplParam.structureToString()}"
}
}
}
Expand Down