askvortsov/flarum-auto-moderator

此包已被废弃且不再维护。作者建议使用 askvortsov/flarum-automod 包代替。

强大的自动化引擎。

安装数: 10,274

依赖: 2

建议: 1

安全: 0

星标: 10

关注者: 3

分支: 4

开放问题: 5

类型:flarum-extension

v0.1.3 2023-09-05 10:59 UTC

This package is auto-updated.

Last update: 2024-05-01 19:18:02 UTC


README

License Latest Stable Version

一个 Flarum 扩展。

核心概念

想法很简单:当X,如果Y,则执行Z

让我们定义一些关键术语

  • 触发器:可以触发自动化的一系列事件(通常是单个事件)。例如,“发布帖子”、“登录”、“帖子被点赞”。
  • 指标:数值量。例如,帖子数量或收到的点赞数。
  • 要求:抽象的布尔条件。例如,没有被暂停、电子邮件与某些正则表达式匹配等。
  • 操作:要执行的一些副作用/突变。这可能包括从添加/删除组到发送电子邮件或暂停用户等任何操作。

在代码中,这些由“驱动程序”表示,实现了一个 TriggerDriverInterfaceMetricDriverInterface 等。

要求操作 驱动程序接受一个“设置”列表,它们为这些设置指定验证规则。这意味着您可以为任何正则表达式或组ID构建一个 UserEmailMatchesRegex : RequirementDriverInterfaceAddUserToGroup : ActionDriverInterface,然后创建驱动程序的多个实例。

所有这些都通过 规则 结合在一起。规则存储为[数据库表或设置,不知道],并指定

  • 当规则应该运行时的触发器
  • 指标“实例”的列表。每个实例包括
    • 使用哪个指标驱动程序
    • 一个数值范围(也可以是一个单侧的最小或最大范围)。如果指标驱动程序计算出的值落在该范围内,则满足指标。例如,“收到10到100个点赞”
    • 一个“否定”布尔值。如果为真,则指标将满足条件,如果指标驱动程序计算出的值落在范围之外
  • 要求“实例”的列表。每个实例包括
    • 使用哪个要求驱动程序
    • 要求驱动程序配置的值。它将被连接到要求驱动程序以计算是否满足要求。例如,用户的电子邮件需要以“flarum.org”结尾
    • 一个“否定”布尔值。与指标一样,这允许反转要求驱动程序的输出
  • 操作实例的列表。每个实例包括
    • 使用哪个操作驱动程序
    • 一个“设置”值,该值将连接到操作驱动程序以运行操作(例如,要从中删除用户的组)

触发驱动程序指定一个“主题模型”列表,例如在创建帖子事件中的作者和帖子。这些确定在定义某些触发器的规则时哪些指标、要求和操作可用,因为“运行”指标、要求和操作始终需要一些主题(例如,我们为哪个用户计算收到的点赞数,我们为哪个帖子自动标记等)

每当有任何具有通过触发器附加的规则的事件运行时,我们都会“评估”所有有效的规则,如果所有规则指标和要求都得到满足,则将运行规则的行动。

如果(1)规则具有设置验证不通过的要求或操作,(2)其组件依赖于当前未启用的扩展,或(3)其组件引用了当前不存在的驱动程序,则规则无效。

这使得扩展功能异常强大。由于扩展可以添加自己的指标、要求和操作,这个扩展可以自动化很多管理功能。以下是一些示例,但还有一些其他可能实现的功能:

  • 自动分配成就/徽章
  • 当用户达到阈值(或只是注册时)向他们发送电子邮件/通知
  • 建立一个类似于Discourse的“信任级别”系统
  • 当用户获得或失去某些群组成员资格时,将他们添加到/从外部系统
  • 自动标记未通过某些测试的帖子

可测试性

因为这个系统非常通用,我们可以将测试规则框架(验证、评估、运行)与每个驱动程序分开。

测试驱动程序非常简单,这使得它既便宜又容易添加我们想要的任何驱动程序。请参阅这个扩展的测试套件以获取示例。

