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,
+需要在群里发送 `绑定 ` 来向目标账号发送验证码,
+然后将验证码发到群里完成验证,如图所示

@@ -79,6 +83,10 @@ _可以通过 `/jgc setBindCommand ` 来修改执行命令前缀 _(例

+## 私聊执行
+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