十月底,把博客的评论系统换掉了。
原来用的是 Twikoo,部署在群晖 Docker 里。用了挺长时间,满足需求但不完美,一是太依赖家里的 NAS 的稳定运行,二是哔哔条目被评论后无法准确定位。博客本身早已实现静态托管,唯独评论系统还得靠家里的设备维持,想想还是决定把它换掉。
于是在 AI 的帮助下,搭了一套新的评论系统,后端基于 Cloudflare Workers + D1,邮件通知使用 Resend,前端则以之前 Twikoo 的样式为基础,根据博客整体风格重新调整,顺带把文章阅读量和点赞功能也整合了进来。
新评论系统的一些调整和取舍:
- 评论定位。解决了之前哔哔评论无法准确定位的问题,现在每条哔哔都有独立的页面链接,收到评论通知后可以直接跳转到对应内容。
- 邮件通知。恢复了之前 Twikoo 邮件提醒模板中自定义的信封样式,换了系统,邮件还是熟悉的样子。
- 前端样式。评论卡片的阴影、圆角、分隔线,输入框和按钮的布局,都尽量跟博客风格保持一致,字体、颜色跟随四套主题切换。
- 博主标识。照着不知道从哪里看来的样式,复刻了一个小小的花边印章标识。
- 访客信息与头像。不展示评论者的 IP 归属地、浏览器和设备信息,感觉这些东西没什么实际意义,索性去掉,让评论区清爽一点。头像依次尝试从 Cravatar、WeAvatar、Gravatar 获取,实在加载不出来就显示昵称首字,也避免了网络不好时头像位置空着。
- 评论审核。最初想着同一邮箱前三次留言需要审核,之后自动放开。后来想想,评论区本来就没多少人留言,何况我自己回复留言也不积极,实在没必要再设一道门槛,索性取消了人工审核。
- 反垃圾。 取消人工审核后,垃圾评论就交给后台的静默规则处理,包括蜜罐、提交频率限制、重复内容及敏感词识别等,命中规则的直接拦截,也不向提交者提示。
- 回复体验。评论最多保留两层,避免楼中楼无限嵌套。回复已有回复也不再继续缩进,而是通过 @ 标明回复对象。回复框直接在对应留言下方展开,不用再跳回页面顶部。
- 排序与分页。主评论按时间倒序,楼中楼按时间正序。每页显示十条主评论,回复不拆散,超过五条就先折叠。评论总数包含回复,但楼号只给主评论编号。新评论提交后也会自动跳回第一页,方便查看。
- 留言等级。不搞等级、积分这些东西,评论就是评论,没必要再折腾一套成长体系。
当然,重新写一套,也不意味着比 Twikoo 更好。Twikoo 毕竟是成熟的开源项目,功能丰富,后台也完善,图片上传、Markdown 编辑、表情面板等基本开箱即用。现在这套功能相对简单,管理后台也比较简陋,好处是足够轻量,前端想怎么改就怎么改,不必再迁就原有组件的布局。坏处则是以后出了什么问题,或者想增加新功能,还得自己继续折腾。
最后还有历史评论迁移。这次折腾新评论系统,恰好是在群晖遭勒索攻击的前两天,Twikoo 中一千多条历史评论也已经完整迁移到了新数据库。要是晚两天,这些历史留言,恐怕就跟群晖里的其他文件一起被加密锁死了。
目前这套新评论系统已经稳定运行了十来天,对我来讲已经完全够用。
感谢赛博菩萨。
❤