待办事项

  • 实现创建、查看和编辑规则的前端。也许可以有一个功能,以JSON格式导入Rule,以便规则可以在论坛之间轻松共享?
    • 我们可以允许为某些驱动程序的设置注册表单组件/配置,例如,可以将“AddUserToGroup”操作与实际的群组选择器配置,而不仅仅是数字字段。
    • 我已经实现了一个度量范围选择器组件。
  • 添加更多驱动程序。
    • 例如发送电子邮件、标记帖子、创建警告等操作
    • 例如已阅读帖子、花费时间、访问天数、账户创建以来的天数等指标
    • 例如“用户有个人资料”、“帖子匹配正则表达式”等要求
  • 更多用于规则评估和验证的测试
  • 添加对“日期”指标的支持,例如“过去X天创建的讨论数量”
  • 将计算出的指标值缓存/存储,以便其他扩展使用
  • 使指标值可供操作实现使用

已实现

  • 各种驱动程序的面板
    • 每个驱动程序的大量实例
    • 每个实例的测试
  • 用于添加新驱动程序的扩展器
  • Rule类,包括规则的核心理念和评估逻辑
    • 还有一些针对此的测试,虽然更多的会更好!

指标与要求

任何指标驱动程序都可以实现为要求驱动程序,因为要求更强大。但如果您的要求是关于数字条件,则指标驱动程序更好,因为

  • 可以轻松指定一个有效的数字范围
  • 指标驱动程序的输出包含实际值,因此可以用于其他功能,例如为每个用户计算“声誉”分数

以下所有内容均已过时

示例

示例1:群组管理

标准:获得50个或以上赞并至少发起10个讨论的用户应放入“活跃”组。

在这里,指标是“获得50个或以上赞”和“至少发起10个讨论”。不出所料,它们分别带有触发器(PostWasLikedPostWasUnliked)和(Discussion\Started)。

操作是

  • 当标准满足时,将用户添加到“活跃”组
  • 当标准丢失时,从“活跃”组中删除用户

示例2:暂停

标准:如果用户获得15次或更多警告并且不是管理员,则暂停他们。

在这里,指标是“获得15次或更多警告”和要求是“不是管理员”。触发器将是针对指标的新的警告。要求没有触发器。

操作是

  • 当标准满足时,暂停他们
  • 当标准丢失时,取消暂停他们

示例3:自动激活

标准:如果用户的电子邮件匹配正则表达式,则激活该电子邮件。

要求是“用户的电子邮件匹配正则表达式”。触发条件是保存用户。

操作是

  • 当满足条件时,自动激活用户的电子邮件
  • 当不满足条件时,不激活

示例 4:默认组

标准:将用户添加到组中

没有指标或要求,因此这将应用于登录的所有用户。

操作是

  • 在登录时将所有用户添加到组中

截图

Admin Criterion Edit Edit User

可扩展性

此扩展非常灵活。它可以被视为自动化管理操作的框架。

扩展可以使用 Askvortsov\AutoModerator\Extend\AutoModerator 扩展器来添加

  • 动作驱动程序
  • 指标驱动程序
  • 要求驱动程序

您应该查看默认驱动程序的源代码以获取示例。它们相当详尽地列出了所提供的内容。

如果您扩展添加了消耗设置的动词或要求驱动程序,您有以下两种选择

  • 在驱动程序的 availableSettings 方法中提供您需要的设置的翻译键。这很容易,但也很受限。您只能使用字符串,不能添加任何限制或 UI。
  • 您可以声明一个设置表单组件。以 js/src/admin/components/SuspendSelector 为例。组件应将设置流作为 this.attrs.settings。流的内容应是一个将设置键映射到值的对象。组件负责在输入时更新流。您可以通过将类添加到 app.autoModeratorForms[DRIVER CATEGORY][TYPE] 来注册表单组件,其中 DRIVER CATEGORY"action""requirement",而 TYPE 是您在 extend.php 中注册驱动程序时使用的类型字符串。请参阅 js/src/admin/index.js 以获取底层数据结构和示例。

贡献

欢迎贡献和 PR!任何添加新驱动程序的 PR 都应附带单元测试(如所有现有驱动程序)。

兼容性

从 Flarum 1.0 开始兼容。

安装

composer require askvortsov/flarum-automod:*

更新

composer update askvortsov/flarum-automod

链接