Как создать Discord бота с помощью Python

22.12.2020 в 21:12

Из этого туториала Вы узнаете, как полностью создать собственного бота Discord в облаке.

Вам не нужно ничего устанавливать на свой компьютер, и вам не нужно ничего платить за размещение своего бота.

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

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

Чтобы работать с библиотекой Python и API Discord, мы должны сначала создать учетную запись Discord Bot.

Вот шаг к созданию учетной записи Discord Bot.

1. Убедитесь, что вы вошли на сайт Discord.

2. Перейдите на страницу приложения.

3. Щелкните кнопку «Новое приложение».

198476535451642758761446974300222952430.png

4. Дайте приложению имя и нажмите «Создать».

131407014344974615788117523197606821050.png

5. Перейдите на вкладку «Бот» и нажмите «Добавить бота». Вам нужно будет подтвердить действие, нажав «Yes, do it!»

Оставьте настройки по умолчанию для Public Bot и Require OAuth2 Code Grant.

Ваш бот создан. Следующим шагом будет копирование токена.

Этот токен является паролем вашего бота, поэтому не сообщайте его никому. Это может позволить кому-то войти в ваш бот и делать разные плохие вещи.

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

Как пригласить вашего бота присоединиться к серверу

Теперь вам нужно подключить своего пользователя-бота к серверу. Для этого вы должны создать для него URL-адрес приглашения.

Перейдите на вкладку «OAuth2». Затем выберите «бот» в разделе «scopes».

Теперь выберите нужные разрешения для бота. Наш бот будет в основном использовать текстовые сообщения, поэтому нам не нужно много разрешений. Вам может потребоваться больше, в зависимости от того, что вы хотите, чтобы ваш бот делал. Будьте осторожны с разрешением «Администратор».

После выбора соответствующих разрешений нажмите кнопку «Copy» над разрешениями. Это скопирует URL-адрес, который можно использовать для добавления бота на сервер.

Вставьте URL-адрес в свой браузер, выберите сервер, на который будет приглашен бот, и нажмите «Авторизовать».

Чтобы добавить бота, вашей учетной записи необходимы разрешения «Управление сервером».

Теперь, когда вы создали пользователя-бота, мы начнем писать код Python для бота.

Как написать код для базового бота Discord с помощью библиотеки discord.py

Мы будем использовать библиотеку Python discord.py, чтобы написать код для бота. discord.py – это оболочка API для Discord, которая упрощает создание бота Discord на Python.

Как создать реплику и установить disocrd.py

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

Создайте новый Repl и выберите «Python» в качестве языка.

Чтобы использовать библиотеку discord.py, просто напишите import discord  вверху main.py. Repl.it автоматически установит эту зависимость, когда вы нажмете кнопку «Run».

Если вы предпочитаете кодировать бота локально, вы можете использовать эту команду в MacOS для установки discord.py:

python3 -m pip install -U discord.py

Возможно, вам придется использовать pip3 вместо pip.

Если вы используете Windows, вы должны вместо этого использовать следующую строку:

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

Как настроить события Discord для вашего бота

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

Сделаем бота, который отвечает на конкретное сообщение. Этот простой код бота вместе с объяснением кода взят из документации discord.py. Позже мы добавим в бота дополнительные функции.

Добавьте этот код в main.py. (Вы можете назвать файл как-нибудь иначе, только не discord.py.) Я вскоре объясню, что делает весь этот код.

import discord import os  client = discord.Client()  @client.event async def on_ready():     print('We have logged in as {0.user}'.format(client))  @client.event async 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')) 

Когда вы создали своего пользователя-бота в Discord, вы скопировали токен. Теперь мы собираемся создать файл .env для хранения токена. Если вы запускаете свой код локально, вам не нужен файл .env. Просто замените os.getenv('TOKEN') токеном.

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

Поэтому, если вы разрабатываете на Repl.it, включайте в файл .env только личную информацию, такую ​​как токены или ключи.

Нажмите кнопку «Добавить файл» и создайте файл с именем .env.

Внутри файла добавьте следующую строку, включая ваш фактический токен, который вы скопировали ранее:

TOKEN=[paste token here] 

Теперь давайте рассмотрим, что делает каждая строка в коде вашего бота Discord.

  1. Первая строка импортирует библиотеку discord.py.
  2. Вторая строка импортирует библиотеку os, но она используется только для получения переменной TOKEN из файла .env. Если вы не используете .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.

У нас есть код для бота, поэтому теперь нам просто нужно его запустить.

Как запустить бота

Теперь нажмите кнопку запуска вверху, чтобы запустить своего бота в repl.it.

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

В Windows:

py -3 main.py

В других системах:

python3 main.py

Теперь перейдите в свою комнату в Discord и введите «$hello». Ваш бот должен ответить «Hello!».

