
Создание Discord-бота начинается с регистрации приложения в Discord Developer Portal. Необходимо перейти по адресу https://discord.com/developers/applications, создать новое приложение, задать имя и перейти в раздел “Bot”, где добавляется сам бот. После этого нужно скопировать токен – он потребуется для авторизации в коде.
Для запуска бота потребуется библиотека discord.py. Она устанавливается через pip командой: pip install -U discord.py. Минимальный рабочий скрипт включает в себя импорт библиотеки, инициализацию клиента и событие on_ready(), сигнализирующее о запуске. Пример базового кода:
import discord
intents = discord.Intents.default()
client = discord.Client(intents=intents)
@client.event
async def on_ready():
print(f'Вошёл как {client.user}')
client.run('ВАШ_ТОКЕН')
Перед запуском убедитесь, что у бота есть необходимые разрешения. Для этого создаётся OAuth2-ссылка в разделе “OAuth2 → URL Generator”, где выбираются bot и нужные scopes, например Send Messages и Read Message History. Сгенерированная ссылка позволяет пригласить бота на нужный сервер.
Также стоит включить MESSAGE CONTENT INTENT в настройках бота, если предполагается работа с содержимым сообщений. Без этого бот не сможет реагировать на текст в чате.
Установка discord.py и настройка виртуального окружения

Создайте отдельную директорию для проекта, чтобы изолировать зависимости и избежать конфликтов:
mkdir my_discord_bot && cd my_discord_bot
Создайте виртуальное окружение с помощью встроенного модуля venv:
python -m venv venv
Активируйте окружение:
Windows: venv\Scripts\activate
Linux/macOS: source venv/bin/activate
Обновите pip до последней версии перед установкой зависимостей:
python -m pip install —upgrade pip
Установите discord.py, указав актуальную версию, совместимую с API:
pip install -U discord.py
Для поддержки голосовых функций дополнительно установите PyNaCl:
pip install pynacl
Проверьте корректность установки:
python -c «import discord; print(discord.__version__)»
Создание приложения и токена бота в Discord Developer Portal

Перейдите на Discord Developer Portal и авторизуйтесь с помощью своей учётной записи Discord.
Нажмите кнопку «New Application», введите название приложения – это имя будет отображаться в интерфейсе Discord, но не является именем бота. Подтвердите создание нажатием «Create».
В открывшемся меню выберите вкладку «Bot» и нажмите «Add Bot». Подтвердите действие. Бот автоматически получает имя приложения и аватар по умолчанию, их можно изменить позже.
После создания перейдите к секции «Token» и нажмите «Reset Token», затем «Yes, do it!» – Discord сгенерирует уникальный токен. Скопируйте его сразу: после закрытия он не будет доступен. Никогда не публикуйте токен – при утечке бот может быть скомпрометирован.
Настройте права доступа бота в разделе «Privileged Gateway Intents», активировав «PRESENCE INTENT» и «SERVER MEMBERS INTENT», если планируется работа с онлайн-статусами и списками участников. Эти параметры влияют на данные, которые бот сможет получать через WebSocket.
Вкладка «OAuth2 → URL Generator» позволяет сгенерировать ссылку для добавления бота на сервер. В разделе «Scopes» выберите «bot», затем в разделе «Bot Permissions» отметьте нужные разрешения, например, «Send Messages», «Read Message History», «Manage Roles» и др., в зависимости от функционала.
Подключение бота к серверу Discord через OAuth2

