Услуги Портфолио Контакты БлогНовости +7 (800) 511‑32‑27 Обсудить проект
Статьи

Как создать бота для Discord на Python: полное руководство

14 июля 2023·4 мин чтения
Логотип YuSMP Group
Автор материалаРедакция компании YuSMP GroupБлог YuSMP Group
Профиль редакции
Как создать бота для Discord на Python: полное руководство

Хотите узнать, как сделать бота в Дискорде на Python буквально за полчаса? В этом гайде — рабочий пример кода на discord.py, а не только описание кнопок в интерфейсе. Для создания бота Дискорд Python не придётся устанавливать платные программы: понадобится Python, бесплатная библиотека discord.py и аккаунт Discord. Если задача шире учебного бота — например, интеграция с CRM, базой данных или внешним API — команда YuSMP Group занимается backend-разработкой и интеграциями под ключ.

Коротко:
  • Бот создаётся бесплатно: аккаунт на Discord Developer Portal, токен приложения и библиотека discord.py.
  • Минимальный рабочий бот — 15–20 строк кода на Client с обработчиком on_message.
  • Для набора команд с префиксом (!ping, !roll) удобнее commands.Bot из discord.ext.commands.
  • Токен хранят только в .env и никогда не публикуют в коде или репозитории.
  • Чтобы бот работал круглосуточно, его размещают на VPS или облачной платформе, а не держат запущенным на личном ноутбуке.

Что нужно для создания Discord-бота на Python?

Перед тем как писать код, подготовьте четыре вещи:

  • Python 3.9 или новее — актуальные версии discord.py не поддерживают более старые релизы.
  • Библиотеку discord.py — устанавливается командой pip install discord.py.
  • Аккаунт Discord и сервер, на который вы можете добавлять ботов (нужны права администратора).
  • Редактор кода — подойдёт VS Code, PyCharm или онлайн-среда вроде Repl.it, если не хотите ничего ставить локально.

Как создать учётную запись бота в Discord?

Зайдите на портал разработчиков Discord и нажмите «New Application» в правом верхнем углу. Задайте имя — это будет отображаемое имя вашего Discord бота на Python.

Внутри приложения откройте вкладку «Bot» и нажмите «Add Bot». После этого станет доступен уникальный токен — нажмите «Reset Token» или «Copy», чтобы его получить.

Концептуальная иллюстрация настройки бота: панель приложения с чатом и значком бота

Токен — это пароль от вашего бота. Любой, у кого он есть, может управлять ботом от вашего имени. Не публикуйте токен в коде, скриншотах или репозитории — если он всё же попал в открытый доступ, сразу сгенерируйте новый через «Reset Token».

Как пригласить бота на сервер?

Чтобы бот появился на сервере, нужна ссылка-приглашение с нужным набором прав:

  1. Откройте раздел «OAuth2» → «URL Generator» в левой панели приложения.
  2. В списке «Scopes» отметьте bot.
  3. В блоке «Bot Permissions» ниже выберите конкретные разрешения — например, «Send Messages» и «Read Message History». Права администратора боту без явной необходимости давать не стоит: это лишний риск, если токен утечёт.
  4. Скопируйте сгенерированную ссылку внизу страницы (Generated URL).
  5. Откройте эту ссылку в браузере, выберите сервер из списка и подтвердите добавление. Добавлять ботов может только пользователь с правами администрирования сервера.

Как написать код Discord-бота на Python?

Вся логика бота строится на библиотеке discord.py — обёртке над Discord API, которая берёт на себя работу с вебсокетами и событиями.

Установка discord.py

В терминале выполните:

pip install discord.py python-dotenv

Пакет python-dotenv понадобится, чтобы безопасно читать токен из файла .env, а не хранить его прямо в коде.

Хранение токена в .env

Создайте в папке проекта файл .env и запишите в него токен:

DISCORD_TOKEN=ваш_токен_бота

Добавьте .env в .gitignore, чтобы случайно не закоммитить токен в репозиторий.

Базовый код бота

Вот минимальный рабочий бот, который отвечает «Hello!» на сообщение «$hello» и игнорирует собственные сообщения:

import os
import discord
from dotenv import load_dotenv

load_dotenv()
TOKEN = os.getenv("DISCORD_TOKEN")

intents = discord.Intents.default()
intents.message_content = True

client = discord.Client(intents=intents)

@client.event
async def on_ready():
    print(f"Бот {client.user} запущен и готов к работе")

@client.event
async def on_message(message):
    if message.author == client.user:
        return
    if message.content.startswith("$hello"):
        await message.channel.send("Hello!")

client.run(TOKEN)
Рабочее место разработчика с кодом на Python в тёмной теме редактора

