Waline配置Qmsg实现消息推送
我又来水一篇文章了
这个博客是使用Hexo搭建的静态站点,经过hexo将markdown转成html的形式放在github pages上
博客上的图片存储在又拍云上,又拍云上加入联盟可以使用dns,加速一些图片的浏览还是不错的
博客的主题使用hexo-theme-yun,感觉主题还是挺好看的,这套组合可能很多人都这样弄过,简单,免费
至此,经过很长时间没有再折腾过博客了,博客的评论系统一直处于无效状态,也懒得再弄了,将就将就得了
但是前段时间发生个事,让我又有动力改改博客了,随把博客的评论系统弄好了,起码QQ可以收到消息了
有一天,我正在上网冲浪,看到一个论坛说领到了阿里云盘的1t的容量,有这好事?立马拿出手机看看,
原来是两周年活动,而且要学生认证才能领取,我都已经毕业快一年了,没戏?不可能,我看了下
发现学生认证就是需要上传学生证,我灵机一动,如果把学生证p图一下呢?立马给自己学生证拍个照,p了一下
上传上去了,没想到竟然成功通过验证,我在阿里所有app眼中又成为了学生,这让我想到,一个企业架构再强大
安全做的再好,问题很可能出现在一些人工的因素上,but who care?白嫖1t容量美滋滋,嘿嘿
这白嫖了阿里云盘,我是记得阿里云上也有类似的学生活动,既然我在阿里的身份中是学生,那估计他们很多系统
都用的同一套学生认证系统,那我不也可以享受阿里云的学生优惠嘛,心动不如行动,领了阿里云7个月服务器
这服务器都领取了,总想干点啥,正好博客的评论系统不行,研究研究,waline是个啥东西,看很多博客都用到它
原谅我是个菜狗,总有人是菜狗,为什么不可以是我呢,研究一下,我知道了,waline是一个后端程序,nodejs写的
现在的JavaScript不仅可以写前端,还能写后端,之前就有所耳闻,看了下waline的部署,我们使用waline模板
创建了一个仓库,然后使用vercel部署成一个后端项目,vercel就是serverless平台,提供一些云计算的能力
就是把我们的waline模板项目部署成应用,这个比tomcat部署java程序要方便啊,前端还是大有所为的
waline项目部署到vercel上面后,用户一旦评论后,我们的主题项目就调用waline的接口,waline再将数据保存在leancloud平台
这个平台以前见到过,但不知道啥意思,现在知道了,他是baas平台,后端即服务,就相当于别人写好了后端项目,
调用它的接口就可以使用它提供的功能,waline调用leancloud接口,将消息数据保存到leancloud上
再调用qmsg的接口让它来通知我,qmsg是一个消息推送的工具,你需要再linux上部署它,然后配置自己的qq小号
那么当waline调用qmsg的接口后,qmsg就会登录你的小号,使用你的qq小号告知你某某某评论了什么内容。
博客的评论系统整体的调用关系就是这样的
我也懒得写具体的操作步骤了,再也不搞了,太菜太累了
整个流程,部署waline不难,部署qmsg机器人还是挺搞人的
来说说我遇到的问题
部署qmsg捐赠版的问题
部署qmsg首先需要解决jdk的问题,我这一想,docker快的很,结果容器启动起来,到输入手机号验证码的时候就卡住了
我还没输入手机号验证码就给我报错,所以部署qmsg只能在linux环境上配置jdk8的环境了,这个操作百度即可
部署好后,又来了一个问题,直接java -jar运行qmsg机器人的话,那我如果关闭了xshell窗口,程序就关闭了
如果使用nohup命令的话,那程序直接在后台运行,但是我需要程序运行的时候输入手机号验证码啊
在这里折腾半天,终于瞎搞好了,原来第一次部署的时候直接java -jar启动就行,输入完手机号后,再关闭程序
再通过nohup命令重新部署项目就好了,我估计是第一次部署的时候,qmsg项目接收到手机号验证码后
把一些认证信息写入linux,然后第二次的时候重新读取认证数据,大概吧,不猜了第一次部署命令: java -Dfile.encoding=UTF-8 -jar QmsgClient2.1.jar "-noUI机器人QQ账号|密码|0" 第二次部署命令: nohup java -Dfile.encoding=UTF-8 -jar QmsgClient2.1.jar "-noUI机器人QQ账号|密码|0" >output.log &
在折腾部署这个qmsg机器人的时候,让我学到了linux中的前台进程和后台进程,以及一些命令
Ctrl+z,将前台正在运行的进程转到后台,并暂停进程运行 Ctrl+c,停止正在运行的前台进程 jobs 查看后台运行的进程 bg,将前端进程转移到后台并继续运行,或者将最近的一个后台进程由暂停状态转为运行状态 如果bg jobNum,即可指定后台某个进程继续运行,jobnum可以通过jobs命令查看到 fg,与bg相反,将后台运行的进程转为前台进程, fg jobNum,指定某个后台进程转为前台进程
waline无法调用qmsg接口
我部署好了waline,也给hexo-theme-yun配置了waline需要的环境变量,包括qmsg需要的key
我也部署好了qmsg捐赠版,但我在博客中评论,waline只能将评论保存在leancloud中,只能展示数据
无法调用qmsg接口,waline不调用我部署的qmsg机器人,我qq小号怎么发消息给我啊!!!
没办法,我找半天,不知道啥原因,只能自己在waline项目的index.js中写代码了,自己调用qmsg接口const Application = require('@waline/vercel'); const axios = require('axios'); const qs = require('qs'); async function sendToQmsgRobot(key, message) { const qmsgUrl = `https://qmsg.zendee.cn/send/${key}`; const data = qs.stringify({ msg: message }); // 将消息内容转换为application/x-www-form-urlencoded格式 try { await axios.post(qmsgUrl, data, { headers: { 'Content-Type': 'application/x-www-form-urlencoded', // 设置请求参数格式为application/x-www-form-urlencoded }, }); } catch (error) { console.error(error); } } module.exports = Application({ async postSave(comment,pComment) { //发送消息给qmsg机器人 const key = 'xxxxx'; // 请替换为你自己的qmsg机器人的key const message = `你有新的评论啦!\n文章:${comment.url}\n评论人:${comment.nick}\n评论内容:${comment.comment}`; // 推送到机器人的消息内容 await sendToQmsgRobot(key, message) } });
代码都是让openAI帮我写的,我真菜啊啊啊啊,本来还打算搞搞邮箱推送,搞半天没成功,放弃!爱咋地咋地
本地改好代码后,推送到waline的仓库中,vercel平台会自动部署好项目,然后可以点击visit测试一下
看看评论后,自己的qq小号有没有发消息给自己,没问题的话,就把本次部署设为生产环境中。