diff --git a/src/main/kotlin/top/jie65535/jnr/JNRPluginConfig.kt b/src/main/kotlin/top/jie65535/jnr/JNRPluginConfig.kt index 6db422a..72483a6 100644 --- a/src/main/kotlin/top/jie65535/jnr/JNRPluginConfig.kt +++ b/src/main/kotlin/top/jie65535/jnr/JNRPluginConfig.kt @@ -41,6 +41,21 @@ object JNRPluginConfig : AutoSavePluginConfig("jnr") { @ValueDescription("群回复间隔(秒),0表示无限制") var groupInterval: Long by value(0L) + /** + * 群共享冷却时间 + * 本设定优先级高于群间隔时间*/ + @ValueDescription("群共享冷却时间上界,0表示无限制") + var groupCoolDownTimeUpperBound: Long by value(0L) + @ValueDescription("群共享冷却时间下界,0表示无限制") + var groupCoolDownTimeLowerBound: Long by value(0L) + @ValueDescription("冷却触发发送语句") + var replyMessageForRest: String by value("呜呜,被戳傻了。休息%s分钟") + @ValueDescription("群共享冷却默认触发最低次数") + var groupCoolDownTriggerCountMin: Long by value(0L) + @ValueDescription("群共享冷却默认触发最高次数,到此次数必定触发") + var groupCoolDownTriggerCountMax: Long by value(0L) + @ValueDescription("达到最低次数后的触发概率,1~100,按百分比触发") + var groupCoolDownTriggerProbability: Int by value(0) /** * 用户间隔(单位秒) * 0 表示无限制 diff --git a/src/main/kotlin/top/jie65535/jnr/JNudgeReply.kt b/src/main/kotlin/top/jie65535/jnr/JNudgeReply.kt index 46ba653..4536b3b 100644 --- a/src/main/kotlin/top/jie65535/jnr/JNudgeReply.kt +++ b/src/main/kotlin/top/jie65535/jnr/JNudgeReply.kt @@ -1,5 +1,6 @@ package top.jie65535.jnr +import kotlinx.serialization.descriptors.PrimitiveKind import net.mamoe.mirai.console.command.CommandManager.INSTANCE.register import net.mamoe.mirai.console.plugin.jvm.JvmPluginDescription import net.mamoe.mirai.console.plugin.jvm.KotlinPlugin @@ -32,6 +33,10 @@ object JNudgeReply : KotlinPlugin( ) { private val groupLastReply = mutableMapOf() private val userLastReply = mutableMapOf() + private var jnrCount = 1 + private var coolDownTime = (JNRPluginConfig.groupCoolDownTimeLowerBound..JNRPluginConfig.groupCoolDownTimeUpperBound).random().toInt() + private var isReply = true + private val groupCoolDownTime = mutableMapOf() override fun onEnable() { JNRPluginConfig.reload() @@ -41,7 +46,6 @@ object JNudgeReply : KotlinPlugin( if (target.id == bot.id && target.id != from.id && JNRPluginConfig.replyMessageList.isNotEmpty()) { var replyList: List = JNRPluginConfig.replyMessageList val now = LocalDateTime.now() - var isReply = true if (subject !is Group) { if (JNRPluginConfig.userInterval > 0) { val t = userLastReply[subject.id] @@ -60,6 +64,23 @@ object JNudgeReply : KotlinPlugin( } else { isReply = false } + } else if (JNRPluginConfig.groupCoolDownTimeUpperBound > 0) { + val randomNumber = (1..100).random() + if (groupCoolDownTime[subject.id] == null) + groupCoolDownTime[subject.id] = now + if (!isReply && (groupCoolDownTime[subject.id]?.plusMinutes(coolDownTime.toLong())!! > now)){ + logger.info("cd中,跳过") + }else if ((randomNumber >= (100-JNRPluginConfig.groupCoolDownTriggerProbability) && jnrCount >= JNRPluginConfig.groupCoolDownTriggerCountMin) || (jnrCount >= JNRPluginConfig.groupCoolDownTriggerCountMax)){ + groupCoolDownTime[subject.id] = now + isReply = false + jnrCount = 1 + val s = String.format(JNRPluginConfig.replyMessageForRest, coolDownTime.toString()) + sendRecordMessage(this.subject,s.deserializeMiraiCode()) + } else { + jnrCount += 1 + coolDownTime = (JNRPluginConfig.groupCoolDownTimeLowerBound..JNRPluginConfig.groupCoolDownTimeUpperBound).random().toInt() + isReply = true + } } if ((from as Member).permission.level >= (subject as Group).botPermission.level) { replyList = replyList.filter { !it.message.startsWith("#group.mute:") } @@ -101,8 +122,10 @@ object JNudgeReply : KotlinPlugin( if (message.message.startsWith("#")) { when { // 戳回去 - message.message == "#nudge" -> { + message.message.startsWith("#nudge") -> { event.from.nudge().sendTo(event.subject) + val messageTemp = message.message.substring(6) + sendRecordMessage(event.subject, messageTemp.deserializeMiraiCode()) logger.info("已尝试戳回发送者") }