Гид по технологиям

Как создать Discord-бота на Python

• 8 min read • Разработка • Обновлено 26 Nov 2025
Как создать Discord-бота на Python
Как создать Discord-бота на Python

Логотип Discord: робот и люди, соединяющиеся в сети

Discord — платформа для общения и совместной работы, где боты выполняют автоматизацию, развлечения и утилитарные функции: от шуток до воспроизведения музыки и управления ролями. В этом руководстве вы пройдёте полный путь: от создания сервера и регистрации бота до базового кода на Python, команд, обработки событий и рекомендаций по безопасному запуску и хостингу.

В статье вы найдёте понятные шаги, рабочие примеры кода, рекомендации по отладке, чек-листы для приёма и секцию с альтернативными подходами.

Основные понятия в одну строку

  • Сервер (guild): пространство в Discord для каналов и участников.
  • Приложение: оболочка в Developer Portal, внутри которой создаётся бот.
  • Токен: секретный ключ бота для подключения к API — храните в секрете.
  • Intents: разрешения для доступа к данным о событиях и участниках.

Содержание

  • Шаг 1: Создать сервер Discord
  • Шаг 2: Зарегистрировать приложение и бота
  • Шаг 3: Связать бота с сервером
  • Шаг 4: Программирование бота на Python (установка, примеры команд и событий, аудио)
  • Проверка, отладка и перезапуск
  • Безопасность, хостинг и альтернативы
  • Чек-листы, критерии приёмки, тесты и краткий глоссарий

Шаг 1. Создайте сервер Discord

Перед написанием бота вам нужен сервер (guild), где бот будет работать.

  1. Перейдите на https://discord.com/ и войдите в аккаунт или создайте новый.
  2. На левой боковой панели нажмите значок “+” (Добавить сервер).

Панель Discord — создание сервера

  1. Выберите Create My Own (Создать свой) и следуйте подсказкам.
  2. Укажите назначение сервера, задайте имя и загрузите изображение профиля сервера.

Настройка имени и изображения сервера Discord

После создания сервера вы получите пространство, куда можно приглашать ботов и участников. Это удобная среда для разработки и тестирования.

Шаг 2. Зарегистрируйте приложение и бота в Developer Portal

Чтобы бот мог подключаться к Discord API, создайте приложение и бота в Discord Developer Portal.

  1. Перейдите в консоль разработчика: https://discord.com/developers/applications
  2. Нажмите New Application.

Консоль разработчика Discord — создание приложения

  1. Введите имя приложения и подтвердите Create.

Создание бота в консоли разработчика Discord

  1. В левой панели выберите Bot и нажмите Add Bot, затем подтвердите Yes, do it!.

Добавление бота в приложение Discord

  1. Скопируйте токен бота (Copy) и сохраните его в файл в корне проекта, например secret.txt. Никому не показывайте этот файл.

Токен бота в консоли разработчика Discord

  1. В разделе Bot включите необходимые intents: PRESENCE INTENT и SERVER MEMBERS INTENT (если планируете работать с участниками и их статусами).

Настройки intents для бота в Discord

  1. Перейдите в OAuth2 → URL Generator. Выберите scope “bot” и в разделе Bot Permissions укажите нужные права (например Administrator для тестового сервера). Скопируйте сгенерированный URL.

Генератор URL приглашения бота в Discord

Права бота — роль администратора для теста

Important: Для реальных публичных ботов не давайте права Administrator без крайней необходимости. Разрешения выбирайте по принципу минимально необходимого доступа.

Шаг 3. Пригласите бота на сервер

  1. Вставьте скопированный URL в адресную строку браузера и войдите под своей учётной записью.
  2. Выберите Select a server и укажите сервер, который вы создали ранее.

Интерфейс приглашения бота на сервер Discord

  1. Нажмите Continue → Authorize и пройдите CAPTCHA.

Подтверждение приглашения бота на сервер

Бот появится в списке участников сервера, но будет оффлайн до тех пор, пока вы не запустите код, который подключит его к API.

Шаг 4. Программирование бота на Python

Мы будем использовать библиотеку discord.py. Она поддерживает асинхронную модель работы и активно применяется для создания ботов.

Установка Python и зависимостей

  1. Убедитесь, что у вас Python 3.5.3 или новее. Проверка версии в терминале:
python --version
  1. Создайте виртуальное окружение в корне проекта и активируйте его:
  • На Windows:
    python -m venv venv
    venv\Scripts\activate
  • На macOS/Linux:
    python3 -m venv venv
    source venv/bin/activate
  1. Установите discord.py и поддержку голоса, если планируете аудиофункции:
pip install -U discord.py discord.py[voice]

Примечание: Существуют форки и альтернативы (py-cord, nextcord и т.д.), если официальная ветка не поддерживает нужную вам функциональность.

Инициализация простого бота

Создайте файл bot.py в корне проекта и добавьте следующий минимальный код (убедитесь, что secret.txt находится в корне и содержит токен бота):

import discord
from discord.ext import commands

# Инициализация экземпляра бота с пустым префиксом
bot = commands.Bot(command_prefix="")

# Читаем токен из файла
with open("secret.txt", 'r') as f:
    TOKEN = f.read().strip()

# Запуск бота
bot.run(TOKEN)

Запустите:

python bot.py

Если всё настроено верно, бот подключится и станет онлайн.

Команды: пример отправки сообщения

Декоратор @bot.command() используется для объявлений команд. Пример команды Hi, которая отправляет приветствие:

from discord.ext import commands

bot = commands.Bot(command_prefix="")

@bot.command()
async def Hi(ctx):
    await ctx.send("Hi, welcome to our server")
  • ctx — контекст вызова команды: содержит информацию об авторе, канале и другой полезный контент.
  • async/await обязателен, так как библиотека взаимодействует с Discord асинхронно.

После добавления команды перезапустите скрипт и отправьте в канал сообщение “Hi” (без префикса) — бот ответит.

События: приветствие новых участников

События предоставляют реакцию на жизненные события сервера. Пример: отправка сообщения в системный канал при вступлении нового участника:

@bot.event
async def on_member_join(member):
    guild = member.guild
    if guild.system_channel is not None:
        detailMessage = 'We welcome {0.mention} to the {1.name}!'.format(member, guild)
        await guild.system_channel.send(detailMessage)

Проверьте, что у бота включены intents, позволяющие получать события о членах сервера.

Аудио: присоединение и выход из голосового канала

Пример команды, чтобы бот присоединился к вашему голосовому каналу (работает, если вы уже в канале):

@bot.command()
async def enter(ctx):
    if ctx.author.voice:
        await ctx.message.author.voice.channel.connect()

Команда для выхода из голосового канала:

@bot.command()
async def leave(ctx):
    if ctx.voice_client:
        await ctx.guild.voice_client.disconnect()

После изменений всегда перезапускайте скрипт — Python загружает обновлённый код только при новом запуске.

Отладка и проверка

  • Логи: выводите базовые логи при запуске (bot.event on_ready), чтобы удостовериться, что бот успешно подключён.
  • Тестовый сервер: всегда проверяйте новые функции на отдельном тестовом сервере, а не в продакшн-среде.
  • Проверки прав: если команда не работает, проверьте права бота на сервере и права на уровне канала.

Пример on_ready для отладки:

@bot.event
async def on_ready():
    print(f"Bot {bot.user} подключён и готов")

Безопасность и лучшие практики

  • Никогда не храните токен в публичных репозиториях. Добавьте secret.txt в .gitignore.
  • Ротация токена: при подозрении на утечку немедленно регенерируйте токен в Developer Portal.
  • Минимизация прав: выдавайте боту только те разрешения, которые действительно нужны.
  • Обработка ошибок: добавьте перехват исключений и логгирование для команд и событий.

Пример обработки ошибок команды:

@bot.event
async def on_command_error(ctx, error):
    await ctx.send("Произошла ошибка: {}".format(str(error)))
    # Здесь можно логировать ошибку на внешнюю систему

Хостинг и развёртывание

Локальный запуск подходит для разработки, но для 24/7 рекомендуется хостинг. Варианты:

  • VPS (DigitalOcean, Hetzner): полный контроль, подходит для долгосрочных решений.
  • PaaS (Heroku, Render): проще в развёртывании, но может иметь ограничения.
  • Docker: контейнеризация упрощает переносимость и масштабирование.

Советы:

  • Настройте авто-запуск и мониторинг (systemd, Docker Compose, провайдер мониторинга).
  • Храните секреты в переменных окружения или vault (не в файлах с кодом).