Как улучшить бота

Теперь, когда у нас есть базовый бот, мы его улучшим. Не зря он называется «Encourage Bot».

Этот бот будет отвечать сообщением ‘Hello!’ всякий раз, когда кто-то отправляет сообщение, содержащее грустное или удручающее слово.

Любой желающий сможет добавить ободряющие сообщения для использования бота, а отправленные пользователем сообщения будут храниться в базе данных Repl.it.

Бот также вернет случайную вдохновляющую цитату из API, когда кто-то наберет в чате сообщение «$inspire».

Мы начнем с добавления функции «$inspire».

Как добавить в бота вдохновляющие цитаты

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

Вот обновленный код. После кода я объясню новые части.

import discord import os import requests import 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.event async def on_ready():   print('We have logged in as {0.user}'.format(client))  @client.event async 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, и модуль json упрощает работу с возвращенными данными.

Функция get_quote() очень проста. Во-первых, она использует модуль запросов для запроса данных из URL-адреса API. API возвращает случайную вдохновляющую цитату. Эту функцию можно легко переписать для получения котировок из другого API, если текущий перестанет работать.

Затем внутри функции мы используем json.loads() для преобразования ответа API в JSON. Методом проб и ошибок я понял, как перевести цитату из 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!" ] 

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

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

Теперь нам нужно обновить нашего бота, чтобы он использовал два созданных нами списка. Во-первых, импортируйте модуль 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)) 

Это хорошее время для тестирования бота. Теперь вы знаете достаточно, чтобы создать собственного бота. 

Источник:

#PythonВерсии, которые стоят у автора

Приветствую, хабровчане и другие пользователи интернета. Сегодня я начну цикл статей, посвящённых созданию Discord-бота с помощью библиотеки discord.py. Мы рассмотрим создание как и примитивного бота, как и “продвинутого” бота с модулями. В этой статье мы сделаем стандартную команду и ещё одну небольшую команду. Начнём!

Создание бота и получение токена

Для того, чтобы добавить бота на сервер нужно создать свое приложение и во вкладке General Information скопировать Client ID.

Здесь заменяем CLID на ранее скопированный Client ID.

https://discordapp.com/oauth2/authorize?&client_id=CLID&scope=bot&permissions=8

Во вкладке Bot создаём бота и копируем токен.

Написание кода

Устанавливаем саму библиотеку.

pip install discord

Создаём файл config.py (так удобнее), и создаём там словарь.

settings = {     'token': 'Ваш токен',     'bot': 'Имя бота',     'id': Client ID бота, без кавычек,     'prefix': 'Префикс бота' }
import discord from discord.ext import commands from config import settings

Создаём “тело” бота, название может быть любое:

bot = commands.Bot(command_prefix = settings['prefix']) # Так как мы указали префикс в settings, обращаемся к словарю с ключом prefix.

Начинаем писать основной код.

@bot.command() # Не передаём аргумент pass_context, так как он был нужен в старых версиях. async def hello(ctx): # Создаём функцию и передаём аргумент ctx.     author = ctx.message.author # Объявляем переменную author и записываем туда информацию об авторе.      await ctx.send(f'Hello, {author.mention}!') # Выводим сообщение с упоминанием автора, обращаясь к переменной author.

В конце запускаем бота с помощью:

bot.run(settings['token']) # Обращаемся к словарю settings с ключом token, для получения токена

Полный код

import discord from discord.ext import commands from config import settings  bot = commands.Bot(command_prefix = settings['prefix'])  @bot.command() # Не передаём аргумент pass_context, так как он был нужен в старых версиях. async def hello(ctx): # Создаём функцию и передаём аргумент ctx.     author = ctx.message.author # Объявляем переменную author и записываем туда информацию об авторе.     await ctx.send(f'Hello, {author.mention}!') # Выводим сообщение с упоминанием автора, обращаясь к переменной author.  bot.run(settings['token']) # Обращаемся к словарю settings с ключом token, для получения токена

Должно получится так:

Бонусный туториал!

import json import requests

Приступим к написанию команды.

@bot.command() async def fox(ctx):     response = requests.get('https://some-random-api.ml/img/fox') # Get-запрос     json_data = json.loads(response.text) # Извлекаем JSON      embed = discord.Embed(color = 0xff9900, title = 'Random Fox') # Создание Embed'a     embed.set_image(url = json_data['link']) # Устанавливаем картинку Embed'a     await ctx.send(embed = embed) # Отправляем Embed

Должно получится так:

Конец

На этом 1 часть закончена. Скоро будет опубликована 2 часть.

Асинхронная библиотека discord.py содержит все что нужно для бота, с помощью нее даже можно работать с голосовыми каналами сервера. В этой статье я расскажу как создать простенького бота для вашего discord сервера.

Получение токена и Client ID для вашего бота

