Skip to content

Latest commit

 

History

History
124 lines (103 loc) · 3.27 KB

plugin.md

File metadata and controls

124 lines (103 loc) · 3.27 KB

qqbot插件系统

创建插件

  • 此机器人只有一个框架,用于插件扩展,所有指令(除了基本的help等基础指令)都是通过插件加入

插件类

  1. 插件类是整个插件系统的重要组成部分
  2. 插件类是用来自定义插件功能的载体
  • 插件类的大致代码
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;
    };
#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是管理员可以访问
            //这个可以在配置文件里面进行编辑
        }
    };
}

加载插件

groupOperator.h为例
需要在register.cpp加入一些代码

//导入插件
#include "pluginName.h" //插件名

namespace qqbot
{
    //修改此函数
    void Register::init()
    {
        //添加插件(以GroupOperator为例)
        //this->addPlugin(std::make_shared<插件命名空间::插件类>());
        this->addPlugin(std::make_shared<GroupOperator::GroupOperatorPlugin>());
    }
    
    //省略下面代码
    //...
}