• 一个成功的QQ机器人框架和一个垃圾代码制造者的故事


    起因

    为了在学校的生活方便,大佬学长们创建了一个QQ机器人,毕竟95后的IM(Instant Message)世界还是以QQ为主,所以机器人就很方便的查询到一些数据,群聊的时候也能带来一些快乐(因为有自动回复功能),然后……直到2020年1月21日,学长在群里面说被后台封了,QQ和IP都被封了(你咋不封MAC呢)。怎么办呢?换新的账号的话,因为原来的用户量已经很大了,现在换新的很麻烦,要一个个重新加好友加群,那么只能重新去在新的平台上开发了。然后赶紧百度一下有什么比较稳定的QQ机器人框架(吐槽一下为什么QQ不给出API),然后就看到有人推荐Coolq,那时候离开学还有5周(其实到现在已经8周了,赶紧开学啊),尽量能在开学之前写好吧,就去官网下载了一个客户端试一下,然后故事就开始了。

    发展(废话)

    打开软件的说明文档一看,和原来一样也是用插件的啊,插件那就不麻烦了,反正有原来的代码,直接照着抄就行了,再一看,易语言开发……?怪不得学长当时见到我们就问有谁会易语言开发,不过好在看到了C++的SDK,还有Pascal?的SDK和Rust的SDK,反正后面两个都不会,就头铁C++吧。

    千辛万苦从Github上面把SDK和模板clone下来(没梯子真的慢),一边下载一边看文档,需要MSVC 2019……!好容易摆脱了Visual Studio现在又要装回来?得了,下载吧,反正Github也没什么下载速度不会卡VS的,然后又把其他环境解决了,小半天过去了,熟悉的VS启动界面

    Visual Studio 2019

    打开文件,嗯?竟然不是解决方案项目,那就打开文件夹试试吧,一个CMake界面duang。赶紧百度CMake文件怎么写,找了几篇看看,眼睛:我会了;脑子:不,你不会。打开CMakeLists.txt,好像每一行都觉得有理有据,但是要想添加进去一行那是绝对不能了,就更不要说还要把cpp文件按照功能分文件夹放,看着代码,好像只要把所有文件放在src文件夹下就可以了,试一下hello, world吧,改了好一会儿,终于hello, world出现在了QQ的聊天界面上了,我会了,下面就是编写代码的问题了。

    然后就是数据库的问题了,因为原来的数据库是MySQL嘛,就直接拿过来用就好了,继续百度如何在C++中连接MySQL,无非是调用dll什么的,明明有connector为什么不用呢?然而亲自使用的时候才发现循环bug,关于wchar*、char*、std::string的error报了几百个。一怒之下直接想rm -rf,不对,是drop database,还是忍住了。Bye MySQL,找了一会儿在C++下操作比较友好的数据库,然后就在Coolq论坛上看到有人用sqlite开发,赶紧去看了一眼,极好,源码直接一个c文件两个头文件,简直就是福音。Hi sqlite,轻量级嘛十分好用的,又不需要权限管理,只要我防注入做的好,就不会出大问题了,反正可以注入的情况也不多,经常备份,出现问题直接恢复就好了,还有sqlitestudio等软件可以可视化,业务需求就已经够了。后来事实证明,重新创一个数据库是很正确的,因为原来的数据库里面有因为没有设置主键保证唯一性等问题造成了很多bug数据,比如说一个QQ号绑定了很多用户之类的,开后门也不能这样吧。

    完事具备,开始写代码了,写了几百行,吃掉了两包薯片十几袋饼干,真的无聊啊,就是创建sql语句,准备,绑定数据,然后查询,一套下来没个一两百行顶不住,那时候我还没发现snippet神器,全是手撸,而且sqlite因为是c代码,string与const char*的转换还好,格式化字符串,用stringstream操作实在是太麻烦了,难道未来的生活竟然是这样?也许是最近心浮气躁沉不住气了,Bye C++,我不爱你了,以后除非单片机或者Linux,再也不想动你了。

    因此以上都是废话(# ̄m ̄)

    转折

    但是事情总是要做完呀,怎么办呢?忽然间看到了RC大佬(就是上面的C++SDK的主要开发者)用Python写的另一个工具nonebot,反正用Python开发的时间成本就小了很多,不妨去看看

    Two hours later

    就决定是你了!

    因为偶然间发现sqlite竟然是集成在Python中的,而nonebot是一个PyPi上的Package,pip一下就好了,开发环境迅速(也不是很快,因为要Python 32位的,还要重新安装一下)搭建完成。这个时候操作起来就方便多了,sqlite也不用一个个绑定变量了,实在是轻松。

    之前学长也写了Python版本的代码,但是拿到手才发现挺难改的,因为很多接口都是上一个平台的,当然这不能怪学长,毕竟谁也想不到会有这种平台封禁的措施呢。现在吸取教训了,一定要把核心代码与平台分开写,然后留接口就好,这样即使找下家也方便快速修改和适配。接着就是Codding......

    75 years later

    代码已经写完并开始测试了,才发现,QQ里面的小表情、emoji等奇奇怪怪的东西要怎么处理呢?因为是要做跨软件平台的项目,因此这个最好要做一个自己的标准,然后通过映射来适应不同的平台,但是代码已经写好了怎么办呢?一边骂自己太蠢,一边想办法,但是也只能想到一个凑合的办法,自己创建一个标准然后映射太麻烦了,不如直接用Coolq的作为标准然后去映射,这样将来如果要换平台了,只要搞到一个与Coolq对应的映射表然后写个脚本在数据库里面全部换掉就好了

    尾声

    写完了,代码也拿去测试了,还是有很多bug,但是开发的经历挺好玩的,当然了,这仅仅是一个简单的机器人而已,还可以加上很多东西,例如像NLP之类的,虽然一点不会但是可以学呀,学长那边似乎还有很多前端的活,看看能不能去学习学习

  • 相关阅读:
    Bootstrap表单验证插件bootstrapValidator使用方法整理
    去掉表格前符号
    消除float浮动的影响
    html 让一行文字居中
    java通过各种类型驱动连接数据库
    命令行查看端口
    You can't specify target table 'table' for update in FROM clause
    mysql 添加字段 修改字段为not null
    Js、Jquery定时执行(一次或者重复多次,取消重复)
    c# datetime与 timeStamp(unix时间戳) 互相转换
  • 原文地址:https://www.cnblogs.com/BadCodeBuilder/p/12443466.html
Copyright © 2020-2023  润新知