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

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

Discord — популярная платформа для общения: ежедневно ей пользуются более 10 миллионов человек. И если управлять небольшим чатом друзей можно самостоятельно, то со средними и крупными каналами без помощи уже не справиться. Рассказываем, как создать чат-бота для Discord на Python: от регистрации на платформе до написания кода.

Каждый день Discord используют более 10 миллионов человек — эта статистика ясно показывает интерес людей к сообществам Discord. Пользователи постоянно исследуют эту платформу и присоединяются к новым серверам с актуальной для них тематикой. А с ростом числа участников администраторам становится сложнее управлять сервером — здесь и наступает момент, когда необходимо подключать ботов. Существует большое количество задач, которые можно передать ботам-администраторам: а в результате мы получаем и улучшение пользовательского опыта, и упрощение работы админа.

Вот только некоторые из этих задач:

  • Приветствие новых членов группы.
  • Ответы на часто задаваемые вопросы.
  • Бан участников, нарушающих правила сервера.
  • Автоматические ответы, отправка и удаление сообщений.
  • Управление ролями участников.

Этот далеко не исчерпывающий список. Администраторы средних и крупных сообществ Discord всегда предпочитают включать несколько специализированных ботов на своём сервере, чтобы передать им часть своих обязанностей. Ознакомившись с нашим руководством, вы также сможете создать своего собственного бота Discord на Python.

Подготовка

Создание сервера

  1. Для начала нам нужен сервер Discord и канал на этом сервере. Чтобы создать сервер, понадобится учётная запись Discord; если учётной записи ещё нет, создайте её, перейдя по ссылке https://discord.com/.
  2. Нажмите кнопку «Добавить сервер» (символ «плюс») на левой боковой панели — это действие откроет интерфейс создания сервера. Выберите шаблон сервера.
Выберите шаблон сервера

  1. Укажите дополнительную информацию. Выберите цель создания сервера, есть два варианта: первый — сообщество по интересам, клуб, общественная, профессиональная организация, второй — частное объединение друзей для развлечения.
Укажите дополнительную информацию

  1. Вам предложат персонализировать сервер: выберите подходящее и запоминающееся имя и иконку. Если вы планируете использовать его для общения членов какой-либо организации, то можете дать название своего сообщества или компании для лучшей узнаваемости.
Вам предложат персонализировать сервер

  1. На этом этапе сервер создан.
На этом этапе сервер создан

Создание канала

Теперь нужно создать канал, на который впоследствии мы будем устанавливать бот. Наш бот будет работать только на этом канале.

  1. Нажмите «Добавить» (плюс) в списке текстовых каналов.
Нажмите «Добавить» (плюс)

  1. Выберите тип канала («text»), дайте ему название и укажите, будет ли он приватным:
Выберите тип канала («text»)

  1. Канал создан:
Канал создан

Регистрация бота

Итак, платформа для размещения бота — учётная запись, сервер и канал — готова; теперь мы можем приступить к созданию бота на Python. Вначале зарегистрируем будущего бота на портале разработчиков Discord. Портал разработчиков — это инструмент, созданный для пользователей, которые хотят расширить возможности Discord, в нашем случае — подключить бота; на портале будет создан API-ключ, позволяющий стороннему приложению (боту) взаимодействовать с сервером Discord.

  1. Перейдите по ссылке https://discord.com/developers/applications для входа в портал. Войдите в свою учётную запись Discord.
Войдите в свою учётную запись Discord

  1. Выберите создание нового приложения, чтобы инициализировать нового бота. Введите имя создаваемого приложения. Имя приложения будет именем вашего бота, впоследствии вы сможете его изменить.
Выберите создание нового приложения

  1. Настроим новое приложение. Нажмите «Бот» на левой боковой панели, затем нажмите «Добавить бота».
Настроим новое приложение

  1. Понадобится подтвердить действие. Во всплывающем окне с вопросом, действительно ли вы хотите добавить бота, нажмите «Да».
  2. Скопируйте токен аутентификации с помощью кнопки «Копировать». Этот токен используется для авторизации программ в Discord. Не передавайте свой токен никому.
Скопируйте токен

Настройка и авторизация бота

Бот зарегистрирован, дадим ему разрешения и укажем сферу применения. Разрешения определяют, какие действия на сервере доступны боту (например, отправка сообщений). Сфера применения — это роль, которую будет выполнять бот.

  1. В левом меню нажмите на «OAuth2», после чего — на «URL Generator». Вы увидите список областей применения приложения, отметьте галочками нужные. Наше тестовое приложение мы будем использовать только в качестве бота, поэтому ставим галочку напротив «bot».  Если вы хотите использовать слэш-команды, обязательно выберите пункт «applications.commands».
 левом меню нажмите на «OAuth2»

  1. На следующем шаге предоставим разрешения. Мы собираемся дать боту разрешение отправлять и отвечать на сообщения, поэтому отмечаем все пункты, связанные с этими действиями. Разрешения можно изменить в любой момент, и сгенерировать новый URL.
На следующем шаге предоставим разрешения

  1. Внизу страницы будет находиться сгенерированный для бота URL-адрес. Скопируйте его, нажав на «Копировать».
Внизу страницы будет находиться сгенерированный для бота URL-адрес

  1. Перейдите по скопированному URL-адресу в новой вкладке. По этой ссылке нужно авторизовать внешнее приложение на сервере. Выберите сервер, на котором будет добавлен бот, и нажмите «Продолжить».
  2. В следующем окне перечислены разрешения, если нужно — можете их отредактировать. Нажмите «Авторизовать».