Разберём код построчно:

  1. Импортируем библиотеку discord.py и os — последний нужен, чтобы прочитать переменные окружения.
  2. load_dotenv() подгружает содержимое файла .env, а os.getenv("DISCORD_TOKEN") достаёт из него токен.
  3. discord.Intents — с 2022 года Discord API требует явно указывать, какие данные боту разрешено получать. message_content нужен, чтобы бот вообще видел текст сообщений — без этого on_message не сработает.
  4. Создаём объект Client, который отвечает за соединение с Discord.
  5. Декоратор @client.event регистрирует обработчики событий: on_ready срабатывает один раз при запуске, on_message — при каждом новом сообщении на сервере.
  6. Проверка if message.author == client.user нужна, чтобы бот не реагировал на собственные сообщения и не зацикливался.
  7. Если текст сообщения начинается с «$hello», бот отправляет в тот же канал «Hello!».
  8. Последняя строка запускает бота с токеном из .env.

Запустите файл — в терминале появится строка «Бот … запущен и готов к работе», а в списке участников сервера бот станет «онлайн». Напишите в любом канале «$hello» и проверьте ответ.

Как добавить команды с префиксом?

Если бот должен обрабатывать несколько разных команд, а не одно ключевое слово, удобнее использовать commands.Bot из discord.ext.commands — он даёт готовую систему команд с аргументами:

import os
import random
import discord
from discord.ext import commands
from dotenv import load_dotenv

load_dotenv()
TOKEN = os.getenv("DISCORD_TOKEN")

intents = discord.Intents.default()
intents.message_content = True

bot = commands.Bot(command_prefix="!", intents=intents)

@bot.command()
async def ping(ctx):
    await ctx.send("Pong! Бот на связи.")

@bot.command()
async def roll(ctx, faces: int = 6):
    await ctx.send(f"Выпало: {random.randint(1, faces)}")

bot.run(TOKEN)

Команда !ping отвечает «Pong!», а !roll 20 бросает виртуальный кубик с заданным числом граней (по умолчанию 6). Добавлять новые команды — это просто новые функции с декоратором @bot.command(), что гораздо проще, чем разбирать текст сообщения вручную через if.

Как улучшить бота: 5 идей для доработки

  • Модерация. Команды kick/ban, автоматическое удаление спама и фильтр нежелательных слов через события on_message.
  • Слэш-команды. Современный формат команд Discord (app_commands) — они подсказываются прямо в интерфейсе при вводе «/».
  • Интеграция с внешним API. Прогноз погоды, курс валют или ответы от нейросети — бот делает HTTP-запрос и пересылает результат в чат.
  • Хранение данных. Очки участников, настройки сервера или список подписок — удобно держать в SQLite или PostgreSQL, а не только в памяти процесса.
  • Постоянная работа 24/7. Для этого бота размещают на VPS, в контейнере с автоперезапуском или на платформе вроде Railway — запуск с личного компьютера прекращается вместе с выключением компьютера.

Частые вопросы

Нужно ли платить за создание Discord-бота на Python?

Нет, сама разработка бесплатна: Discord API, библиотека discord.py и большинство сред разработки (VS Code, PyCharm Community, Repl.it) не требуют оплаты. Платным может быть только постоянный хостинг для работы бота 24/7.

Какая версия Python нужна для discord.py?

Актуальные версии discord.py требуют Python 3.9 и выше. Для новых проектов рекомендуем ставить последнюю стабильную версию Python 3.11–3.12.

Почему бот не отвечает на сообщения?

Чаще всего причина — не включён привилегированный интент Message Content в настройках приложения на Discord Developer Portal и не выставлен intents.message_content = True в коде бота.

В чём разница между Client и commands.Bot?

Client подходит для простых реакций на отдельные события. Commands.Bot из discord.ext.commands даёт готовую систему команд с префиксом, аргументами и обработкой ошибок — удобнее для бота с несколькими командами.

Как запустить бота, чтобы он работал круглосуточно?

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

Безопасно ли хранить токен бота в коде?

Нет, токен нельзя публиковать в коде или репозитории. Его хранят в переменных окружения через файл .env и добавляют .env в .gitignore, чтобы случайно не слить доступ к боту.

Теперь у вас есть рабочий бот с базовым обработчиком сообщений и набором команд с префиксом — дальше его можно развивать в любую сторону: от модерации до интеграции с внешними сервисами.

Веб-услуги и разработка в YuSMP Group активно использует этот простой и понятный язык программирования для различных задач. Вы можете узнать его азы вместе с нами. Больше статей читайте в блоге студии web-разработки YuSMP Group, а для вдохновения — посмотрите проекты, которые мы создали.

Backend-разработка на Python
Узнайте цену

Обсудим ваш проект?

Соберём команду под вашу задачу и оценим проект за 2 дня — бесплатно.

Обсудить проект