# 星云语言
**Repository Path**: cjxpj/nebula
## Basic Information
- **Project Name**: 星云语言
- **Description**: 果汁负责运行,跨平台兼容性良好,nebula语言拥有全新的语法,中文开发。
- **Primary Language**: Unknown
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: https://cjxpj.cn
- **GVP Project**: No
## Statistics
- **Stars**: 11
- **Forks**: 1
- **Created**: 2024-07-05
- **Last Updated**: 2026-01-13
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# Nebula 语言使用指南 ✨
## 🌟 介绍
> 这是一个用于运行 Nebula 语言的平台
> 拥有良好的语法功能
> 帮助你更快更便捷开发网站等服务
### 使用说明 📝
```
启动后会生成NebulaData文件夹
请仔细阅读README.md文档进行使用
启动成功后就能访问127.0.0.1:8080进行查看
如果找不到md查看器,可以把md放进public访问进行查看。
```
## 📱 手机目录
Documents/NebulaData
## 🔤 词库相关
### wn词库 📑
```
{{.标题}}
{{.副标题}}
```
### n词库 📚
默认Main触发词
```
头部执行
赋予值:内容
Main
触发执行:%赋予值%
```
## 📂 初始文件
### 程序内置文档位置 📄
NebulaData/README.md
### 默认启动 🌐
**127.0.0.1:8080**
### 程序系统重要文件 ⚙️
#### 随着系统跟随启动的配置
NebulaData/private/system/config.n
#### 路由词库 🗺️
NebulaData/private/system/router.n
## 👥 开发讨论
QQ群:927467925
## 🔗 代码仓库
### Github
```
https://github.com/cjxpj/nebula
```
下载
### Gitee
```
https://gitee.com/cjxpj/nebula
```
下载
## 🚀 Nebula 核心特性
> 基于Golang语言开发
> 专注WEB站点开发
> 快速成型项目
### 认识文件分类 🗂️
| 名称 | 目录 |
| ---- | ---- |
| 储存目录 | database |
| 资源目录 | private |
| 词库目录 | public |
```
储存目录用于读写,资源目录用于存放重要资源跟词库,词库目录用于被访问执行公开的数据。
```
## 📦 数据结构相关
### JSON框 📦
```
JSON>赋予值={}
a=b
a->a=b
[]
0=a
1=b
帮助你更方便的多行文本
```
文本>赋予值=\n
内
容
<文本
```
```
文本>\n
内
容
<文本
```
### 函数框 🔧
> 函数框可以帮助你在运行词库时候动态执行词库
> 可以减少词库回调需求
> 触发可以留空
> 触发留空后就会直接运行
> 函数框也支持获取参数跟括号
```
函数>赋予值=触发
a
<函数
$%赋予值% 触发$
```
```
函数>赋予值
a
<函数
$%赋予值%$
```
#### 调用示例 📞
```
函数>赋予值
$延迟 [1000*5]$
$打印 结束$
<函数
$打印 开始$
#:$%赋予值%$
```
### 循环框 🔄
更方便的循环
可以使用>终止
也能修改当前循环次数**i:1**
```
循环>i=9
%i%
<循环
```
留空死循环
```
循环>i
%i%
<循环
```
可以用在循环框中退出循环
```
循环>i=5
%i%
如果:%i%>2
结束
>终止
<循环
```
循环中支持
```
>跳过
>终止循环
>终止
```
### 遍历框 🔍
遍历JSON无法修改当前循环次数
但是可以使用>终止
```
遍历>i,ii=["a","b"]
%i%=%ii%
<遍历
```
遍历中支持
```
>跳过
>终止遍历
>终止
```
### 整合包 📦
这个相当于面对象功能,后续打算支持New到局部变量中。
```
整合包=>我的包
[函数]设置变量 .*
$%自己 变量 %参数1%$
[函数]读取变量
$%自己 变量$
<=整合包
Main
// 执行整合包函数
$.我的包 设置变量 成功$
$.我的包 读取变量$
// 整合包中获取变量
$%我的包 变量$
```
## 📝 编译与加密
### 编译框 🔨
n文件可以用于词行换行
```
Main
```
或者
```
Main #{
a
b
c
}#
```
### 加密词库 🔒
返回true/false
```
$加密词库 private/dic.n$
```
生成出来的词库会在当前程序的encode文件夹中
## 🔠 字符串操作
### 大小写字母 🔡
```
$大写字母 a$
$小写字母 A$
```
### 字符拼接 🔗
```
$字符拼接 & ["url=","msg="]$
```
### 替换 🔄
| 需求 | 内容 | 替换| 成为 | 次数 |
| ---- | ---- | ---- | ---- | ---- |
| 替换 | 11234 | 1 | 2 | 1 |
返回21234
次数留空为替换全部
```
$替换 替换内容 需要替换 替换后 [次数]$
```
#### 正则替换 🧩
```
$正则替换 文本 正则 替换后 [次数]$
$正则替换 A1A123A \d+ %a%$
```
### 截取 🔪
```
$截取 abcd 1 2$
```
### 取中间 🎯
```
$取中间 abcd a c$
```
### 字符定位 🔍
> 没有找到会返回-1
```
$查找字 内容 查找内容$
```
### 字符切片 🍕
```
// 返回[]json
$字符切片 内容$
```
### 去除多余符号 ✂️
```
$去除左右 文本 符号$
$去除左 文本 符号$
$去除右 文本 符号$
```
## 📂 文件操作
### 读取数据 📖
用于读取文件全部文本
```
$读文件 database/a.txt 默认值$
```
读是在一个文件储存多个数据的方法
只会写入到database文件夹下
```
$读 路径 键 默认值$
```
可以获取json列表
```
$读 文件路径$
```
// 文件不存在返回默认值
```
$读文件.随机一行 [路径] [默认值]$
```
```
$读文件.行数 [路径] [默认值]$
```
```
$读文件行 [路径] [行数] [行数往下数量] [默认值]$
```
### 写入数据 ✍️
用于完全写入文本数据
```
$写文件 database/a.txt 数据$
```
写是在一个文件储存多个数据的方法
只会写入到database文件夹下
```
$写 路径 键 数据$
```
### 文件大小 📏
```
$文件大小 database/file.txt$
```
### 文件夹大小 📁
```
$文件夹大小 database$
```
### 下载文件 📥
```
// 单线程
$下载文件 [url] [文件路径]$
// 多线程切片下载
$下载文件 [url] [文件路径] [线程|4~8] [下载进度打印终端|false]$
```
### 删除文件 🗑️
| 需求 | 目录 |
| ---- | ---- |
| 删除文件 | database |
```
$删除文件 database/a.txt$
```
### 删除文件夹 🗑️📁
```
$删除文件夹 database/缓存$
```
### 存在文件判断 🔍📄
```
$存在文件 database/a.txt$
```
返回true或者false
### 存在文件夹判断 🔍📁
```
$存在文件夹 database$
```
返回true或者false
### 存在文件或文件夹判断 🔍📄📁
```
$存在文件或文件夹 database$
```
### 文件列表 📋
文件夹留空为站点目录
```
$文件列表 database$
$文件夹列表 database$
$文件跟文件夹列表 database$
```
示例
```
$文件夹列表$
```
返回
```
["database","private","public"]
```
### 重命名移动 🔄
返回true/false
成功返回true
```
$重命名 database database2$
```
### 复制粘贴 📋
返回true/false
成功返回true
```
$复制粘贴 database database2$
```
### ZIP操作 🗜️
```
$ZIP压缩 database/文件夹 database/a.zip$
$ZIP解压 database/a.zip database/文件夹$
```
## 🔐 加密与编码
### AES 🔒
key范围
16/24/32
```
$AES加密 CBC/CFB key 内容$
$AES解密 CBC/CFB key 内容$
```
### MD5编码 🔏
```
$MD5编码 内容$
```
### Base64 🔑
```
$B64编码 内容$
$B64解码 内容$
```
### URL编码/解码 🌐
> URL链接编码就是自动识别get参数自动编码
> 不会影响到链接
> URL编码是完全编码
```
$URL编码 内容$
$URL解码 内容$
$URL链接编码 url$
$URL链接解码 url$
```
### 编码解码 🔄
| 支持编码 |
| :--: |
| GBK |
| 二进制 |
| 十六进制 |
| HZGB2312 |
| GB18030 |
| ASCII |
| ISO-8859-1 |
```
$编码 二进制 你好$
$解码 二进制 111001001011110110100000111001011010010110111101$
```
### HTML编码/解码 🌐
```
$HTML编码 内容$
$HTML解码 内容$
```
### 📌 Ed25519 密钥与签名函数文档
#### **✅ 获取 Ed25519 的种子长度**
```
$Ed25519种子大小$
```
#### **✅ 生成一对 Ed25519 公钥与私钥**
```
// 返回 map[私钥/公钥] 数据
$Ed25519生成密钥$
k:@$Ed25519生成密钥$->公钥
```
#### **✅ 从指定种子生成一对 Ed25519 密钥**
```
// 返回 map[私钥/公钥] 数据
$Ed25519从种子生成密钥 [密钥]$
k:@$Ed25519从种子生成密钥 %密钥%$->私钥
```
#### **✅ 使用私钥对消息进行签名**
```
// 返回签名结果
$Ed25519签名 [私钥] [消息]$
```
#### **✅ 验证签名是否合法**
```
// 返回 true 或 false
$Ed25519验证签名 [公钥] [消息] [签名]$
```
#### **✅ 公钥转换**
```
// 返回 Curve25519 公钥
$Ed25519公钥转换为Curve25519 [公钥]$
```
#### **✅ 私钥转换**
```
// 返回 Curve25519 私钥
$Ed25519私钥转换为Curve25519 [私钥]$
```
#### **✅ 从 Curve25519 私钥生成 Ed25519 密钥**
```
// 返回 map[私钥/公钥] 数据
$Ed25519从Curve25519生成密钥 [Curve私钥]$
```
## 🧮 计算与逻辑
### 计算 ➕➖✖️➗
> 谁天生是数学天才?
> 支持运算符号
```
加 +
减 -
乘 *
除 /
```
```
[2*(1+1)]
```
```
$计算 1 加 1$
$计算 1 + 1$
$计算 1 减 1$
$计算 1 - 1$
$计算 1 乘 1$
$计算 1 * 1$
$计算 1 除 1$
$计算 1 / 1$
$计算 1 除余 1$
$计算 1 % 1$
$计算 1 按位或 1$
$计算 1 | 1$
$计算 1 << 1$
$计算 1 左移 1$
$计算 1 >> 1$
$计算 1 右移 1$
$计算 1 根号 1$// 平方根
$计算 1 sqrt 1$
$计算 1 四舍五入 1$
```
### 判断 🔍
可以用英语缩写
如果尾是不会终止往下执行的
| 中文 | 英文 |
| ---- | ---- |
| 如果 | if |
| 如果尾 | end |
| 返回如果尾 | else |
#### 返回如果
支持两个方法
```
a:2
如果:a==0
yes
否则如果:a==1
no
elif:a==2
Good
否则
error
```
#### 支持逻辑
```
和 &
或 |
```
#### 支持判断
```
大于等于 >=
大于 >
小于等于 <=
小于 <
等于 ==
不等于 !=
混合判断 ()
长度判断 !
数组是否存在字符 in
不等于正则 ~
正则 ~=
```
```
如果:\d+~=123
成功
否则
失败
```
**返回:成功**
### 判断框 📦
```
如果>a==a
ok
>否则
no
<如果
```
**支持套娃判断**
```
如果>a==b
ok
>否则如果:a==a
如果>a==a
ok
>否则
no
<如果
<如果
```
支持两种判断内方法
```
>跳过
>终止
```
### 判断值和空值 ❓
| 判断 |
| ---- |
| null |
| nil |
| {} |
| [] |
| false |
| 空 |
| NaN |
| undefined |
| 留空 |
判断到空返回true
```
// 返回bool类型数据
$判断空值 null$
```
没判断到空返回true
```
$判断值 null$
```
## 🌐 网络操作
#### 终止服务器 🛑
// 直接终止服务器,不会关闭主程序,可以做一些应急措施后查看程序日志
```
$终止服务器$
```
#### 启动后数据 📊
```
$全局变量 访问数据$
```
GET返回示例
```json
{
"路径":"/api.n",
"来源":"GET",
"请求头":{"Accept-Encoding":["gzip"],"User-Agent":["Nebula-Client/1.0"]},
"IP":"127.0.0.1",
"Host":"127.0.0.1:8080"
}
```
获取GET参数
```
$G key 默认值$
```
POST返回示例
```json
{
"路径":"/api.n",
"来源":"POST",
"请求头":{"Accept-Encoding":["gzip"],"User-Agent":["Nebula-Client/1.0"]},
"IP":"127.0.0.1",
"Host":"127.0.0.1:8080"
}
```
#### 输出类型 📤
在启动服务器后被访问的词库提供输出类型的方法
```
$全局变量 输出类型 text$
```
#### 输出头部 📋
设置后会在输出时候进行
```
$全局变量 输出头部 {"Location":"https://cjxpj.com"}$
$设置头部 beer good$
```
#### COOKIE 🍪
设置后会在输出时候进行
《**禁用JS**》默认false,禁用后无法让JavaScript读取,仅限在域名访问中传输。
《**存活**》默认0,秒为单位。
```
a:"""
[
{
"命名": "id",
"数据": "123456",
"路径": "/",
"禁止JS": false,
"存活": 3600,
}
]
"""
$全局变量 COOKIE %a%$
```
**目录结构**
服务器WS词库
> private/websocket/server.n
客户端WS词库-支持自义定
> private/websocket/app.n
### WS 🔗
WS连接配合异步使用
```
// 词库路径留空默认 private/websocket/app.n
ws连接数据:$WS连接 [URL] [词库路径]$
// 放在线程变量中储存
$线程变量 WS %ws连接数据%$
```
回复WS消息可用
```
$WS断开连接$
```
```
$WS发送 [WS数据] 文本$
$WS断开 [WS数据]$
```
类型变量
```
文本消息
二进制消息
未知消息
```
### 访问 🌐
header可以留空
```
$访问 url header$
$访问POST url data header$
```
### 高度自义定访问 📡
先记录后操作
```
a:$访问.新建 url$
// 秒为单位,0为不限制
$访问.设置超时 1$
$访问.切换GET %a%$
$访问.切换POST %a%$
$访问.POST %a% data$
$访问.POST文件 %a% form name data$
$访问.POST文件 %a% name data$
$访问.设置头部 json/string$
// 默认启用,禁用可以拦截头部的Location跳转
$访问.启用跳转 %a%$
$访问.禁用跳转 %a%$
// 设置好后调用这个进行访问,数据请用获取内容函数取出,此函数不会返回数据
$访问.发送 %a%$
// 这是获取全部信息,包括准备发送的数据都在内,会屏蔽内容。
$访问.全部内容 %a%$
// 这是只获取结果,就跟直接获取访问一样。
$访问.内容 %a%$
```
上传文件
form是表单name文件名字data是数据
```
$访问.POST文件 %a% form name data$
```
直接填名字默认表单跟文件都为同一个名字
```
$访问.POST文件 %a% name data$
```
## 🕒 时间操作
### 时间变量 ⏰
```
%时间戳%
%毫秒时间戳%
%纳秒时间戳%
%时间yyyy%
```
### 时间戳格式化时间 📅
```
$时间戳格式化时间 %时间戳% s秒$
```
### 延迟 ⏳
> 毫秒单位
```
// 一秒延迟示例
$延迟 [1000*1]$
```
## 🎨 绘图与图片处理
### 绘图 🎨
字体在内部文件夹的字体文件夹内
一个绘图函数中仅支持一个创建
| 需求 | 参数 | 所需 |
| ---- | ---- | ---- |
| 创建 | 1/2 | img:Base64\|x/y |
| 二维码 | 1 | string |
| 颜色 | 3/4 | R/G/B/A |
| 画字 | 1/3 | string/x/y |
| 字体 | 1 | file |
| 大小 | 1 | string:int |
| 伽马值 | 1 | string:int |
| 模糊 | 1 | string:int |
| 锐化 | 1 | string:int |
| 对比度 | 1 | string:int |
| 亮度 | 1 | string:int |
| 饱和度 | 1 | string:int |
| 画圆 | 2 | x/y |
| 画方 | 4 | x始/y始/x终/y终 |
| 画线 | 4 | x始/y始/x终/y终 |
| 画虚线 | 6 | x始/y始/x终/y终/l长/s间隔 |
| 贴图 | 3/5/6 | img:Base64/x/y/w宽/h高/0.1~1透明度 |
| 插图 | 1/2 | times/img:Base64 |
| 输出 | 1 | gif/png/jpg/jpeg/信息 |
| 重构需求 | 参数 | 所需 |
| ---- | ---- | ---- |
| 圆形 | 0/1 | size |
| 圆角矩形 | 2/4 | x/y/dx/dy |
| 旋转 | 0/1 | rotate0~360 |
#### 示例仅供参考
```json
$全局变量 输出类型 image/png$
文本>画=
[
{
"需求": "颜色",
"参数": ["255","255","255","255"]
},
{
"需求": "创建",
"参数": ["380","520"]
},
{
"需求": "颜色",
"参数": ["0","0","0","255"]
},
{
"需求": "大小",
"参数": ["25"]
},
{
"需求": "画字",
"参数": ["酒乐文游","135","80"]
},
{
"需求": "颜色",
"参数": ["255","0","0","128"]
},
{
"需求": "画方",
"参数": ["200","200","250","250"]
},
{
"需求": "输出",
"参数": ["png"]
}
]
<文本
$绘图 %画%$
```
### GIF拆帧 🎞️
```
a:$读文件 database/test.gif$
$GIF拆帧 %a%$
```
数据Base64编码了
```json
[
"xxx",
"xxx"
]
```
### 画布 🎨
创建画布需要赋予值
```
$画布.创建 [高] [宽]$
$画布.创建 [高] [宽] [#十六进制|颜色地址]$
$画布.创建 [URL] [高] [宽]$
$画布.创建 [文件路径] [高] [宽]$
$画布.创建 [图片字符串数据] [高] [宽]$
```
绘制
```
$绘制.图片 [画布] [图片] [高] [宽] [旋转] [x] [y] [透明度] [半径]$
$绘制.方形描边 [画布] [X] [Y] [宽] [高] [圆润] [颜色]$
$绘制.方形 [画布] [X] [Y] [宽] [高] [圆润] [颜色]$
$绘制.椭圆描边 [画布] [X1] [Y1] [X2] [Y2]$
$绘制.椭圆 [画布] [X1] [Y1] [X2] [Y2]$
$绘制.圆形描边 [画布] [X] [Y] [半径] [起始] [结束] [颜色]$
$绘制.圆形 [画布] [X] [Y] [半径] [起始] [结束] [颜色]$
$绘制.多边形 [画布] [X1],[Y1] [X2],[Y2] [X3],[Y3]...$
$绘制.多边形描边 [画布] [X1],[Y1] [X2],[Y2]...$
$绘制.随机线条 [画布] [数量]$
$绘制.随机点 [画布] [数量]$
$绘制.波浪 [画布] [X1] [Y1] [X2] [Y2] [波浪高度] [波长] [步长]$
// 打码像素块通过画笔大小调整,用法跟方形一样,可以先用方形定位后在用马赛克
$绘制.马赛克 [画布] [X1] [Y1] [X2] [Y2]$
$绘制.圆弧 [画布] [X] [Y] [半径] [起始] [结束] [颜色]$
$绘制.线 [画布] [X1] [Y1] [X2] [Y2] [颜色]$
$绘制.喷漆 [画布] [X1] [Y1] [X2] [Y2] [半径] [密度1~100] [颜色]$
$绘制.文本 [画布] [X1] [Y1] [文本] [旋转|0.0] [颜色] [描边颜色] [描边宽度]$
```
画笔
```
// 只读取[私有]目录下,字体文件夹中字体文件
$画笔.字体 [画布] [文件路径|font.ttf]$
$画笔.大小 [画布] [大小]$
$画笔.设置颜色 %a% [随机|#十六进制|颜色地址|R G B A]$
// 需要赋予值获取颜色数据
颜色:$画笔.获取颜色 %a% [#十六进制|R G B A]$
```
画布重构,会绘制画布整体构造
```
// 会旋转整个画布,背景会通过画笔颜色绘制
$画布.旋转 [画布] [旋转]$
// 剪切画布,会绘制画布整体构造,边缘会根据画笔颜色绘制
$画布.圆形 [画布] [半径]$
// 给整个画布打码
$画布.马赛克 [画布] [半径]$
```
### 图片相似度 🔍🖼️
```
图1:$读文件 database/1.png$
图2:$读文件 database/2.png$
$图片相似度 %图1% %图2%$
```
## 📊 数据处理
### JSON 操作 📦
```
$JSON解析 [json] [键]$
// 存可以改成存字只存文本数据
// 可以直接通过多层键设置值
$JSON存 [json] [键]... [值]$
// $JSON存 {} a b 内容$ 返回 {"a"{"b":"内容"}}
$JSON存字 [json] [键]... [值]$
// 这是给元素追加用的
$JSON追加 [json] [值]$
$JSON追加字 [json] [值]$
$JSON存在 [json] [键]$
$JSON删 [json] [键]$
```
#### 有数据数据函数
| 需求 | 返回 |
| ---- | ---- |
| 解析 | string |
| 判断 | true/false |
| 长度 | int |
| 取出 | json/[]json/string |
```
// 快捷解析支持->批量解析
$JSON解析 [json] 键->键$
$JSON判断 [json]$
$JSON长度 [json]$
```
#### JSON美化 💄
1代表缩进空格数量,默认就是1可以留空。
```
$JSON美化 [json] [缩进空格数量]?$
```
#### JSON赋予值 🔧
```
a:123
a:{
"a":"a",
"b": "%a",
"c": "s%a"
}
```
```
a:123
a:[
"a",
"%a",
"s%a"
]
```
### 范围 🔢
生成范围内元素
```
$范围 5 10$
```
返回结果
```
[5,6,7,8,9,10]
```
### 排序 🔄
true/false代表正反排序
```
$排序 键 数据 true/false$
```
使用示例
```
z:[
{"data":"100","key":"啤酒"},
{"data":"500","key":"兄弟"},
{"data":"500","key":"兄弟"},
{"data":"50","key":"你好香"}
]
$排序 data %z% true$
```
### 分割 🔪
```
$分割 , a,b,c$
```
分割范围
```
$分割 , a,b,c 2$
```
分割匹配返回true/false
```
$分割 , a,b,c b$
```
## 🔄 流程控制
### 回调 🔄
内部可以放在触发下
支持缩写[L]
```
$回调 试试$
[内部]试试
成功
```
### 终止程序 🛑
**结束程序并且把准备输出内容打印到日志**
```
$STOP$
```
### 重启程序 🔄
```
$重启$
```
### 终止 🔚
> 这里只会输出一个a
```
a
>终止
a
```
### 跳行 ⏭️
是在词条局部内跳行
支持读取变量
```
>跳行+1
```
```
>跳行-1
```
## 🧩 其他功能
### 变量 🔤
读取变量
```
a:你好
%a%
```
取反变量
```
a:false
%!a%
```
快捷获取URL编码数据
```
a:文本
%URL@a%
```
快捷B64编码
```
a:文本
%B64@a%
```
快捷获取类型
```
a:文本
%TYPE@a%
```
### 变量控制 🎛️
全局变量就是在回调时候还在的变量
不是全局的在执行完毕后就没了
```
$线程变量 键 值$
$全局变量 键 值$
// 会同时读取全局变量同时读取局部变量
$变量 键 值$
$存在变量 键 值$
```
这个返回a因为键被锁了
```
键:a
$锁变量 键$
键:b
%键%
```
### 注释 💬
```
// 注释
/*
多行注释
*/
```
注释执行他跟**赋予值**一样
但是他不会产生任何数据
```
#:执行
```
### 主机信息 💻
Android无法使用,需要另外方法获取。
```
$主机 CPU$
$主机 CPU信息$
$主机 内存$
$主机 磁盘$
$主机 网络$
```
### 数字格式化 🔢
默认f可填**b/e/E/f/g/G**
```
$数字格式化 1.1201 2 f$
```
### 赋予值 🔧
都支持多字符赋予值文本
```
:$: 执行函数
: 支持多字符,特殊功能
+: 拼接跟加值
-: 减少数值
:: 绝对文本
:%: 只读取变量
```
#### 特殊功能
##### 快捷解析示例
```
a:@{"a":"b"}->a
%a%
```
##### 反取示例
```
a:false?:错误
%a%
```
```
a:@{"a":"null"}->a?:没有数据
%a%
```
### 框选词库换行的 📦
```
```
### 函数 🔧
支持缩写[F]
```
a:b
$ok$
$z%b%$
// 只有这个可以运行
$z%a%$
[函数]ok
b
// 可以指定读取变量
[函数]z%a%
%参数0%
```
变量传出写法
```
Main
$测试 ->成功$
%a%
%b%
%c%
$%动态函数%$
[F]测试 ->(.*)->a,b,c,动态函数
a:1
b:2
c:3
函数>动态函数
4
<函数
%括号1%
!
```
#### 魔术变量 🧙
传入后传出
```
Main
控制数组:{}
_继承_:控制数组
$测试$
%控制数组%
[F]测试->控制数组
JSON>控制数组=%控制数组%
键=值
标题
文本
文本2
"""
$HTML解析 %a% html head title$
```
### MD转HTML 📝➡️🌐
> 把MD文本转为HTML显示
```
$MD转HTML 内容$
```
### 引入 🔗
#### private/dic/a.n
```
[函数]a
成功
```
#### 运行的词库
```
#引入=dic/a.n
$a$
```
引入文件夹下全部n词库文件
```
#引入=dic/*
$a$
```
### 长度 📏
**文本长度是单字符算作1单位**
```
$文本长度 内容$
$长度 内容$
```
### 正则 🧩
正则匹配内容返回json
```
$正则 正则 内容$
```
正则匹配只会返回true/false
```
$正则匹配 正则 内容$
```
### 终端 💻
```
中文:UTF-8、GBK/GB18030、Big5
日文:Shift-JIS、EUC-JP、ISO-2022-JP
韩文:EUC-KR
西欧:ISO-8859-1、Windows-1252
```
```
cmd:$终端.创建 ./NebulaData/forFmt.exe$
// 终端返回乱码定义解码器
// $终端.解码器 %cmd% GBK$
// 终端临时环境变量
// $终端.变量 %cmd% cxk=ok$
// $终端.输入 %cmd% 内容$
// 等待执行完毕获取全部输出
$终端.执行 %cmd%$
// 挂载后台执行不返回
// $终端.异步执行 %cmd%$
// 用于监听
// $终端.监听执行 %cmd% private/cmd.n$
// $终端.断开 %cmd%$
```
会卡死线程等待输入后执行
```
$打印 等待输入$
a:$终端等待输入$
$打印 内容%a%$
内容%a%
```
### 复读 🔁
```
$复读 [文本] [次数]$
```
### SMTP邮件 📧
```
$邮件 链接 端口 账号 密码 目标账号 发送头部$
```
发送QQ邮箱样板
```
文本>发送=%val5%
Subject:标题
From:小啤酒 <2960965389@qq.com>
成功
<文本
$邮件 smtp.qq.com 587 2960965389@qq.com xxxxx 2960965389@qq.com %发送%$
```
### 特殊符号 🔣
| 编号 | 符号 |
| ---- | ---- |
| 0 | $ |
| 1 | % |
| 2 | : |
| 3 | 空格 |
| 4 | \t |
| 5 | \n |
| 6 | ; |
| 7 | [ |
| 8 | ] |
| 9 | _ |
> 可以让你在函数中,不用写多余赋予值,然后用变量传入。
### 回调词库 🔄
> 异步词库可以配合延迟做调用
```
$执行词库文件 [文件路径] [触发] [独立/继承/继承函数/互通]$
$执行网页词库文件 [文件路径]$
$执行PHP网页词库文件 [文件路径]$
```
### 调用 🔗
```
[内部]test
ok
Main
// 调用输出会打印到终端
$调用 [1000/毫秒] test$
$回调 test$
```
**独立**
默认此方法,可以留空。
```
[指定执行]不会拥有局部[变量]和[函数]
```
**继承**
```
[指定执行]的词库会继承[变量]和[函数]
```
**继承函数**
```
[指定执行]的词库会继承[函数]
```
**互通**
```
会继承[函数]
互通[变量]
[指定执行]完的词库中变量可以影响到[执行]
```
### Js 🟨
**支持库**
```
Buffer
setTimeout
setInterval
console
url
require
```
,来分割参数
从参数0开始
a,b,c
```
a:1
--js
a+a
--end
```
### MYSQL 🐬
```
_MYSQL_账号:root
_MYSQL_密码:941331b62d54a7f7
_MYSQL_地址:172.20.167.249
$mysql sys PING$
```
```
sql::CREATE DATABASE 数据库名称;
$mysql %sql%$
```
```
sql::INSERT INTO 表 (name, data) VALUES (?, ?)
$mysql 数据库名称 %sql% 绑定内容1 绑定内容2$
```
### SQLITE 📦
```
查询语句
c:"""
SELECT name, email FROM users
"""
$sqlite database/文件.db %c%$
插入语句
b:"""
INSERT INTO users (name, email) VALUES (?, ?)
"""
$sqlite database/文件.db %b% a b$
创建表语句
a:"""
CREATE TABLE IF NOT EXISTS users (
name TEXT NOT NULL,
email TEXT NOT NULL UNIQUE
)
"""
$sqlite database/文件.db %a%$
```
将数据库存放在线程变量_DB_SQLITE,想要直接清空直接在线程变量设置空即可,或者在程序重新启动时候会自动清空。
```
a:"""
CREATE TABLE IF NOT EXISTS users (
name TEXT NOT NULL,
email TEXT NOT NULL UNIQUE
)
"""
b:"""
INSERT INTO users (name, email) VALUES (?, ?)
"""
c:"""
SELECT name, email FROM users
"""
// 获取全部表
d:PRAGMA table_list
$sqlite :内存: %a%$%换行%
$sqlite :内存: %b% a b$%换行%
$sqlite :内存: %c%$%换行%
$sqlite :内存: %d%$
```
### 腾讯接口 🔗
```
接口:$腾讯.接口 [id] [key] [域名] [服务名] [接口名] [版本] [地域|可留空]$
$腾讯.调用 %接口% {"json":"数据"}$
```
### 腾讯QQ机器人 🤖
调用用法
```
[内部]打招呼
我是机器人!
你好
你好!
$调用 500 打招呼$
```
发送图文消息
```
测试
文本
±img=database/img.png±
```
群变量
```
%QQ%
%群号%
%来源%
%头像%
```
群函数
```
// 群用
$群单发 [文本] [图片数据]$
// 私聊用
$私聊 [文本] [图片数据]$
// 其他地方用
$发送文本 [文本] [图片数据]$
$发视频 [视频数据]$
$发语音 [语音数据]$
```
频道变量
```
%QQ%
%群号%
%子群号%
%来源%
%头像%
%昵称%
```
频道函数
```
$发文本 [文本] [图片数据]$
```
## 哈基米
```
$哈基米加密 [文本] [密钥]$
$哈基米解密 [文本] [密钥]$
```
## 读写图片 📷
```
$写图片 [文件路径] [键] [值]$
$读图片 [文件路径] [键]$
```
## Json字典 📖
可以让你的json固定顺序生成
```
// 初始化json可以留空
a:$字典.创建 [json]$
// 设置值,可以加空格设置多层键值
$字典.设置 %a% [键] [值]...$
$字典.获取 %a%$
```
## 读写词库 📚
```
$读词库 [文件路径] [触发词] [是否正则|true/false]$
$写词库 [文件路径] [触发词] [内容]$
```
## 随机文件名和文件夹名 📂
```
$随机文件名 [文件夹路径]$
$随机文件夹名 [文件夹路径]$
```
## sha256 📦
```
// 返回[]Byte
$sha256 [文本]$
```
## []Byte操作 📦
```
$Byte转String [Byte]$
$Byte生成 [文本]$
```
## MIME类型 📦
```
$MIME类型 [文件后缀|文件路径]$
```