1.4.11
Halo 现有的评论审核机制比较简陋,可以考虑接入 WordPress 生态中常用的 Akismet 评论过滤系统来做一个自动化的过滤。要求不高的情况下可以代替人工审核,要求较高的情况下也可以为人工审核减轻负担。
除邮件以外,可以考虑加入 Telegram(或者其他支持 Bot 的 IM 平台)来更方便地将新评论通知给博主,使博主能够更方便地审核、回复评论。
以上功能如果可以采纳,我将会在实现之后发起 PR。
6ss1mwsb1#
欢迎 PR,/assign @Menci
fkaflof62#
@Menci 非常感谢你的建议。
建议现在 issue 中描述一下具体的实现思路后再写代码。
yk9xbfzb3#
大体看了一下项目架构,感觉应该在 handleCommentNewEvent 中(也就是发邮件的地方)处理评论后的逻辑。
handleCommentNewEvent
首先在评论设置里加入两个选项:「Akismet API Key」和「评论过滤设置」。在「评论过滤设置」中可以选择:删除垃圾评论和垃圾评论需要审核。
原「SMTP 服务」改为「通知设置」,将原有的两个二级 Tab 改为一个二级 Tab「SMTP 服务」,并添加一个二级 Tab「Telegram Bot」,其中包含四个设置项:
在 handleCommentNewEvent 中将构造的文本信息发往 Telegram 时,如果该评论需要审核,则提供通过/拒绝的选项。当博主回复该消息时自动回复该评论(当博主修改/删除消息时自动修改/删除对应评论?可能有点难?就需要记录更多状态了)。
s2j5cfk04#
原「SMTP 服务」改为「通知设置」
和我的想法一致,之前二级 Tab 中的 发送测试 可以去掉了,改为在 SMTP 服务下面加一个测试按钮,其中的收件人默认为管理员邮箱,内容也可以我们固定好。
发送测试
如果该评论需要审核,则提供通过/拒绝的选项。当博主回复该消息时自动回复该评论(当博主修改/删除消息时自动修改/删除对应评论?可能有点难?就需要记录更多状态了)。
个人建议提供 通过拒绝回复 这三个功能就行了。
通过
拒绝
回复
tf7tbtn25#
嗯,需要审核评论就显示 通过拒绝 ,不需要审核就显示 删除 。
删除
mrphzbgm6#
另外提一下,建议评论过滤和 Telegram 通知分为两个 PR 提交。
zbwhf8kr7#
前段时间忙了很多事情,最近大概可以有空来做这个了。这段时间接触了一些 microservice 和 serverless 的东西,想到了一种比直接在 Halo 里添加这两个功能更好的思路:webhook。就像 GitHub 的 webhook 一样。
用户可以在 Halo 中配置 webhook:设置一个私钥,和一些 webhook 地址。并且用户可以设置在一些事件(比如,目前只有被评论这一个事件)发生时,让 Halo 去调用 webhook。
每当有新评论时,用户配置的接受评论事件的 webhook 就会被调用,传入带签名的 payload,payload 中有评论的信息、内容还有带签名的显示/隐藏/删除评论的 POST 链接,用户可以在 webhook handler 里实现各种功能,比如内容过滤和通知。
这样的好处一是整个系统的可扩展性会提高,二是把这部分功能放在外部可以更方便用其他语言写逻辑。
然后原本的过滤和通知的功能,我打算基于 Cloudflare Worker 的写一个 webhook handler 来实现。
eyh26e7m8#
@Menci 是的,Webhook 会更具有扩展性,这个 issue 也提到了。#1585 (comment)
luaexgnf9#
我之前没接触过 Java 开发,对 Java 特别是 Spring 编码模式不太了解 …… 根据在 Nest 里的经验,初步的想法是:
9条答案
按热度按时间6ss1mwsb1#
欢迎 PR,/assign @Menci
fkaflof62#
@Menci 非常感谢你的建议。
建议现在 issue 中描述一下具体的实现思路后再写代码。
yk9xbfzb3#
大体看了一下项目架构,感觉应该在
handleCommentNewEvent
中(也就是发邮件的地方)处理评论后的逻辑。首先在评论设置里加入两个选项:「Akismet API Key」和「评论过滤设置」。在「评论过滤设置」中可以选择:删除垃圾评论和垃圾评论需要审核。
原「SMTP 服务」改为「通知设置」,将原有的两个二级 Tab 改为一个二级 Tab「SMTP 服务」,并添加一个二级 Tab「Telegram Bot」,其中包含四个设置项:
在
handleCommentNewEvent
中将构造的文本信息发往 Telegram 时,如果该评论需要审核,则提供通过/拒绝的选项。当博主回复该消息时自动回复该评论(当博主修改/删除消息时自动修改/删除对应评论?可能有点难?就需要记录更多状态了)。s2j5cfk04#
原「SMTP 服务」改为「通知设置」
和我的想法一致,之前二级 Tab 中的
发送测试
可以去掉了,改为在 SMTP 服务下面加一个测试按钮,其中的收件人默认为管理员邮箱,内容也可以我们固定好。如果该评论需要审核,则提供通过/拒绝的选项。当博主回复该消息时自动回复该评论(当博主修改/删除消息时自动修改/删除对应评论?可能有点难?就需要记录更多状态了)。
个人建议提供
通过
拒绝
回复
这三个功能就行了。tf7tbtn25#
嗯,需要审核评论就显示
通过
拒绝
,不需要审核就显示删除
。mrphzbgm6#
另外提一下,建议评论过滤和 Telegram 通知分为两个 PR 提交。
zbwhf8kr7#
前段时间忙了很多事情,最近大概可以有空来做这个了。这段时间接触了一些 microservice 和 serverless 的东西,想到了一种比直接在 Halo 里添加这两个功能更好的思路:webhook。就像 GitHub 的 webhook 一样。
用户可以在 Halo 中配置 webhook:设置一个私钥,和一些 webhook 地址。并且用户可以设置在一些事件(比如,目前只有被评论这一个事件)发生时,让 Halo 去调用 webhook。
每当有新评论时,用户配置的接受评论事件的 webhook 就会被调用,传入带签名的 payload,payload 中有评论的信息、内容还有带签名的显示/隐藏/删除评论的 POST 链接,用户可以在 webhook handler 里实现各种功能,比如内容过滤和通知。
这样的好处一是整个系统的可扩展性会提高,二是把这部分功能放在外部可以更方便用其他语言写逻辑。
然后原本的过滤和通知的功能,我打算基于 Cloudflare Worker 的写一个 webhook handler 来实现。
eyh26e7m8#
@Menci 是的,Webhook 会更具有扩展性,这个 issue 也提到了。#1585 (comment)
luaexgnf9#
我之前没接触过 Java 开发,对 Java 特别是 Spring 编码模式不太了解 …… 根据在 Nest 里的经验,初步的想法是: