oicq是基于 Node.js 实现 QQ (安卓) 协议,提供了 QQ 内常用的功能操作
yuan-bot是基于oicq并使用 TS 编写以及使用 MongoDB 作为数据库的 QQ 机器人。目前项目刚创建,只针对了 Q 群的精华消息,后续内容会慢慢丰富。
Github 地址:yuan-bot
这篇文章是该项目的非正经开发日志的历程记录。
背景#
我的 QQ 里面有着一个群,这是我高中以及大学时间玩剑三时候的游戏群。
里面的人个个会玩说话又好听。为了铭记每个小伙伴的一言一语,我们活用了 QQ 的精华消息功能,将每一句 骚话 经典名言裱在了这个精华消息列表上。
此时精华消息的内容不再是精华, 我们心照不宣地称其为糟粕
因为自己一时的年少轻狂而给装裱在列表上的小伙伴都叫苦连天(当然也有人以此为乐,是谁我不说,大家懂得都懂),纷纷控诉管理员这里面有着管理员的黑幕!应群友得而诛之!
但道高一尺魔高一丈,卑鄙的群管理不仅无视群友控诉,甚至在前一阵群成立八周年之日推出糟粕周边(有幸本人也拿到了一个),同时为糟粕数量最多的群友颁发了奖杯,大力推行糟粕文化,加上群友民心涣散,群里反对的声音逐渐消失,人人都成乐子人。
至此,糟粕文化达到了群成立以来的一个高潮。
在糟粕文化逐渐流行的同时,糟粕的数量也不断拔高,群管理发现了一些问题
- 糟粕数量最多达到 1000,必须删掉部分糟粕消息才可以继续添加,这样会损失一些群历史的糟粕
- 在这么庞大的数量下,QQ 群的精华消息并没有统计或者以时间查看等功能,每次统计都由人工统计,耗费人力
- ……
Yuan-Bot 就是为了 糟粕以及乐子 解决上述的问题而生。
启动#
git clone https://github.com/Magren0321/yuan-bot.git
pnpm install
pnpm run serve
过程#
作为一个前端,所以技术的选用下意识地就选择了 Node.js,找到了 oicq 这个库,它是基于 Node.js 实现的 Android QQ,同时是我感觉功能较为全面的库,具体的使用听我说不如参考其 Api reference
精华数据#
oicq 其本身封装的群对象里面并没有封装群精华数据(不如说好像还没有开源的库做到了这个,或许是受众太小了使用的频率也不高,所以都没有考虑),所以我得自己动手,丰衣足食。
用 Fiddler 抓包了 PC 端的 QQ,抓到了精华数据的接口,然后通过 oicq 提供的登录接口获取到 Cookie,将其丢进请求头来获取精华消息的数据。
顺便给 oicq 提了个 PR(又水了一个 PR
然后又又又碰上了一个问题就是,当群里有新增精华消息的时候我并无法通过 oicq 监听到群里的 tips,发现这个已经有人在去年 8 月就提了 issues,但是至今没有解决的样子。
原本的计划是打算监听到添加精华消息后,服务器的数据库实时存储新的精华消息,但是现在只能换一种方案,改成了间隔定时器,每隔一定时间对数据进行请求,记录好最新消息的时间戳,以此筛选掉旧的内容。
这个办法虽然我觉得很笨,但是现状我暂时没想到别的办法来实现这个功能。
命令#
这个比较容易解决,只需要监听指定群的消息,封装一个类,以字符串作为类中的 key,对应的方法作为 value,在收到消息后将消息作为 key 传入,如果 class 中存在则执行对应的方法就好。
大概实现就是这样,可以说是平平无奇,毫无亮点🤡
最后(或许也还不是最后?#
yuan-bot 的功能后续还会继续丰富还有迭代 (不过现在上班了,估摸进度会推进的比较缓慢)
🙏感谢 oicq 提供的接口以及文档
🛸Power by Magren and made with love
To Be Continued.