项目地址:https://github.com/xyqyear/minecraft-qqbot
前言
上次的文章我演示了当前机器人的功能。本来我准备做一个系列解释如何从头开发一个qq机器人的,但是转念一想,nonebot本身就有一个非常详细的官方文档,我就没有必要再写一遍了。
这个系列主要是我开发机器人的日记,包括新的功能添加和结构调整。可能之后项目成熟了之后会写一写文档。
文件结构
- bot.py, bot_config.py: 机器人的初始化和配置文件的读取
- config.yml: 配置文件
- permissions.py: 命令的权限管理
- mc_commands/: 放置用于在mc里执行命令的模块
- nonebot_plugins/mc.py: 用于初始化mc命令管理和处理由nonebot发来的命令
- nonebot_plugins/server2group.py: 用于持续读取mc的日志,并处理玩家由mc服务器发往qq群聊的消息。
- tests/: 单元测试
- utils/: 一些实用工具
配置文件
config.yml
既然要把项目完全分解,那么配置文件是一个不错的入手点。
让我们来看看配置文件的模板:
server_properties:
vanilla:
address: 127.0.0.1
rcon_port: 25575
rcon_password: super-secret
aka:
- v
default_server: vanilla
log_path: /path/to/log/file
default_group: 11111111
command_say_bindings:
12345678: b8c8679b-a0f2-468c-9b38-79d4b0f068ac
permissions:
group:
11111111:
default:
- '*.list'
- 'vanilla.whitelist.list'
- 'vanilla.banlist'
- 'vanilla.say'
admin:
- 'vanilla.whitelist.*'
- 'vanilla.restart'
- 'vanilla.ban'
- 'vanilla.unban'
22222222:
default:
- '*.list'
- 'vanilla.whitelist.list'
- 'vanilla.banlist'
- 'vanilla.say'
admin:
- 'vanilla.whitelist.*'
- 'vanilla.restart'
- 'vanilla.ban'
- 'vanilla.unban'
'private':
33333333:
- '*'
server.properties
这个名字是从mc服务器的配置文件借鉴过来的。
这个选项里面每一个选项是服务器的名字,比如这里的vanilla,和这个相关的是这个服务器下面的 aka 选项,这个选项指定了这个服务器的别名,可以有多个。在之后完整实现多服务器支持的时候可能会用到。比如现在执行指令的话是默认发到default_server里面指定的服务器名里面,如果在指令后面加@则可以发送到指定服务器里面(已实现,未测试。)
比如给机器人发消息: /list,如果有这个指令的话机器人就会解析这个指令,转化成mc指令,发到默认服务器里面,然后解析指令的返回值并发送到对应的发送者那儿。
如果给机器人发送:/list @vanilla 或者使用服务器的别名 /list @v 这样就可以把解析了的命令发送到指定的服务器。
值得注意的是目前只支持支持rcon协议的版本,也就是1.9以上。
每个服务器下面还有一些选项:
- address: 服务器rcon协议的地址
- rcon_port: 服务器rcon协议的端口
- rcon_password: 服务器rcon协议的密码
- aka: 服务器别名,在上面已经讲过用途
default_server
这个选项是默认指令发到的服务器,以后支持多群聊的话可能配置文件会有相应更改。
log_path
这个选项是指定mc服务器的日志地址。
这个选项用作读取mc服务器的日志从而知道玩家在游戏中说了什么。如果玩家的说话内容符合特定的模式,那么就把这段话发到默认群组里面。
目前这个模式是 “\\[message]” 或者 “、、[message]“,那么[message]的内容将会发到群里。这个模式目前是硬编码到代码里的,但是留了修改的空间,以后可能会加配置文件。
default_group
这个选项是用于执行mc服务器发送的消息默认是发送到哪个群里面,到以后添加多服务器支持后这个选项可能会移动到每一个服务器的单独配置下面。
command_say_bindings
这个选项是用于机器人的 /s 或者 /say 指令的,用于把每个qq号和游戏内的uuid绑定。至于选择uuid而不是玩家id是因为现在mc支持换名字,玩家换了名字还得修改配置文件重新绑定。如果用uuid的话就不用重新绑定了。可能以后会支持id的绑定。
还有一个值得注意的是可能以后会添加一个指令来直接通过机器人指令修改配置文件。
permissions
这个选项的结构比较复杂,大概分为 group 和 private 两个部分,分别代表群聊和个人聊天。其中由于讨论组里面没有群主和管理员之分,于是关于讨论组的权限设置就也在private下面。以后可能会支持在讨论组里面有权限的人在个人聊天里面也有权限。
group 选项下面每一个键是群组的id,然后再往下分为default权限和admin权限,分别对应默认权限和管理员权限。
而 private 选项下面每一个键是qq号码,然后再往下就是具体的权限。
关于权限字符串是借鉴了mc插件的样式。比如 vanilla.whitelist.add 权限由两个部分组成,第一个部分是 vanilla 也就是服务器的名称,而这个名称不能使用aka里面的名称。往后面的的权限就是具体的权限了。
其中可以使用通配符来表示这个节点下面的所有权限,比如 vanilla.whitelist.* 在目前的项目结构下就表示 vanilla.whitelist.add, vanilla.whiteslist.remove, vanilla.whitelist.list 和 vanilla.whitelist.reload。
至此就是配置文件的详解。而下面我将简单地介绍一下项目中剩下的文件,在今后的日记中会逐渐讲解具体的源代码。