新增了冷却方式

新增了冷却方式,将回戳也改为模糊识别,可以一并回复消息
This commit is contained in:
Dream-Rainy 2023-03-15 00:56:00 +08:00
parent c2ef779a72
commit d800bd3103
No known key found for this signature in database
GPG Key ID: AB2FBC9C8DAB2AD5
2 changed files with 40 additions and 2 deletions

View File

@ -41,6 +41,21 @@ object JNRPluginConfig : AutoSavePluginConfig("jnr") {
@ValueDescription("群回复间隔0表示无限制") @ValueDescription("群回复间隔0表示无限制")
var groupInterval: Long by value(0L) 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 表示无限制 * 0 表示无限制

View File

@ -1,5 +1,6 @@
package top.jie65535.jnr package top.jie65535.jnr
import kotlinx.serialization.descriptors.PrimitiveKind
import net.mamoe.mirai.console.command.CommandManager.INSTANCE.register import net.mamoe.mirai.console.command.CommandManager.INSTANCE.register
import net.mamoe.mirai.console.plugin.jvm.JvmPluginDescription import net.mamoe.mirai.console.plugin.jvm.JvmPluginDescription
import net.mamoe.mirai.console.plugin.jvm.KotlinPlugin import net.mamoe.mirai.console.plugin.jvm.KotlinPlugin
@ -32,6 +33,10 @@ object JNudgeReply : KotlinPlugin(
) { ) {
private val groupLastReply = mutableMapOf<Long, LocalDateTime>() private val groupLastReply = mutableMapOf<Long, LocalDateTime>()
private val userLastReply = mutableMapOf<Long, LocalDateTime>() private val userLastReply = mutableMapOf<Long, LocalDateTime>()
private var jnrCount = 1
private var coolDownTime = (JNRPluginConfig.groupCoolDownTimeLowerBound..JNRPluginConfig.groupCoolDownTimeUpperBound).random().toInt()
private var isReply = true
private val groupCoolDownTime = mutableMapOf<Long, LocalDateTime>()
override fun onEnable() { override fun onEnable() {
JNRPluginConfig.reload() JNRPluginConfig.reload()
@ -41,7 +46,6 @@ object JNudgeReply : KotlinPlugin(
if (target.id == bot.id && target.id != from.id && JNRPluginConfig.replyMessageList.isNotEmpty()) { if (target.id == bot.id && target.id != from.id && JNRPluginConfig.replyMessageList.isNotEmpty()) {
var replyList: List<ReplyMessage> = JNRPluginConfig.replyMessageList var replyList: List<ReplyMessage> = JNRPluginConfig.replyMessageList
val now = LocalDateTime.now() val now = LocalDateTime.now()
var isReply = true
if (subject !is Group) { if (subject !is Group) {
if (JNRPluginConfig.userInterval > 0) { if (JNRPluginConfig.userInterval > 0) {
val t = userLastReply[subject.id] val t = userLastReply[subject.id]
@ -60,6 +64,23 @@ object JNudgeReply : KotlinPlugin(
} else { } else {
isReply = false 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) { if ((from as Member).permission.level >= (subject as Group).botPermission.level) {
replyList = replyList.filter { !it.message.startsWith("#group.mute:") } replyList = replyList.filter { !it.message.startsWith("#group.mute:") }
@ -101,8 +122,10 @@ object JNudgeReply : KotlinPlugin(
if (message.message.startsWith("#")) { if (message.message.startsWith("#")) {
when { when {
// 戳回去 // 戳回去
message.message == "#nudge" -> { message.message.startsWith("#nudge") -> {
event.from.nudge().sendTo(event.subject) event.from.nudge().sendTo(event.subject)
val messageTemp = message.message.substring(6)
sendRecordMessage(event.subject, messageTemp.deserializeMiraiCode())
logger.info("已尝试戳回发送者") logger.info("已尝试戳回发送者")
} }