MiaoKo
MiaoKo 是一个自动化测试节点连通性的机器人,并会自动生成连通报告以方便使用者运维。
使用前须知:从 3.0.0 开始,miaoko 被分为主端 (MiaoKo) 和后端 (MiaoSpeed)。
前言
其中,主端可以放在任何地方,它主要负责接受 Telegram / WebAPI (未上线) 指令、解析订阅链接、负载均衡、任务分发,最后整合信息、生成图片、调用 WebHook。它不直接参与任何与节点的信息交流。后端则需要部署在模拟真实的环境中(例如,如果你希望测试得到的结果与普通家庭用户的体感类似,则你需要把后端部署在家宽后)。
一般来说典型的 MiaoKo 部署方式为:主端部署在国外,例如香港、日本等地。后端部署在国内(具有固定 IP 的商宽部署方式会容易很多,如果是动态且在 NAT 后的家宽,则需要自建 FRP,这里就不多赘述了)。
机器人使用方法
这里我会对机器人在 Telegram 中使用的方法进行说明:
你也可以直接对机器人发送 /help 指令来查看你能执行的指令(不同权限的用户获得的指令列表会有所差异)
公共指令
这里的指令所有人都能调用:(除非 $CONFIG.keeperOnlyMode
被开启)
/help
获取帮助菜单
/id
回复一个用户来查询 TA 的 Telegram 用户信息,包括 id、数据中心、语言信息等等
/version
查询机器人版本信息和编译序列号
/reportall <订阅ID>
获取某个订阅的在线/掉线节点列表。
⚠️ 注意:请先对订阅设置计划任务(/cron
)后再使用该指令,因为它会获取最近一次测试的结果。如果不设置计划任务,则 /reportall
的结果将没有参考价值(因为它你上次测试它很可能在几天甚至几个月以前)。
/reportonline <订阅ID>
同上,只是它只会返回在线的节点
/reportoffline <订阅ID>
同上,只是它只会返回掉线的节点
/stats <订阅ID>
它与 /reportall
类似,但是,它不止返回最近一次的测试结果,而是会生成一个节点稳定性的折线图。(它会读取[默认]近 120 此的测试数据并绘制图表,因此,如果没有设置计划任务(/cron
),该指令不会被允许调用。)
如果想改变 120 这个值,请参考 $CONFIG.maxKeepHistory
。如果不想改变它,请设置 $CONFIG.nodes.<订阅ID>.stats
为 true
。
计划任务类指令
计划任务指令只能由管理、超级管理调用。
/cron <订阅ID> <Cron表达式?>
为某个订阅设置计划任务,例如:每2分钟测试一次 mycloud 并写入历史记录:
/cron mycloud @every 2m
你也可以不加表达式来查询某个订阅的计划任务配置:
/cron mycloud
返回:
✔ 当前配置: @every 2m
下次执行: 2022-03-20T23:57:32Z
...
/register <订阅ID> <私密等级?>
既然设置了计划任务,当节点掉线/恢复时,MiaoKo 就能提醒你。在需要 MiaoKo 提醒的群发送这个指令就能设置掉线提醒。但如果这个群是公开群,你不想泄露掉线提醒中的 ip / 域名信息,就可以单独配置私密等级。默认的等级是 0,意味着隐藏 2 级域名:“www.*.com”。如果没有你设置了 1,则会显示: “*.*.com” 以此类推。如果你设置了 -1,则会取消私密展示:“www.mycloud.com”。
/registered
查询当前群注册的所有消息提示
/notify <订阅ID>
与 /registered
类似,但是从另一个纬度:这条指令查询的是某个订阅在哪些群被订阅了。
/unregister <订阅ID> <群组ID?>
取消一个群中某个订阅的掉线提醒。如果不加群组 ID,则会取消当前群的掉线提醒。
/mute <订阅ID> <持续时间(秒)>
如果你正在调试节点,导致节点频繁掉线,掉线提醒炸群。但你又不想 /unregister
所有关联的群。你可以用 /mute
把某个订阅的掉线提醒暂时关闭(但需要注意的是,/cron
并没有被暂停,它的掉线历史依然会被记录)。
自定义指令
同样是管理员指令,他们是 MiaoKo 的核心功能。
指令集
对于所有自定义指令,他们可以将一系列 miaospeed Matrix 打包后传输给后端进行测试。 miaoko 支持所有 miaospeed 的指令,您可以参考:
https://github.com/miaokobot/miaospeed/blob/fd7abecc2d36a0f18b08f048f9a53b7c0a26bd9e/interfaces/matrix.go#L6
中所罗列的指令。
指令参数
在调用这些自定义指令时,您还可以添加如下参数:
<正则表达式>: 指 Regular Expression,是编程中常用的字符串查询方法。例如:香港|日本
代表所有包含香港或者日本的节点。由于 MiaoKo 的所有输入不识别空格,你可以通过这种方式过滤带有空格的节点:美国\s0[0-6]
代表 美国 01
- 美国 06
。
</cmd:A=B>: 这是 MiaoKo 特有的附加参数。可以拓展这次测试的信息。例如,你想用在后端ID为 guangzhou
的机器上运行美国节点的测速,你可以这样写:
/speed:slave=guangzhou mycloud 美国
⚠️ 注意,:A=B 指令一定是紧贴着命令的(不能有空格)。
所有金刚都支持 :A=B 指令,目前支持的指令为:
- :slave=<后端ID> 指定后端进行测试
- :slavegroup=<后端组别ID> 指定后端组进行负载均衡测试
- :slavejoint=<后端组别ID> 指定后端组进行多后端联测
- :sort=name|ping|avgspeed|maxspeed|original
指令派生
自定义指令中,所有指令又能增加 (/xxx)url 与 (/xxx)x 的后缀。前者表示临时测试,而后者代表实时测试(需要注意,实时测试必须在 Matrix 中携带 测速(SPEED) 相关指令才会被允许)
例如:
- /ping 的派生指令为 /pingurl (由于系统自带的 ping 并不包含测速,因此不能使用 /pingx)
- /test 的派生指令为 /testurl
- /speed 的派生指令为 /speedurl 和 /speedx
- /analyze 的派生指令为 /analyze
/invite<:A=B>
回复一个用户来邀请他进行一次 /testurl
/speedurl
或 /analyzeurl
。如果邀请人是超级管理,则还可以邀请对方 /new
。所有交互过程都在私聊中,因此不用担心订阅外泄。
订阅相关指令
这些指令都是超级管理的指令
/ignore <订阅ID> <正则表达式?>
忽略某个订阅中指定节点的连通性测试,例如:
/ignore mycloud 流量|官网
这样,所有节点名称包含 “流量” “官网” 字样的节点都不会参与 自定义指令 的任务流程,被排除在外。
如果你不传任何表达式,则默认表示列出所有表达式,来方便你 /unignore
。
/unignore <订阅ID> <正则表达式>
同理,你可以恢复被你忽略的表达式。
/new <订阅ID> <订阅链接>
通过这种方式来新增订阅到订阅列表(自动写入 $CONFIG.nodes
)
/new mycloud https://mycloud.com/clash/ewerioweoi3
/remove <订阅ID>
同样,你也可以删除某个订阅,例如:
/remove mycloud
/list
列出所有写在 config.yaml
文件中的 订阅ID
/prune
扫描所有在 config.yaml
文件中的订阅。把那些联不通的(过期的)订阅找出来。