Для подключения бота к серверу необходима корректная генерация OAuth2-ссылки с нужными правами доступа. Выполни следующие шаги:
- Перейди на https://discord.com/developers/applications и выбери своего бота.
- Открой раздел OAuth2 → URL Generator.
- В секции Scopes установи флажок
bot. При необходимости добавьapplications.commands, если бот использует слэш-команды. - В секции Bot Permissions выбери минимально необходимые права. Например:
Send Messages– если бот должен писать в чатыManage Messages– если требуется удалять сообщенияRead Message History– для доступа к предыдущим сообщениям
- Скопируй сгенерированную ссылку внизу страницы и открой её в браузере.
- Выбери сервер, на который у тебя есть право добавления ботов, и подтверди установку.
После добавления бота на сервер, его статус в разделе Bot станет «Online», если он запущен. Убедись, что ID сервера добавлен в список допустимых, если ты используешь проверку guild ID в коде.
Написание базового кода для запуска бота
Создайте новый Python-файл, например bot.py. Убедитесь, что установлен модуль discord.py версии 2.0 или выше. Установку выполните командой:
pip install -U discord.py
Импортируйте необходимые модули и создайте экземпляр бота:
import discord
from discord.ext import commands
intents = discord.Intents.default()
intents.message_content = True
bot = commands.Bot(command_prefix="!", intents=intents)
Добавьте обработчик события запуска:
@bot.event
async def on_ready():
print(f'Бот запущен как {bot.user}')
Реализуйте простой командный обработчик:
@bot.command()
async def ping(ctx):
await ctx.send('Pong!')
Для запуска используйте функцию bot.run() с токеном:
bot.run('ВАШ_ТОКЕН')
Токен не размещайте в открытом коде. Рекомендуется использовать переменные окружения или файл .env с библиотекой python-dotenv.
Обработка простых команд с помощью команды @bot.command
Для создания текстовой команды в Discord-боте используется декоратор @bot.command() из библиотеки discord.ext.commands. Он позволяет привязать функцию Python к определённой команде, которую пользователь вводит в чат.
Пример базовой команды:
from discord.ext import commands
bot = commands.Bot(command_prefix='!')
@bot.command()
async def ping(ctx):
await ctx.send('Pong!')
В этом примере команда !ping вызывает асинхронную функцию ping, отправляющую сообщение «Pong!» в тот же канал, где была вызвана команда. Аргумент ctx предоставляет доступ к контексту команды, включая информацию об авторе, канале и сервере.
Именование команды по умолчанию совпадает с названием функции. Чтобы задать альтернативное имя, используйте параметр name:
@bot.command(name='hello')
async def greet(ctx):
await ctx.send('Привет!')
Для передачи аргументов добавьте их в сигнатуру функции:
@bot.command()
async def say(ctx, *, message):
await ctx.send(message)
Символ * указывает, что всё содержимое после команды будет собрано в один аргумент message. Без него ввод, содержащий пробелы, будет разделён на отдельные параметры, что может привести к ошибке.
Чтобы обработать ошибки вызова команды, добавьте слушатель on_command_error:
@bot.event
async def on_command_error(ctx, error):
if isinstance(error, commands.MissingRequiredArgument):
await ctx.send('Отсутствует аргумент команды.')
Команды, зарегистрированные через @bot.command, автоматически попадают в систему помощи Discord-бота и поддерживают аргументы и проверки. Для ограничения доступа используйте декораторы вроде @commands.has_permissions или @commands.check.
Работа с событиями, такими как on_ready и on_message
В библиотеке discord.py события позволяют вам реагировать на различные действия, происходящие на сервере или с ботом. Два наиболее часто используемых события – on_ready и on_message. Разберем, как они работают и как их правильно использовать в коде.
Событие on_ready срабатывает, когда бот успешно подключается к Discord и готов начать работать. Это событие не передает никаких данных о сервере или пользователях, но дает понять, что бот полностью загружен. Обычно его используют для логирования, настройки или начальной активации функций бота.
import discord
client = discord.Client()
@client.event
async def on_ready():
print(f'Подключен как {client.user}')
client.run('YOUR_TOKEN')
Этот код выведет в консоль имя бота, как только он подключится к серверу. Это полезно для проверки, что соединение с Discord установлено.
Событие on_message вызывается каждый раз, когда бот получает новое сообщение на любом сервере, где он присутствует. Оно передает объект сообщения, что позволяет вам анализировать содержание сообщений и реагировать на них. Важно помнить, что on_message не обрабатывает автоматически команды, если не реализована дополнительная логика обработки.
@client.event
async def on_message(message):
if message.author == client.user:
return
if message.content.startswith('!hello'):
await message.channel.send('Привет!')
Здесь бот проверяет, не является ли отправитель сообщения самим ботом (чтобы избежать зацикливания) и реагирует на команду !hello, отправляя ответ на тот же канал. Это пример простого использования события для создания команд.
Очень важно помнить, что если в on_message не вызвать await client.process_commands(message), команды, определенные в другом месте (например, с использованием commands.Bot), не будут обрабатываться. Это нужно учитывать при расширении функционала бота.
from discord.ext import commands
bot = commands.Bot(command_prefix='!')
@bot.event
async def on_message(message):
if message.author == bot.user:
return
await bot.process_commands(message)
@bot.command()
async def hello(ctx):
await ctx.send('Привет!')
bot.run('YOUR_TOKEN')
Таким образом, on_message может быть использовано для фильтрации и обработки сообщений, а при использовании с commands.Bot – для корректной работы команд.
Оба этих события – on_ready и on_message – являются основой для более сложных взаимодействий с пользователями, и их эффективное использование помогает создавать функциональные и отзывчивые Discord-боты.
Запуск бота и устранение распространённых ошибок
После того как вы настроили бота и написали его код, следующим шагом будет его запуск. Однако часто при старте возникают ошибки, которые необходимо быстро устранять, чтобы бот работал корректно.
Для начала убедитесь, что у вас правильно установлен Python, а также все зависимости, включая библиотеку discord.py.
Для запуска бота выполните следующую команду в терминале:
python bot.py
Если вы столкнулись с ошибкой при запуске, вот несколько распространённых проблем и их решений.
1. Ошибка: «ModuleNotFoundError: No module named ‘discord'»
- Проверьте, установлена ли библиотека
discord.py. Выполните команду:
pip install discord.py
2. Ошибка: «Invalid Token» или «Bot token is incorrect»
- Проверьте, что вы правильно скопировали токен из Developer Portal Discord. Он должен быть без пробелов и других символов.
- Убедитесь, что токен не истёк. В случае необходимости получите новый токен через Discord Developer Portal.
3. Ошибка: «AttributeError: ‘Client’ object has no attribute ‘run'»
- Эта ошибка возникает, если вы пытаетесь использовать метод
run()не для объектаcommands.Bot, а дляdiscord.Client. Убедитесь, что у вас используется правильный объект для запуска. - Если используете
commands.Bot, замените в коде создание клиента на:
bot = commands.Bot(command_prefix='!')
4. Ошибка: «PermissionError: [Errno 13] Permission denied»

