Skip to content

Reactions, polls & unreads

Reactions are stored on a message as a map from reaction identifier to internal user IDs and serialized as usernames. Add/remove share one helper, enforce channel reaction permission and configured per-message limits, then broadcast the changed state. message_react_* are legacy aliases.

Polls are durable records paired with a normal message containing a poll embed. Poll public data is hydrated per viewer. Votes can be single or multi-select; sending one option to a multiselect poll toggles it, while option_ids replaces the selection. total_votes counts selected options, not unique voters. Ending a poll freezes it and broadcasts final results.

Unread and ping stores are per user. Message activity advances unread state; unreads_get returns a snapshot and unreads_ack moves a channel/thread cursor, producing an unreads_update. Pings can be queried separately for mention-focused views.