Skip to content

Server events

An event is a frame the server sends without being asked, usually because someone else changed something. This page lists every event the server sends. Use it to check that your client’s frame handler covers everything, then follow the links for each event’s fields.

Events never carry a listener. Many events share a cmd with the response to the command that caused them. For example, when you send message_new you get a message_new response with your listener, and everyone else gets a message_new event without one.

The “Receives” column in the tables uses these groups:

Group Meaning
Everyone Every signed-in connection on the server.
Everyone else Every signed-in connection except the one that sent the request. The sender gets a direct response instead.
Channel viewers Every signed-in connection whose account can view the channel, except the one that sent the request. When a user caused the event, accounts severed from that user are skipped.
The account Every open connection of one account.
Event Meaning Receives Details
handshake Server identity and capabilities. Sent once, as soon as the socket opens. The new connection The handshake
ping Heartbeat with no other fields, sent every 30 seconds. No reply is needed. Every open connection, signed in or not Connection lifecycle
auth_error You were kicked (reason: "kicked") or banned (reason: "banned"). The server closes the socket right after. The account Common frames
rate_limit A timeout started, was removed, or expired. length: 0 means it’s over. The account Timeouts
Event Meaning Receives Details
server_update The server’s name, icon, or banner changed. Carries name, icon, and banner. Everyone else after server_update. Everyone after an image upload. server_update
access_mode_update The access mode changed. Carries mode. Also sent with mode: "open" when the password is removed while password mode is on. Everyone else access_mode_set
application_new Someone submitted a join application. Carries application and pending, the number of pending applications. Connections with manage_access or review_applications application_submit
application_approved Your join application was approved. Carries application_id. The applicant’s account application_review

Access control explains applications and access modes.

Event Meaning Receives Details
channels_get Your full list of visible channels, in val. Sent after a channel is created, moved, deleted, or changed, including slow mode and sticky message changes. Also sent when a role change alters which channels you can see. Everyone, each with their own list channels_get
channel_get One changed channel, in val. Sent instead of channels_get when a channel changed without being renamed, to connections that reported channel_get. Connections that reported channel_get channel_get

Message events carry channel, and also thread_id when the message is in a thread.

When a channel has a sticky message, every new message in it is followed by a message_delete for the old copy of the sticky message and a message_new for the re-posted copy, so the sticky message stays at the bottom.

Event Meaning Receives Details
message_new A new message, in message. Sources include users, webhooks, slash command replies, pin announcements, sticky message re-posts, and plugins. Channel viewers message_new
message_new with message.ephemeral: true A private slash command reply that only you can see. It isn’t stored. The account that ran the command slash_response
message_edit A message changed. Carries id and the new message. Channel viewers message_edit
message_edit (link previews) The server added or removed link preview embeds, which have generated: true. The message isn’t marked as edited. Every connection that can view the channel and reported server_side_embeds, including the author’s Link previews
message_delete A message was removed. Carries id. Also sent for each message removed when a user leaves or is banned with message deletion. Channel viewers message_delete
message_pin, message_unpin A message was pinned or unpinned. Carries id and pinned. A message_new announcement follows. Channel viewers message_pin
reaction_add, reaction_remove A reaction changed. Carries id, emoji, from, and total. Channel viewers reaction_add
message_react_add, message_react_remove The same as reaction_add and reaction_remove, when the sender used the old command names. Channel viewers Legacy compatibility
poll_vote Someone voted. Carries poll_id, message_id, user, option_ids, and results. Channel viewers poll_vote
poll_end A poll was closed. Carries poll_id, message_id, and results. Channel viewers poll_end
typing Someone is typing. Carries user and duration in milliseconds. Channel viewers typing
unreads_update You marked a channel or thread as read. Carries last_viewed. The account, including the connection that sent unreads_ack unreads_ack

Thread events go to viewers of the thread’s forum channel and carry that channel in channel.

Event Meaning Receives Details
thread_create A thread was created. Carries thread. Channel viewers thread_create
thread_update A thread was renamed, archived, or locked. Carries thread. Channel viewers thread_update
thread_delete A thread was deleted. Carries thread_id. Channel viewers thread_delete
thread_join, thread_leave Someone joined or left a thread. Carries thread, thread_id, and user. Channel viewers thread_join
thread_pin, thread_unpin A thread was pinned or unpinned. Carries thread_id and pinned. Channel viewers thread_pin
Event Meaning Receives Details
user_join Someone joined the server, for the first time or again. Carries user. Everyone except the connection that signed in Users and presence
user_leave Someone left, was banned, or was removed because their Rotur account is banned. Carries username. Everyone user_leave
user_connect A member came online or stopped being invisible. Carries user. Everyone allowed to see the member’s presence Users and presence
user_disconnect A member’s last connection closed, or they went invisible. Carries user. It doesn’t mean they left. Everyone allowed to see the member’s presence Users and presence
user_clients A member’s clients or devices list changed. Carries username, clients, and devices. Everyone allowed to see the member’s presence Users and presence
status_get A member changed their status. Carries username and status. The member and viewers with manage_users also get invisible. Everyone. Other viewers don’t get it while the member is invisible or offline. status_set
user_update A moderator changed someone’s nickname (user and nickname), or a server account changed its avatar (user and pfp). Everyone else for nicknames. Everyone for avatars. user_update, avatars
nickname_update, nickname_remove Someone set or cleared their own nickname with /nick. Carries user (the user ID), username, and nickname when set. Everyone Built-in slash commands
user_kick A member was kicked. Carries user and kicked: true. Everyone else user_kick
user_roles_get A member’s roles changed. Carries user, roles, color, and gradient. Everyone else user_roles_get

Hidden status and the manage_users permission change which presence events a viewer gets. When a viewer gains or loses manage_users, the server sends them user_connect or user_disconnect for each online invisible member, so their view matches their new access.

Event Meaning Receives Details
role_create A role was created. Carries the role in val. Everyone else role_create
role_update A role changed. Carries the role in val. Everyone else role_update
role_delete A role was deleted. Carries the deleted role in val. Everyone else role_delete
role_reorder Role order changed. Carries roles, the new order. Everyone else role_reorder
Event Meaning Receives Details
slash_add Slash commands became available. Carries commands. Everyone slash_register
slash_remove Slash commands went away, because they were replaced, a plugin was unloaded, or the registering connection closed. Carries commands. Everyone slash_register
slash_call Someone ran a command that your connection registered. Answer it with slash_response. The connection that registered the command slash_call

Voice events go to every signed-in connection that can view the voice channel, including the user’s own. Users severed from the subject are skipped.

Event Meaning Receives Details
voice_user_joined Someone joined a voice channel. Carries channel and user. Only other participants see the user’s peer_id. Viewers of the voice channel voice_join
voice_user_updated Someone muted or unmuted. Carries channel and user. Viewers of the voice channel voice_mute
voice_user_left Someone left a voice channel or disconnected. Carries channel and username. When two users in the same call are severed, each also gets this event for the other. Viewers of the voice channel voice_leave