From 25498086a2a77c554f427b4a5dbe29de838070b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=AD=B1=E5=82=91?= Date: Fri, 16 Sep 2022 23:38:08 +0800 Subject: [PATCH] Update version to v0.3.0 Add user message support Add default server setting --- README.md | 25 ++++++++++++++------ build.gradle.kts | 2 +- src/main/kotlin/JGrasscutterCommand.kt | 20 ++++++++++------ src/main/kotlin/PluginCommands.kt | 32 ++++++++++++++++++++++---- src/main/kotlin/PluginConfig.kt | 4 ++++ 5 files changed, 63 insertions(+), 20 deletions(-) diff --git a/README.md b/README.md index 855833f..384178b 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ Mirai机器人相关文档请参阅 [用户手册](https://github.com/mamoe/mira ## 首先使用指令添加一个服务器 ```shell # 用法 -/jgc addServer
[name] [description] # 添加服务器 +/jgc addServer
[name] [description] # 添加服务器,首个服务器为默认服务器,可切换默认服务器 # 示例 /jgc addServer http://127.0.0.1:443 测试服 本地测试服务器 # 成功返回 "服务器已添加,ID为[1],使用servers子命令查看服务器列表" @@ -33,18 +33,22 @@ Mirai机器人相关文档请参阅 [用户手册](https://github.com/mamoe/mira ## 将服务器绑定到机器人所在群聊 ```shell # 用法 -/jgc linkGroup/bindGroup/addGroup [group] # 绑定服务器到群,在群内执行可忽略群参数 +/jgc linkGroup/bindGroup/addGroup [serverId] [group] # 绑定服务器到群,若未指定服务器则使用默认服务器ID,在群内执行可忽略群参数 # 示例(控制台) -/jgc linkGroup 1 群号 +/jgc linkGroup 1 123456 # 指定将服务器[1]绑定到群[123456] # 示例(群里) -/jgc linkGroup 1 +/jgc linkGroup 1 # 指定绑定到服务器[1] +/jgc linkGroup # 忽略服务器参数,将使用默认服务器 +/jgc enable # 若启用的群未绑定,将自动绑定到默认服务器 # 成功返回 "OK" ``` 在聊天环境执行 Mirai-Console 命令需要另一个插件 [Chat Command](https://github.com/project-mirai/chat-command) 执行GC命令不需要这个,见后文 ## 绑定账号 -玩家想要在群里执行命令,需要绑定自己的游戏UID,需要在群里发送 `绑定 ` 来向目标账号发送验证码,然后将验证码发到群里完成验证,如图所示 +玩家想要在群里执行命令,需要绑定自己的游戏UID, +需要在群里发送 `绑定 ` 来向目标账号发送验证码, +然后将验证码发到群里完成验证,如图所示 ![群内验证示例图](screenshot/verification.png) @@ -79,6 +83,10 @@ _可以通过 `/jgc setBindCommand ` 来修改执行命令前缀 _(例 ![At群员示例图](screenshot/runAt.png) +## 私聊执行 +v0.3.0 开始,玩家可以**私聊机器人**进行账号的绑定和命令的执行, +但是目前只能在**默认服务器**中执行,无法指定执行的服务器。 + ## 拉黑用户 如果你想禁止某个用户使用本插件执行命令,可以使用 `/ban ` 来拉黑,使用 `/unban ` 可以解除黑名单 _(只是一个凭想象增加的功能,也许能用上呢)_ @@ -127,6 +135,9 @@ commandAlias: publicCommands: - 'list' - 'list uid' +# 默认服务器ID,未指定服务器ID的命令将使用默认服务器执行。 +# 私聊默认使用该服务器。 +defaultServerId: 1 ``` # 指令列表 @@ -158,8 +169,8 @@ publicCommands: ## 群相关 ```shell -/jgc linkGroup/bindGroup/addGroup [group] # 绑定服务器到群,在群内执行可忽略群参数 -/jgc enable [group] # 启用指定群执行,在群内执行可忽略群参数 +/jgc linkGroup/bindGroup/addGroup [serverId] [group] # 绑定服务器到群,若未指定服务器则使用默认服务器ID,在群内执行可忽略群参数 +/jgc enable [group] # 启用指定群执行,若未绑定,则自动绑定到默认服务器,在群内执行可忽略群参数 /jgc disable [group] # 禁用指定群执行,在群内执行可忽略群参数 ``` diff --git a/build.gradle.kts b/build.gradle.kts index 03796a9..05be2b1 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -7,7 +7,7 @@ plugins { } group = "top.jie65535.mirai" -version = "0.2.1" +version = "0.3.0" repositories { maven("https://maven.aliyun.com/repository/public") diff --git a/src/main/kotlin/JGrasscutterCommand.kt b/src/main/kotlin/JGrasscutterCommand.kt index 69d19a2..e44785e 100644 --- a/src/main/kotlin/JGrasscutterCommand.kt +++ b/src/main/kotlin/JGrasscutterCommand.kt @@ -40,7 +40,7 @@ object JGrasscutterCommand : KotlinPlugin( JvmPluginDescription( id = "top.jie65535.mirai.grasscutter-command", name = "J Grasscutter Command", - version = "0.2.1", + version = "0.3.0", ) { author("jie65535") info("""聊天执行GC命令""") @@ -53,18 +53,24 @@ object JGrasscutterCommand : KotlinPlugin( val eventChannel = GlobalEventChannel.parentScope(this) // 监听群消息 - eventChannel.subscribeAlways { + eventChannel.subscribeAlways { // 忽略被拉黑的用户发送的消息 if (PluginConfig.blacklist.contains(sender.id)) return@subscribeAlways - // 忽略未启用的群消息 - val groupConfig = PluginData.groups.find { it.id == group.id } - if (groupConfig == null || !groupConfig.isEnabled) - return@subscribeAlways + val server = if (this is GroupMessageEvent) { + // 若为群消息,忽略未启用的群 + val groupConfig = PluginData.groups.find { it.id == group.id } + if (groupConfig == null || !groupConfig.isEnabled) + return@subscribeAlways + // 获取群绑定的服务器 + PluginData.servers.find { it.id == groupConfig.serverId } + } else { + // 否则为私聊消息,使用默认服务器 + PluginData.servers.find { it.id == PluginConfig.defaultServerId } + } // 忽略未启用的服务器 - val server = PluginData.servers.find { it.id == groupConfig.serverId } if (server == null || !server.isEnabled) return@subscribeAlways diff --git a/src/main/kotlin/PluginCommands.kt b/src/main/kotlin/PluginCommands.kt index ba34ba0..937a9f2 100644 --- a/src/main/kotlin/PluginCommands.kt +++ b/src/main/kotlin/PluginCommands.kt @@ -242,13 +242,26 @@ object PluginCommands : CompositeCommand( } } + @SubCommand + @Description("设置默认服务器(初始值为首个创建的服务器)") + suspend fun CommandSender.setDefaultServer(id: Int) { + val server = PluginData.servers.find { it.id == id } + if (server == null) { + sendMessage("未找到指定服务器") + } else { + PluginConfig.defaultServerId = id + logger.info("已将 [$id] ${server.name} 设置为默认服务器") + sendMessage("OK") + } + } + // endregion 服务器相关命令 // region 群相关命令 @SubCommand("linkGroup", "bindGroup", "addGroup") - @Description("绑定服务器到群") - suspend fun CommandSender.linkGroup(serverId: Int, group: Group? = getGroupOrNull()) { + @Description("绑定服务器到群,若未指定服务器则使用默认服务器ID") + suspend fun CommandSender.linkGroup(serverId: Int = PluginConfig.defaultServerId, group: Group? = getGroupOrNull()) { if (group == null) { sendMessage("必须指定群") return @@ -256,7 +269,7 @@ object PluginCommands : CompositeCommand( val server = PluginData.servers.find { it.id == serverId } if (server == null) { - sendMessage("指定服务器ID不存在,请先添加服务器(使用addServer子命令)") + sendMessage("指定服务器不存在,请先添加服务器(使用addServer子命令)") return } @@ -272,14 +285,23 @@ object PluginCommands : CompositeCommand( } @SubCommand - @Description("启用指定群执行") + @Description("启用指定群执行,若未绑定,则自动绑定到默认服务器") suspend fun CommandSender.enable(group: Group? = getGroupOrNull()) { if (group == null) { sendMessage("必须指定群") } else { val g = PluginData.groups.find { it.id == group.id } if (g == null) { - sendMessage("请先绑定群到服务器(使用linkGroup子命令)") + // 当启用的群是未初始化的群时,使用默认服务器进行初始化 + val server = PluginData.servers.find { it.id == PluginConfig.defaultServerId } + if (server != null) { + // 绑定到默认服务器 + logger.info("将默认服务器[${server.id}] ${server.name} ${server.address} 绑定到群 ${group.name}(${group.id})") + PluginData.groups.add(GroupConfig(group.id, server.id)) + sendMessage("OK,已绑定到默认服务器") + } else { + sendMessage("请先绑定群到服务器(使用linkGroup子命令)") + } } else { logger.info("启用插件在群 ${group.name}(${group.id})") g.isEnabled = true diff --git a/src/main/kotlin/PluginConfig.kt b/src/main/kotlin/PluginConfig.kt index 0d62255..1d78db9 100644 --- a/src/main/kotlin/PluginConfig.kt +++ b/src/main/kotlin/PluginConfig.kt @@ -54,4 +54,8 @@ object PluginConfig : AutoSavePluginConfig("config") { val publicCommands: MutableSet by value(mutableSetOf( "list", "list uid" )) + + @ValueDescription("默认服务器ID,未指定服务器ID的命令将使用默认服务器执行。\n" + + "私聊默认使用该服务器。") + var defaultServerId: Int by value(1) } \ No newline at end of file