A Discord AI support bot answers your members' questions inside your server, using your own documentation: help center, FAQ, changelog and policy pages. The version I build searches those sources for each question, writes a short answer with numbered links to the pages it used, and when it can't find a good match it says so and opens a ticket for your staff instead of guessing.
It usually lands in the Community tier, from $1,490, and takes 2 to 4 weeks. Model usage is billed to your own OpenAI or Anthropic account, which at September 2026 list prices comes to roughly $0.55 to $22 per 1,000 answers depending on the model (worked out below). If what you want is an AI bot for your Discord server that chats about anything, this page isn't that, and a no-code tool will get you there faster. If you run a personal AI agent, my guides show how to connect OpenClaw to Discord and connect Hermes Agent to Discord.
What the Discord AI support bot does
A member types /ask how do refunds work? or posts in your help forum. The bot pulls the three to five passages from your docs that best match the question and replies with a short answer and links such as "[1] Refund policy". Under the answer are two buttons: "That solved it" and "Talk to a person".
If the best matches are weak, the bot says it couldn't find this in the docs and opens a ticket with the question and the passages it found, so staff start with context. It doesn't guess.
For admins, the bot re-reads your sources every night, logs every question and answer, and sends a weekly list of questions it had to hand off: a to-do list for your docs.
People call this "training the bot on your docs", but nothing is trained. Your docs are split into passages, indexed, and handed to an unchanged model with each question. So a docs update is live after the next sync, and you can always see which page an answer came from.
Slash command, mention or help channel
How members reach the bot decides what it needs from Discord. Reading ordinary messages requires the privileged Message Content intent. Slash commands, messages that mention the bot, DMs and message context menu commands don't.
| Trigger | Message Content intent | Good for | Trade-off |
|---|---|---|---|
/ask slash command |
Not needed | Private answers only the asker sees, clear intent | Members have to know the command exists |
| @mention the bot | Not needed | Natural, works in any channel you allow | Answers are public |
| Auto-answer in a help forum or channel | Required | Every new post gets a first answer without anyone asking | Must be scoped tightly to that channel |
| Right-click a message, Apps, "Answer from docs" | Not needed | Staff drafting replies for members | Staff-driven, not self-serve |
For a bot that runs only in your server, Message Content is a switch in the Developer Portal. Since June 2026, Discord reviews that access only once more than 10,000 unique users can see the app. I usually suggest /ask plus auto-answer in one help forum, where each post is its own thread and follow-ups keep their context.
Guardrails that make it safe to leave running
- Confidence threshold. Each answer gets a score from the search step plus the model's own check that the passages actually answer the question. Below the threshold, the bot hands off. We tune it together on real questions from your members.
- Handoff into your ticket flow. Low scores, "Talk to a person" clicks and anything about billing disputes or account security go to staff. If you already run a ticket bot, the AI sits in front of it. If not, I build the ticket side too.
- Rate limits and quotas. A per-user cooldown and daily cap stop one person from flooding a channel or running up your bill. A monthly spend cap switches the bot to handoff-only when the budget is used.
- Output checks. Replies go out with mentions disabled, so no answer can ping @everyone. Links are allowed only to your own domains, and answers can pass a moderation check first; OpenAI lists its moderation model as free as of September 2026.
- Channel scoping. The bot answers only in channels you choose, and admins can limit each command by role and channel under Server Settings, Integrations.
- Nothing to abuse. Members will try "ignore your instructions". The bot can read your docs and post replies, nothing more, and every attempt shows up in the log.
What it costs to run
There are two bills: the build and upkeep from me, and model usage on your own API account, where you see every cent.
Model cost depends on text in and out: in my design a typical answer sends about 3,500 input tokens (instructions, five doc passages, the question) and gets about 400 back. At list prices as of September 2026:
| Model | Input / output per 1M tokens | Per answer | Per 1,000 answers |
|---|---|---|---|
| OpenAI gpt-6-luna | $0.10 / $0.50 | $0.00055 | about $0.55 |
| Anthropic Claude Haiku 4.5 | $1 / $5 | $0.0055 | about $5.50 |
| OpenAI gpt-6-sol | $2 / $10 | $0.011 | about $11 |
| Anthropic Claude Sonnet 5 | $2 / $10 | $0.011 | about $11 |
| Anthropic Claude Opus 5.5 | $4 / $20 | $0.022 | about $22 |
Indexing is close to free: OpenAI's text-embedding-3-small costs $0.02 per million tokens, so embedding a large help center costs cents. Models that reason before answering bill those hidden tokens as output, so I keep reasoning effort low, and caching the fixed instructions lowers the input price on repeat requests.
Hosting runs on a Care plan at $49 a month. The search index lives in the bot's own database, so there is no separate vector-database bill.
Free bot, SaaS or custom?
Several products already put an AI answer bot in Discord (prices as of September 2026):
| Option | Price | What you get |
|---|---|---|
| Mava | Free (30 requests a month), Founder $39 (100), Growth $99 (500), Scale $199 (2,000), Enterprise $599 (10,000), monthly billing | Support inbox for Discord, Telegram, web chat, email and Slack. A request is one ticket or one public AI answer; over the limit, the public AI bot stops |
| Quickchat AI | Free for non-commercial use (50 AI credits); commercial plans $9 to $999 a month (150 to 30,000 credits); a reply uses 1 to 4 credits depending on the model | A no-code bot that answers when mentioned, in channels, threads and DMs; Discord is on every plan |
| kapa.ai | 14-day free trial, then quote only | Answers over technical docs, with Discord among its pre-built integrations |
| Custom, built by me | Community tier from $1,490, plus model usage and Care | Your bot, your code and your API key, connected to your own systems |
SaaS is the better buy if you get fewer than a few hundred questions a month, want Discord, email and web chat in one inbox, or have nobody to own a codebase. Mava's free and $39 plans are hard to beat at low volume, and Quickchat needs no code.
Custom makes sense when:
- answers depend on your systems, like a member's plan or order status, which the bot looks up through your API (a Discord bot for business can also keep plan roles in sync);
- you want to choose which provider sees your members' questions, under your own agreement with it;
- you already run a ticket bot and want the AI in front of it rather than a second inbox;
- volume is high. At 2,000 answers a month Mava Scale is $199, while Claude Sonnet 5 costs about $22 for the same volume plus $49 for Care. The build pays for itself in roughly a year, if you don't need Mava's inbox features.
What it costs to build
Most AI support bots land in the Community tier, from $1,490: the answer engine, handoff into tickets, admin commands with logging, and one integration, usually your docs source. A bare /ask over one docs site that hands off to a staff channel fits Starter, from $590. Several synced sources, account-aware answers or a web dashboard push it to Platform, from $3,500. See the pricing page, or the cost guide for how that compares with the market.
How the build works
- Blueprint. We pick the sources and about 50 real questions your members ask, and agree on what "good enough to go live" means. The Bot Blueprint costs $249, credited to the build within 30 days.
- Test run. I index your docs and run the bot in a private test server. You grade its answers to the question set, and we tune the threshold until it hands off instead of guessing.
- Launch. The bot goes live on your own Discord application with your own model API key, in the channels you chose.
- Care. Nightly syncs, library updates and the weekly handoff report keep it useful. See Care plans.
About my track record: I've built the Discord side of support systems, including a ticket bot with control rooms and HTML transcripts for an esports tournament organizer, but I don't have an AI support bot case study to show you yet. That is why the test run on your questions comes before launch, and why you grade it, not me.
Technical notes
What goes to the model provider. The question, the passages retrieved for it and, inside a thread, the last few turns. No usernames or user IDs. As of September 2026, OpenAI says API data is not used for training unless you opt in and keeps abuse-monitoring logs for up to 30 days. Anthropic deletes API inputs and outputs within 30 days by default, with exceptions such as content flagged for policy violations.
Discord's rules. Discord's Developer Terms let you share member data with a service provider only after it agrees in writing to use it just for you, and require a privacy policy saying what you share and how members can ask for deletion. The Developer Policy forbids using message content to train AI models without Discord's permission, so chat history never goes into the knowledge base. The question log stays in your own database.
The Discord side in code. This is the /ask handler, trimmed. answerFromDocs stands in for the retrieval and model call, so treat that line as illustrative. The rest was tested with discord.js 14.27.0 on Node 24, including the private flag, the handoff and the 2,000-character limit. Guilds is the only intent it needs.
const { SlashCommandBuilder, MessageFlags } = require('discord.js');
const { answerFromDocs } = require('../lib/answer');
const MIN_SCORE = Number(process.env.MIN_SCORE ?? 0.75);
const NO_PINGS = { parse: [] }; // model output can never ping @everyone, roles or users
module.exports = {
data: new SlashCommandBuilder()
.setName('ask')
.setDescription('Ask a question. The answer comes from our docs, with sources.')
.addStringOption((o) =>
o.setName('question').setDescription('What do you want to know?').setRequired(true).setMaxLength(300),
)
.addBooleanOption((o) => o.setName('private').setDescription('Only you see the answer')),
async execute(interaction) {
const hidden = interaction.options.getBoolean('private') ?? false;
// Retrieval plus a model call takes longer than Discord's 3-second window, so defer first.
await interaction.deferReply(hidden ? { flags: MessageFlags.Ephemeral } : {});
const question = interaction.options.getString('question', true);
const result = await answerFromDocs(question); // { text, score, sources: [{ title, url }] }
const sources = result.sources.slice(0, 3);
if (result.score < MIN_SCORE || sources.length === 0) {
// Not confident: hand off to people instead of guessing.
const staff = await interaction.client.channels.fetch(process.env.STAFF_CHANNEL_ID);
await staff.send({
content: `Unanswered question from <@${interaction.user.id}>:\n> ${question}`,
allowedMentions: NO_PINGS,
});
return interaction.editReply({
content: "I couldn't find this in the docs, so I've passed it to the team.",
allowedMentions: NO_PINGS,
});
}
const cites = sources.map((s, i) => `[${i + 1}] ${s.title}: <${s.url}>`).join('\n');
const room = 2000 - cites.length - 2; // Discord's message limit is 2,000 characters
return interaction.editReply({
content: `${result.text.slice(0, room)}\n\n${cites}`,
allowedMentions: NO_PINGS,
});
},
};In the full bot the handoff opens a ticket and the answer carries the two buttons. If your support queue keeps asking what your docs already say, send me a short brief and I'll reply with questions or a fixed quote.