Merge pull request #6 from YehowahLiu/feat_actions

新增特殊动作响应
 - 戳回去
 - 禁言
This commit is contained in:
2022-04-17 09:16:31 +08:00 committed by GitHub
commit 3a445f0e79
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 69 additions and 4 deletions

View File

@ -1,4 +1,10 @@
# mirai-console-jnr-plugin
MiraiConsolePlugin 自定义戳一戳回复消息
其中, 下列消息具有特殊含义:
`#nudge` 戳回去
`#group.mute:30` 禁言30s, 可以自定义禁言时间, 单位秒
![Use example image](doc/example.png)

View File

@ -1,8 +1,13 @@
package top.jie65535.jnr
import net.mamoe.mirai.console.command.CommandManager.INSTANCE.register
import net.mamoe.mirai.console.command.descriptor.ExperimentalCommandDescriptors
import net.mamoe.mirai.console.plugin.jvm.JvmPluginDescription
import net.mamoe.mirai.console.plugin.jvm.KotlinPlugin
import net.mamoe.mirai.console.util.ConsoleExperimentalApi
import net.mamoe.mirai.contact.Group
import net.mamoe.mirai.contact.Member
import net.mamoe.mirai.contact.PermissionDeniedException
import net.mamoe.mirai.event.EventPriority
import net.mamoe.mirai.event.events.NudgeEvent
import net.mamoe.mirai.event.globalEventChannel
@ -25,12 +30,20 @@ object JNudgeReply : KotlinPlugin(
JNRCommand.register()
Random.nextInt()
globalEventChannel().subscribeAlways<NudgeEvent>(priority = JNRPluginConfig.priority) {
if (target.id == bot.id && JNRPluginConfig.replyMessageList.isNotEmpty()) {
val totalWeight = JNRPluginConfig.replyMessageList.sumOf { it.weight }
if (target.id == bot.id && target.id != from.id && JNRPluginConfig.replyMessageList.isNotEmpty()) {
var replyList = JNRPluginConfig.replyMessageList
if(subject !is Group){
replyList = replyList.filter { !it.message.startsWith("#group") }.toMutableList()
}else{
if((from as Member).permission.level >= (subject as Group).botPermission.level){
replyList = replyList.filter { !it.message.startsWith("#group.mute") }.toMutableList()
}
}
val totalWeight = replyList.sumOf { it.weight }
var w = Random.nextInt(totalWeight)
for (msg in JNRPluginConfig.replyMessageList) {
for (msg in replyList) {
if (w < msg.weight) {
subject.sendMessage(msg.message.deserializeMiraiCode())
doReply(msg, this)
break
} else {
w -= msg.weight
@ -43,4 +56,31 @@ object JNudgeReply : KotlinPlugin(
logger.info { "Plugin loaded" }
}
@OptIn(ExperimentalCommandDescriptors::class, ConsoleExperimentalApi::class)
suspend fun doReply(message: ReplyMessage, event: NudgeEvent) {
val mutePattern = Regex("(?<=#group.mute(\\\\)?:)\\d+")
if(message.message.startsWith("#")) {
when{
message.message == "#nudge" -> {
event.from.nudge().sendTo(event.subject)
}
mutePattern.find(message.message) != null -> {
val duration = mutePattern.find(message.message)?.value?.toLong()!!
val member: Member = event.from as Member
try {
member.mute(duration.toInt())
}catch (e: PermissionDeniedException){
logger.warning("权限不足,无法进行禁言")
}
}
else -> {
event.subject.sendMessage(message.message.deserializeMiraiCode())
}
}
} else {
event.subject.sendMessage(message.message.deserializeMiraiCode())
}
}
}

View File

@ -0,0 +1,5 @@
fun main(){
val regex = Regex("(?<=#group\\.mute(\\\\)?:)\\d+")
println(regex.find("#group.mute:abc")?.value?.toLong())
println(regex.find("#group.mute:12345")?.value?.toLong())
}

View File

@ -0,0 +1,14 @@
import net.mamoe.mirai.console.MiraiConsole
import net.mamoe.mirai.console.plugin.PluginManager.INSTANCE.enable
import net.mamoe.mirai.console.plugin.PluginManager.INSTANCE.load
import net.mamoe.mirai.console.terminal.MiraiConsoleTerminalLoader
import net.mamoe.mirai.console.util.ConsoleExperimentalApi
import top.jie65535.jnr.JNudgeReply
@OptIn(ConsoleExperimentalApi::class)
suspend fun main(){
MiraiConsoleTerminalLoader.startAsDaemon()
JNudgeReply.load()
JNudgeReply.enable()
MiraiConsole.job.join()
}