halo-dev / halo

强大易用的开源建站工具。
https://www.halo.run
GNU General Public License v3.0
33.42k stars 9.62k forks source link

评论自动过滤与审核通知(Webhook) #1475

Closed Menci closed 2 weeks ago

Menci commented 3 years ago

你当前使用的版本

1.4.11

描述一下此特性

Halo 现有的评论审核机制比较简陋,可以考虑接入 WordPress 生态中常用的 Akismet 评论过滤系统来做一个自动化的过滤。要求不高的情况下可以代替人工审核,要求较高的情况下也可以为人工审核减轻负担。

除邮件以外,可以考虑加入 Telegram(或者其他支持 Bot 的 IM 平台)来更方便地将新评论通知给博主,使博主能够更方便地审核、回复评论。

以上功能如果可以采纳,我将会在实现之后发起 PR。

附加信息

No response

ruibaby commented 3 years ago

欢迎 PR,/assign @Menci

JohnNiang commented 3 years ago

@Menci 非常感谢你的建议。

建议现在 issue 中描述一下具体的实现思路后再写代码。

Menci commented 3 years ago

大体看了一下项目架构,感觉应该在 handleCommentNewEvent 中(也就是发邮件的地方)处理评论后的逻辑。


首先在评论设置里加入两个选项:「Akismet API Key」和「评论过滤设置」。在「评论过滤设置」中可以选择:删除垃圾评论垃圾评论需要审核

原「SMTP 服务」改为「通知设置」,将原有的两个二级 Tab 改为一个二级 Tab「SMTP 服务」,并添加一个二级 Tab「Telegram Bot」,其中包含四个设置项:


handleCommentNewEvent 中将构造的文本信息发往 Telegram 时,如果该评论需要审核,则提供通过/拒绝的选项。当博主回复该消息时自动回复该评论(当博主修改/删除消息时自动修改/删除对应评论?可能有点难?就需要记录更多状态了)。

ruibaby commented 3 years ago

原「SMTP 服务」改为「通知设置」

和我的想法一致,之前二级 Tab 中的 发送测试 可以去掉了,改为在 SMTP 服务下面加一个测试按钮,其中的收件人默认为管理员邮箱,内容也可以我们固定好。

如果该评论需要审核,则提供通过/拒绝的选项。当博主回复该消息时自动回复该评论(当博主修改/删除消息时自动修改/删除对应评论?可能有点难?就需要记录更多状态了)。

个人建议提供 通过 拒绝 回复 这三个功能就行了。

Menci commented 3 years ago

嗯,需要审核评论就显示 通过 拒绝,不需要审核就显示 删除

ruibaby commented 3 years ago

另外提一下,建议评论过滤和 Telegram 通知分为两个 PR 提交。

Menci commented 2 years ago

前段时间忙了很多事情,最近大概可以有空来做这个了。这段时间接触了一些 microservice 和 serverless 的东西,想到了一种比直接在 Halo 里添加这两个功能更好的思路:webhook。就像 GitHub 的 webhook 一样。

用户可以在 Halo 中配置 webhook:设置一个私钥,和一些 webhook 地址。并且用户可以设置在一些事件(比如,目前只有被评论这一个事件)发生时,让 Halo 去调用 webhook。

每当有新评论时,用户配置的接受评论事件的 webhook 就会被调用,传入带签名的 payload,payload 中有评论的信息、内容还有带签名的显示/隐藏/删除评论的 POST 链接,用户可以在 webhook handler 里实现各种功能,比如内容过滤和通知。

这样的好处一是整个系统的可扩展性会提高,二是把这部分功能放在外部可以更方便用其他语言写逻辑。

然后原本的过滤和通知的功能,我打算基于 Cloudflare Worker 的写一个 webhook handler 来实现。

ruibaby commented 2 years ago

@Menci 是的,Webhook 会更具有扩展性,这个 issue 也提到了。https://github.com/halo-dev/halo/issues/1585#issuecomment-990745323

Menci commented 2 years ago

我之前没接触过 Java 开发,对 Java 特别是 Spring 编码模式不太了解 …… 根据在 Nest 里的经验,初步的想法是:

ruibaby commented 2 weeks ago

Halo 2 已经有了类似的插件:https://github.com/wxyShine/plugin-webhook

/close

f2c-ci-robot[bot] commented 2 weeks ago

@ruibaby: Closing this issue.

In response to [this](https://github.com/halo-dev/halo/issues/1475#issuecomment-2342879901): >Halo 2 已经有了类似的插件:https://github.com/wxyShine/plugin-webhook > >/close Instructions for interacting with me using PR comments are available [here](https://git.k8s.io/community/contributors/guide/pull-requests.md). If you have questions or suggestions related to my behavior, please file an issue against the [kubernetes/test-infra](https://github.com/kubernetes/test-infra/issues/new?title=Prow%20issue:) repository.