# Discord

The Spectate Discord app connects one Discord server to your Spectate team. Alerts arrive in Discord with **Acknowledge** and **Resolve** buttons, and you can declare, update and resolve incidents with the `/spectate` command. Each incident can get its own Discord channel, which Spectate keeps in sync with the dashboard. On-call members get pages, shift reminders and cover requests as direct messages from the Spectate bot.

A team can connect Discord and [Slack](/alerting/slack) at the same time.

## Connect Discord

Owners, managers and admins can connect Discord. You must have the **Manage Server** permission in the Discord server.

1. In the dashboard, select **Integrations**.
2. Under **Discord**, select **Add to Discord**.
3. In Discord, select the server and select **Authorize**.

One Discord server connects to one Spectate team. Spectate also links your own Discord account. After you connect, choose the channels: an alert channel for alerts, and the settings for incidents.

## Link your Discord account

Discord does not share email addresses with apps. Each member links their Discord account once, so that Spectate knows who uses a button or a command.

1. In the dashboard, select **Account**.
2. Under **Discord**, select **Connect Discord**.
3. In Discord, select **Authorize**.

Spectate only gets your Discord username. Members who did not link their account get a **Link your account** button in Discord, and nothing happens. To remove the link, select **Unlink** under **Account → Discord**.

## Get alerts in a Discord channel

1. Select **Alerting → New channel**.
2. Under **Integration**, select **Discord**.
3. Enter a **Name**.
4. Under **Discord channel**, select the channel.
5. Select **Create channel**.
6. Add the channel to an [escalation path](/alerting/escalation-paths) with a **Notify channel** step.

The list shows the text channels of the server. The Spectate bot must be able to see the channel and send messages in it.

You can also use a Discord webhook URL. Select **Use a webhook URL instead (no buttons)**. Webhook messages have no buttons, and Spectate does not update them.

### Alert messages

An alert message has the colour of the severity, the resource and the reason, and a chart when there is data. It has these buttons:

| Button | What it does |
|---|---|
| **Acknowledge** | Acknowledges the alert. The escalation stops. |
| **Declare incident** | Opens the declare form for the alert. If the alert already has an open incident, Spectate links to it instead. |
| **Resolve** | Resolves the alert. Spectate sends the resolved notifications. If the problem is still there, the alert fires again. |
| **View in Spectate** | Opens the alert in the dashboard. |

Spectate updates the message in place when someone acknowledges or resolves the alert, in Discord or anywhere else. The **Acknowledge** button goes away, and a line such as "Acknowledged by Ada" shows who did it. When the alert resolves, Spectate also posts a reply to the message.

## Who is acting in Discord

Everything you do in Discord, Spectate does as your Spectate account, with your role's permissions. You must be a member of the team that connected the server. If you do not have the permission for an action, Spectate tells you, and only you see the message.

## Commands

`/spectate` has one alias: `/inc`. In an incident channel, the commands act on that incident. In other channels, select the incident in the command's `incident` option. Discord suggests open incidents as you type.

