Поиграем?
Блог

Как сделать бота в Дискорде

Простая инструкция.

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

Для создания бота в Дискорде не придется устанавливать дополнительные программы или платить деньги – бот будет полностью существовать в облаке. В процессе мы воспользуемся несколькими инструментами: библиотеками Python, Discord API и Repl.it – так называется платформа для проведения облачных вычислений.

В этом гайде мы расскажем, как сделать бота в Дискорде.

Как зарегистрировать учетную запись Discord Bot

Первый шаг в создании бота Discord – создание собственного аккаунта Discord Bot. Он понадобится, чтобы получить доступ к API Discord и библиотекам Python.

Для регистрации учетной записи Discord Bot:

  1. Залогиньтесь на сайте Discord в свой обычный аккаунт.
  2. Откройте веб-версию интерфейса для разработчиков.
  3. Нажмите кнопку New Application («Новое приложение») в правом верхнем углу страницы.
  4. Придумайте имя для своего приложения (бота) и нажмите Create («Создать»).
  5. Выберите вкладку Bot («Бот») в меню слева и нажмите Add Bot («Добавить бота»). Подтвердите действие, нажав кнопку Yes, do it! («Да, давайте!»).
  6. Настройки Public Bot и Require OAuth2 Code Grant менять не нужно.

Теперь у вас есть собственный бот – правда, пока бесполезный.

После этого нажмите Click to Reveal Token и скопируйте куда-нибудь токен бота Discord – это уникальный ключ доступа к нему. Комбинацию стоит передавать только другим разработчикам, которым вы доверяете, а иначе лучше держать при себе.

В случае, если кто-то все-таки узнает токен, можно нажать Regenerate – это действие сгенерирует новый токен.

Как добавить бота на сервер в Дискорде

Чтобы бот мог взаимодействовать с чатами сервера, его, что логично, нужно туда добавить, практически как обычного пользователя.

Для добавления бота создайте URL-инвайт:

  1. Откройте вкладку OAuth2. Поставьте галочку рядом с пунктом bot в секции scopes.
  2. Далее необходимо предоставить боту разрешения, нужные для работы. Мы создаем простого текстового бота, так что ему потребуется всего несколько прав – в зависимости от задуманных функций их набор будет меняться. Главное, трижды подумайте, чем давать боту разрешение Administrator – оно может поставить под угрозу безопасность сервера.
  3. Как только укажите необходимые разрешения, можете нажать Copy выше этого меню. Так вы скопируете приглашение, которое понадобится для добавления бота на сервер.
  4. Вставьте скопированную ссылку в адресную строку бразуера, выберете сервер для бота и нажмите Authorize. Разумеется, приглашать бота на сервер могут только пользователи, имеющие право «Управление сервером» на конкретном сервере Discord.

Теперь бот создан и «заселен». Приступаем к самому интересному: написанию кода на Python для работы бота. Не переживайте: сейчас расскажем обо всем пошагово.

Как написать код для чат-бота в Дискорде

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

Как установить discord.py

Можно писать код для бота в любом редакторе кода на своем компьютере или даже в блокноте – последний вариант, мягко говоря, не слишком удобен. В этом гайде мы воспользуемся онлайн-средой IDE Repl.it, доступ к которой можно получить прямо в браузере. Так работать с кодом будет намного проще.

В запущенной среде создайте новый Repl и укажите язык программирования Python.

Для подключения библиотеки discord.py просто введите команду import discord в начале main.py. Repl.it автоматически выполнит необходимые действия при нажатии Run.

В случае, если вы создаете бота локально на компьютере под управлением Windows, используйте эту строку кода для установки discord.py:

py -3 -m pip install -U discord.py

На MacOS команда выглядит несколько иначе – если этот вариант не сработает, попробуйте заменить pip на pip3:

python3 -m pip install -U discord.py

Как задать события для бота Discord

События – это набор правил, которые позволяют боту в Дискорде выполнять различные функции, реагируя на происходящее в чатах: например, ответить на чье-то сообщение определенным образом. Библиотека discord.py основана на концепте событий, так что с ними стоит разобраться.

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

Для начала добавьте в файл main.py (его можно переименовать, только избегайте названия discord.py) следующий код:

