Comments queue
Moderation → Comments (/moderation/comments) is the comment review surface. Reported comments float to the top; keyword-flagged comments are auto-highlighted; everything else is chronological.
The queue
Section titled “The queue”Columns:
| Column | Meaning |
|---|---|
| Author | User email/phone; clickable to User 360. |
| Series → Episode | Where the comment was left. |
| Body | Full text, with keyword flags highlighted. |
| Status | visible / hidden / deleted. |
| Reports | Count of user reports on this comment. Sorts top of queue. |
| Author strikes | Total user_strikes for this author (kind=comment). At 3, they auto-suspend commenting. |
| Created | Timestamp. |
Actions
Section titled “Actions”Per comment:
- Approve: clears the report flag but keeps
status='visible'. - Hide: sets
status='hidden'(invisible on mobile). No strike. - Delete: sets
status='deleted'(also invisible). Optional: also strike the author. - Strike author: inserts a
user_strikerow (kind=comment) with your reason.
Strike escalation
Section titled “Strike escalation”Strikes are cumulative:
- 1 strike: warning, no automated action.
- 2 strikes: comment permissions still allowed; UI shows warning banner.
- 3 strikes: automatic comment suspension (not full account suspension). User can watch/pay but not comment.
The auto-suspend is triggered inside admin-moderation.service.ts at strike-write time.
Bulk actions
Section titled “Bulk actions”Multi-select rows → Bulk hide / delete / strike. Useful when a spam wave hits.
Keyword flags
Section titled “Keyword flags”The service maintains a small keyword list (spam, slurs, off-topic patterns). Comments containing them get a flag icon and float above unflagged rows. Add/remove keywords: settings.moderation_keywords (superadmin).
Reports queue interaction
Section titled “Reports queue interaction”If a comment was flagged via Reports, resolving the comment (hide/delete) also resolves the linked report. Come back to Reports queue to close the loop.
Gotchas
Section titled “Gotchas”- Deleting a comment does not delete the strike. Strikes are per-author, per-incident, forever.
- Hidden vs deleted: no functional difference on mobile (both invisible). Delete is stronger and audits differently. Choose based on severity.
- Reactivating a suspended commenter: you cannot manually reverse an auto-suspension in v2. Contact a superadmin to clear strikes if warranted.
API calls
Section titled “API calls”| Action | Endpoint |
|---|---|
| List comments | GET /v1/admin/moderation/comments |
| Act on a comment | POST /v1/admin/moderation/comments/:id/action |
| Bulk action | POST /v1/admin/moderation/comments/bulk |
Full details in API: Engagement.