Add mute tool, default disabled

This commit is contained in:
2025-07-17 13:07:03 +08:00
parent 7d911f2fb6
commit 11bdaff54d
3 changed files with 74 additions and 0 deletions

View File

@ -699,6 +699,9 @@ object JChatGPT : KotlinPlugin(
// Epic 免费游戏
EpicFreeGame(),
// 群管代理
GroupManageAgent(),
)

View File

@ -50,6 +50,9 @@ object PluginConfig : AutoSavePluginConfig("Config") {
@ValueDescription("好友是否自动拥有对话权限,默认是")
val friendHasChatPermission: Boolean by value(true)
@ValueDescription("机器人是否可以禁言别人,默认禁止")
val canMute: Boolean by value(false)
@ValueDescription("群荣誉等级权限门槛,达到这个等级相当于自动拥有对话权限。")
val temperaturePermission: Int by value(50)

View File

@ -0,0 +1,68 @@
package top.jie65535.mirai.tools
import com.aallam.openai.api.chat.Tool
import com.aallam.openai.api.core.Parameters
import kotlinx.serialization.json.JsonObject
import kotlinx.serialization.json.add
import kotlinx.serialization.json.int
import kotlinx.serialization.json.jsonPrimitive
import kotlinx.serialization.json.long
import kotlinx.serialization.json.put
import kotlinx.serialization.json.putJsonArray
import kotlinx.serialization.json.putJsonObject
import net.mamoe.mirai.contact.MemberPermission
import net.mamoe.mirai.event.events.GroupMessageEvent
import net.mamoe.mirai.event.events.MessageEvent
import top.jie65535.mirai.PluginConfig
import kotlin.time.Duration.Companion.seconds
class GroupManageAgent : BaseAgent(
tool = Tool.function(
name = "mute",
description = "可用于禁言指定群成员,只有你是管理员且目标非管理或群主时有效,非必要不要轻易禁言别人,否则你可能会被禁用这个特权!",
parameters = Parameters.buildJsonObject {
put("type", "object")
putJsonObject("properties") {
putJsonObject("target") {
put("type", "integer")
put("description", "目标QQ号")
}
putJsonObject("durationM") {
put("type", "integer")
put("description", "禁言时长分钟目前暂时只支持1~10分钟后续视情况增加上限")
}
}
putJsonArray("required") {
add("target")
add("durationM")
}
}
)
) {
override val isEnabled: Boolean
get() = PluginConfig.canMute
override suspend fun execute(args: JsonObject?, event: MessageEvent): String {
requireNotNull(args)
val target = args.getValue("target").jsonPrimitive.long
val duration = args.getValue("durationM").jsonPrimitive.int
if (event !is GroupMessageEvent) {
return "非群聊环境无法禁言"
}
if (event.group.botPermission == MemberPermission.MEMBER) {
return "你并非管理,无法禁言他人"
}
val member = event.group[target]
if (member == null) {
return "未找到目标群成员"
}
if (member.isMuted) {
return "该目标已被禁言,还剩 " + member.muteTimeRemaining.seconds.toString() + " 解除。"
}
// 禁言指定时长
member.mute(duration.coerceIn(1, 10) * 60)
return "已禁言目标"
}
}