import discordimport os

client = discord.Client()

@client.eventasync def on_ready(): print(‘We have logged in as {0.user}’.format(client))

@client.eventasync def on_message(message): if message.author == client.user: return

if message.content.startswith(‘$hello’): await message.channel.send(‘Hello!’)

client.run(os.getenv(‘TOKEN’))

Далее мы создадим файл с расширением .env для хранения токена бота, который вы скопировали ранее. Тем, кто создает бота локально, этот пункт можно пропустить: достаточно заменить код os.getenv(‘TOKEN’) самим токеном.

К слову, .env файлы используются для объявления переменных и, в отличие от других файлов проекта, видны только его создателю. По этой причине разработчикам на Repl.it можно хранить в .env конфиденциальную информацию вроде ключей и токенов.

Для создания .env-файла нажмите «Добавить файл» и укажите расширение .env в конце названия документа.

 

Внутрь скопируйте строчку кода, указанную ниже, а также вставьте туда токен своего бота:

TOKEN=[вставьте токен сюда]

Настало время разобраться, как именно работает код бота для Дискорда, который вы скопировали ранее:

  1. Сперва код импортирует библиотеку discord.py;
  2. Вторая строка используется для подключения библиотеки os – она нужна исключительно для получения переменной TOKEN из файла .env. В локальных проектах эту строку можно удалить.
  3. Далее создается экземпляр Client, то есть устанавливается связь с самим Discord.
  4. @client.event() – декоратором для регистрации события. Он относится к асинхронным библиотекам, работающим через обратные вызовы – то есть с использованием функций, которые вызываются в результате какого-то события. В данном случае функция on_ready() срабатывает, когда бот включается, а on_message() вызывается, когда бот получает сообщение.
  5. Без дополнительных условий on_message() будет срабатывать каждый раз, когда кто-то пишет в чат. Только мы не хотим, чтобы бот отвечал самому себя, поэтому прописываем правило: если Message.author совпадает с Client.user, то функция просто возвращает return (бездействует).
  6. Далее бот проверяет Message.content (содержимое сообщения). Если оно начинается с ’$hello’, то бот отвечает приветствием ‘Hello!’.
  7. Последняя строка подсоединяет бота с помощью токена входа, который вызывается из файла .env.

Теперь, когда базовый код для бота написан (ну или скопирован), остается главное – запустить его в Discord.

Как запустить бота в Дискорде

В Repl.it нажмите специальную кнопку запуска вверху.

В локальном редакторе кода для запуска бота можно использовать специальные команды для терминала. 

Для ПК с Windows:

py -3 main.py

Для MacOS и других ОС:

python3 main.py

Чтобы проверить работоспособность бота, перейдите в свою комнату Discord и отправьте сообщение с текстом $hello. Бот должен ответить: Hello!

Делаем бота умнее

Бот, умеющий здороваться – это мило, но мы сделаем его лучше. В инструкции описаны конкретные фразы, но по ним вы поймете принцип действия и сможете настроить все под свои нужды.

Для примера научим бота отвечать сообщением Hello! всем, кто напишет грустное сообщение с одним из ключевых слов.

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

Кроме того, научим бота отправлять случайную вдохновляющую фразу каждый раз, когда кто-то напишет команду $inspire.

С этого и начнем.

Как добавлять в бота новые фразы

Можно прописывать все реплики вручную, но в случае с вдохновляющими цитатами мы воспользуемся готовой англоязычной API zenquotes.io. Также импортируем два дополнительных модуля Python, добавим функцию get_quote() и научим бота ее вызывать.

После всех манипуляций код выглядит так:

import discordimport osimport requestsimport json

client = discord.Client()

