From 9818c08054cca0536eaf04c3b415deac0cfb9860 Mon Sep 17 00:00:00 2001 From: cssxsh Date: Sat, 29 Oct 2022 18:11:20 +0800 Subject: [PATCH] [core] Add sign event (#2217) * add: SignEvent * add: SignEvent * add: hasRank * add: api dump * add: toString * add: toString * fix: sign for review --- .../android/api/android.api | 9 ++++ .../compatibility-validation/jvm/api/jvm.api | 9 ++++ .../kotlin/event/events/SignEvent.kt | 49 +++++++++++++++++++ .../group/GroupNotificationProcessor.kt | 14 ++++++ 4 files changed, 81 insertions(+) create mode 100644 mirai-core-api/src/commonMain/kotlin/event/events/SignEvent.kt diff --git a/mirai-core-api/compatibility-validation/android/api/android.api b/mirai-core-api/compatibility-validation/android/api/android.api index 4556ef388..c739ada49 100644 --- a/mirai-core-api/compatibility-validation/android/api/android.api +++ b/mirai-core-api/compatibility-validation/android/api/android.api @@ -2815,6 +2815,15 @@ public final class net/mamoe/mirai/event/events/OtherClientOnlineEvent : net/mam public fun toString ()Ljava/lang/String; } +public final class net/mamoe/mirai/event/events/SignEvent : net/mamoe/mirai/event/AbstractEvent, net/mamoe/mirai/event/events/BotEvent, net/mamoe/mirai/internal/network/Packet { + public fun getBot ()Lnet/mamoe/mirai/Bot; + public final fun getRank ()Ljava/lang/Integer; + public final fun getSign ()Ljava/lang/String; + public final fun getUser ()Lnet/mamoe/mirai/contact/UserOrBot; + public final fun hasRank ()Z + public fun toString ()Ljava/lang/String; +} + public final class net/mamoe/mirai/event/events/StrangerAddEvent : net/mamoe/mirai/event/AbstractEvent, net/mamoe/mirai/event/events/StrangerEvent, net/mamoe/mirai/internal/network/Packet { public final fun component1 ()Lnet/mamoe/mirai/contact/Stranger; public final fun copy (Lnet/mamoe/mirai/contact/Stranger;)Lnet/mamoe/mirai/event/events/StrangerAddEvent; diff --git a/mirai-core-api/compatibility-validation/jvm/api/jvm.api b/mirai-core-api/compatibility-validation/jvm/api/jvm.api index c565bb0ae..486cd4f87 100644 --- a/mirai-core-api/compatibility-validation/jvm/api/jvm.api +++ b/mirai-core-api/compatibility-validation/jvm/api/jvm.api @@ -2815,6 +2815,15 @@ public final class net/mamoe/mirai/event/events/OtherClientOnlineEvent : net/mam public fun toString ()Ljava/lang/String; } +public final class net/mamoe/mirai/event/events/SignEvent : net/mamoe/mirai/event/AbstractEvent, net/mamoe/mirai/event/events/BotEvent, net/mamoe/mirai/internal/network/Packet { + public fun getBot ()Lnet/mamoe/mirai/Bot; + public final fun getRank ()Ljava/lang/Integer; + public final fun getSign ()Ljava/lang/String; + public final fun getUser ()Lnet/mamoe/mirai/contact/UserOrBot; + public final fun hasRank ()Z + public fun toString ()Ljava/lang/String; +} + public final class net/mamoe/mirai/event/events/StrangerAddEvent : net/mamoe/mirai/event/AbstractEvent, net/mamoe/mirai/event/events/StrangerEvent, net/mamoe/mirai/internal/network/Packet { public final fun component1 ()Lnet/mamoe/mirai/contact/Stranger; public final fun copy (Lnet/mamoe/mirai/contact/Stranger;)Lnet/mamoe/mirai/event/events/StrangerAddEvent; diff --git a/mirai-core-api/src/commonMain/kotlin/event/events/SignEvent.kt b/mirai-core-api/src/commonMain/kotlin/event/events/SignEvent.kt new file mode 100644 index 000000000..b2acd4229 --- /dev/null +++ b/mirai-core-api/src/commonMain/kotlin/event/events/SignEvent.kt @@ -0,0 +1,49 @@ +/* + * Copyright 2020 Mamoe Technologies and contributors. + * + * 此源代码的使用受 GNU AFFERO GENERAL PUBLIC LICENSE version 3 许可证的约束, 可以在以下链接找到该许可证. + * Use of this source code is governed by the GNU AGPLv3 license that can be found through the following link. + * + * https://github.com/mamoe/mirai/blob/master/LICENSE + */ + +@file:JvmMultifileClass +@file:JvmName("BotEventsKt") + +package net.mamoe.mirai.event.events + +import net.mamoe.mirai.Bot +import net.mamoe.mirai.contact.* +import net.mamoe.mirai.event.AbstractEvent +import net.mamoe.mirai.internal.network.Packet +import net.mamoe.mirai.utils.MiraiInternalApi +import kotlin.jvm.JvmMultifileClass +import kotlin.jvm.JvmName + + +/** + * 打卡事件 + * @property user 打卡发起人 + * @property sign 打卡标记 + * @property hasRank 有排名的打卡,通常是前三名 + * @property rank 打卡排名,没有排名或识别失败时为 null + * @since 2.14 + */ +public class SignEvent @MiraiInternalApi constructor( + public val user: UserOrBot, + public val sign: String, + @get:JvmName("hasRank") + public val hasRank: Boolean, + public val rank: Int? +) : AbstractEvent(), BotEvent, Packet { + override val bot: Bot get() = user.bot + + override fun toString(): String { + return when (user) { + is Bot -> "SignEvent(bot=${user.id}, sign=${sign})" + is Member -> "SignEvent(bot=${user.bot.id}, group=${user.group.id}, member=${user.id}, sign=${sign})" + is Friend -> "SignEvent(bot=${user.bot.id}, friend=${user.id} sign=${sign})" + else -> "SignEvent(user=${user}, sign=${sign})" + } + } +} \ No newline at end of file diff --git a/mirai-core/src/commonMain/kotlin/network/notice/group/GroupNotificationProcessor.kt b/mirai-core/src/commonMain/kotlin/network/notice/group/GroupNotificationProcessor.kt index e41e7909a..4a4aae868 100644 --- a/mirai-core/src/commonMain/kotlin/network/notice/group/GroupNotificationProcessor.kt +++ b/mirai-core/src/commonMain/kotlin/network/notice/group/GroupNotificationProcessor.kt @@ -344,6 +344,20 @@ internal class GroupNotificationProcessor( subject = group, ) } + // 群签到/打卡 + 10036L, 10038L -> { + val user = grayTip.msgTemplParam["mqq_uin"]?.findMember() ?: group.botAsMember + val sign = grayTip.msgTemplParam["user_sign"].orEmpty() + val img = grayTip.msgTemplParam["rank_img"] + val rank = """今日第(\d+)个打卡""".toRegex().matchEntire(sign)?.groupValues?.get(1)?.toInt() + + collected += SignEvent( + user = user, + sign = sign, + hasRank = img != null, + rank = rank + ) + } // 龙王 10093L, 10094L, 1053L, 1054L, 1103L -> { val now = grayTip.msgTemplParam["uin"]?.findMember() ?: group.botAsMember