Skip to content

feat: support watched term alerts for the mod team - #5145

Open
wescopeland wants to merge 3 commits into
RetroAchievements:masterfrom
wescopeland:mod-term-watchlist
Open

feat: support watched term alerts for the mod team#5145
wescopeland wants to merge 3 commits into
RetroAchievements:masterfrom
wescopeland:mod-term-watchlist

Conversation

@wescopeland

Copy link
Copy Markdown
Member

Resolves #5091.

https://discord.com/channels/476211979464343552/1488680676021768414/1533221430324629614

Watched terms can now be configured by users with Role::MODERATOR attached. When a given term is written on a forum post or comment, it will surface in the moderator feed.

Screenshot 2026-08-02 at 11 51 29 AM

@wescopeland
wescopeland requested a review from a team August 2, 2026 15:52
@greptile-apps

greptile-apps Bot commented Aug 2, 2026

Copy link
Copy Markdown
Contributor

Greptile Summary

Adds moderator-managed watched terms and Discord alerts for matching forum posts and comments.

  • Adds watchlist CRUD, persistence, caching, and matching.
  • Observes new and edited community content.
  • Queues formatted alerts to a dedicated webhook.

Confidence Score: 5/5

The PR appears safe to merge.

No blocking failure remains.

Reviews (3): Last reviewed commit: "fix: address feedback" | Re-trigger Greptile

Comment thread app/Observers/ForumTopicCommentObserver.php Outdated
Comment thread app/Support/Alerts/WatchedTermAlert.php
Comment thread app/Observers/ForumTopicCommentObserver.php Outdated
};
}

public function isManagementComment(): bool

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Would isUmoderatedComment be better?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is there any reason to have a created_by field or some form of audit log? There's nothing indicating who added a word (or changed one to something else).

'inside a URL' => 'see https://example.com/watchedtool/downloads',
'split by bold tags' => 'grab watched[b][/b]tool here',
'split by italic tags' => 'grab watched[i][/i]tool here',
'split by a url tag' => 'grab watched[url=https://example.com][/url]tool here',

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What about in a url tag?

grab it [url=https://watchedtool.com]here[/url]

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

On a related note: Since the minimum term length is four characters, are we at all concerned about falsely matching a substring in a hash like YouTube videos and bit.ly links generate?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Alert moderators when comments/posts match a configurable term watchlist

2 participants