Skip to content

SALTWOOD/SaltyQQChat

Repository files navigation

SaltyQQChat

SaltyQQChat

✨🎉 基于 QQAPI 的、可拓展的 QQ 机器人插件! 🎉✨

简介

这是一个使用 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 控制台使用 !!MCDR plugin install salty_qq_chat,然后 !!MCDR confirm

通过 Release 安装

Releases 页面 下载对应版本的 .mcdr 文件,放入 plugins 文件夹重载。

通过源代码

plugins 下执行 git clone https://github.com/SALTWOOD/SaltyQQChat 或者 git clone git@github.com:SALTWOOD/SaltyQQChat,然后重载插件。

API

这是这个插件最有意思的功能之一,可以通过添加其他 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 的下游使用,所以有些部分比较像是无法避免的()