[core] Add sign event (#2217)

* add: SignEvent

* add: SignEvent

* add: hasRank

* add: api dump

* add: toString

* add: toString

* fix: sign for review
This commit is contained in:
cssxsh 2022-10-29 18:11:20 +08:00 committed by GitHub
parent 17361c745a
commit 9818c08054
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 81 additions and 0 deletions

View File

@ -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;

View File

@ -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;

View File

@ -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})"
}
}
}

View File

@ -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