插件介绍
插件位置
插件位于 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
文件内容也是固定格式:pythonfrom ..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 | 字符串 | 插件的类型,默认为 message | 1. message 消息类型,对应消息事件2. notice 通知类型,对应通知事件 |
is_match() | 检测是否匹配此插件 | 比如 ### 开头就匹配执行代码 | |
handle() | 插件的核心处理逻辑 | 比如关键字触发回复 | |
run() | 插件的入口 | 继承插件基类即可,一般不需要修改 |
插件的启动
- 所有插件会在服务启动时自动扫描并启动,无需手动启动
多插件的触发
- 遍历所有插件、只要有一个插件触发了回复,即刻退出(后续的插件不再运行)
- 就是说不会触发多个插件(有回复的情况下)