- Эта ошибка может возникнуть, если вы не имеете прав на запуск скрипта или доступ к нужным файлам. Попробуйте запустить скрипт с правами администратора.
- Для Linux/macOS можно использовать команду
sudo python bot.py.
5. Ошибка: «HTTPException: 401: Unauthorized»
- Эта ошибка говорит о том, что токен бота не был принят или является недействительным. Проверьте токен в настройках вашего бота на сайте Discord Developer Portal.
6. Проблемы с зависимостями
- Если библиотека
discord.pyили другие зависимости не устанавливаются, проверьте версию Python.discord.pyтребует Python 3.5 или более позднюю версию. - Иногда помогает обновление pip. Для этого выполните команду:
python -m pip install --upgrade pip
7. Проблемы с запуском в фоне
- Для запуска бота в фоновом режиме на сервере используйте
screenилиtmux. Эти инструменты позволяют сохранять сессию и продолжать работу после разрыва соединения.
8. Ошибка: «RuntimeError: Event loop is closed»
- Эта ошибка возникает в случае неправильной работы с асинхронным кодом. Убедитесь, что вы используете Python 3.7 или выше, так как это минимальная версия, поддерживающая корректную работу с асинхронными функциями.
- Перезапустите бот, чтобы очистить старый event loop.
Заключение
Знание распространённых ошибок и способов их устранения существенно ускоряет процесс разработки. Регулярно проверяйте код и зависимости, чтобы избежать большинства проблем. Если ошибки продолжают возникать, полезно обратиться к документации discord.py или официальному форуму Discord для получения помощи от сообщества.
