askvortsov / flarum-auto-moderator
强大的自动化引擎。
Requires
- flarum/core: ^1.0.0
Requires (Dev)
- askvortsov/flarum-moderator-warnings: *@dev
- flarum/likes: *@dev
- flarum/suspend: *@dev
- flarum/testing: *@dev
- fof/best-answer: *@dev
This package is auto-updated.
Last update: 2024-05-01 19:18:02 UTC
README
一个 Flarum 扩展。
核心概念
想法很简单:当X,如果Y,则执行Z。
让我们定义一些关键术语
- 触发器:可以触发自动化的一系列事件(通常是单个事件)。例如,“发布帖子”、“登录”、“帖子被点赞”。
- 指标:数值量。例如,帖子数量或收到的点赞数。
- 要求:抽象的布尔条件。例如,没有被暂停、电子邮件与某些正则表达式匹配等。
- 操作:要执行的一些副作用/突变。这可能包括从添加/删除组到发送电子邮件或暂停用户等任何操作。
在代码中,这些由“驱动程序”表示,实现了一个 TriggerDriverInterface
、MetricDriverInterface
等。
要求 和 操作 驱动程序接受一个“设置”列表,它们为这些设置指定验证规则。这意味着您可以为任何正则表达式或组ID构建一个 UserEmailMatchesRegex : RequirementDriverInterface
或 AddUserToGroup : ActionDriverInterface
,然后创建驱动程序的多个实例。
所有这些都通过 规则 结合在一起。规则存储为[数据库表或设置,不知道],并指定
- 当规则应该运行时的触发器
- 指标“实例”的列表。每个实例包括
- 使用哪个指标驱动程序
- 一个数值范围(也可以是一个单侧的最小或最大范围)。如果指标驱动程序计算出的值落在该范围内,则满足指标。例如,“收到10到100个点赞”
- 一个“否定”布尔值。如果为真,则指标将满足条件,如果指标驱动程序计算出的值落在范围之外
- 要求“实例”的列表。每个实例包括
- 使用哪个要求驱动程序
- 要求驱动程序配置的值。它将被连接到要求驱动程序以计算是否满足要求。例如,用户的电子邮件需要以“flarum.org”结尾
- 一个“否定”布尔值。与指标一样,这允许反转要求驱动程序的输出
- 操作实例的列表。每个实例包括
- 使用哪个操作驱动程序
- 一个“设置”值,该值将连接到操作驱动程序以运行操作(例如,要从中删除用户的组)
触发驱动程序指定一个“主题模型”列表,例如在创建帖子事件中的作者和帖子。这些确定在定义某些触发器的规则时哪些指标、要求和操作可用,因为“运行”指标、要求和操作始终需要一些主题(例如,我们为哪个用户计算收到的点赞数,我们为哪个帖子自动标记等)
每当有任何具有通过触发器附加的规则的事件运行时,我们都会“评估”所有有效的规则,如果所有规则指标和要求都得到满足,则将运行规则的行动。
如果(1)规则具有设置验证不通过的要求或操作,(2)其组件依赖于当前未启用的扩展,或(3)其组件引用了当前不存在的驱动程序,则规则无效。
这使得扩展功能异常强大。由于扩展可以添加自己的指标、要求和操作,这个扩展可以自动化很多管理功能。以下是一些示例,但还有一些其他可能实现的功能:
- 自动分配成就/徽章
- 当用户达到阈值(或只是注册时)向他们发送电子邮件/通知
- 建立一个类似于Discourse的“信任级别”系统
- 当用户获得或失去某些群组成员资格时,将他们添加到/从外部系统
- 自动标记未通过某些测试的帖子
可测试性
因为这个系统非常通用,我们可以将测试规则框架(验证、评估、运行)与每个驱动程序分开。
测试驱动程序非常简单,这使得它既便宜又容易添加我们想要的任何驱动程序。请参阅这个扩展的测试套件以获取示例。
待办事项
- 实现创建、查看和编辑规则的前端。也许可以有一个功能,以JSON格式导入
Rule
,以便规则可以在论坛之间轻松共享?- 我们可以允许为某些驱动程序的设置注册表单组件/配置,例如,可以将“AddUserToGroup”操作与实际的群组选择器配置,而不仅仅是数字字段。
- 我已经实现了一个度量范围选择器组件。
- 添加更多驱动程序。
- 例如发送电子邮件、标记帖子、创建警告等操作
- 例如已阅读帖子、花费时间、访问天数、账户创建以来的天数等指标
- 例如“用户有个人资料”、“帖子匹配正则表达式”等要求
- 更多用于规则评估和验证的测试
- 添加对“日期”指标的支持,例如“过去X天创建的讨论数量”
- 将计算出的指标值缓存/存储,以便其他扩展使用
- 使指标值可供操作实现使用
已实现
- 各种驱动程序的面板
- 每个驱动程序的大量实例
- 每个实例的测试
- 用于添加新驱动程序的扩展器
Rule
类,包括规则的核心理念和评估逻辑- 还有一些针对此的测试,虽然更多的会更好!
指标与要求
任何指标驱动程序都可以实现为要求驱动程序,因为要求更强大。但如果您的要求是关于数字条件,则指标驱动程序更好,因为
- 可以轻松指定一个有效的数字范围
- 指标驱动程序的输出包含实际值,因此可以用于其他功能,例如为每个用户计算“声誉”分数
以下所有内容均已过时
示例
示例1:群组管理
标准:获得50个或以上赞并至少发起10个讨论的用户应放入“活跃”组。
在这里,指标是“获得50个或以上赞”和“至少发起10个讨论”。不出所料,它们分别带有触发器(PostWasLiked
,PostWasUnliked
)和(Discussion\Started
)。
操作是
- 当标准满足时,将用户添加到“活跃”组
- 当标准丢失时,从“活跃”组中删除用户
示例2:暂停
标准:如果用户获得15次或更多警告并且不是管理员,则暂停他们。
在这里,指标是“获得15次或更多警告”和要求是“不是管理员”。触发器将是针对指标的新的警告。要求没有触发器。
操作是
- 当标准满足时,暂停他们
- 当标准丢失时,取消暂停他们
示例3:自动激活
标准:如果用户的电子邮件匹配正则表达式,则激活该电子邮件。
要求是“用户的电子邮件匹配正则表达式”。触发条件是保存用户。
操作是
- 当满足条件时,自动激活用户的电子邮件
- 当不满足条件时,不激活
示例 4:默认组
标准:将用户添加到组中
没有指标或要求,因此这将应用于登录的所有用户。
操作是
- 在登录时将所有用户添加到组中
截图
可扩展性
此扩展非常灵活。它可以被视为自动化管理操作的框架。
扩展可以使用 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