Moderation tools on par with Discord #59

Open
opened 2026-10-06 15:44:34 +00:00 by robocub · 0 comments
Member

Goal: moderating a community space in Vommet should be as quick as in Discord, without switching to another client.

What exists today

  • Member list (ui/molecules/user_list.dart): change role, kick, ban. No reason field, no unban, no list of banned users.
  • Delete (redact) messages one at a time.
  • Room permissions page: only fixed levels 0/50/100/150 and a subset of event types (upstream commetchat/commet#958).

Gaps, roughly by value

  1. Kick and ban dialogs with a reason (sent as the membership reason), plus unban and a Bans list under room/space settings.
  2. Space-wide actions (Discord's server ban/kick): apply to the space and every child room where you have the power level, with a summary of where it failed.
  3. Delete message history on ban: "also delete their messages from the last hour / 24 h / 7 days", as rate-limited redactions with progress.
  4. Moderation from the message: right-click (long-press) a message for Delete, Kick, Ban, Timeout, Delete all recent from this user. Same options on the member hover card.
  5. Timeout: Matrix has no native timeout, so emulate it by setting the user's power level below events_default and restoring it when the time is up. Needs the client (or a bot) to do the restore, and the UI must say so. Show remaining time on the member.
  6. Full permissions editor (upstream #958): any power level number, every event type including ones unknown to the client (m.room.server_acl, call membership, widgets…), named roles mapped to levels, and the real level shown for every member.
  7. Report message, user or room to room moderators and server admins (spec POST /rooms/{roomId}/report/{eventId}, plus the newer room and user report endpoints where the server supports them).
  8. Ignore / block user (m.ignored_user_list, upstream #971): hide their messages and invites client-side.
  9. Audit log: a filterable view of moderation events in a room or space (bans, kicks, unbans, power-level changes, redactions, joins/leaves) with who did it and the reason.
  10. Server ACL editor (m.room.server_acl) with a confirmation that you can't lock out your own server.
  11. Anti-spam hooks: show and subscribe to policy lists (m.policy.rule.*, the format moderation bots like Draupnir use), and surface that a room uses a policy server. Discord's slow mode and automod have no Matrix equivalent today, so they're out of scope here.

Suggested phases

  • Phase 1 (small, high value): 1, 4, 8, plus the reason and unban parts of 2.
  • Phase 2: 3, 5, 7, 9.
  • Phase 3: 6, 10, 11.

Upstream commetchat/commet#958 (permissions editor) and #971 (client-level block): both open, no PR or branch (searched 2026-10-06). Member-list actions came from upstream PR #556.

Goal: moderating a community space in Vommet should be as quick as in Discord, without switching to another client. ## What exists today - Member list (`ui/molecules/user_list.dart`): change role, kick, ban. **No reason field, no unban, no list of banned users.** - Delete (redact) messages one at a time. - Room permissions page: only fixed levels 0/50/100/150 and a subset of event types (upstream commetchat/commet#958). ## Gaps, roughly by value 1. **Kick and ban dialogs with a reason** (sent as the membership `reason`), plus **unban** and a **Bans list** under room/space settings. 2. **Space-wide actions** (Discord's server ban/kick): apply to the space and every child room where you have the power level, with a summary of where it failed. 3. **Delete message history on ban:** "also delete their messages from the last hour / 24 h / 7 days", as rate-limited redactions with progress. 4. **Moderation from the message:** right-click (long-press) a message for Delete, Kick, Ban, Timeout, Delete all recent from this user. Same options on the member hover card. 5. **Timeout:** Matrix has no native timeout, so emulate it by setting the user's power level below `events_default` and restoring it when the time is up. Needs the client (or a bot) to do the restore, and the UI must say so. Show remaining time on the member. 6. **Full permissions editor** (upstream #958): any power level number, every event type including ones unknown to the client (`m.room.server_acl`, call membership, widgets…), named roles mapped to levels, and the real level shown for every member. 7. **Report message, user or room** to room moderators and server admins (spec `POST /rooms/{roomId}/report/{eventId}`, plus the newer room and user report endpoints where the server supports them). 8. **Ignore / block user** (`m.ignored_user_list`, upstream #971): hide their messages and invites client-side. 9. **Audit log:** a filterable view of moderation events in a room or space (bans, kicks, unbans, power-level changes, redactions, joins/leaves) with who did it and the reason. 10. **Server ACL editor** (`m.room.server_acl`) with a confirmation that you can't lock out your own server. 11. **Anti-spam hooks:** show and subscribe to policy lists (`m.policy.rule.*`, the format moderation bots like Draupnir use), and surface that a room uses a policy server. Discord's slow mode and automod have no Matrix equivalent today, so they're out of scope here. ## Suggested phases - **Phase 1 (small, high value):** 1, 4, 8, plus the reason and unban parts of 2. - **Phase 2:** 3, 5, 7, 9. - **Phase 3:** 6, 10, 11. ## Related Upstream commetchat/commet#958 (permissions editor) and #971 (client-level block): both open, no PR or branch (searched 2026-10-06). Member-list actions came from upstream PR #556.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
nether/vommet#59
No description provided.