В следующем окне перечислены разрешения

  1. Подтвердите, что вы человек, с помощью капчи, после чего бот будет авторизован. 
  2. Зайдите на сервер Discord, добавленный бот будет в списке участников, находящихся оффлайн.

Пишем Python-код для бота

В этом разделе мы рассказываем, как написать код бота на Python, который API Discord будет использовать для реализации поведения бота. Предварительно установите Python-библиотеку discord.py.

  1. Необходимо создать файл .env, в который будет записан ключ обновления бота (токен, скопированный при регистрации). Файл .env защитит учётные данные при размещении кода бота. Создадим файл .env в папке проекта и запишем в него следующий код (вставьте ваш ключ):
TOKEN = ‘<YOUR_KEY>’
  1. Импорт модулей.

Создадим файл Python для основного кода бота в том же каталоге; можете назвать его традиционно — main.py — или по своему усмотрению. Импортируем необходимые модули, для этого пропишем:

import discord
import os
import random
from dotenv import load_dotenv

Таким образом мы импортируем следующие модули:

  • discord — библиотека для поддержки многофункционального API Discord;
  • os — модуль, предназначенный для импорта переменных сред;
  • random — используется для выполнения различных случайных операций с данными;
  • dotenv — импортирует .env-файл в основной python-файл.
  1. Инициализация переменных.

Пропишем в python-файле:

load_dotenv()
client = discord.Client()
token = os.getenv('TOKEN')

Здесь мы указали, что используем функцию «load_dotenv()» для импорта переменных окружения, создаём клиента Discord для отправки запроса в API Discord и последней строкой получаем и инициализируем токен переменной окружения.

  1. Инициализация бота.

Далее пишем в том же python-файле:

@client.event
async def on_ready():
    print("Logged in as a bot {0.user}".format(client))

Здесь мы используем событие «on_ready()», предоставленное API Discord; как только наш клиент API инициализируется, это событие запустит выполнение заданной операции. В нашем примере будет выведено имя бота. 

  1. Настройка ответов бота.

Запрограммируем ответы бота на сообщения пользователя. Событию API Discord «on_message» будет передан аргумент «message», содержащий сведения о сообщении, авторе сообщения, канале, на котором было отправлено сообщение и т. д.

  • Сначала будет извлечена информация о сообщении: имя пользователя, канал и содержание сообщения. 
  • Важно, чтобы бот не разговаривал сам с собой. Поэтому устанавливаем проверку отправителя: если сообщение отправляет сам бот, то он не будет отвечать на него. Если не прописать это условие, то действие будет зациклено и бот будет бесконечно отвечать сам себе.
  • В нашем примере — канал с названием «random», чтобы активировать бота на своём канале, замените «random» на его название. Далее можно прописать несколько операторов if-else, также можете реализовать чат-бота с использованием машинного обучения. В примере мы прописали несколько операторов if-else для ответа на простые сообщения: приветствие и прощание — «hi», «hello», «bye» — бот будет отвечать на них, называя пользователя по имени, также наш бот будет рассказывать шутку в ответ на «tell me a joke».

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

Блок кода Python выглядит так:

@client.event
async def on_message(message):
    username = str(message.author).split("#")[0]
    channel = str(message.channel.name)
    user_message = str(message.content)
    print(f'Message {user_message} by {username} on {channel}')
    if message.author == client.user:
        return
    if channel == "random":
        if user_message.lower() == "hello" or user_message.lower() == "hi":
            await message.channel.send(f'Hello {username}')
            return
        elif user_message.lower() == "bye":
            await message.channel.send(f'Bye {username}')
        elif user_message.lower() == "tell me a joke":
            jokes = [" Can someone please shed more\
            light on how my lamp got stolen?",
                     "Why is she called llene? She\
                     stands on equal legs.",
                     "What do you call a gazelle in a \
                     lions territory? Denzel."]
            await message.channel.send(random.choice(jokes))
  1. Запуск бота.

Выше мы создали API-клиент, который предоставляет функцию, вызываемую для запуска. Эта функция принимает «auth token» в качестве аргумента и запускает бота, вызывая событие «on_ready»:

client.run(token)

В результате бот начинает отвечать на сообщения участников канала.

Журнал:

Журнал

Создание команд

В приведённых выше примерах мы показали, как использовать «client.event» для команд, но на практике этот метод обычно не используется. Discord предоставляет другой удобный способ создания команд — использование префикса. Отредактируем python-файл.

  1. Импорт команд.

Импортируем «commands» из «discord.ext», они помогут нам реализовать команды:

from discord.ext import commands
  1. Выбираем префикс.

Теперь выберем префикс, с которого бот должен активироваться и слушать команды. Это может быть любой символ, буква или даже слово. Для простоты выберем в качестве префикса восклицательный знак. Для этого отредактируем определённый ранее «client»:

client = commands.Bot(command_prefix="!*)
  1. Создание команд.

После этого мы можем создавать команды — для этого будем использовать «client.command» в качестве декоратора Python:

@client.command()
async def ping(ctx):
  await ctx.send('Pong!')

В этом блоке кода:

  • ctx — представляет класс «commands.context»; аргумент обязателен для всех обычных команд (не для слэш-команд). Он представляет контекст, в котором вызывается команда и может предоставить много метаданных, например: данные об авторе, содержание сообщения и т. д.
  • ctx.send — используется для отправки сообщения обратно в канал, где была вызвана команда. Обязательно используйте «await», так как это сопрограмма.

Теперь запустите файл снова и перейдите на канал сервера, где находится бот.

Если вы введёте «!ping», то бот ответит «pong».

Читайте в блоге:

Что будем искать? Например,VPS-сервер

Мы в социальных сетях