惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Microsoft Azure Blog
Microsoft Azure Blog
大猫的无限游戏
大猫的无限游戏
月光博客
月光博客
V
V2EX
PCI Perspectives
PCI Perspectives
Latest news
Latest news
博客园 - 三生石上(FineUI控件)
C
CERT Recently Published Vulnerability Notes
W
WeLiveSecurity
Last Week in AI
Last Week in AI
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
P
Palo Alto Networks Blog
T
The Exploit Database - CXSecurity.com
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
WordPress大学
WordPress大学
V
Vulnerabilities – Threatpost
H
Heimdal Security Blog
Attack and Defense Labs
Attack and Defense Labs
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Hacker News: Ask HN
Hacker News: Ask HN
博客园 - 叶小钗
V
Visual Studio Blog
Jina AI
Jina AI
P
Proofpoint News Feed
罗磊的独立博客
SecWiki News
SecWiki News
J
Java Code Geeks
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
L
LINUX DO - 热门话题
Security Archives - TechRepublic
Security Archives - TechRepublic
The Hacker News
The Hacker News
Hugging Face - Blog
Hugging Face - Blog
N
News and Events Feed by Topic
NISL@THU
NISL@THU
T
Tailwind CSS Blog
T
Tenable Blog
Recent Commits to openclaw:main
Recent Commits to openclaw:main
Recent Announcements
Recent Announcements
H
Hacker News: Front Page
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
T
Tor Project blog
宝玉的分享
宝玉的分享
Help Net Security
Help Net Security
S
Security Affairs
Microsoft Security Blog
Microsoft Security Blog
Google DeepMind News
Google DeepMind News
F
Fortinet All Blogs
G
GRAHAM CLULEY

云游君的小站

开源项目的「死与新生」 没有红包封面,但是 AI 春联…… 家·烟花·红包封面 云乐坊工作室的成立与缘起与有关的话 聊聊四元数与万向锁及其实际意义 从零开始写一个 Web Component - GitHub Corners 旋转吧!徽章! 又拍云—年轻人的第一个 CDN 云空调,便携小空调 char-dust 一个图片转字符画的 npm 包与示例站点 nnrm - 一个极简的 npm/yarn registry 切换管理器 做猪呢,最重要的是开心 从 Vite 与 Vue 开始的 D3 数据可视化之旅 如何找到你朋友的社交账号 写写高斯模糊——从 CSS 模糊滤镜的白边说起 如何从 Valine 迁移至 Disqus ADV 游戏引擎计划 关于我打算当老师并报考教师资格证这件事 Strato - Hexo 主题「Yun」版本宣传 PV 我与小镇与家 第三方评论系统之我见 人生不是一场马拉松 👴就是二次元,故尝试证明。 教你如何从零开始搭建一个属于自己的网站 使用 CDN 加速你的 GitHub Pages 网站 使用 CCDIK 或 FABRIK 实现逆向动力学 【转】三维文件格式知多少 【译】30 分钟学会 LaTeX LaTeX 使用笔记 在 macOS 下配置 OpenGL 路漫漫其修远兮 CSS 陷阱 Blender 学习笔记 Everyday Auto Xuexiqiangguo 酷 Q 使用笔记 Deepin 使用笔记 塞翁失马焉知非福 hexo-theme-yun 制作笔记 写给可爱的学弟学妹们 北线无战事 让百度收录你的 GitHub Pages 博客 搭建自己的 Minecraft 服务器 导出「你的日记」与导入「一本日记」 从来如此 卷土重来未可知 恋爱证明记 微信与象棋 关于部落冲突的二三事儿(番外)-端午事变 Travis-CI 持续集成部署 Vue 中 canvas 的自适应 大家一起吃火锅吧 Parcel.js + Vue 搭建笔记 Vue 学习笔记 【动画电影】《声之形》观后感 VS Code 配置笔记 仓生 YunYouJun/give-me-money 永远相信美好的事情即将发生 鱼与熊掌 人生本该如此。 Discourse 新一代开源论坛 Hexo 静态博客搭建笔记 Coding WebIDE 云端开发实验室 npm & yarn 常用包与命令 像夏花一样绚烂 【番剧】《月色真美》(老夫的少女心啊) 临摹一只智障女神∠( ᐛ 」∠)_ 南京之旅-记10th计算机设计大赛 Git 学习笔记 Laravel 使用笔记 Wordpress 的实用插件与主题推荐 【定格动画】交换/EXchange 我与幻星的故事 来自某夏令营的回忆 水彩原创头像尝试 云游君表情包制作计划 小说连载初尝试-《阿庫娅的星球》 仓鼠 回声 【分享】网页背景效果插件 Canvas-Nest.js 【花开物语|MAD】幹物女(WeiWei)-Bonboru! 太空 关于部落冲突的二三事儿-2 关于部落冲突的二三事儿-1 关于部落冲突的二三事儿-序
el-bot & mirai-ts 制作笔记
☁️ · 2020-06-22 · via 云游君的小站

