Skip to content

插件介绍

插件位置

插件位于 ws/plugins/ 目录内,目录结构如下:

txt
ws/plugins/
├── base.py
├── kv_python
│   ├── kvmsg.txt
│   └── main.py
├── run_code
│   └── main.py
└── welcome
    └── main.py
  • base.py 为插件基类代码文件
  • 其它每个目录都是一个单独的插件,main.py 为插件的实现代码

插件基类

插件基类 Base 位于 ws/plugins/base.py

python
class Base:
    def __init__(self):
        self.is_open = True     # 插件开关
        self.is_at = True       # 回复消息时是否at触发之人
        self.type = 'message'   # 类型

    def is_match(self, message):
        """检测是否匹配此插件"""
        return True

    async def handle(self, message):
        """核心处理逻辑"""
        pass

    async def run(self, message):
        """外部调用入口"""
        if not self.is_open:
            return
        if not self.is_match(message):
            return
        return self.handle(message)

插件结构

  • 插件以目录方式存储,一个插件一个目录;目录名即为插件名
  • 插件目录中必须有一个 main.py 文件
  • main.py 文件内容也是固定格式:
    python
    from ..base import Base
    
    
    class Plugin(Base):
        """插件"""
        def __init__(self):
            super().__init__()
            self.xxx = ''
    
        def is_match(self, message):
            """检测是否匹配此插件"""
            if message[:3] == '###':
                return True
            else:
                return False
    
        async def handle(self, message):
            msg = '自定义的回复逻辑'
            return msg
    • 插件类是固定的名为 Plugin 的类,并继承插件基类 Base
    • __init__() 函数用于对插件进行初始化,可自定义属性与初始化动作
    • is_match() 函数用于判断是否匹配/触发此插件
    • handle() 函数为此插件的处理逻辑,并最终进行回复

插件的公共属性与方法

属性/方法类型含义备注
is_open布尔插件的开关默认打开
is_at布尔回复消息时是否at触发之人默认打开
type字符串插件的类型,默认为 message1. message 消息类型,对应消息事件
2. notice 通知类型,对应通知事件
is_match()检测是否匹配此插件比如 ### 开头就匹配执行代码
handle()插件的核心处理逻辑比如关键字触发回复
run()插件的入口继承插件基类即可,一般不需要修改

插件的启动

  • 所有插件会在服务启动时自动扫描并启动,无需手动启动

多插件的触发

  • 遍历所有插件、只要有一个插件触发了回复,即刻退出(后续的插件不再运行)
  • 就是说不会触发多个插件(有回复的情况下)