Skip to content

Commit 9818c08

Browse files
authored
[core] Add sign event (#2217)
* add: SignEvent * add: SignEvent * add: hasRank * add: api dump * add: toString * add: toString * fix: sign for review
1 parent 17361c7 commit 9818c08

File tree

4 files changed

+81
-0
lines changed

4 files changed

+81
-0
lines changed

mirai-core-api/compatibility-validation/android/api/android.api

+9
Original file line numberDiff line numberDiff line change
@@ -2815,6 +2815,15 @@ public final class net/mamoe/mirai/event/events/OtherClientOnlineEvent : net/mam
28152815
public fun toString ()Ljava/lang/String;
28162816
}
28172817

2818+
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 {
2819+
public fun getBot ()Lnet/mamoe/mirai/Bot;
2820+
public final fun getRank ()Ljava/lang/Integer;
2821+
public final fun getSign ()Ljava/lang/String;
2822+
public final fun getUser ()Lnet/mamoe/mirai/contact/UserOrBot;
2823+
public final fun hasRank ()Z
2824+
public fun toString ()Ljava/lang/String;
2825+
}
2826+
28182827
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 {
28192828
public final fun component1 ()Lnet/mamoe/mirai/contact/Stranger;
28202829
public final fun copy (Lnet/mamoe/mirai/contact/Stranger;)Lnet/mamoe/mirai/event/events/StrangerAddEvent;

mirai-core-api/compatibility-validation/jvm/api/jvm.api

+9
Original file line numberDiff line numberDiff line change
@@ -2815,6 +2815,15 @@ public final class net/mamoe/mirai/event/events/OtherClientOnlineEvent : net/mam
28152815
public fun toString ()Ljava/lang/String;
28162816
}
28172817

2818+
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 {
2819+
public fun getBot ()Lnet/mamoe/mirai/Bot;
2820+
public final fun getRank ()Ljava/lang/Integer;
2821+
public final fun getSign ()Ljava/lang/String;
2822+
public final fun getUser ()Lnet/mamoe/mirai/contact/UserOrBot;
2823+
public final fun hasRank ()Z
2824+
public fun toString ()Ljava/lang/String;
2825+
}
2826+
28182827
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 {
28192828
public final fun component1 ()Lnet/mamoe/mirai/contact/Stranger;
28202829
public final fun copy (Lnet/mamoe/mirai/contact/Stranger;)Lnet/mamoe/mirai/event/events/StrangerAddEvent;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
/*
2+
* Copyright 2020 Mamoe Technologies and contributors.
3+
*
4+
* 此源代码的使用受 GNU AFFERO GENERAL PUBLIC LICENSE version 3 许可证的约束, 可以在以下链接找到该许可证.
5+
* Use of this source code is governed by the GNU AGPLv3 license that can be found through the following link.
6+
*
7+
* https://github.com/mamoe/mirai/blob/master/LICENSE
8+
*/
9+
10+
@file:JvmMultifileClass
11+
@file:JvmName("BotEventsKt")
12+
13+
package net.mamoe.mirai.event.events
14+
15+
import net.mamoe.mirai.Bot
16+
import net.mamoe.mirai.contact.*
17+
import net.mamoe.mirai.event.AbstractEvent
18+
import net.mamoe.mirai.internal.network.Packet
19+
import net.mamoe.mirai.utils.MiraiInternalApi
20+
import kotlin.jvm.JvmMultifileClass
21+
import kotlin.jvm.JvmName
22+
23+
24+
/**
25+
* 打卡事件
26+
* @property user 打卡发起人
27+
* @property sign 打卡标记
28+
* @property hasRank 有排名的打卡,通常是前三名
29+
* @property rank 打卡排名,没有排名或识别失败时为 null
30+
* @since 2.14
31+
*/
32+
public class SignEvent @MiraiInternalApi constructor(
33+
public val user: UserOrBot,
34+
public val sign: String,
35+
@get:JvmName("hasRank")
36+
public val hasRank: Boolean,
37+
public val rank: Int?
38+
) : AbstractEvent(), BotEvent, Packet {
39+
override val bot: Bot get() = user.bot
40+
41+
override fun toString(): String {
42+
return when (user) {
43+
is Bot -> "SignEvent(bot=${user.id}, sign=${sign})"
44+
is Member -> "SignEvent(bot=${user.bot.id}, group=${user.group.id}, member=${user.id}, sign=${sign})"
45+
is Friend -> "SignEvent(bot=${user.bot.id}, friend=${user.id} sign=${sign})"
46+
else -> "SignEvent(user=${user}, sign=${sign})"
47+
}
48+
}
49+
}

mirai-core/src/commonMain/kotlin/network/notice/group/GroupNotificationProcessor.kt

+14
Original file line numberDiff line numberDiff line change
@@ -344,6 +344,20 @@ internal class GroupNotificationProcessor(
344344
subject = group,
345345
)
346346
}
347+
// 群签到/打卡
348+
10036L, 10038L -> {
349+
val user = grayTip.msgTemplParam["mqq_uin"]?.findMember() ?: group.botAsMember
350+
val sign = grayTip.msgTemplParam["user_sign"].orEmpty()
351+
val img = grayTip.msgTemplParam["rank_img"]
352+
val rank = """今日第(\d+)个打卡""".toRegex().matchEntire(sign)?.groupValues?.get(1)?.toInt()
353+
354+
collected += SignEvent(
355+
user = user,
356+
sign = sign,
357+
hasRank = img != null,
358+
rank = rank
359+
)
360+
}
347361
// 龙王
348362
10093L, 10094L, 1053L, 1054L, 1103L -> {
349363
val now = grayTip.msgTemplParam["uin"]?.findMember() ?: group.botAsMember

0 commit comments

Comments
 (0)