
Discord предоставляет API, построенное на основе REST и WebSocket, что позволяет в реальном времени взаимодействовать с событиями серверов и пользователей. Библиотека discord.py предлагает асинхронный интерфейс к этому API, что делает её оптимальным выбором для разработки ботов с высокой отзывчивостью и стабильностью. Подключение и инициализация бота требуют получения токена через Discord Developer Portal и установки библиотеки через pip install -U discord.py.
Минимально работоспособный бот создается с использованием класса commands.Bot из модуля discord.ext. Это позволяет быстро организовать систему команд, используя декораторы @bot.command() и подключать события через @bot.event. Для начала рекомендуется явно указать префикс команд и включить базовые разрешения, такие как чтение сообщений и управление ответами.
Архитектура проекта должна учитывать масштабирование. Использование отдельных модулей для команд, обработчиков событий и конфигурационных данных упрощает поддержку и расширение функциональности. Уже на старте стоит внедрить логирование через стандартный модуль logging и предусмотреть перехват ошибок, чтобы бот корректно реагировал на исключения без завершения работы.
Реализация базовых команд – отправка сообщений, работа с embed-объектами, проверка ролей и реакций – формирует фундамент для дальнейшей интеграции с базами данных, API сторонних сервисов и внутренними системами. Это позволяет перейти от простого чат-бота к полноценному инструменту автоматизации серверного взаимодействия.
Установка и настройка библиотеки discord.py

Для работы с Discord API необходимо установить библиотеку discord.py. В актуальных проектах используется форк под названием py-cord, поскольку оригинальная библиотека не поддерживается. Установка выполняется через pip:
pip install -U py-cord
Если используется Python версии ниже 3.8, обновите интерпретатор, так как py-cord требует минимум Python 3.8. Проверка версии выполняется командой:
python --version
После установки убедитесь, что библиотека корректно импортируется. Откройте Python-REPL и выполните:
import discord
Ошибок быть не должно. Далее необходимо инициализировать объект клиента:
client = discord.Client(intents=discord.Intents.default())
Если планируется работа с сообщениями, реакциями или участниками сервера, активируйте соответствующие намерения:
intents = discord.Intents.default()
intents.messages = True
intents.guilds = True
client = discord.Client(intents=intents)
Чтобы бот мог подключаться к Discord, потребуется токен. Он генерируется на портале разработчика: discord.com/developers/applications. Создайте новое приложение, добавьте бота и скопируйте токен с вкладки «Bot». Никогда не публикуйте этот токен в открытом виде.
Для запуска бота используйте:
client.run('ВАШ_ТОКЕН')
Если вы видите сообщение «Connected to Discord» и бот отображается в сети, настройка завершена успешно.
Получение токена бота и добавление его на сервер
Перейдите на сайт Discord Developer Portal и авторизуйтесь через свою учетную запись Discord. Нажмите кнопку New Application, введите имя бота и подтвердите создание.
Откройте созданное приложение и перейдите во вкладку Bot. Нажмите Add Bot, затем – Yes, do it!. После этого появится раздел с настройками бота. В блоке Token нажмите Reset Token, затем Copy. Этот токен необходим для подключения к API Discord. Храните его в секрете, не публикуйте в коде.
Для безопасного хранения создайте в корне проекта файл .env и добавьте строку:
DISCORD_TOKEN=ваш_токен_здесь
Для чтения токена из .env используйте библиотеку python-dotenv. Установите её командой:
pip install python-dotenv
В коде Python добавьте:
from dotenv import load_dotenv
import os
load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN')
Чтобы пригласить бота на сервер, откройте вкладку OAuth2 → URL Generator. Отметьте bot в разделе Scopes и выберите нужные Bot Permissions (например, Send Messages, Read Message History). Скопируйте сгенерированную ссылку внизу страницы и откройте её в браузере. Выберите нужный сервер (вы должны быть его администратором) и подтвердите добавление.
Запуск первого скрипта и подключение к Discord API
Установите библиотеку discord.py командой pip install -U discord.py. После установки создайте Python-файл, например bot.py.
Зайдите в Discord Developer Portal, создайте новое приложение, перейдите в раздел «Bot» и нажмите «Add Bot». Скопируйте токен – он потребуется для подключения.
Создайте базовый скрипт:
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.run('ВАШ_ТОКЕН')
Без активации intents.message_content = True бот не сможет читать сообщения, что критично для большинства команд. Убедитесь, что в настройках бота в Developer Portal включён Intent «Message Content Intent».
Для добавления бота на сервер используйте URL вида:
https://discord.com/oauth2/authorize?client_id=ВАШ_CLIENT_ID&scope=bot&permissions=8
Параметр permissions=8 означает полный доступ. Для минимальных прав измените его, например, на 2048 (управление сообщениями).
Запустите скрипт: python bot.py. Если всё настроено правильно, в консоли отобразится имя бота. Бот будет онлайн в списке участников сервера.
Обработка команд с помощью команды @bot.command