Альтернативные подходы и экосистема

  • Языки: Node.js (discord.js), Go, Rust — выбор зависит от опыта команды и требований по производительности.
  • Библиотеки: py-cord, nextcord — форки discord.py с активной поддержкой новых API.
  • Сервисы: используйте внешние сервисы для музыки, баз данных и очередей задач (Redis, PostgreSQL).

Когда discord.py не подходит: если нужна совместимость с новыми API-фичами, проверьте статус поддержки в вашей библиотеке (иногда форки быстрее обновляются).

Чек-лист перед выпуском бота

  • Токен хранится безопасно (.gitignore, переменные окружения).
  • Минимальные права настроены в OAuth2.
  • Обработаны основные исключения и ошибки команд.
  • Логи и мониторинг настроены.
  • Тестовый сервер для проверки функций создан.
  • Политика удаления данных (если бот хранит персональные данные).

Критерии приёмки

  • Бот успешно подключается и показывает online в течение минуты после запуска.
  • Команды, перечисленные в спецификации, выполняются корректно (ответ в канале, корректный статус кода при API-вызовах).
  • При ошибке бот не падает: ошибка логируется и отправляется уведомление администраторам.
  • Для аудио-функций: бот правильно присоединяется и отключается от голосового канала.

Тестовые сценарии и критерии приёмки

  1. Команда Hi

    • Действие: отправить “Hi” в канал.
    • Ожидаемый результат: бот отвечает “Hi, welcome to our server”.
  2. Событие присоединения участника

    • Действие: добавить тестовый аккаунт на сервер.
    • Ожидаемый результат: в системном канале появляется приветственное сообщение с упоминанием.
  3. Аудио-join

    • Действие: пользователь входит в голосовой канал и отправляет команду enter.
    • Ожидаемый результат: бот присоединяется к каналу.
  4. Безопасность токена

    • Действие: попытка прочитать secret.txt из репозитория без соответствующего доступа.
    • Ожидаемый результат: доступ запрещён; секреты не попали в исходники.

Ментальные модели и эвристики

  • Principle of Least Privilege: давайте системе минимальные права, необходимые для работы.
  • Разделение окружений: продакшн, стейджинг, тест — изоляция ошибок и данных.
  • Fail-safe: при ошибках бот должен деградировать, но не нарушать работу сервера.

Типичные ошибки и когда подход может не сработать

  • Отсутствие intents: события о новых участниках не приходят — проверьте включённые intents в Developer Portal и в коде.
  • Неправильные права: бот не может отправлять сообщения — убедитесь, что у него есть права на уровне канала.
  • Устаревшая библиотека: используйте актуальные версии или форки, если официальный релиз отстаёт.

Советы по безопасности и приватности

  • Если бот сохраняет персональные данные (имена, идентификаторы, сообщения), документируйте это и соблюдайте местные правила о защите данных.
  • Не храните личные данные дольше, чем нужно; добавьте команды удаления/анонимизации.

Маленький глоссарий

  • Bot token — секретный ключ для подключения к API.
  • Intent — флаг, разрешающий получать определённые события от Discord.
  • Guild — сервер Discord.
  • ctx — контекст вызова команды в discord.py.

Ролейный чек-лист для команды разработки

  • Разработчик: реализует команды и события, пишет тесты.
  • Администратор сервера: управляет правами бота на сервере.
  • Девопс: настраивает хостинг, CI/CD, мониторинг и бэкапы.
  • Безопасность: проверяет хранение токенов и доступы.

Короткая сводка по миграции и совместимости

  • Проверяйте changelog используемой библиотеки перед обновлением: breaking changes могут ломать события и интерфейсы.
  • При переходе на форк (py-cord, nextcord) — протестируйте все командные и событийные сценарии на тестовом сервере.

Заключение

Вы сделали базовый Discord-бот: создали сервер, зарегистрировали приложение и бота, назначили права и реализовали команды и события на Python с помощью discord.py. Дальше расширяйте функциональность: добавляйте базы данных, команды модерации, интеграции с внешними API и удобную систему логирования.

Итоги:

  • Начните с минимальной функциональности и постепенно расширяйте.
  • Всегда тестируйте на отдельном сервере.
  • Уделяйте внимание безопасности токенов и прав бота.

Спасибо за чтение — теперь вы готовы создать и поддерживать собственного Discord-бота.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро