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

# Discord deployment

> Connect a verb to Discord and configure how, where, and when it responds.

## Questions this guide answers

* Why does my bot show "connection failed"?
* Why does the bot ignore messages in some channels?
* How do mention mode and AI-channel mode differ?
* How do Discord expression controls affect emoji, GIF, sticker, and poll behavior?
* How do I make bots talk to each other?
* Why does `/reset` work in DMs but fail in servers?
* Why does the bot say "application did not respond"?

## Before you connect

You need:

* A Discord application + bot user
* A valid bot token
* Privileged intents enabled in Discord Developer Portal

<Warning>
  Missing privileged intents is the most common cause of a bot that connects in
  dashboard UI but does not respond in Discord.
</Warning>

## Connect flow

<Steps>
  <Step title="Create bot in Discord">
    Use the Discord Developer Portal and create an app/bot.
  </Step>

  <Step title="Enable required intents">
    Enable Message Content and other required privileged intents in the bot settings.
  </Step>

  <Step title="Paste token in Verba">
    Open your verb's Discord module and connect with your token.
  </Step>

  <Step title="Invite the bot">
    Use the generated OAuth link to add it to your server.
  </Step>
</Steps>

<Note>
  Connected Discord bot tokens are protected in storage after connection. If a
  token is already attached to another verb, Verba will reject the duplicate
  link attempt until it is removed or re-linked correctly.
</Note>

## How response routing works

In server channels, a connected verb responds when at least one condition is true:

* The verb is directly mentioned
* The channel is marked as an AI channel
* A training keyword match is detected
* The bot is continuing an already-active bot-to-bot/autonomous exchange in that
  same channel

It does not respond when:

* Message includes `@everyone`/`@here`
* Message role-pings the bot's role directly
* User is on ignore/ban controls

Most unrelated bot messages are ignored. Bot-to-bot replies only continue when
the conversation is already active in that channel.

## Discord-native behavior

Recent Discord behavior is more native than basic text replies:

* Bots can prefer current-server custom emoji in replies and reactions
* If Discord allows external emoji in that channel, bots can also use custom
  emoji from other guilds they are in
* Bots can post server stickers when the moment fits
* Bots can send Tenor GIF follow-ups
* Bots can understand Discord polls, react to vote activity, and start native
  Discord polls when the situation fits
* Bots can split lively replies into several short messages instead of always
  sending one block

## Discord Expression Controls

The Discord module now includes a dedicated **Discord Expression Controls**
panel.

Current controls:

* Emoji Reactions
* GIF Follow-ups
* Server Stickers
* Custom Emojis
* Poll Creation
* Multi-Message Replies

All of these are enabled by default for new bots. They only affect
Discord-facing behavior and do not change API or website chat behavior.

## Mention mode vs AI-channel mode

### Mention mode

* Best for shared channels where bot noise should stay low
* Users ping the bot to trigger responses

### AI-channel mode (`/activate-channel`)

* Bot can respond without mentions in that channel
* Best for support/help channels or dedicated AI rooms

Use `/remove-channel` to disable AI-channel behavior.

## Autonomous and bot-to-bot behavior

When autonomous mode is enabled, Discord bots can:

* Chime into active conversations without a direct mention
* Reply to other bots in the same channel instead of only replying to humans
* React to messages and poll activity more naturally

Best results come from either:

* Enabling autonomous mode on both bots, or
* Mentioning both bots in the same channel to start the exchange

Autonomous frequency options are:

* `Human`
* `Default`
* `Active`
* `Chaotic`

## Slash commands available

Default command set:

* `/activate-channel`
* `/remove-channel`
* `/reset`
* `/generate`
* `/dashboard`
* `/vc-join`
* `/vc-leave`
* `/ping`

You can enable/disable each command in Discord module settings.

<Note>
  Discord activity/presence editing is available on all plans. You can keep
  `/vc-join` and `/vc-leave` enabled on any plan, but live voice-channel
  speaking still requires `Ultra`. On lower tiers, the bot answers with an
  in-character upgrade message instead of joining VC. Normal generated voice
  messages remain free.
