Как создать чат-бота в Discord

Бот в Discord умеет всё то же, что и в остальных каналах, плюс работу с сервером: отвечать в каналах, тредах и личных сообщениях, ставить реакции, принимать и отправлять файлы, редактировать и удалять свои сообщения. Отдельно доступны модерация (мьют, кик, бан, удаление сообщений), выдача ролей, создание каналов под тикеты и слэш-команды.

Подключение занимает около десяти минут и состоит из двух частей: сначала бот создаётся на стороне Discord, затем подключается к проекту в Salebot.

Шаг 1. Создайте приложение

Откройте Discord Developer Portal и нажмите New Application. Введите название — его увидят участники сервера.

В разделе Installation в поле Install Link выберите None. Ссылку для добавления бота вы сделаете сами на шаге 4, с нужным набором прав.

Шаг 2. Настройте бота

Перейдите в раздел Bot.

Выключите Public Bot. Иначе вашего бота сможет добавить к себе кто угодно.

Включите привилегированные интенты — без них Discord не будет присылать боту часть данных:

Интент Зачем нужен
Message Content Intent Тексты сообщений. Без него бот видит, что сообщение пришло, но не видит, что в нём написано — не сработает ни один текстовый триггер.
Server Members Intent События участников: вход, выход, смена ролей и ника. Без него не будут работать приветствия новичков и автороли.
Presence Intent Статус «в сети». Для работы бота не требуется, включать не нужно.

Шаг 3. Получите токен

В том же разделе Bot нажмите Reset Token и скопируйте появившийся токен. Он показывается один раз — сохраните его, он понадобится на шаге 6.

Важно! Токен даёт полный доступ к боту. Не публикуйте его и не пересылайте. Если токен всё же утёк — нажмите Reset Token ещё раз, старый сразу перестанет работать, и подключите бота в Salebot заново с новым токеном.

Шаг 4. Выберите права

Откройте OAuth2 → URL Generator.

В блоке Scopes отметьте:

  • bot — собственно бот;
  • applications.commands — если планируете слэш-команды. Без этого scope зарегистрировать команды на сервере не получится.

Ниже появится блок Bot Permissions. Отметьте то, что действительно нужно — лишние права лучше не выдавать.

Минимум для переписки

Право Что перестанет работать без него
View Channels Бот не увидит каналы вообще
Send Messages Бот не сможет отвечать
Read Message History Не будет работать ответ на сообщение и цитирование
Embed Links, Attach Files Не отправятся ссылки с превью и файлы
Add Reactions Бот не поставит реакцию

Дополнительно для модерации и автоматизации

Право Для чего
Manage Messages Удаление чужих сообщений, закрепы
Moderate Members Таймауты (мьют)
Kick Members Исключение с сервера
Ban Members Бан и разбан
Manage Roles Выдача и снятие ролей
Manage Nicknames Смена ников участников
Manage Channels Создание и удаление каналов, в том числе тикетов
Create Instant Invite Ссылки-приглашения

Права можно поменять и позже — в настройках роли бота на самом сервере, без переподключения.

Шаг 5. Добавьте бота на сервер

Скопируйте ссылку, которая собралась внизу страницы URL Generator, откройте её в браузере и выберите сервер. Добавить бота может только владелец сервера или участник с правом Manage Server.

После добавления проверьте порядок ролей:

Настройки сервера → Роли

Роль бота должна стоять выше тех ролей, которые он будет выдавать, и выше ролей участников, которых он должен модерировать.

Это ограничение самого Discord: бот не может выдать роль, которая находится на одном уровне с его собственной или выше, и не может замьютить или забанить того, чья роль выше его роли.

Шаг 6. Оставьте Interactions Endpoint URL пустым

Вернитесь в General Information вашего приложения и убедитесь, что поле Interactions Endpoint URL пустое.

Если в этом поле что-то указано, Discord перестаёт отправлять боту нажатия кнопок и вызовы слэш-команд — они уходят на указанный адрес.

Внешне это выглядит так, будто кнопки в сообщениях бота не работают, а слэш-команды отвечают «Приложение не отвечает».

Шаг 7. Подключите бота к проекту

В проекте Salebot откройте раздел Каналы, нажмите кнопку Discord и вставьте токен из шага 3.

Через несколько секунд бот появится на сервере со статусом «в сети». Если этого не произошло, проверьте, что токен скопирован целиком и без пробелов по краям.

Проверьте, что всё работает

Напишите в любом канале сервера сообщение, на которое настроен ответ бота, — должен прийти ответ.

Если бот молчит, но онлайн, скорее всего не включён Message Content Intent.

Зайдите на сервер новым участником (или попросите коллегу) — должно отработать приветствие. Если нет — проверьте Server Members Intent.

Нажмите кнопку в сообщении бота — если ничего не происходит, проверьте Interactions Endpoint URL.

Что важно знать

Диалог в канале — один на всех

Все участники канала пишут в один и тот же диалог, как в групповом чате.

Переменные вроде «кто написал» относятся к автору последнего сообщения и перезаписываются следующим — читайте их сразу в том же блоке.

Личная переписка с ботом и события участника (вход, выход, смена ролей) идут в отдельный диалог с этим человеком.

Личные сообщения ограничены Discord

Бот может написать участнику в личку, только если тот состоит с ним на общем сервере и не запретил личные сообщения от участников сервера в своих настройках приватности.

Если человек их запретил, отправка не пройдёт — это ограничение Discord, обойти его нельзя.

Полный вебхук

Если присвоить любое значение переменной save_webhook, все данные входящего события будут сохраняться в переменную discord_webhook.

Нужно редко — почти всё, что оттуда может понадобиться, уже разложено по отдельным переменным.

Частые проблемы

Что происходит Почему
Бот в сети, но не реагирует на текст Не включён Message Content Intent
Не приходят входы, выходы и смены ролей Не включён Server Members Intent
Кнопки не нажимаются, слэш-команды пишут «Приложение не отвечает» Заполнен Interactions Endpoint URL
Слэш-команды не удаётся зарегистрировать Бот добавлен без scope applications.commands — пересоберите ссылку и добавьте бота заново
Не выдаётся роль Роль бота стоит не выше выдаваемой, либо нет права Manage Roles. Роли, управляемые интеграциями (в том числе роли других ботов), и роль @everyone выдать нельзя вообще
Не получается замьютить или забанить участника У участника роль выше, чем у бота, либо нет прав Moderate Members / Ban Members
Бот не видит один конкретный канал Права на самом канале перекрывают серверные. Проверьте доступ роли бота в настройках этого канала
Не удаляются сообщения Нет права Manage Messages. Массовое удаление Discord разрешает только для сообщений не старше 14 дней

Что дальше

Чат-бот в Discord поддерживает всё то же, что и в остальных каналах: пишет в каналы, треды и личные сообщения, ставит реакции, прикрепляет и принимает вложения, изменяет и удаляет свои сообщения.

Список функций для работы с сервером из воронки — в статье «Функции API для Discord».

Как собрать саму цепочку сообщений — в разделе «Как создать чат-бот для бизнеса».

Чтобы с клиентами в Discord общался ИИ, включите AI-ассистента — раздел «AI-ассистент».