这是一个使用 QQAPI 的 QQ 机器人插件,相当于是另一个 QQChat,砍掉了很多个人认为没必要的功能,优化了代码结构。
同时,它还支持通过 API 调用的方式,简单地扩展机器人,添加属于你的命令!
目前相比 QQChat 新增功能:
- 支持通过
/bot-ban
/bot-pardon
拒绝响应某用户 - 支持通过机器人执行更多原版命令而不使用
/command
(如/ban
/pardon
) - 支持通过机器人启停服务器
- 支持艾特机器人进行答复,而不是发一句什么命令就答复
- 支持 MC 内执行 QQ 机器人命令
- 通过
/ping
命令、/info
命令检查机器人状态 - [开发特性] 通过
/reload
远程重载插件 - 可自定义的单向/双向 MC <==> QQ 群转发
- 基于正则表达式的易扩展命令树
同时,还去除/修改了以下功能:
- 没有“管理群”、“主群”、“消息同步群”的功能,改为多群同步(不过一般就一个群而已)
- 没有“MultiServer”特性,因为会导致难以预料的 bug 且应用面小
- 对
!!qq
命令做了权限限制,因为没有对 CQ 码进行转义,可能会导致机器人账号被用于发布违规信息 - 中文和数字、英文之间做了间隔,且语气更加诙谐
在 MCDR 控制台使用 !!MCDR plugin install salty_qq_chat
,然后 !!MCDR confirm
。
在 Releases 页面 下载对应版本的 .mcdr
文件,放入 plugins
文件夹重载。
在 plugins
下执行 git clone https://github.com/SALTWOOD/SaltyQQChat
或者 git clone git@github.com:SALTWOOD/SaltyQQChat
,然后重载插件。
这是这个插件最有意思的功能之一,可以通过添加其他 MCDR 插件的方式为这个插件添加自定义命令。 这里展出一个单文件插件的代码作为示例:
from mcdreforged.api.types import PluginServerInterface
from typing import Callable, List
import re
reply: Callable
PLUGIN_METADATA = {
'id': 'sqc_extension',
'version': '1.0.0',
'name': 'SQC extension plugin',
'description': 'SaltyQQChat\'s extension plugin',
'author': 'NONE',
'link': 'https://github.com',
'dependencies': {
'salty_qq_chat': '>=1.0.0'
}
}
def on_load(server: PluginServerInterface, old):
global reply
sqc = server.get_plugin_instance("salty_qq_chat")
qqapi = server.get_plugin_instance("qq_api")
reply = sqc.reply
sqc.commands.add_command(re.compile(r'/你的命令 (.*)'), [str], handler)
def handler(server: PluginServerInterface, event, command: List[str],
event_type):
message = command[0]
reply(
event,
f"[CQ:at,qq={event.user_id}] 你提供的参数是:\"{message}\""
)
- QQAPI - 提供正向 WebSocket 接入到 CQHttp 的接口
- AnzhiZhang - 特例为我提供 LGPL 协议授权,但是我还是用了 GPL(
- SALTWO∅D 服务器的各位 - 帮我测试机器人,还赶在发布 Release 之前帮我发现了越权漏洞(
- 其实这个项目也不是照抄 QQChat 的啦,只是因为能找到适合我的环境的现成的 API 只有 QQAPI 一个,又只有一个 QQChat 是这个 API 的下游使用,所以有些部分比较像是无法避免的()