</Note>

## Voice join without slash commands

Verbs do not always need `/vc-join`. If the bot is mentioned in a server and
the message is clearly asking it to join VC/call, it can use the same
voice-join path from normal chat.

Live VC speaking still requires `Ultra`. On lower tiers, the bot uses the same
personality-based upgrade response that the slash command path uses.

## Channel awareness

Discord replies are not blind to the room anymore.

* The bot gets the exact current channel as prompt context
* In servers, it only sees the channels it currently has permission to view
* Immediate recent conversation from the same channel is prioritized over older
  saved history

This helps replies, reactions, stickers, GIFs, and polls fit the current room
instead of sounding detached from the channel.

## Permissions behavior

* `/activate-channel` and `/remove-channel` require Administrator permission.
* `/reset` in server requires Administrator, server owner, or bot owner.
* `/reset` in DM is user-scoped and available without server permissions.
* Voice commands require Voice Engine enabled for the verb.
* Live voice-channel speaking requires `Ultra`. If a lower-tier bot gets
  `/vc-join`, `/vc-leave`, or a natural-language VC join request without an
  active voice session, it returns an in-character upgrade message instead of
  joining.

## Profile and presence settings

You can configure:

* Activity type (playing/listening/watching/custom)
* Activity text
* Presence (`online`, `idle`, `dnd`, `offline`)
* Slash command toggles

<Note>
  Activity text over dashboard limits is rejected or clamped. Keep status text short.
</Note>

## Server management tools

In the Discord module you can:

* View current server count
* Refresh profile/server data
* Leave specific servers
* Copy invite link quickly

## Custom builder

Verba also includes a dedicated **Discord Custom Builder** for creating:

* Slash commands
* Buttons, select menus, and modal flows
* Timed automations
* Webhook intake flows
* Ticketing and modmail systems
* Welcome and logging systems

Use the custom builder when you want your connected Verba bot to behave more like a purpose-built automation bot instead of only a conversational AI bot.

<Note>
  The builder is manual-save. Unsaved canvas changes are local and do not go live until you save.
</Note>

## Typical failure patterns

<AccordionGroup>
  <Accordion title="Connection failed during token setup">
    Usually invalid token format, token already linked to another verb, or Discord rate limiting. Retry with a fresh token and verify it is not already attached elsewhere.
  </Accordion>

  <Accordion title="The application did not respond">
    Most often command timeout or missing Discord permissions in that channel. Check command toggle, channel permissions, and voice/image settings for the invoked command.
  </Accordion>

  <Accordion title="Bot won't create a poll">
    Poll Creation must be enabled in Discord Expression Controls, and the bot
    also needs Discord's native poll permission in that channel. If the channel
    does not allow polls, the bot falls back to normal text instead.
  </Accordion>

  <Accordion title="Bot keeps using plain emoji instead of server emoji">
    Turn on Custom Emojis in Discord Expression Controls and make sure the bot
    is allowed to use server or external emojis in that channel. When enabled,
    Verba prefers fitting custom emojis over plain Unicode.
  </Accordion>

  <Accordion title="Bot is online but does not answer messages">
    Check whether the message was a mention, in an AI channel, or matched training keywords. Also verify intents and that the sender is not ignored/banned.
  </Accordion>

  <Accordion title="/reset fails in server">
    Server reset requires elevated permissions (admin/server owner/bot owner). DM reset does not.
  </Accordion>
</AccordionGroup>

<CardGroup cols={2}>
  <Card title="Discord Custom Builder" icon="wand-magic-sparkles" href="/guides/custom-builder">
    Build commands, buttons, webhook flows, tickets, modmail, and timed automations.
  </Card>

  <Card title="Discord Command Reference" icon="terminal" href="/guides/discord-command-reference">
    Exact behavior and permission rules for each slash command.
  </Card>

  <Card title="Troubleshooting" icon="life-ring" href="/guides/troubleshooting">
    Fast fix checklist for connection failures, timeouts, and no-response bugs.
  </Card>
</CardGroup>
