📅 11 апреля 2026 ⏱ 12 минут чтения ✍️ Команда Nexora

Введение: почему Discord боты так популярны

Discord боты стали неотъемлемой частью экосистемы платформы. Они автоматизируют рутинные задачи, развлекают пользователей, управляют сервером и интегрируют внешние сервисы. В 2025 году создание Discord бота на Python стало ещё проще благодаря улучшениям в библиотеке discord.py и расширенным возможностям Discord API.

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

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

Перед тем как начать разработку Discord бота, убедитесь, что у вас установлены:

Установка и настройка discord.py

Начнём с установки необходимой библиотеки. discord.py — это мощная и популярная библиотека для работы с Discord API на Python. Установите её с помощью pip:

pip install discord.py

Для работы с дополнительными возможностями рекомендуется установить расширенную версию:

pip install discord.py[voice]

Если вы планируете использовать голосовые каналы, слушать музыку или реализовать другие аудио-функции, установка voice компонента обязательна.

Создание приложения в Discord Developer Portal

Перед написанием кода нужно создать приложение в Discord Developer Portal и получить токен вашего бота.

  1. Перейдите на https://discord.com/developers/applications
  2. Нажмите "New Application" и введите имя вашего бота
  3. В левом меню выберите "Bot"
  4. Нажмите "Add Bot"
  5. Под разделом TOKEN нажмите "Copy" и сохраните токен в безопасном месте
  6. Установите необходимые permissions и scopes для вашего бота

Важно: никогда не публикуйте ваш токен в открытом доступе. Используйте переменные окружения (.env файлы) для хранения чувствительных данных.

Первый Discord бот: Hello World

Создайте файл bot.py и напишите простейший бот, который отвечает на сообщения:

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

# Загружаем переменные окружения
load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN')

# Создаём бот с префиксом команд
bot = commands.Bot(command_prefix='!', intents=discord.Intents.default())

@bot.event
async def on_ready():
    print(f'{bot.user} успешно подключился к Discord!')
    await bot.change_presence(activity=discord.Game(name='Разработка на Python'))

@bot.event
async def on_message(message):
    # Игнорируем сообщения от самого бота
    if message.author == bot.user:
        return

    if message.content == 'привет':
        await message.channel.send(f'Привет, {message.author.name}! 👋')

    # Важно обработать команды
    await bot.process_commands(message)

bot.run(TOKEN)

Для запуска создайте файл .env в той же директории:

DISCORD_TOKEN=your_token_here

Теперь запустите бота:

python bot.py

Создание команд с использованием decorators

Команды — это основа функциональности любого Discord бота. Discord.py предоставляет удобный способ создания команд с помощью декораторов:

@bot.command(name='привет', help='Поздравление от бота')
async def hello(ctx):
    """Простая команда привета"""
    await ctx.send(f'Привет, {ctx.author.name}!')

@bot.command(name='помощь')
async def help_command(ctx):
    """Показывает доступные команды"""
    embed = discord.Embed(
        title='Доступные команды',
        description='Список всех команд на сервере',
        color=discord.Color.blue()
    )
    embed.add_field(name='!привет', value='Поздравление от бота', inline=False)
    embed.add_field(name='!помощь', value='Показывает эту справку', inline=False)
    await ctx.send(embed=embed)

@bot.command(name='калькулятор')
async def calculator(ctx, a: int, b: int, operation: str):
    """Простой калькулятор"""
    if operation == '+':
        result = a + b
    elif operation == '-':
        result = a - b
    elif operation == '*':
        result = a * b
    elif operation == '/':
        result = a / b
    else:
        await ctx.send('Неизвестная операция!')
        return

    await ctx.send(f'{a} {operation} {b} = {result}')

Обработка событий Discord

События позволяют боту реагировать на действия пользователей и системные события на сервере Discord. Вот самые полезные события:

@bot.event
async def on_member_join(member):
    """Срабатывает когда пользователь присоединяется к серверу"""
    channel = discord.utils.get(member.guild.channels, name='welcome')
    if channel:
        embed = discord.Embed(
            title=f'Добро пожаловать, {member.name}!',
            description='Мы рады видеть вас на сервере',
            color=discord.Color.green()
        )
        await channel.send(embed=embed)

@bot.event
async def on_message_edit(before, after):
    """Срабатывает когда сообщение отредактировано"""
    if before.content != after.content:
        print(f'{after.author} отредактировал сообщение')

@bot.event
async def on_reaction_add(reaction, user):
    """Срабатывает при добавлении реакции на сообщение"""
    if user == bot.user:
        return

    if str(reaction.emoji) == '👍':
        await reaction.message.channel.send(f'{user.name} лайкнул сообщение!')

@bot.event
async def on_guild_join(guild):
    """Срабатывает когда бот добавили на новый сервер"""
    print(f'Бот добавлен на сервер: {guild.name}')

Работа с ролями и разрешениями