Декоратор @bot.command() используется для регистрации функций, реагирующих на текстовые команды пользователей. Он работает только при включённом префиксе команд, заданном при создании экземпляра commands.Bot. Пример базовой команды:
from discord.ext import commands
bot = commands.Bot(command_prefix="!")
@bot.command()
async def ping(ctx):
await ctx.send("Pong!")
Аргумент ctx (контекст) предоставляет доступ к информации о сообщении, авторе, канале и сервере. Чтобы принимать параметры от пользователя, добавляйте их как аргументы функции:
@bot.command()
async def say(ctx, *, message: str):
await ctx.send(message)
Особенности использования:
*перед параметром – позволяет захватывать всё оставшееся сообщение как одну строку.- Типизация – автоматическое преобразование аргументов. Ошибки вызывают
commands.BadArgument.
Для ограничения доступа к командам используйте декораторы:
from discord.ext.commands import has_permissions
@bot.command()
@has_permissions(administrator=True)
async def shutdown(ctx):
await ctx.bot.close()
Обработка ошибок реализуется через событие on_command_error или через @command.error:
@say.error
async def say_error(ctx, error):
if isinstance(error, commands.MissingRequiredArgument):
await ctx.send("Укажите сообщение.")
Рекомендации по структуре:
- Разделяйте команды по модулям (cogs) при увеличении количества функций.
- Избегайте дублирования имен команд.
- Используйте
help_command=None, чтобы переопределить встроенную справку.
Работа с событиями: приветствие новых участников

Для приветствия новых участников сервера Discord в боте на Python, необходимо использовать событие on_member_join, которое срабатывает каждый раз, когда пользователь присоединяется к серверу. С помощью этого события можно отправить персонализированное сообщение или выполнить другие действия, такие как добавление роли или отправка приветственного сообщения в текстовый канал.
Основной принцип работы с этим событием – это создание функции-обработчика, которая будет автоматически вызвана при каждом новом подключении пользователя. Пример простого кода:
import discord
from discord.ext import commands
intents = discord.Intents.default()
intents.members = True # Включаем разрешение на доступ к данным о пользователях
bot = commands.Bot(command_prefix="!", intents=intents)
@bot.event
async def on_member_join(member):
channel = discord.utils.get(member.guild.text_channels, name="general") # Канал для приветствия
if channel:
await channel.send(f"Добро пожаловать на сервер, {member.mention}!") # Приветственное сообщение
bot.run('your_token_here')
В этом примере бот отправляет сообщение в канал «general», но вы можете настроить его под свои нужды, указав нужное имя канала. Также можно добавить дополнительные действия, такие как назначение роли новому участнику, если это необходимо.
Для назначения роли используйте метод member.add_roles(). Пример:
@bot.event
async def on_member_join(member):
role = discord.utils.get(member.guild.roles, name="Новая роль")
if role:
await member.add_roles(role)
await member.send(f"Вам назначена роль {role.name}") # Сообщение пользователю
Этот код добавляет роль «Новая роль» пользователю, который только что присоединился к серверу. Важно помнить, что для работы с ролями нужно использовать соответствующие права, а также убедиться, что роль не выше роли бота.
Если вы хотите, чтобы бот отправлял сообщение в личку новому пользователю, это можно сделать следующим образом:
@bot.event
async def on_member_join(member):
await member.send(f"Привет, {member.name}! Добро пожаловать на сервер.") # Личное сообщение новому пользователю
Не забывайте о важных настройках для работы с событиями. Если вы используете событие on_member_join, необходимо включить соответствующие intents, которые разрешают боту получать информацию о пользователях. Без этого боту будет недоступна информация о присоединившихся участниках.
Включение intents – обязательный шаг для всех событий, связанных с пользователями, в новых версиях библиотеки discord.py. Убедитесь, что правильно настроили все необходимые разрешения в панели управления Discord для вашего бота, чтобы избежать ошибок при обработке событий.
Чтение и отправка сообщений в текстовые каналы
Для взаимодействия с текстовыми каналами на Discord через бота, необходимо использовать библиотеку discord.py. Бот может как отправлять сообщения, так и реагировать на полученные. Чтобы начать, нужно настроить бота и получить доступ к событиям, связанным с сообщениями.
Для отправки сообщения в текстовый канал, используйте метод send() объекта канала. Например, чтобы отправить сообщение в канал с ID 1234567890, ваш код будет следующим:
channel = bot.get_channel(1234567890)
await channel.send('Привет, мир!')
Метод send() асинхронен, что означает, что перед его вызовом необходимо убедиться, что бот подключен к серверу и готов к работе. Вы можете использовать его в любой функции, помеченной как async.
Чтение сообщений происходит через обработчик событий. Чтобы отслеживать новые сообщения, используйте событие on_message. Внутри этого обработчика вы можете проверять содержимое полученных сообщений и при необходимости отвечать на них. Например:
@bot.event
async def on_message(message):
if message.content == 'Привет':
await message.channel.send('Привет! Чем могу помочь?')
Этот код позволяет боту реагировать на сообщения с текстом «Привет» и отправлять ответ в тот же канал. Важно помнить, что в обработчике сообщений следует добавлять вызов await bot.process_commands(message), если бот использует команды через commands.Bot.
Для чтения старых сообщений в канале можно использовать метод history(). Например, чтобы получить последние 5 сообщений в канале:
messages = await channel.history(limit=5).flatten()
for msg in messages:
print(msg.content)
Также стоит учитывать, что бот может фильтровать сообщения по автору, времени и другим параметрам. Для этого в методе history() можно использовать аргументы, такие как before и after для ограничения выборки по времени.
Важно следить за правами бота. Бот должен иметь разрешение на отправку и чтение сообщений в канале, иначе выполнение операций завершится с ошибкой. Эти права настраиваются через Discord интерфейс в разделе «Роли» для бота.
Хранение данных бота с использованием JSON или SQLite