| Command | What it does |
|---|---|
| `/spectate help` | Shows the commands. In an incident channel, also the incident's buttons. |
| `/spectate declare` | Opens the form to declare an incident. The `title` and `severity` options fill in the form. |
| `/spectate update` | Posts an update and can change the incident's status. |
| `/spectate status-page publish` | Publishes the incident to a status page. See [status pages from Discord](#status-pages-from-discord). |
| `/spectate status-page new` | Starts a status page incident without a Spectate incident. |
| `/spectate status-page update` | Posts the next update of an open status page incident, or resolves it. |
| `/spectate ack` | Acknowledges the incident. |
| `/spectate resolve` | Resolves the incident, with an optional closing message. |
| `/spectate roles` | Assigns the commander and the communications lead. |
| `/spectate lead` | Makes you the commander. |
| `/spectate rename` | Changes the title. |
| `/spectate summary` | Changes the summary. |
| `/spectate sev` | Changes the severity to `critical`, `high`, `medium` or `low`. |
| `/spectate list` | Lists the open incidents. Only you see the list. |
| `/spectate oncall` | Shows who is on call now and next for each schedule, and your next shift. The `schedule` option shows one schedule. Only you see the answer. |
| `/spectate cover` | Asks the others on an on-call schedule to cover one of your shifts. See [cover requests](#cover-requests). |
| `/spectate me` | Shows your shifts, cover requests and open incidents. See [your overview](#your-overview). |

`rename`, `summary` and `sev` with a value change the incident at once. Without a value, they open a form.

### Apps menu on a message

Right-click a message, then select **Apps**. On a phone, touch and hold the message. The menu has two Spectate commands:

- **Declare incident** opens the declare form. The message becomes the incident summary, with a link back to the message.
- **Pin to timeline** adds the message to the incident timeline. See [pin messages to the timeline](#pin-messages-to-the-timeline).

## Incident channels

When **Create a channel for each incident** is on, every new incident gets its own Discord channel. This includes incidents declared in Discord, in the dashboard, with the API, and by an escalation path. In the Discord declare form, you can select **No channel** for one incident.

The channel name is the prefix, the incident number and the title, for example `inc-42-checkout-errors`. Spectate creates the channel in the category that you select in the [settings](#settings). If you do not select a category, Spectate creates an "Incidents" category. The channel gets the permissions of its category, so a private category keeps incidents private. In a private category, Spectate also gives its own bot access to the new channel.

Spectate pins a header message in the channel. The header shows the reference, title, severity, status and commander, with these buttons:

- **Post update**
- **Status page**
- **Roles**
- **Acknowledge**, until someone acknowledges the incident
- **Resolve**
- **View in Spectate**

Spectate posts updates, status and severity changes, role changes and status page updates into the channel, from Discord and from the dashboard. If an incident has no channel, select **Create Discord channel** on the incident page.

### Pin messages to the timeline

To add a message from the incident channel to the timeline, right-click it and select **Apps → Pin to timeline**. Spectate adds the text, the author and a link to the message. The timeline shows that you pinned it. Spectate adds each message once, and only for members who can update the incident.

### Nudges

If an open incident gets no update for 30 minutes, Spectate posts a reminder in its channel. The reminder has **Post update** and **Status page** buttons. When someone posts an update or resolves the incident, Spectate removes the reminder. Change the time, or turn nudges off, with **Nudge quiet incidents** in the [settings](#settings).

## Status pages from Discord

`/spectate status-page publish` publishes an incident to a status page. In an incident channel, it uses that incident. If the team has more than one status page, select it in the `page` option.

`/spectate status-page new` starts a public incident without a Spectate incident. Enter the `title` option, then fill in the form. `/spectate status-page update` posts the next update of the status page incident in the `public_incident` option, or resolves it.

The form has these fields: **Status**, **Affected components**, **Impact** and **Public message**. One impact applies to all the selected components. Spectate emails the subscribers unless you set the command's `notify` option to `False`.

Discord forms have fewer fields than the dashboard:

- A form can offer 25 components at most. For a status page with more components, publish the update in the dashboard.
- You cannot backdate an update from Discord. Use the dashboard or Slack for **Happened at**.

Only owners, managers and admins can publish, and Spectate only offers status pages that you can publish to. See [status page incidents](/status-pages/incidents).

## On-call in Discord

For on-call, Spectate sends direct messages from the Spectate bot. You must [link your Discord account](#link-your-discord-account) first. If you do not accept direct messages from server members, Spectate cannot reach you in Discord. It then uses email.

### Pages

An escalation path can page you as the person [on call](/alerting/on-call). Spectate then also sends the alert as a direct message, with **Acknowledge**, **Declare incident** and **Resolve**. The message updates when someone acknowledges or resolves the alert. Discord pages do not use credits. To turn them off, clear **Also page me in Discord** under **Your on-call**. If the team also connected Slack, the setting is **Also page me in Slack and Discord**, and it turns off both.

### Cover requests

When you cannot do a shift, ask the others on the schedule to cover it.

1. Enter `/spectate cover`.
2. Under **Shift**, select one of your shifts of the next 4 weeks.
3. Optional: to ask for part of the shift, enter **From** and **Until**, for example `2026-03-04 18:00`.
4. Optional: enter a **Note**.
5. Select **Submit**.

Enter **From** and **Until** in the time zone of the schedule. If you leave them empty, the request is for the whole shift.

Spectate asks every other member of the schedule's rotations. Each one gets a direct message with **Accept** and **Can't cover**. The first person to accept gets an override for the whole window, and Spectate updates all the messages. You get a message with **Send reminder** and **Cancel request**. Spectate replies to it with each answer. Members that Spectate cannot reach in Discord or Slack get an email instead. See [cover requests](/alerting/on-call#ask-for-cover) for the full rules.

### Shift messages and handovers

Before each of your shifts, Spectate sends a reminder with **Request cover** and **View schedule**. It also sends a message when your shift starts and when it ends. To choose the time of the reminder, or to turn the messages off, use **Shift messages in Discord** under **Your on-call**. If the team also connected Slack, the setting is **Shift messages in Slack and Discord**. The default is **Also 1 hour before**.

A schedule can also announce each handover in a channel. The message mentions who is on call now, until when, and who they take over from. Select the channel under **Discord → Handover channel** on the schedule page.

### On-call roles

Spectate can create a Discord role for a schedule and give it to the right people. Mention the role to reach them.

1. Open the schedule on the **On-call** page.
2. Under **Discord**, select **Keep an on-call role**.
3. Enter the **Role name**. Spectate proposes the schedule name with `-oncall`, for example `platform-oncall`.
4. Under **Give it to**, select **Whoever is on call** or **Everyone on the schedule**.
5. Select **Save**.

Spectate creates the role in Discord. If you change the name later, Spectate renames the role. If you clear **Keep an on-call role**, Spectate deletes the role in Discord.

Spectate updates the role at each handover and when the rotations change. Only members who linked their Discord account get the role. When nobody is on call, the role has no members.

:::caution
Discord only lets the Spectate bot manage roles below its own role. In **Server Settings → Roles**, drag the Spectate role above the on-call role. Until then, the schedule page shows that Discord refused the role.
:::

## Your overview

`/spectate me` shows, only to you:

- **Your on-call**: your shifts of the next 2 weeks, each with **Request cover**.
- **Cover requests**: requests that you can answer, and your own open requests.
- **Open incidents**: up to 10.

It also has **Declare incident**, **Request cover** and **Open Spectate**.

## Settings

Find the settings under **Integrations → Discord**. Owners, managers and admins can change them.

| Setting | Default | What it does |
|---|---|---|
| **Announcements channel** | **No announcements** | Spectate announces each new incident in this channel, and keeps the announcement up to date. The Spectate bot must be able to see the channel and send messages in it. |
| **Create a channel for each incident** | On | Each new incident gets its own Discord channel. |
| **Channel prefix** | `inc` | The start of incident channel names. Lowercase letters, numbers, `-` and `_` only. |
| **Category for incident channels** | An "Incidents" category that Spectate creates | The category that incident channels go in. The Spectate bot must be able to manage channels in it. |
| **Nudge quiet incidents** | **After 30 minutes** | Posts a reminder in an incident channel when nobody posted an update for this long. **Never** turns nudges off. |

## Disconnect Discord

1. Select **Integrations**.
2. Under **Discord**, select **Disconnect**.
3. Select **Disconnect** to confirm.

The Spectate bot leaves the server. Spectate disables the alert channels that post through the server. If you connect Discord again, they turn on again. Existing incident channels and on-call roles stay in Discord, but Spectate stops updating them. If someone removes the bot in Discord, Spectate shows the server as disconnected when its next request to Discord fails.

## Related

- [Incidents](/incidents/introduction): declare and resolve incidents.
- [Updates and roles](/incidents/updates-and-roles): what Spectate mirrors into the incident channel.
- [Alerts](/alerting/alerts): acknowledge and resolve alerts.
- [On-call](/alerting/on-call): schedules, overrides and cover requests.
- [Slack](/alerting/slack): the same features in Slack.