mirai-tsmirai-api-http 的 TypeScript/JavaScript SDK。 el-bot 是一个基于 mirai-ts 使用 TypeScript/JavaScript 编写,可配置、可自定义插件的 QQ 机器人。

el-bot 展示了整个 mirai-ts 的使用流程,并内置了一些如自动应答、转发、命令行、RSS 等常用功能(默认插件),开箱即用。 你只需要一些自定义的配置,而不再需要编写繁琐的脚本内容。 但这并不是束缚,在插件系统中你仍然可以调用机器人所有的上下文,并通过编写插件的形式快速实现你想要的功能。

照例只是非正经开发日志的历程记录。

前言 ​

为什么会有这个东西?

谁不想有一个可爱专属的辅助机器人呢,而 QQ 又是国内最为常用的聊天工具。

Telegram 国情便决定其不可能成为国内所有人常用的社交工具,而微信的残疾让我也没有太大兴趣。

  • 譬如基于此的我的机器人小云,就会自动抓取我的博客的 RSS 源,并转发到我的群中。(毕竟自己主动分享还有些羞耻。)
  • 譬如你发现了一张有趣的图或者文字,想要分享给多个群,一个个转发实在太麻烦,直接发给小云,她便可以帮你转发多个群。
  • 譬如问一句小云 在吗,她会回道 主人我在,而别人问则只会回答 爪巴 来彰显尊贵身份。
  • 譬如:……

此前我也曾经尝试使用诸如 qqbot、酷 Q 的 nonebot 搭建过 QQ 机器人。

还有过两篇黑历史一样的文章,小爱是云游最好的女朋友(大雾)酷 Q 使用笔记

真的猛士,敢于直面惨淡的博客,敢于正视羞耻的历史。

但很遗憾,前者 qqbot 因为 WebQQ 的关闭而宣告落幕。后者酷 Q 虽然仍在运营,但说好听点与我的开源理念想冲突,难听点则是为什么基础的发图功能都不能白嫖。

其次酷 Q 的跨平台能力实在太差,挂在 Linux 服务器上竟然还需要专门 wine,以及 docker 竟然足足有 559 MB 之大(mirai jar 包合计未超过 50 M)。配置也很麻烦,但无奈当初再无其他可替代品。

搭建完后,很快兴趣寥寥无几,丢在一旁。