Часто нужно выдавать роли, проверять разрешения и управлять доступом. Вот как это делается:

@bot.command(name='выдать_роль')
@commands.has_permissions(administrator=True)
async def assign_role(ctx, member: discord.Member, role_name: str):
    """Выдаёт роль участнику (только для администраторов)"""
    role = discord.utils.get(ctx.guild.roles, name=role_name)

    if role is None:
        await ctx.send(f'Роль {role_name} не найдена!')
        return

    try:
        await member.add_roles(role)
        await ctx.send(f'{member.name} получил роль {role_name}')
    except discord.Forbidden:
        await ctx.send('Недостаточно прав для выдачи роли')

@bot.command(name='модератор')
@commands.has_role('Модератор')
async def mod_command(ctx):
    """Команда доступна только модераторам"""
    await ctx.send('Вы модератор этого сервера!')

@commands.check
async def check_admin(ctx):
    return ctx.author.guild_permissions.administrator

Создание Embed'ов для красивых сообщений

Embeds делают сообщения более привлекательными и информативными. Это встроенные сообщения с форматированием:

@bot.command(name='профиль')
async def user_profile(ctx, member: discord.Member = None):
    """Показывает профиль пользователя"""
    if member is None:
        member = ctx.author

    embed = discord.Embed(
        title=f'Профиль {member.name}',
        description=member.activity if member.activity else 'Нет статуса',
        color=member.color,
        timestamp=ctx.message.created_at
    )

    embed.set_thumbnail(url=member.avatar.url)
    embed.add_field(name='ID', value=member.id, inline=True)
    embed.add_field(name='Присоединился', value=member.joined_at.strftime('%d.%m.%Y'), inline=True)
    embed.add_field(name='Роли', value=', '.join([role.name for role in member.roles]), inline=False)
    embed.set_footer(text=f'Запросил {ctx.author.name}')

    await ctx.send(embed=embed)

Асинхронное программирование и обработка ошибок

Discord.py работает асинхронно, поэтому правильная обработка асинхронных операций критична:

import asyncio

@bot.command(name='задержка')
async def delayed_message(ctx):
    """Отправляет сообщение с задержкой"""
    await ctx.send('Жду 5 секунд...')
    await asyncio.sleep(5)
    await ctx.send('Готово!')

@bot.event
async def on_command_error(ctx, error):
    """Обработка ошибок команд"""
    if isinstance(error, commands.MissingPermissions):
        await ctx.send('У вас нет прав для этой команды!')
    elif isinstance(error, commands.MissingRequiredArgument):
        await ctx.send(f'Отсутствует аргумент: {error.param.name}')
    elif isinstance(error, commands.CommandNotFound):
        await ctx.send('Такой команды не существует!')
    else:
        await ctx.send('Произошла ошибка!')
        print(f'Ошибка: {error}')

Создание интерактивных кнопок и select меню

В современных Discord ботах используются интерактивные элементы с помощью View'ов:

from discord.ui import Button, View, Select

class MyView(View):
    @discord.ui.button(label='Нажми меня!', style=discord.ButtonStyle.primary)
    async def button_callback(self, interaction: discord.Interaction, button: Button):
        await interaction.response.send_message('Вы нажали на кнопку!')

@bot.command(name='меню')
async def show_menu(ctx):
    """Показывает интерактивное меню"""
    view = MyView()
    await ctx.send('Выберите действие:', view=view)

Развёртывание Discord бота на сервер

Когда бот готов, его нужно развернуть на сервер, чтобы он работал 24/7. Вот основные варианты:

Развёртывание на Heroku (бесплатно с ограничениями)

pip freeze > requirements.txt

Создайте Procfile:

worker: python bot.py

Развёртывание на VPS

Используйте systemd сервис для автозапуска бота:

[Unit]
Description=Discord Bot
After=network.target

[Service]
Type=simple
User=ubuntu
WorkingDirectory=/home/ubuntu/discord-bot
ExecStart=/usr/bin/python3 bot.py
Restart=always
Environment="DISCORD_TOKEN=your_token"

[Install]
WantedBy=multi-user.target

Лучшие практики разработки Discord ботов

Заключение

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

Начните с простого бота, постепенно добавляйте функции, экспериментируйте с API и создавайте полезные инструменты для своего сообщества. Если у вас возникнут вопросы или вам нужна помощь с более сложным проектом, команда Nexora готова помочь с разработкой кастомных Discord ботов и интеграций.

Ключевые поисковые запросы: создание Discord бота на Python, discord.py гайд, команды бота Discord, обработка событий Discord, Discord API Python, развёртывание Discord бота, кнопки и меню в Discord ботах, работа с ролями Discord, Discord.py примеры кода.

Нужна помощь с разработкой Discord бота?

Команда Nexora создаёт функциональные Discord боты на Python и другие интеграции. Получите бесплатную консультацию по вашему проекту.

Рассчитать стоимость Написать нам