Awesome
J Grasscutter Command
This repo is only used for the Chinese social software QQ, so only the Chinese version is available.
用QQ执行GC命令的机器人插件
- 基于 Mirai-Console 开发的插件
Mirai机器人相关文档请参阅 用户手册, 本项目不会教你如何安装和登录机器人,请自行了解Mirai相关信息。目前暂不考虑其它框架或平台,有意者可自行移植
- 服务端必须使用 OpenCommand 插件
- 若使用后觉得满意,可以给我一个 Star 作为鼓励 ; )
- 若有问题或者建议,欢迎提出 Issue 进行反馈。
- 建议 Watch 本项目以接收更新推送。
插件用法
首先使用指令添加一个服务器
# 用法
/jgc addServer <address> [name] [description] # 添加服务器,首个服务器为默认服务器,可切换默认服务器
# 示例
/jgc addServer http://127.0.0.1:443 测试服 本地测试服务器
# 成功返回 "服务器已添加,ID为[1],使用servers子命令查看服务器列表"
# 失败返回 "只能设置装有 [OpenCommand](https://github.com/jie65535/gc-opencommand-plugin) 插件的服务器"
# 失败的原因可能包含无法链接服务器、服务器没有安装插件等,具体可以参考日志
# 如果你是服主,你可以添加OpenCommand的ConsoleToken
/jgc setServerConsoleToken <id> <consoleToken>
# 添加完成后,你可以将自己设置为管理员
/jgc op <user>
# 例如设置123456为管理员
/jgc op 123456
# 取消管理的子命令是 deop
# 管理员执行命令将默认使用控制台Token,无需验证(见后文)
将服务器绑定到机器人所在群聊
# 用法
/jgc linkGroup/bindGroup/addGroup [serverId] [group] # 绑定服务器到群,若未指定服务器则使用默认服务器ID,在群内执行可忽略群参数
# 示例(控制台)
/jgc linkGroup 1 123456 # 指定将服务器[1]绑定到群[123456]
# 示例(群里)
/jgc linkGroup 1 # 指定绑定到服务器[1]
/jgc linkGroup # 忽略服务器参数,将使用默认服务器
/jgc enable # 若启用的群未绑定,将自动绑定到默认服务器
# 成功返回 "OK"
在聊天环境执行 Mirai-Console 命令需要另一个插件 Chat Command 执行GC命令不需要这个,见后文
绑定账号
玩家想要在群里执行命令,需要绑定自己的游戏UID,
需要在群里发送 绑定 <uid>
来向目标账号发送验证码,
然后将验证码发到群里完成验证,如图所示
管理员无需绑定,默认使用控制台令牌执行命令
绑定命令的触发关键字可以通过 /jgc setBindCommand <prefix>
来修改
执行命令
默认执行GC命令前缀为 !
,用法是 !<命令|别名>
可以通过 /jgc setBindCommand <prefix>
来修改执行命令前缀 (例如以下示例图中使用run
作为前缀)
执行命令示例:!prop unlockmap 1
执行别名示例:!解锁地图
命令别名可以通过 /jgc setCommand <alias> <command>
来设置,通过 /jgc removeCommand <alias>
来删除
命令还可以通过 @群员 来替代原先命令中的 @UID,前提是这个群员绑定了它的UID
例如:!permission list @张三
,其中@张三
会被替换成其绑定的UID
你还可以一次性执行多条命令,并且可以通过在别名中设置多行命令来实现组合命令
例如:
!give 102 9999
give 203 999
还可以设置别名为多条命令,用|
分隔,例如:
/jgc setCommand 新手礼包 give 102 9999|give 202 99|give 203 99
然后通过别名批量执行命令,例如:!新手礼包
v0.4.0 开始,你可以在别名后跟额外参数,会附加到每一行命令,例如:!新手礼包 @张三
将会执行
give 102 9999 @10001
give 202 99 @10001
give 203 99 @10001
私聊执行
v0.3.0 开始,玩家可以私聊机器人进行账号的绑定和命令的执行, 但是目前只能在默认服务器中执行,无法指定执行的服务器。
拉黑用户
如果你想禁止某个用户使用本插件执行命令,可以使用 /ban <qq>
来拉黑,使用 /unban <qq>
可以解除黑名单
(只是一个凭想象增加的功能,也许能用上呢)
群消息同步
当你设置了服务器的 consoleToken,那么你可以使用 /jgc setServerSyncMessage <id> <sync>
命令来开启群消息同步功能。
示例:/jgc setServerSyncMessage 1 true
表示启用1号服务器的消息同步功能
当群里收到消息时,会执行命令 /say 用户名 消息内容
来将消息发送到服务器,因此玩家收到的消息也是来自服务器发送的。
注意,为了避免徒劳的尝试,当任何一次消息发送失败时,都会自动关闭同步消息功能,需要手动重新启用。 你可以自己更改相关规则,只需要修改源代码。
注意,玩家在游戏内发送的消息是不会同步到群的,这只是单向同步!!
配置文件(config.yml)
# 管理员列表,仅管理员可以执行控制台命令
administrators:
- 123456
# 用户黑名单
blacklist: []
# 绑定命令:绑定 <UID> 示例:绑定 10001
bindCommand: 绑定
# 聊天中执行GC命令前缀:!<命令|别名>
# 示例1:!give 1096 lv90
# 示例2:!位置
commandPrefix: !
# 执行GC控制台命令前缀,用法与普通版本相同,区别是仅管理员可用
opCommandPrefix: op
# 命令别名
commandAlias:
无敌: 'prop god on'
关闭无敌: 'prop god off'
无限体力: 'prop ns on'
关闭无限体力: 'prop ns off'
无限能量: 'prop ue on'
关闭无限能量: 'prop ue off'
点亮地图: 'prop unlockmap 1'
解锁地图: 'prop unlockmap 1'
位置: 'pos'
坐标: 'pos'
# 公开命令,无需绑定账号也可以执行(可用别名)(必须绑定了控制台令牌才可使用)
publicCommands:
- 'list'
- 'list uid'
# 默认服务器ID,未指定服务器ID的命令将使用默认服务器执行。
# 私聊默认使用该服务器。
defaultServerId: 1
指令列表
管理相关
/jgc help # 插件命令用法
/jgc reload # 重载插件配置
/jgc setCommandPrefix <prefix> # 设置执行GC命令前缀
/jgc setOpCommandPrefix <prefix> # 设置执行GC控制台命令前缀
/jgc setBindCommand <prefix> # 设置绑定命令前缀
/jgc op <user> # 设置管理员
/jgc setAdmin <user> # 设置管理员
/jgc deop <user> # 解除管理员
/jgc removeAdmin <user> # 解除管理员
/jgc ban <user> # 禁止指定QQ使用插件
/jgc unban <user> # 解除禁止指定QQ使用插件
服务器相关
/jgc ping <address|id> # 测试指定服务器是否安装插件
/jgc addServer <address> [name] [description] # 添加服务器
/jgc servers # 列出服务器
/jgc setServerIsEnabled <id> <isEnabled> # 设置服务器是否启用
/jgc setServerAddress <id> <address> # 修改服务器地址
/jgc setServerInfo <id> <name> <description> # 设置服务器信息
/jgc setServerConsoleToken <id> <consoleToken> # 设置服务器控制台令牌
/jgc setServerSyncMessage <id> <sync> # 设置是否同步群消息到服务器
群相关
/jgc linkGroup/bindGroup/addGroup [serverId] [group] # 绑定服务器到群,若未指定服务器则使用默认服务器ID,在群内执行可忽略群参数
/jgc enable [group] # 启用指定群执行,若未绑定,则自动绑定到默认服务器,在群内执行可忽略群参数
/jgc disable [group] # 禁用指定群执行,在群内执行可忽略群参数
命令相关
/jgc listCommands # 列出所有别名
/jgc setCommand <alias> <command> # 添加命令别名(聊天执行可传多行命令)
/jgc removeCommand <alias> # 删除命令别名
/jgc addPublicCommand <command> # 添加公开命令(可用别名)(游客可用)
/jgc removePublicCommand <command> # 删除公开命令
实体结构
Server
@Serializable
data class Server(
/**
* 服务器ID
* 自动递增
*/
val id: Int,
/**
* 服务器地址
*/
var address: String,
/**
* 服务器名称
*/
var name: String = "",
/**
* 服务器说明
*/
var description: String = "",
/**
* 控制台令牌
*/
var consoleToken: String = "",
/**
* 服务器是否已启用
*/
var isEnabled: Boolean = true,
/**
* 同步群消息到服务器,必须设置了控制台令牌
*/
var syncMessage: Boolean = false,
)
GroupConfig
@Serializable
data class GroupConfig(
/**
* 群ID(QQ群号)
*/
val id: Long,
/**
* 服务器ID
*/
var serverId: Int,
/**
* 是否启用(用于临时关闭)
*/
var isEnabled: Boolean = true,
)
User
@Serializable
data class User(
/**
* 用户ID(QQ帐号)
*/
val id: Long,
/**
* 服务器ID
*/
val serverId: Int,
/**
* 游戏UID
*/
var uid: Int,
) {
/**
* 令牌,失效时清空
*/
var token: String = ""
/**
* 用户添加时间
*/
@Serializable(LocalDateTimeSerializer::class)
val createTime: LocalDateTime = LocalDateTime.now()
/**
* 运行命令计数
*/
var runCount: Int = 0
/**
* 最后运行时间
*/
@Serializable(LocalDateTimeSerializer::class)
var lastRunTime: LocalDateTime? = null
}