Для получения токена и ID бота небходимо создать свое приложение и в разделе General Information скопировать Client ID. А в разделе настроек создать бота и скопировать его токен. Задача не сложная, думаю все с этим справятся.

Собственно пишем бота

Устанавливаем discord.py с помощью pip:

pip install discord

После успешной установки создаем файл bot.py, где будем писать бота. Импортируем все необходимое:

import discord from discord.ext import commands 

Создаем переменную с вашим токеном, про который я писал выше:

TOKEN = 'Ваш токен'

Про токен Создаем тело бота:

bot = commands.Bot(command_prefix='!') #инициализируем бота с префиксом '!'

Для начала сделаем простенькую команду, аргумент которой бот будет просто пересылать:

 @bot.command(pass_context=True) #разрешаем передавать агрументы async def test(ctx, arg): #создаем асинхронную фунцию бота     await ctx.send(arg) #отправляем обратно аргумент 

И в конце запускаем бота с вашим токеном:

bot.run(TOKEN)

В итоге должно получится вот такое:Код

 import discord from discord.ext import commands  TOKEN = 'Ваш токен' bot = commands.Bot(command_prefix='!')   @bot.command(pass_context=True)  # разрешаем передавать агрументы async def test(ctx, arg):  # создаем асинхронную фунцию бота     await ctx.send(arg)  # отправляем обратно аргумент   bot.run(TOKEN)  

Теперь необходимо добавить бота на сервер. Сделать это можно с помощью ссылки:

https://discordapp.com/oauth2/authorize?&client_id={Client ID}&scope=bot&permissions={Права, например 66395456}

Число необходимых прав можно получить в разделе настроек бота. Теперь можно запускать бота:

python bot.py

После нескольких секунд, можно заметить его в сети: И наконец-то попробовать отправить команду:

Заключение

Вот так можно легко запустить у себя на сервере бота. Как можно заметить библиотека делает практически все за тебя и остается только добавлять свой функционал с использованием python. В следующий раз я покажу как следить за событиями, подключатся к голосовым каналам (избегая проблем с linux и Windows), использовать роли и права участников и другое. Надеюсь, статья была Вам полезна, удачи!

Сегодня рассмотрим пример создания простого чат-бота для Discord на языке Python 3 с использованием популярной библиотеки discord.py. Данный чат-бот по команде будет присылать стоимость криптовалюты биткоин (Bitcoin), которую будет узнавать с сайта coinmarketcap.com.

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

Что потребуется для из средств разработки:

  • Python 3.4.2+ (в Ubuntu 16.04 в коробке сразу идет Python 3.5.2)
  • Pip3 (менеджер пакетов для установки библиотек, в версиях Python 3.4+ входи в коробочную версию)
  • Любой текстовый редактор

В случае, если не установлен pip3, то установка в Ubuntu выглядит так:

$ sudo apt-get install python3-pip

Далее ставим главную библиотеку discord.py – обертка над API Discord для Python 3:

$ pip3 install discord.py

В Windows команда для терминала cmd выглядит также. Но если не настроены пути, то будет появляться ошибка. Тогда можно написать полный путь до pip3 примерно так:

C:_ПУТЬ_ДО_ПАПКИ_PYTHON3ToolsScriptspip3.exe install discord.py

Уже почти все сделано, осталось написать код. Создаем пустой файл с названием, например, discordpy-chatbot.py. Открываем любым текстовым редактором и вставляем туда код. На Github я привел программный код нашего чат-бота. Вот ссылка, ниже gist:

Осталось изменить значение переменной DISCORD_BOT_TOKEN, в которую необходимо сохранить токен вашего Discord-приложения (чат-бота). Чтобы узнать свой токен, необходимо перейти по адресу https://discordapp.com/developers/applications/me, выбрать в списке необходимый чат-бот или создать новый, и на странице настроек приложения в блоке “Bot” нажать на ссылку “click to reveal”, где раскроется токен вашего приложения. Его и нужно занести в переменную DISCORD_BOT_TOKEN:

Все готово. Сохраняем файл со скриптом и запускаем чат-бот:

$ python3 discordpy-chatbot.py

После запуска на вашем сервере Discord, куда был добавлен чат-бот (а как добавлять своих ботов на свой сервер я писал в этой статье), можно писать команду:

!btcprice

на что бот вам любезно ответит текущей ценой за 1 биткоин:

Используемые источники:

  • https://dev-gang.ru/article/kak-sozdat-discord-bota-s-pomosczu-python-uhacexvap5/
  • https://habr.com/ru/post/511454/
  • https://habr.com/sandbox/132747/
  • http://tetraquark.ru/archives/377

Оцените статью
Рейтинг автора
5
Материал подготовил
Илья Коршунов
Наш эксперт
Написано статей
134
Добавить комментарий