PostAlerter 包含一套检查和触发机制,用于在常规帖子保存后发送通知,其起点是 after_save_post 方法。
我一直在为 Follow 插件 研究这个方法(具体可参见 discourse-follow/plugin.rb at main · discourse/discourse-follow · GitHub
鉴于 PostAlerter 的性质,我认为这次讨论的意义超出了 Follow 插件本身。我可以看到下面的建议同样适用于 assign 插件、polls 插件以及其他插件。
我目前的思路如下(我很乐意针对以下任何一点提交 PR):
-
在
after_save_post方法中添加一个钩子或事件触发器,允许插件在该方法的检查和计数上下文中添加(或排除)需要发送通知的用户。发送通知时,有三个关键考量:- 是否应向某用户发送关于该帖子的通知
- 是否已向某用户发送过关于该帖子的通知
- 应如何通知用户(即尊重其设置)
在
after_save_post方法的上下文中评估这些内容会更加容易。 -
对通知类型的调整使用。目前 PostAlerter 中使用了几个通知类型常量,并在特定的检查和计数中进行迭代或过滤,例如
NOTIFIABLE_TYPES和COLLAPSED_NOTIFIABLE_TYPES。目前存在一个通用的
:custom通知类型,但在after_save_post上下文中其作用有限,因为将custom添加到类型常量中会影响所有使用custom通知类型的场景。需要注意的是,assign 插件 目前使用了 :custom 通知类型,但它仅用于小型操作(而非常规帖子)的通知,且未将其用于任何查询(因为任何插件或服务都可以使用它;它实际上是通过消息字段来查找 assign 通知的)。