Для хранения данных бота можно использовать два популярных метода: JSON и SQLite. Выбор подходящего способа зависит от объема данных и требуемой скорости доступа.
JSON представляет собой текстовый формат хранения данных, который легко читать и редактировать вручную. Он подходит для небольших проектов, где не требуется сложная структура базы данных. Для хранения настроек, списков пользователей или других небольших данных JSON может быть хорошим выбором. Преимущество использования JSON заключается в его простоте – нет необходимости в дополнительных библиотеках или настройках. Однако для работы с большими объемами данных или сложными запросами это решение не подходит. Пример использования JSON в Python:
import json
data = {'user_id': 12345, 'settings': {'volume': 80, 'theme': 'dark'}}
with open('data.json', 'w') as f:
json.dump(data, f)
# Чтение данных
with open('data.json', 'r') as f:
data = json.load(f)
print(data)
SQLite – это легковесная база данных, встроенная в Python через библиотеку sqlite3. SQLite позволяет работать с большими объемами данных и предоставляет возможности для выполнения сложных запросов, что делает его лучшим выбором для проектов с высоким уровнем взаимодействия с данными. SQLite хранит все данные в одном файле, что облегчает переносимость, и идеально подходит для ботов, которые требуют постоянного сохранения состояния и выполнения операций с данными, таких как фильтрация или сортировка. Пример использования SQLite в Python:
import sqlite3
# Создание или подключение к базе данных
conn = sqlite3.connect('bot_data.db')
cursor = conn.cursor()
# Создание таблицы
cursor.execute('''CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY, name TEXT, score INTEGER)''')
# Добавление данных
cursor.execute('''INSERT INTO users (name, score) VALUES (?, ?)''', ('User1', 100))
conn.commit()
# Чтение данных
cursor.execute('''SELECT * FROM users''')
for row in cursor.fetchall():
print(row)
conn.close()
SQLite обеспечивает быструю работу с данными и позволяет создавать сложные структуры, но требует большего внимания к управлению базой данных. Если проект развивается и в нем возникает потребность в работе с несколькими таблицами и запросами, SQLite будет более эффективным выбором, чем JSON.
Выбор между JSON и SQLite зависит от потребностей вашего бота. Если проект небольшой и не требует сложной обработки данных, JSON может быть достаточно удобным. Если же данные начинают увеличиваться, появляются запросы к базе или необходимо поддерживать более сложные структуры, лучше использовать SQLite.
Вопрос-ответ:
Как создать Discord бота на Python с нуля?
Для создания Discord бота на Python нужно выполнить несколько шагов. Сначала необходимо установить библиотеку `discord.py`, которая позволяет взаимодействовать с API Discord. Для этого можно использовать команду `pip install discord.py`. Затем нужно зарегистрировать бота на сайте Discord, создать приложение и получить токен, который будет использоваться для подключения. После этого пишем код для бота, создаем объект клиента и обрабатываем события, такие как запуск бота и получение сообщений. Не забудьте установить настройки для запуска бота и обработку команд.
Как получить токен для Discord бота?
Токен для Discord бота можно получить, зарегистрировав бота на официальном сайте Discord. Для этого нужно зайти в раздел «Developer Portal», создать новое приложение, а затем добавить в него бота. После этого в настройках бота будет доступен токен. Этот токен необходимо хранить в секрете, так как он дает доступ к управлению ботом. Его можно использовать в коде для авторизации бота на платформе.
Что такое библиотека `discord.py` и для чего она нужна?
Библиотека `discord.py` — это популярный инструмент для Python, который предоставляет простой интерфейс для работы с API Discord. С помощью этой библиотеки можно создавать ботов, которые могут отправлять и получать сообщения, управлять каналами, реагировать на команды и выполнять другие задачи в Discord. Она значительно упрощает работу с API, позволяя сосредоточиться на логике бота, а не на низкоуровневом кодировании запросов к серверу Discord.
Какие основные функции может выполнять Discord бот на Python?
Discord бот на Python может выполнять множество различных функций. Он может реагировать на команды пользователей, отправлять автоматические сообщения, управлять каналами и ролями, отправлять уведомления, интегрироваться с другими сервисами (например, погода, новости, игры). Также бот может выполнять задачи автоматизации, такие как модерирование чатов, фильтрация нежелательных сообщений и блокировка пользователей. Всё это настраивается в коде с помощью обработки команд и событий.
