- 这个QQ机器人拥有插件系统,可以轻松扩展
- 语言:C++23
- 安装 cmake vcpkg c++编译器
- 执行以下命令
vcpkg install openssl vcpkg install cpp-httplib vcpkg install asio
- 构建此程序
cd 此程序的目录 cmake -B build -S . -DCMAKE_TOOLCHAIN_FILE=你的vcpkg的目录/scripts/buildsystems/vcpkg.cmake cd build cmake --build . --config Release -j8
-
- 配置go-cqhttp
- 运行go-cqhttp再运行此程序即可使用
- 此机器人只有一个框架,用于插件扩展,所有指令(除了基本的help等基础指令)都是通过插件加入
- 插件类
#pragma once
#include <string>
#include "command.h"
#include "permission.h"
namespace qqbot
{
struct PluginInfo
{
//插件名称
std::string name;
//插件作者名
std::string author;
//插件版本
std::string version;
};
class CppPlugin
{
public:
//禁止复制,只能移动
CppPlugin() = default;
CppPlugin(const CppPlugin&) = delete;
~CppPlugin() = default;
CppPlugin& operator =(const CppPlugin&) = delete;
//插件加载
virtual void onLoad()
{
}
//插件启动
virtual void onEnable()
{
}
//插件关闭
virtual void onDisable()
{
}
public:
//插件信息
PluginInfo pluginInfo;
private:
};
}
- 插件例子groupOperator.h
#include <httplib.h>
#include <Json.h>
#include <vector>
#include <string>
//最基本的三个库
#include "cppPlugin.h"
#include "pluginLibrary.h"
#include "network.h"
namespace GroupOperator
{
class GroupOperatorPlugin : public qqbot::CppPlugin //继承插件类
{
public:
GroupOperatorPlugin()
{
qqbot::CppPlugin::pluginInfo.author = "quqiOnfree"; //作者名
qqbot::CppPlugin::pluginInfo.name = "GroupOperator群组管理插件";//插件名称
qqbot::CppPlugin::pluginInfo.version = "0.0.1"; //插件版本
}
~GroupOperatorPlugin() = default;
virtual void onLoad()
{
//这里是插件加载之前执行
}
virtual void onEnable()
{
//这里是插件加载完成时启动执行
//添加指令
qqbot::ServerInfo::getCommander().addCommand("kick",//命令名称
[this](long long groupID,
long long senderID,
const std::string& commandName,
std::vector<std::string> Args) //lambda表达式或符合格式的函数
{
//...
},
"kick userid true/false", //命令格式
"踢出群成员" //命令作用解释
);
//设置权限
qqbot::ServerInfo::getPermission().setGroupDefaultPermission("kick", false);
//true是普通用户可以访问,false是管理员可以访问
//这个可以在配置文件里面进行编辑
}
};
}
需要在register.cpp加入一些代码
//导入插件
#include "pluginName.h" //插件名
namespace qqbot
{
//修改此函数
void Register::init()
{
//添加插件(以GroupOperator为例)
//this->addPlugin(std::make_shared<插件命名空间::插件类>());
this->addPlugin(std::make_shared<GroupOperator::GroupOperatorPlugin>());
}
//省略下面代码
//...
}
- 权限系统 Permission System
- 命令系统 Command System
- 插件系统 Plugin System