nodeloc / flarum-auto-moderator
根据活动自动分配组。
Requires
- flarum/core: ^1.0.0
Requires (Dev)
- flarum/likes: *@dev
- flarum/suspend: *@dev
- flarum/testing: *@dev
- fof/best-answer: *@dev
- nodeloc/flarum-moderator-warnings: *@dev
This package is auto-updated.
Last update: 2024-08-30 00:00:58 UTC
README
Flarum 扩展。
更改。
修复 2 个问题
- 无法编辑用户信息。
- 编辑用户信息时,所有自动化组将丢失。
核心概念
核心思想如下
当用户满足条件 X 时,执行 Y。当用户不再满足条件 X 时,执行 Z。
让我们定义一些关键术语
- 条件组:用户满足的所有条件的集合。
- 条件(单数:标准):任意条件集合。条件与触发器和动作配对,由以下组成
- 指标:数值条件。例如,帖子数或收到的点赞数。条件可能需要指标的范围/最小值/最大值。
- 需求:抽象布尔条件。例如,未被暂停或拥有匹配特定正则表达式的电子邮件。
- 动作:当满足条件或失去条件时自动发生的操作。这可能包括添加/删除组、发送电子邮件或暂停用户等。
- 触发器:会导致用户条件组重新评估的事件集合。这些与指标和需求相关联。`LoggedIn` 是所有条件自动的触发器。
这使得这个扩展功能极其强大。此外,由于扩展可以添加自己的指标、需求和动作,这个扩展可以自动化大量的管理。除了以下列出的示例之外,可能的一些事情包括
- 自动化分配成就/徽章
- 当用户达到阈值(或仅当注册时)时发送电子邮件/通知用户
- 建立类似于 Discourse 的“信任级别”系统
- 当用户获得/失去某些组成员资格时,将用户从外部系统中加入或移除
- 还有很多其他的东西!可能性是无限的。
评估
当触发事件发生时
- 将为相关用户计算所有指标(指标的数值是多少?)
- 将为相关用户计算所有需求(用户是否满足每个需求?)
- 将计算并比较用户的新条件组和当前条件组。将比较这两个集合。只有由事件触发的条件将进行调整。
- 将为获得和失去的条件执行动作。
您还可以使用 php flarum criteria:recalculate
控制台命令重新计算所有用户的条件。请注意,这会非常慢,通常不应这样做。
示例
示例 1:组管理
条件:获得 50 个或更多点赞并且已发起至少 10 个讨论的用户应放入“活跃”组。
在这里,指标是“获得 50 个或更多点赞”和“已发起至少 10 个讨论”。不出所料,它们分别与触发器(`PostWasLiked`、`PostWasUnliked`)和(`Discussion\Started`)相关。
动作是
- 当条件满足时,将用户添加到“活跃”组
- 当条件失去时,从“活跃”组中移除用户
示例 2:暂停
条件:如果一个用户获得 15 个或更多警告并且不是管理员,则暂停他们。
在这里,指标是“获得 15 个或更多警告”和需求是“不是管理员”。触发器将是针对指标的新的警告。需求没有触发器。
动作是
- 当条件满足时,暂停他们
- 当条件丢失时,取消挂起
示例 3:自动激活
条件:如果用户的电子邮件与正则表达式匹配,则激活其电子邮件。
要求是“用户的电子邮件与正则表达式匹配”。触发器是保存用户。
动作是
- 当条件满足时,自动激活用户的电子邮件
- 当条件不满足时,不要激活
示例 4:默认组
条件:将用户添加到组中
没有指标或要求,因此将在登录时应用于所有用户。
动作是
- 在登录时将所有用户添加到组中
屏幕截图
指标与要求
很明显,任何指标都可以表示为要求。
- 要求必须具体。例如,“超过 50 个收到的赞”可能是一个要求。然而,指标可以允许任何范围内的值。
- 指标可以存储并用于其他目的。例如,一个计划中的功能是将所有指标合并以提供一个“声誉”分数。
设置
要求和操作可能需要在管理员仪表板上设置。例如
- "添加到组"操作将组 ID 作为设置
- "挂起"操作将天数以及是否为无限期挂起作为设置
- "电子邮件与正则表达式匹配"要求将正则表达式作为设置
可扩展性
此扩展非常灵活。它可以被视为自动化管理操作的框架。
扩展可以使用 Askvortsov\AutoModerator\Extend\AutoModerator
扩展器来添加
- 操作驱动程序
- 指标驱动程序
- 要求驱动程序
你应该查看默认驱动程序的源代码以获取示例。它们相当详尽地展示了所提供的内容。
如果你的扩展添加了需要设置的动作或要求驱动程序,你有 2 种选择
- 在驱动程序的
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
以获取底层数据结构和示例。
待办事项
- 添加对更多指标的支持
- 已读帖子
- 在论坛上花费的时间
- 访问天数
- 自账户创建以来的天数
- 等等
- 添加对日期指标的支持(过去 X 天内创建的讨论)
- 引入“权重”指标,将它们相加以计算声誉。将此声誉作为指标提供。
- 开发数据收集扩展,例如缓存点赞数等,以提高大型论坛的性能
- 调查“监听器”条件:我们能否将删除没有特定组用户的帖子中的链接之类的通用化
贡献
欢迎贡献和 PR!任何添加新驱动程序的 PR 应该附带单元测试(如所有现有驱动程序一样)。
兼容性
从 Flarum 1.0 开始兼容。
安装
composer require nodeloc/flarum-auto-moderator:*
更新
composer update nodeloc/flarum-auto-moderator