def get_quote(): response = requests.get(«https://zenquotes.io/api/random») json_data = json.loads(response.text) quote = json_data[0][‘q’] + » –» + json_data[0][‘a’] return(quote)

@client.eventasync def on_ready(): print(‘We have logged in as {0.user}’.format(client))

@client.eventasync def on_message(message): if message.author == client.user: return

if message.content.startswith(‘$inspire’): quote = get_quote() await message.channel.send(quote)

client.run(os.getenv(‘TOKEN’))

Вот, что мы добавили:

  • Модуль requests – с его помощью бот делает HTTP-запрос для получения данных из API. API возвращает модуль JSON, упрощает работу с возвращенными данными.
  • Функция get_quote() – она использует модуль запросов для запроса данных из URL-адреса API. API возвращает случайную вдохновляющую цитату.
  • Внутри предыдущей функции мы используем json.loads(), чтобы преобразовать ответа API в JSON. Цитата выводится в виде строки.
  • В конце кода мы поменяли логику бота. Раньше он реагировал на сообщения, начинавшиеся с $hello, а теперь триггером служит $inspire. Вместо строго определенного ответа Hello! он запрашивает случайную цитату quote = get_quote() и отправляет ее в чат.

Теперь вы можете запустить бота и протестировать его самостоятельно.

Как научить бота в Дискорде подбадривать пользователей

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

В первую очередь пропишек список Python, содержащий слова-триггеры.

После создания переменной client добавляем код:

sad_words = [«sad», «depressed», «unhappy», «angry», «miserable»]

Слова можно менять, в том числе на русскоязычные. 

Следом добавляем набор реплик, которыми бот будет отвечать загрустившим пользователям.

После списка sad_words добавляем еще один:

starter_encouragements = [ «Cheer up!», «Hang in there.», «You are a great person / bot!»]

Опять-таки, можно менять фразы на свое усмотрение – это всего лишь пример.

Как научить бота Discord отвечать на сообщения

Осталось научить бота использовать два новых списка. Поскольку по задумке бот будет выбирать случайную фразу из всего набора, для начала импортируем random. Добавляем строку в начало кода:

import random

Далее модифицируем функцию on_message() – нам нужно, чтобы она проверяла все сообщения пользователей на наличие триггеров из списка sad_words. Если оно обнаружится, то бот ответит.

Получился такой код:

async def on_message(message): if message.author == client.user: return

msg = message.content

if msg.startswith(‘$inspire’): quote = get_quote() await message.channel.send(quote) if any(word in msg for word in sad_words): await message.channel.send(random.choice(starter_encouragements))

Теперь вы можете снова протестировать бота. Если все хорошо, то можете поэтапно кастомизировать его, задавая уникальные реплики и триггеры. Стримеры, например, могут научить бота выдавать расписание трансляции или ссылку на свой канал – можно придумать огромное количество применений.

* * *

Теперь вы знаете, как создать и настроить бота в Дискорде.

Как почистить Windows от хлама и ненужных файлов – гайд по очистке памяти Виндовс

Как играть в «Герои 3» по сети бесплатно

4 комментария
Возможно, ваш комментарий нарушает правила, нажмите на «Отправить» повторно, если это не так, или исправьте текст
Пишите корректно и дружелюбно. Принципы нашей модерации
Реклама 18+
Не знал, что на хабре сижу))0)
0
0
0
код не работает

@client.eventasync def on_ready(): print(‘We have logged in as {0.user}’.format(client))

@client.eventasync def on_message(message): if message.author == client.user: return

тут пишет неверный синтаксиз
0
0
0
код не работает @client.eventasync def on_ready(): print(‘We have logged in as {0.user}’.format(client)) @client.eventasync def on_message(message): if message.author == client.user: return тут пишет неверный синтаксиз
то же самое
0
0
0
"Как только укажите необходимые разрешения, можете нажать Copy выше этого меню. Так вы скопируете приглашение, которое понадобится для добавления бота на сервер"
У меня там пустое поле и скопировать я не могу там просто пустое поле выбора где ничего нету
0
0
0
Укажите причину бана
  • Оскорбление
  • Мат
  • Спам
  • Расизм
  • Провокации
  • Угрозы
  • Систематический оффтоп
  • Мульти-аккаунтинг
  • Прочее
Пожаловаться
  • Спам
  • Оскорбления
  • Расизм
  • Мат
  • Угрозы
  • Прочее
  • Мультиаккаунтинг
  • Систематический оффтоп
  • Провокации
Комментарий отправлен, но без доната
При попытке оплаты произошла ошибка
  • Повторить попытку оплаты
  • Оставить комментарий без доната
  • Изменить комментарий
  • Удалить комментарий