configCommand

Modify config files with MCDR command

management

Installation command

!!MCDR plugin install cfgcmd

Author

Synced at

...

Last update

...

Latest version

Total downloads

26

Back to catalogue

configCommand / cfgcmd

English Link

在游戏内使用MCDR命令修改其它插件/Mod的配置!

1.3.1版本支持在线编辑器!

权限

目前插件对所有配置内允许的玩家允许使用(MCDR 4级权限)。此插件可以修改运行MCDR进程的用户有权修改的所有文件(尤其是root),因此请控制好权限或者将服务端放入容器运行

命令

  • !!cfg env <路径,以MCDR根路径开始,可用绝对/相对路径> <配置文件> [可选: 读写器类型]: 将执行者修改的目标文件设置为对应文件
  • !!cfg quit: 清空执行者的目标文件
  • !!cfg write: 写入目标文件
  • !!cfg reload: 重载目标文件(会覆盖已经进行的所有修改)
  • !!cfg info: 查看文件信息

  • !!cfg set <key> <value>: 设置键值对,<key>.分割的键将被当做配置树的路径解释(具体见下文示例),此命令的key不支持..此类相对路径。类型见下方类型章节
  • !!cfg setTyped <key> <type> <value>: 具体见下方类型章节。若值无法被解释为指定的类型,则使用STRING
  • !!cfg rm <key>: 删除键对应的内容
  • !!cfg mv <sourceKey> <destKey>: 移动,也可以当重命名使用
  • !!cfg cp <sourceKey> <destKey>: 复制粘贴
  • !!cfg cd <key>: 因为配置文件是树状结构,所以就提供一个类似文件系统操作的cd指令。在读写器为plain时不可用
  • !!cfg ls [可选: page] [需要前项存在: key]: 查看当前Object内容。在读写器为plain时打印全文。每10行算一页
  • !!cfg lsLong [必选: page] [可选: linePerPage] [需要前项存在: key]: 同上

  • !!cfg lsDir <路径>: 以MCDR目录为根目录查看文件列表
  • !!cfg rmFile <文件>: 删除文件 (无法撤销)
  • !!cfg touchFile <文件>: 创建文件

  • !!cfg editor: 打开当前文件的在线编辑器,需要配置enableCloudtrue
  • !!cfg editorApply: 从云端同步已经修改的配置文件
  • !!cfg editorDelete: 删除云端的会话

1.3.1版本以下升级过来的,需要手动为配置文件添加enableCloudtrue才能使用在线编辑器


执行!!cfg env ...后,不会占用文件
执行!!cfg info给出当前文件信息
执行!!cfg ls打印指针所在Object的内容
读写器根据文件后缀名判断。没有后缀名或者未知后缀名的会选择使用plain读写器
若读写器为plain<key>参数指定的就是行号
<key>包含空格且后面还有参数,用英文双引号把它括住。用\可以转义。具体见QuotableText

数值类型

setTyped可以指定数值的类型,以下类型可用,部分类型有特殊的行为:

  • STRING: 基本的字符串
  • INT: 数字,包含浮点数(float)
  • BOOL: 布尔值,数值大小写不敏感,但是输入必须为T``True(解析为真)、F``False(解析为假)
  • LIST: 列表
  • OBJECT: JS的Object,Python的dict,YAML的mapping
  • AUTO: 用这个类型 = 直接用set子命令

LISTOBJECT的特殊行为

LIST

它会将输入的值用英文逗号分开,可以使用\转义逗号避免错误的分割。被分割后的项目会自动进行类型推导并创建一个列表。若值是空的,则创建一个空列表

OBJECT

类似LIST,它会将输入的值用英文逗号分开,然后再用:分割键值对。可以使用\转义逗号避免错误的分割。被分割后的项目会自动进行类型推导(无论是键还是值)并创建一个OBJECT。若值是空的,则创建一个空OBJECT

实际不推荐使用setTyped OBJECT ...,因为它会遇到聊天框输入限制。推荐用于创建空的OBJECT

类型推导

所有被推导的类型共享一个逻辑:

  1. 判断原先值是否不存在或值为None(大小写敏感) ? 开始自动推导 : 原有类型可用则以原有类型继续,否则开始自动推导
  2. 将数值转换为纯大写后是否为[T,TRUE,F,FALSE]中的一项 ? 是布尔值,结束 : 继续
  3. 包含非数字字符(小数点、负号、双引号除外) ? 是一个字符串,结束 : 是一个数字,跳到第4步
  4. 判断值被双引号括住 ? 是一个字符串式的数字,且去掉开头与结尾的双引号并进行5步的转换,结束 : 继续判断
  5. 全是数字(以及可能包含的小数点和开头符号) ? 是数字(小数点取最靠后的那个),结束 : 这是一个字符串

LISTOBJECT不参与此推导过程,因此自动推导不可能推出LISTOBJECT

示例

原始配置文件:

1  {
2      "foo": 123,
3      "bar": {
4          "barFoo": "?",
5          "barBar": {
6              "barBarFoo": 456
7          }
8      },
9      "buzz": [
10         "wangyupu","zzfx1166"
11     ]
12 }

命令(有顺序):

  1. !!cfg env "config/foo/" bar.json: 打开文件
  2. !!cfg set foo 1231: 设置第2行的值为1231
  3. !!cfg set bar.barFoo "!": 设置第4行的值为"!"
  4. !!cfg rm buzz.1: 删除第10行列表的第二项 (0-based index)
  5. !!cfg cd bar.barBar: 切换目前指针到第5行的Object
  6. !!cfg set barBarFoo 789: 修改第6行的值为789
  7. !!cfg write: 写入文件
  8. !!cfg quit: 离开文件

修改后配置文件:

1  {
2      "foo": 1231,
3      "bar": {
4          "barFoo": "!",
5          "barBar": {
6              "barBarFoo": 789
7          }
8      },
9      "buzz": [
10         "wangyupu"
11     ]
12 }

插件配置

ownerPlayer: 玩家名称
cfgCmdPermission: 4
allowModifyConfig: true
allowOutBound: false
enableLog: true
onlyOwnerPlayer: false

ownerPlayer指定的玩家绕过所有安全控制措施。将其留空以对所有有权限的玩家进行权限控制
allowModifyConfig指定是否允许修改本插件(cfgcmd)的配置
allowOutBound指定是否允许离开MCDR根路径,为false时只能访问MCDR路径下的文件
enableLog指定是否启用记录功能,记录保存于MCDR根路径/logs/cfgcmdLogs/<YYYY>-<mm>-<dd>_<COUNT>.log
onlyOwnerPlayer指定是否只允许被指定的ownerPlayer才能使用此插件

allowModifyConfig默认为true是为了管理员于无法访问后台的情况下也能对插件进行安全配置,建议安装后手动将其改为false

支持的配置文件格式

  • json
  • yaml(yml)
  • toml
  • 纯文本

README source: README.md