> ## Documentation Index
> Fetch the complete documentation index at: https://docs.archal.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Discord

> Guilds, channels, messages, webhooks, threads, commands, and interaction responses.

Discord is included in Archal's environment catalog. Use it in a sandbox for guilds, channels, messages, webhooks, threads, commands, and interaction responses.

|                 |                                                |
| --------------- | ---------------------------------------------- |
| Environment ID  | `discord`                                      |
| Transport       | REST and MCP                                   |
| State           | JSON                                           |
| Contract        | `archal.environment-state.discord` version `1` |
| Channel         | Preview                                        |
| Curated samples | 5                                              |

Preview means the environment is included for testing, but its upstream coverage is incomplete. Verify the operations your test depends on.

## Compatibility boundary

**Local catalog validation:** All five published samples passed. Checks cover the state contract, relationships, artifact hash, secret scan, and size limit.

<Note>
  Local catalog validation is not hosted proof. Archal checks current certification, reset, and isolation evidence before admitting new sandboxes. Use the authenticated environment catalog for live availability.
</Note>

* No gateway, voice, or full realtime-event parity.

## Curated starting states

List the five samples with `archal sample list discord`. Each sample is a versioned starting state with a representative read, mutation, expected diff, reset expectation, and verified artifact hash.

<AccordionGroup>
  <Accordion title="Discord message channel baseline">
    Read one guild and text channel, then post a message into that exact channel.

    **Sample ID:** `discord.message-channel-baseline.v1`

    **Category:** `minimal`

    **Starting state:** 9 records across `channels`: 1, `guilds`: 1, `members`: 2, `messages`: 1, `roles`: 2, `users`: 2

    **Supported surface:** Stateful guild, channel, role, member, message, reaction, and webhook REST flows.

    **Required capabilities:** `state.read`, `state.load`, `state.reset`, `rest.messages`

    **First read:** `GET /users/@me/guilds`. Expected result: HTTP 200.

    **Representative mutation:** `POST /channels/1400000000000000000/messages`. Expected result: HTTP 200, 201, 204.

    **Mutation input**

    ```json theme={null}
    {
      "content": "Webhook retries are stable now. I’m keeping the incident open through the next delivery window."
    }
    ```

    **Expected diff:** changes include `messages`. Exact match required: no. Hosted promotion must observe every listed path after the provider-native mutation; dynamic provider ids and timestamps are excluded from exact matching.

    **Expected reset:** restores loaded sample.

    **Known limits**

    * No gateway, voice, or full realtime-event parity.

    **Start this sample**

    ```bash theme={null}
    archal sample show discord.message-channel-baseline.v1 --raw > archal-discord-message-channel-baseline.json
    archal state validate discord archal-discord-message-channel-baseline.json
    archal session create discord \
      --state discord=archal-discord-message-channel-baseline.json
    ```

    **Inspect the raw state**

    ```bash theme={null}
    archal sample show discord.message-channel-baseline.v1 --raw
    ```

    The packaged JSON artifact is `samples/states/discord/message-channel-baseline/state.json` and is 6,725 bytes. The CLI verifies SHA-256 `8a7fbe18306048fb1945c85c0624d383369ceaebaba1aee20d7f225b9b1246b3` before printing it.

    Catalog validation: **Passed**. Hosted availability is determined by Archal's live certification and admission system, not this static page.
  </Accordion>

  <Accordion title="Discord small server">
    Exercise a two-member guild with text channels, roles, one command, and an existing message.

    **Sample ID:** `discord.small-server.v1`

    **Category:** `small-team`

    **Starting state:** 12 records across `applicationCommands`: 1, `applications`: 1, `channels`: 2, `guilds`: 1, `members`: 2, `messages`: 1, `roles`: 2, `users`: 2

    **Supported surface:** Stateful guild, channel, role, member, message, reaction, and webhook REST flows.

    **Required capabilities:** `state.read`, `state.load`, `state.reset`, `rest.messages`

    **First read:** `GET /users/@me/guilds`. Expected result: HTTP 200.

    **Representative mutation:** `POST /channels/1400000000000000000/messages`. Expected result: HTTP 200, 201, 204.

    **Mutation input**

    ```json theme={null}
    {
      "content": "Webhook retries are stable now. I’m keeping the incident open through the next delivery window."
    }
    ```

    **Expected diff:** changes include `messages`. Exact match required: no. Hosted promotion must observe every listed path after the provider-native mutation; dynamic provider ids and timestamps are excluded from exact matching.

    **Expected reset:** restores loaded sample.

    **Known limits**

    * No gateway, voice, or full realtime-event parity.

    **Start this sample**

    ```bash theme={null}
    archal sample show discord.small-server.v1 --raw > archal-discord-small-server.json
    archal state validate discord archal-discord-small-server.json
    archal session create discord \
      --state discord=archal-discord-small-server.json
    ```

    **Inspect the raw state**

    ```bash theme={null}
    archal sample show discord.small-server.v1 --raw
    ```

    The packaged JSON artifact is `samples/states/discord/small-server/state.json` and is 8,755 bytes. The CLI verifies SHA-256 `2ec31410cff081bb8092dd403ebe63653da19c8c8ccc8588b42433d25b98c290` before printing it.

    Catalog validation: **Passed**. Hosted availability is determined by Archal's live certification and admission system, not this static page.
  </Accordion>

  <Accordion title="Discord populated demo guild">
    Exercise connector-operations and agent-eval conversations across category, voice, and text channels with retained members, roles, and a bot command.

    **Sample ID:** `discord.demo-guild.v1`

    **Category:** `populated`

    **Starting state:** 35 records across `applicationCommands`: 1, `applications`: 1, `channels`: 5, `guilds`: 1, `members`: 2, `messages`: 20, `roles`: 3, `users`: 2

    **Supported surface:** Stateful guild, channel, role, member, message, reaction, and webhook REST flows.

    **Required capabilities:** `state.read`, `state.load`, `state.reset`, `rest.messages`

    **First read:** `GET /users/@me/guilds`. Expected result: HTTP 200.

    **Representative mutation:** `POST /channels/100000000000000010/messages`. Expected result: HTTP 200, 201, 204.

    **Mutation input**

    ```json theme={null}
    {
      "content": "Webhook retries are stable now. I’m keeping the incident open through the next delivery window."
    }
    ```

    **Expected diff:** changes include `messages`. Exact match required: no. Hosted promotion must observe every listed path after the provider-native mutation; dynamic provider ids and timestamps are excluded from exact matching.

    **Expected reset:** restores loaded sample.

    **Known limits**

    * No gateway, voice, or full realtime-event parity.

    **Start this sample**

    ```bash theme={null}
    archal sample show discord.demo-guild.v1 --raw > archal-discord-demo-guild.json
    archal state validate discord archal-discord-demo-guild.json
    archal session create discord \
      --state discord=archal-discord-demo-guild.json
    ```

    **Inspect the raw state**

    ```bash theme={null}
    archal sample show discord.demo-guild.v1 --raw
    ```

    The packaged JSON artifact is `samples/states/discord/demo-guild/state.json` and is 50,559 bytes. The CLI verifies SHA-256 `1ae6e709e37eb75351f331a9343f7740ae533835f026a9782da87d39edc248a3` before printing it.

    Catalog validation: **Passed**. Hosted availability is determined by Archal's live certification and admission system, not this static page.
  </Accordion>

  <Accordion title="Discord private escalation thread">
    Verify parent-channel and private-thread behavior for a live escalation with thread membership.

    **Sample ID:** `discord.private-escalation-thread.v1`

    **Category:** `edge-case`

    **Starting state:** 19 records across `applicationCommands`: 1, `applications`: 1, `channels`: 2, `guilds`: 1, `members`: 3, `messages`: 3, `roles`: 3, `threadMembers`: 2, `users`: 3

    **Supported surface:** Stateful guild, channel, role, member, message, reaction, and webhook REST flows.

    **Required capabilities:** `state.read`, `state.load`, `state.reset`, `rest.messages`

    **First read:** `GET /users/@me/guilds`. Expected result: HTTP 200.

    **Representative mutation:** `POST /channels/1400000000000000010/messages`. Expected result: HTTP 200, 201, 204.

    **Mutation input**

    ```json theme={null}
    {
      "content": "Webhook retries are stable now. I’m keeping the incident open through the next delivery window."
    }
    ```

    **Expected diff:** changes include `messages`. Exact match required: no. Hosted promotion must observe every listed path after the provider-native mutation; dynamic provider ids and timestamps are excluded from exact matching.

    **Expected reset:** restores loaded sample.

    **Known limits**

    * No gateway, voice, or full realtime-event parity.

    **Start this sample**

    ```bash theme={null}
    archal sample show discord.private-escalation-thread.v1 --raw > archal-discord-private-escalation-thread.json
    archal state validate discord archal-discord-private-escalation-thread.json
    archal session create discord \
      --state discord=archal-discord-private-escalation-thread.json
    ```

    **Inspect the raw state**

    ```bash theme={null}
    archal sample show discord.private-escalation-thread.v1 --raw
    ```

    The packaged JSON artifact is `samples/states/discord/private-escalation-thread/state.json` and is 15,524 bytes. The CLI verifies SHA-256 `c5b5a66e37344b278f6548b74e4326b55c54145715abac07a8b2ce26fff8b9c5` before printing it.

    Catalog validation: **Passed**. Hosted availability is determined by Archal's live certification and admission system, not this static page.
  </Accordion>

  <Accordion title="Discord community triage workflow">
    Start from a guild with commands, interactions, invites, threads, a webhook, and message history, then post and reset one triage update.

    **Sample ID:** `discord.community-triage-workflow.v1`

    **Category:** `workflow`

    **Starting state:** 35 records across `applicationCommands`: 2, `applications`: 1, `channels`: 8, `guilds`: 1, `interactions`: 1, `invites`: 2, `members`: 2, `messages`: 9, `roles`: 4, `threadMembers`: 2, `users`: 2, `webhooks`: 1

    **Supported surface:** Stateful guild, channel, role, member, message, reaction, and webhook REST flows.

    **Required capabilities:** `state.read`, `state.load`, `state.reset`, `rest.messages`

    **First read:** `GET /users/@me/guilds`. Expected result: HTTP 200.

    **Representative mutation:** `POST /channels/100000000000000004/messages`. Expected result: HTTP 200, 201, 204.

    **Mutation input**

    ```json theme={null}
    {
      "content": "Webhook retries are stable now. I’m keeping the incident open through the next delivery window."
    }
    ```

    **Expected diff:** changes include `messages`. Exact match required: no. Hosted promotion must observe every listed path after the provider-native mutation; dynamic provider ids and timestamps are excluded from exact matching.

    **Expected reset:** restores loaded sample.

    **Known limits**

    * No gateway, voice, or full realtime-event parity.

    **Start this sample**

    ```bash theme={null}
    archal sample show discord.community-triage-workflow.v1 --raw > archal-discord-community-triage-workflow.json
    archal state validate discord archal-discord-community-triage-workflow.json
    archal session create discord \
      --state discord=archal-discord-community-triage-workflow.json
    ```

    **Inspect the raw state**

    ```bash theme={null}
    archal sample show discord.community-triage-workflow.v1 --raw
    ```

    The packaged JSON artifact is `samples/states/discord/community-triage-workflow/state.json` and is 36,728 bytes. The CLI verifies SHA-256 `98473e4a208b3ae17d51d09fab4c039b4b144b859dfc0fb704c50f0e1db1a804` before printing it.

    Catalog validation: **Passed**. Hosted availability is determined by Archal's live certification and admission system, not this static page.
  </Accordion>
</AccordionGroup>

## Use custom state

Start from a sample when possible. For custom state, inspect the contract with `archal environment describe discord`, then validate the file before creating a sandbox:

```bash theme={null}
archal state validate discord state.json
```

Loading state replaces the current collections and establishes a new reset baseline. See [Starting state](/sandboxes/starting-state) before replacing state in an existing sandbox.
