Wow, hats off to you ! This looks fantastic, I really like that you've made it extensible so that the possibilities really are endless. What a nice treat for 1.0, I am very much looking forward to trying this gem. Thank you!
Flarum AutoModerator
v0.1.1
Small update, and no one's using it yet, but why not.
- Allow selecting icons for criteria.
- Generate criteria color
These changes make the automoderator page more colorful!
- Fix duplicate managed groups
- Make the criterion page a tiny bit prettier with some slight tweaks
Love this. Really fantastic.
What happens if a depending extension is no longer installed. Eg triggering suspension but suspend is uninstalled (and the db column is removed)?
luceos What happens if a depending extension is no longer installed.
All drivers (actions, metrics, and requirements) supply a list of extension dependencies. If those dependencies aren't met, you won't be able to create new criteria with those drivers. Existing criteria will be considered invalid, and gain/loss actions won't be executed while those criteria use drivers with missing dependencies. There will also be an error in the admin dashboard. Same goes if settings are missing / don't pass validation.
The error messages aren't ideal (they don't say which extension / which driver exactly has validation issues), but using them and common sense, admins should be able to figure it out. Plus this is something that can be improved in the future.
Why is it called Auto Moderator? It does not seems to moderate anything.
ctml For me "moderation" is more about managing content (posts, discussions) instead of users (especially if we talk about assigning groups to users). On first look I thought it works more like https://discuss.flarum.org/d/5131-friendsofflarum-filter. Personally I think the name of extension is confusing and naming of https://discuss.flarum.org/d/25977-trust-levels-automatic-group-assignment was much more clear.
- Edited
rob006 For me "moderation" is more about managing content (posts, discussions) instead of users (especially if we talk about assigning groups to users).
I think moderation of users is just as valid a concept as moderation of content. That being said,
askvortsov Investigate criterion "listeners": can we generalize stuff like removing links from posts of users without certain groups?
I am hoping to eventually build in some content moderation too. Just a matter of figuring out an elegant abstraction.
I didn't like "trust levels" as a name, because this extension can do a lot more than that. Also, "levels" imply disjointedness and some form of order, which is not the case with this extension.
This looks like a very valuable plugin
I've been using sql scripts to partially provide this behavior
I think moderation of users is just as valid a concept as moderation of content.
Absolutely, for example, I recently made it so users in the "valid users" group can send private messages, upload files, etc. This after a user was sending private pm's to get other users off platform to scam them.
This would make defining a "valid user" very easy ️
Very powerful concept and already great extension.
- Introduce metric "weights", sum together to calculate a reputation. Make that reputation available as a metric.
I suggest including more calculations, such as differences, ratios, and even mathematical functions. This could be very helpful in putting things in perspective. 5 warnings within a few days and a handful of posts should be treated differently from the same number of warnings within years of active membership.
I know that this could be handled within the current extension à la:
- more than 2 warnings and less than 10 posts or
- more than 3 warnings and less than 30 posts or
- more than 4 warnings and less then 100 posts or
- more than 5 warnings and less then 300 posts or
- more than 6 warnings and less then 1000 posts
... but having a rule like $warnings > 2 * lg($posts)
could make life much easier, especially when more then two metrics are to be combined.
Pollux I suggest including more calculations, such as differences, ratios, and even mathematical functions. This could be very helpful in putting things in perspective.
Hmm, I wonder if this could be implemented as a requirement? All that would be needed is for the metric values to be provided to requirements. Then, a requirement could take such a string like you provided ($warnings > 2 * lg($posts)
) as a setting, parse it out (inventing mini programming languages is fun!), and validate against the provided metric values.
Right now I need to focus on Flarum CLI, so this feature is going in the "eventual todo" list alongside content moderation.
For content moderation, the most trivial solution would be to allow "listeners". So if the user satisfies criterion X, a function would run on some events. This would handle stuff like FoF filter, but the listeners would have to be quite bulky.
What if metrics and requirements could be conceptually applied to various models? Then, we could create "rules" for members of criteria.
For example, take creation of posts.
If a user satisfies metrics M1 and requirements R1, and the post satisfies metrics M2 and requirements R2, do something to the post.
The part I'm struggling to reconcile is actions vs that "something". Anyone who has done hardware development can recognize that actions happen "on the edge" of group membership qualification:
(let one of those waveforms be qualification. When qualification state changes, on gain / on loss actions are executed)
On the other hand, this "something" for content moderation happens while qualification is active (users currently qualifying for a criteria would be affected).
Another way to consider this is that content created by users could be "mutated" on creation. This could be a generalization of the above "listener" idea that decouples the "when" (by having metrics and requirements for models beyond User) from the "what" (mutations applied to posts, discussions, messages, etc before they are created/edited).
Then, there's the question of whether "mutations" and "actions" are isomorphic: does it matter that "actions" are triggered on state change, and "mutations" modify models as they are created / edited? I feel like yet again, the "what" should be decoupled from the "when", and these should be treated as isomorphic. But more thinking is needed here.
askvortsov Hmm, I wonder if this could be implemented as a requirement? All that would be needed is for the metric values to be provided to requirements. Then, a requirement could take such a string like you provided ($warnings > 2 * lg($posts)) as a setting, parse it out (inventing mini programming languages is fun!), and validate against the provided metric values.
This sounds good.
Another way to consider this is that content created by users could be "mutated" on creation. This could be a generalization of the above "listener" idea that decouples the "when" (by having metrics and requirements for models beyond User) from the "what" (mutations applied to posts, discussions, messages, etc before they are created/edited).
If we decouple the "when" from the "what," we might also consider acting retroactively.
Example: We monitor new users who post external links (potential spammers). If a user posts more than 2 links within the last 4 posts or more than 3 links within the last 10 posts, we auto-flag their latest post. In this case, shouldn't we retroactively auto-flag all previous posts that contain a link?
Pollux In this case, shouldn't we retroactively auto-flag all previous posts that contain a link?
Hmm... If we lived in functional programming land, our "action" would be a pure function that takes a model (in this case a post) and returns a model instance with some modifications. While this would be clean and beautiful, PHP does not support something like this.
On the bright side, this means that an action could do anything. For example, instead of just mutating the post, it could do something to the post's author, or all posts of the post's author, or etc.
askvortsov So, would this be useful to integrate with something like @JasperVriends’ badges extension? If user gets 5 likes, they get a badge?
010101 gets 5 likes, they get a badge?
Yep, that's one possible application.
In theory, it's an abstraction of executing actions in response to events if certain criteria are met (or at least that's where I want to grow it in the future).
It's incredible, it hurts my head to even think of the number of applications that could be made
- Edited
Great! It could be better to make it a flarum own feature so that other extensions have the opportunity to use it.
stimw extensions can built so they too can be extended and that's what the author has done, so it doesn't need to be a core feature You'll notice the User Badges extension has added integration with AutoModerator for automatic badges.
stimw But AutoModerator just doesn't seem to be a popular extension
The same could have been said with the GitLab Auth extension that I created with what feels like eons ago; then out of nowhere, it blew up and so many installs that I nearly flew out of my seat! Typically, when an extension has a very “popular” or active discussion going on, it can be for a variety of reasons. One reason could be that the extension works so well that no one really has any issues to report and for the people that do post, it’s simply to leave thanks or ask questions
Give it time, this extension will blow up, especially if it gets added to FreeFlarum down the line time will tell my friend so please try to have patience