后来在 阔落 的群里碰巧得知了 mirai 这个框架。 虽然尚未发布 1.0 版本,但看起来不错,更应了我心心念念的开源之思,便再度回想起当初弃坑多次的 QQ 机器人,暗道,爷的青春又回来了。(到底有几个青春啊

文章的建立日期是 2020-04-25,所以大约是这个时候

QQ Group

附上交流群号 707408530,征集小白鼠。(我自己目前使用基本没有问题。)

QQ 机器人的交流群要是不是 QQ 群就实在太奇怪了。

起步 ​

万事开头难,命名第一位。

因为我曾经的一个机器人叫作小爱,为了与之不同,新者便打算叫作小艾尔。

一来是发音相近(还挺好听),二来是自己有个闲置许久的 elpsy.cn 的域名。 El Psy Congroo | Steins;Gate

此前 Yun 主题群内,有位手写操作系统、对 CRC 执念很深的男人 ADD-SP 吸引了我

兴趣盎然,日更数篇博文,我说你这么闲,要不要一起来写个东西。无知少年,欣然应允。

造东西,我信仰两个原则,要么有趣,要么有用。两者兼有,再好不过。

人生亦是如此。 顺带一提,我发现无论在什么话后加上人生这句,都会高大上起来。 例:我今天睡懒觉迟到了,人生亦是如此。

我不打算实现像微软小冰那样类似的聊天机器人,说实话那种聊天或者猜谜、成语接龙的传统小游戏对我来说毫无吸引力,且觉得使得群内信息过于冗余。

我希望她能成为日常生活中的一个辅助,譬如帮你通过 RSS 订阅信息,一键将沙雕图转发多个沙雕群,提供一些关键的信息,或冷不丁的一句让大家开心的话。

小米的小爱同学,能够联动智能家居的这一实用功能,我便很喜欢。开关灯、空调很有用,而我也不至于真寂寞到每天和她聊天。

并作为一个平台,已有的功能可以通过配置文件快速使用,也可以通过插件的形式实现任意想要自定义的功能。

所以我相信 QQ 机器人应该会是个有趣且有用的东西。

未来道具研究所,el-bot 项目就此开始。

mirai 是 Kotlin 编写,Java 黑的我不会也不打算学。而其社区已经有了一些基于 mirai-api-http 实现的 SDK。

其中 python-mirai 最受欢迎。

只用 Python 刷过 LeetCode 简单中等题的我问道,会 Python 么?

ADD-SP 答略懂略懂。

此时,原本 ADD-SP 倾向于从头封装 SDK,而我则倾向于使用现成的轮子。(最后的结果则恰恰相反。)最后定了使用 python-mirai 来开发 el-bot(已经咕了)。

于是,两个菜鸡的 Python 之旅就开始了,而这个旅程也并没有持续多久。

承接 ​

定下这个计划时,我其实正在驾校等着练习科目三,于是白天练车,傍晚实验室干活,晚上才能抽空写写机器人。

毕竟是自己拉人入坑的,一开始就不写代码空嚷嚷的事不能干。

虽然起初搭了小小的结构,后来在整体的架构上我们的想法起了冲突,推进十分缓慢。我和 ADD-SP 的编程与思维习惯也恰为相反,同时分别为动态/静态语言的爱好者。

此前写东西基本是自己一人埋头干,说实话没什么合作经验。实验室的活倒是多人合作,但老师给了我很大的权限,除了一些特殊的要求外,前端架构上基本是我的一言堂(也一人干)。

后来看到 python-mirai 作者开了个 ISSUE,说将会重构,变动很多,同时因学业问题,7 月末前不会进行任何形式的开发。(本以为是个高考大佬,结果是个初中生巨佬。)

加之自己也诸事繁多,便约好索性等到新版本发布再写好了。

后来闲不住的 ADD-SP 发现了 gomirai,于是新开了个 el-bot-go(el-bot 的 go 语言版本) 来实验自己的想法。

而考完驾照的我则开了个 el-bot-web(咕了会儿,但会填的),作为控制面板,直接在网页实现与 mirai-api-http 的交互。

转折 ​

el-bot-go 的开发如火如荼,很快发布了可用版本。而我(go 只过了一遍教程的水平)偶尔参与讨论下配置的语法设计。

但 ADD-SP 很快遇到了一个问题,QQ 机器人想要足够实用,那么必然会用到一些自定义插件的地方。而 go 作为编译型语言,没办法动态加载插件。

我则嘀咕,这些用 js 就可以了嘛。

加之自己的确很想动手试试,自己 go 的水平又一言难尽,索性选回老本行,js 开干。

起初没有选用 js 的 SDK 开发,一是觉得 node-mirai 维护并不活跃且文档太草,二是想借机练习下 Python 技巧。

嘛,感觉除了深度学习之类的 Python 库最多,其他基本 Python 能干的事,Node.js 都能干,JavaScript 的优势则在于前端/浏览器。

于是正式开坑 el-bot-js,作为 el-bot 的 js(女子小学生)版本,适合于认为 JavaScript 是世界上最好的语言的用户。

动态加载插件是其一大优势,以及附带了些启动 mirai-console(自动登录)、webhook 等实用脚本。

2020-06-21 TypeScript Yes! node-mirai No! ​

写着写着,node-mirai 的很多设计不合口味,语义不明,文档也不完善,且提了几个 ISSUE 也始终没有收到回应。以及缺少一些更易用的辅助函数,控制台的输出消息不明确,axios 没有做统一配置和响应拦截,一些语法习惯也有所冲突。 ……我是不是抱怨太多了。虽然我自己也好不到哪里去。

加之之前整了 el-bot-web,便索性自力更生,直接根据 mirai-api-http 封装 SDK。后续机器人的上游问题,也不用再操心。

为了与 node-mirai 相区别,并提供更好的代码提示,我决定使用 TypeScript 编写,并命名为 mirai-ts

封装 SDK 中消息格式有很多,使用 TypeScript 规范代码要更为合适一些。 类型检查、动态语言,我全都要。

el-bot-js 也使用 TypeScript 进行了一番重构,并完全去除了 node-mirai 的依赖,转为使用 mirai-ts。

2020-06-27 长大的 mirai-ts ​

刚好赶在了端午假期结束前。mirai-ts 终于可以独当一面(完全封装实现 mirai-api-http)后,从 el-bot-js 的 packages 目录下,分离出来发布了 npm 包 mirai-ts

🤣 也算是回馈社区了,只要 mirai 还在,mirai-ts 我就会尽可能坚持维护下去的,毕竟相当于我自己也在用自己封的库。

简而言之,el-bot-py 也就是最早的 el-bot 应该是打算彻底咕了,毕竟本质要做的事一样,基于的协议一样,SDK 自己也特意重封了,没有必要再重复劳作。

我和 ADD-SP 则将分别维护 js 和 go 版本的 el-bot,按照各自不同的架构实现下去。

顺带一提,中途因为屁股起了包(没有想到更优雅的措辞),没办法坐着写代码。实验室汇报干活的时候,又觉得直说怪怪的,便改说身体不舒服,所以这周活儿干的有点少。(作为借口是重点。) 老师则说快多注意休息。我说好的,于是开完会趴在椅子上继续写起 el-bot-js。

2020-07-07 Bye, EBG ​

ADD-SP 决定放弃 el-bot-go 的维护,后续参与 el-bot-js 的维护。

因为 ElpsyCN 日后大概也只会有此一个版本的机器人,于是决定将 el-bot-js 重命名为 el-bot

2020-07-26 v0.3 npm 包 ​

此前我设想的 el-bot 是一个机器人模版,目标是简单的 clone 即可使用,其余一切需求通过 .env 设置环境变量或在 config/custom 中配置和编写自定义插件解决。

因为使用 TypeScript 编写,所以每次使用时还需自行编译。(不得不说,这一定程度上受到了此前写 Hexo 主题的习惯影响。)

仔细想来何不直接编译后作为 npm 包发布呢?(当然是因为之前还有 mirai 的结构

途中受到了 koishi(不过是基于 Coolq 的) 的许多启发。但并没有决定使用 monorepo 的形式。

于是现在 el-bot 定位更改为开发框架,新建了 el-bot-template 作为可用的快速启动模版。

官方插件 el-bot-plugins 也都发布于 @el-bot 的命名空间下。

提高了启动速度,自定义的程度也更高了。

2020-08-02 晨风被捕,mirai 跑路? ​

半夜,通宵中。忽闻晨风机器人作者被捕,随后 酷 Q 亦关闭论坛,其余机器人也似乎多是跑路,mirai 群内讨论后开启禁言,仅剩开发者群在讨论事宜。

本想 mirai 及其相关项目皆为开源,且未作盈利用途,当并无大碍,但却无人可以断言。QQ 相比 Telegram、Discord 等本就没有提供 API 机制,还如此作为,难免有些失望。

el-bot 与 mirai-ts 将暂时停止开发维护,观望 mirai 最终去向再作决定。(好像还变向给自己腾出了时间

2020-08-02 mirai 已清空仓库,故 el-bot 与 mirai-ts 也将停止维护。 虽然想过终有一天会结束,但没想到来得这么快。 这一切都是机关的阴谋。


没有未来的未来不是我想要的未来。 —— 神原秋人 「境界的彼方」

2020-08-16 mirai 复活! ​

mirai: 「想不到吧,爷又活了。」

爷的青春又回来了。

2021-03-08 mirai-ts 1.0 Ai ​

Shindo Ai

新堂爱(新堂 愛(しんどう あい),Shindo Ai ——「境界的彼方」

挑了个好日子,正式 release 了 v1.0.0 Ai,已经基本完成所有功能和类型封装。


To Be Continued.