Kick: moderation #76

Closed
opened 2026-09-02 00:04:18 -04:00 by Salastil · 1 comment
Owner

Nothing at all: no timeout, ban, unban, delete, slow mode, followers-only or subscribers-only toggle, no mod/VIP grants.

subscribers_only and followers_only are already parsed into api::Channel (backend/kick/api.rs:59-60, :113-114) and then never used — so moho knows the chat is restricted and does not say so, which is why a refused send is the first sign.

Done looks like: show the chat's mode in the buffer header, and offer the moderation actions the signed-in account actually has. Pairs with the deleted-message issue.

Nothing at all: no timeout, ban, unban, delete, slow mode, followers-only or subscribers-only toggle, no mod/VIP grants. `subscribers_only` and `followers_only` are already parsed into `api::Channel` (`backend/kick/api.rs:59-60`, `:113-114`) and then never used — so moho knows the chat is restricted and does not say so, which is why a refused send is the first sign. **Done looks like:** show the chat's mode in the buffer header, and offer the moderation actions the signed-in account actually has. Pairs with the deleted-message issue.
Author
Owner

Finished — https://git.salastil.com/Salastil/nobilis/commit/0a3135a and https://git.salastil.com/Salastil/moho/commit/80a52ac

Timeouts, bans, unbans, deleting a message, and setting who may talk. All five endpoints confirmed to exist behind auth before anything was written against them. Kick is the authority on every one and re-checks them, and what it refuses comes back in its own words — "not a moderator", "no longer signed in" — which say far more than a status code.

A timeout is a ban with an end on it, which is Kick's own model and the distinction a moderator actually means. "Kick" is a timeout here too: there is nobody to remove from a livestream chat, so the menu says "Time out for 10 minutes" rather than borrowing IRC's word for it.

The chat restrictions were the more embarrassing half. subscribers_only and followers_only were being parsed on join and read by nothing — so moho knew a channel was followers-only, let you type into it anyway, and let you find out from a refused send. They are now stated on the buffer at join and kept current by ChatroomUpdatedEvent, which is how followers-only going on mid-stream stops being a mystery. Eight of your twenty-six channels turn out to be followers-only.

Worded rather than lettered: IRC writes +mnt because that is what its server says, and inventing an equivalent spelling for Kick would be a code only this client knew.

Setting them sends the whole set, because that is what the endpoint takes — so the values not being changed are read back from what the channel already is, rather than turning on slow mode and silently turning off followers-only on the way past.

The member-list menu asks Kick what it may do the same way it asks IRC: from what is already on screen, since a moderator's own row says they are one. A moderator who has not spoken yet is therefore offered nothing, which is the honest reading — nothing here knows they are a moderator until Kick says so.

I did not exercise ban or timeout against a live channel: if that account happens to be a moderator somewhere, a test would have moderated a real person. Argument validation and the not-watched path are verified; the endpoints themselves want one deliberate use.

Finished — https://git.salastil.com/Salastil/nobilis/commit/0a3135a and https://git.salastil.com/Salastil/moho/commit/80a52ac Timeouts, bans, unbans, deleting a message, and setting who may talk. All five endpoints confirmed to exist behind auth before anything was written against them. Kick is the authority on every one and re-checks them, and what it refuses comes back in its own words — "not a moderator", "no longer signed in" — which say far more than a status code. A timeout is a ban with an end on it, which is Kick's own model and the distinction a moderator actually means. "Kick" is a timeout here too: there is nobody to remove from a livestream chat, so the menu says "Time out for 10 minutes" rather than borrowing IRC's word for it. **The chat restrictions were the more embarrassing half.** `subscribers_only` and `followers_only` were being parsed on join and read by nothing — so moho knew a channel was followers-only, let you type into it anyway, and let you find out from a refused send. They are now stated on the buffer at join and kept current by `ChatroomUpdatedEvent`, which is how followers-only going on mid-stream stops being a mystery. **Eight of your twenty-six channels turn out to be followers-only.** Worded rather than lettered: IRC writes `+mnt` because that is what its server says, and inventing an equivalent spelling for Kick would be a code only this client knew. Setting them sends the whole set, because that is what the endpoint takes — so the values not being changed are read back from what the channel already is, rather than turning on slow mode and silently turning off followers-only on the way past. The member-list menu asks Kick what it may do the same way it asks IRC: from what is already on screen, since a moderator's own row says they are one. A moderator who has not spoken yet is therefore offered nothing, which is the honest reading — nothing here knows they are a moderator until Kick says so. I did not exercise ban or timeout against a live channel: if that account happens to be a moderator somewhere, a test would have moderated a real person. Argument validation and the not-watched path are verified; the endpoints themselves want one deliberate use.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: Salastil/moho#76