Библиотека discord py


Создание бота на основе discord.py. Часть 1 / Хабр

Введение

Это первая статья про создание бота для Discord. В конце статьи находятся ссылки на следующие части, со временем они будут дополняться. Статьи следуют друг за другом, без каких-либо "информационных дыр". Если нашли опечатку или неточность, отпишите о проблеме в комментариях или в личных сообщениях, максимально оперативно всё поправим! А теперь переходим непосредственно к созданию бота.

В данной части

  1. Создание тестового сервера

  2. Включение режима разработчика

  3. Создание приложения и получение токена

  4. Добавление бота на сервер

  5. Установка библиотеки discord.py

  6. Первые строчки кода

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

Гайд будет максимально подробный, поэтому и начинать будем с создания тестового сервера. Зачем он нужен? Лишь для вашего удобства и безопасности, если у вас уже есть большой сервер, тем более не стоит сразу добавлять на него разрабатываемого бота. Никто не защищён от багов и дыр в безопасности.

  1. Заходим в дискорд

  2. Слева видим список серверов, листаем в самый низ до кнопки "Создать сервер".

  3. Создаём сервер по любому из предложенных шаблонов.

Включаем режим разработчика

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

Чтобы включить этот режим, заходим в настройки.

В категории "Настройки приложения" ищем "Расширенные".

И включаем режим разработчика.

Получение токена

Для начала нам нужно зайти на страницу создание приложений и нажать New Application.

После этого вам предложат назвать ваше приложение (Потом можно будет изменить).

Создание приложени

После создания, попадаем на страницу настройки приложения. В меню выбираем "Bot".

На данной странице нажимаем на "Add Bot". Скопируем токен и сохраним его.

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

Добавление бота на сервер

В меню ищем пункт OAuth3 –> URL Generator.

В поле SCOPES выбираем bot и applications.commands. В появившемся ниже поле выбираем Administrator, это более удобно для тестирования. Но когда бот будет работать в продакшене, лучше выставлять только те права, которые правда нужны, потому что никто не защищён от потери токена, а с правами администратора это может стать очень большой проблемой.

Копируем появившеюся ниже ссылку и вставляем в адресную строку браузера. Если у вас не выполнен вход в браузере, его необходимо произвести. После чего выбираем тестовый сервер из списка и нажимаем "Продолжить" и далее "Авторизовать".

Ура! Наш бот на тестовом сервере!

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

Для начала нужно установить python, данный этап не расписан, но желательно установить версию 3.10 (Последняя версия на момент написания 3.10.5). Если у вас Windows, для проверки можете использовать следующую команду

py --version

В ответ получите версию вашего python. Устанавливать будем не стабильную, а разрабатываемую версию, для этого пропишем следующую команду. (Это можно делать уже внутри проекта). Хотя некоторые IDE устанавливаю git вместе с собой, можете скачать его отдельно.

py -m pip install git+https://github.com/rapptz/discord.py

Если всё же хотите установить стабильную, релизную версию, пропишите следующую команду.

py -3 -m pip install -U discord.py py -3 -m pip install -U discord.py[voice]

Подробнее про установку библиотеки и саму библиотеку можно прочитать тут.

Первые строчки кода

Пришло время писать код! Программирование в статьях будет происходить в PyCharm, хоть это и довольно тяжёлая IDEA, она удобная и бесплатная для студентов.

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

Для этого заходим в PyCharm, далее File –> Open.

P.s. Не обращайте внимания на другую тему IDE.

В появившемся окне ищем созданную папку, выбираем её и нажимаем "Ok". Обратите внимание на то, что нужно просто нажать по папке, а не проваливаться в неё.

Если PyCharm автоматически не создал main.py, создайте его вручную.

Вставляем код ниже и запускаем.

import discord # Подключаем библиотеку from discord.ext import commands intents = discord.Intents.default() # Подключаем "Разрешения" intents.message_content = True # Задаём префикс и интенты bot = commands.Bot(command_prefix='>', intents=intents) # С помощью декоратора создаём первую команду @bot.command() async def ping(ctx): await ctx. send('pong') bot.run('token') 

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

Идём в дискорд и используем нашу первую команду.

Немного объясним данную структуру. Поскольку это обычная команда, вся информация хранится в ctx(Переменная одноимённого класса). Она имеет следующие поля:

['args', 'author', 'bot', 'channel', 'cog', 'command', 'command_failed', 'guild', 'invoked_parents', 'invoked_subcommand', 'invoked_with', 'kwargs', 'me', 'message', 'prefix', 'subcommand_passed', 'valid', 'voice_client']

И следующие команды:

['fetch_message', 'history', 'invoke', 'pins', 'reinvoke', 'reply', 'send', 'send_help', 'trigger_typing', 'typing']

Если вы знакомы с синтаксисом языка, то данный список можно получить с помощью встроенной функции dir.

print(dir(ctx))

На более правильно прочитать документацию про Context.

Заключение

Сразу отвечу всем комментаторам. Да - подобных статей море, в том числе есть официальная документация. Но поскольку в моих планах есть создать серию статей, я хотел бы, что бы в них было описано всё, начиная с самых азов.

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

Следующие части

  • Часть 1 (Текущая)

  • Часть 2

Создание Discord-бота на Python. Часть 1 / Хабр

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

Версия Python: 3.8.2
Версия discord.py: 1.3.3

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


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

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

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

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

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


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

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

pip install discord

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

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

Создаём main-файл, название может быть любое.
Импортируем библиотеки и наш файл конфига:

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, библиотеки для Python, которая помогает при создании приложений, использующих Discord API.

Предпосылки

discord.py работает с Python 3.8 или выше. Поддержка более ранних версий Python не предусмотрено. Python 2.7 или ниже не поддерживается. Python 3.7 или ниже не поддерживается.

Установка

Вы можете получить библиотеку напрямую из PyPI:

 python3 -m pip install -U discord.py 

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

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

Чтобы получить голосовую поддержку, вы должны использовать discord.py[voice] вместо discord.py , например.

 python3 -m pip install -U discord.py[голос] 

В средах Linux для установки голоса требуется получить следующие зависимости:

  • библиотека

  • библиотека

  • Python3-dev

Для системы на основе Debian следующая команда получит эти зависимости:

 $ подходящая установка libffi-dev libnacl-dev python3-dev 

Не забудьте проверить свои разрешения!

Виртуальные среды

Иногда вы хотите, чтобы библиотеки не загрязняли установку системы или использовали другую версию библиотеки, чем установленные в системе. У вас также может не быть разрешений на установку общесистемных библиотек. Для этой цели стандартная библиотека Python 3.3 поставляется с концепцией под названием «Виртуальная среда» для помогите поддерживать эти отдельные версии.

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

Впрочем, для быстрых и грязных:

  1. Перейдите в рабочий каталог вашего проекта:

     $ cd ваш-бот-источник $ python3 -m venv бот-окружение 
  2. Активировать виртуальную среду:

     $ источник бот-env/bin/активировать 

    В Windows вы активируете его с помощью:

     $ bot-env\Scripts\activate.bat 
  3. Использовать пункт как обычно:

     $ pip install -U discord.py 

Поздравляю. Теперь у вас есть настроенная виртуальная среда.

Основные понятия

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

Краткий пример для демонстрации работы событий:

 # В этом примере требуется интент 'message_content'. импортировать разногласия класс MyClient(discord.Client): асинхронное определение on_ready (я): print(f'Вы вошли как {self.user}!') асинхронное определение on_message (я, сообщение): print(f'Сообщение от {message.author}: {message.content}') намерения = разногласия.Намерения.по умолчанию() намерения.message_content = Истина клиент = МойКлиент (намерения = намерения) client.run('мой токен идет сюда') 
© Copyright 2015-настоящее время, Rapptz. Создано с использованием Sphinx 4.4.0.

Быстрый запуск

меню настройки

На этой странице дается краткое введение в библиотеку. Предполагается, что у вас установлена ​​библиотека, если вы не отметите раздел «Установка».

Давайте создадим бота, который отвечает на конкретное сообщение и проведет вас через него.

Выглядит примерно так:

 # В этом примере требуется интент 'message_content'. импортировать разногласия намерения = разногласия.Намерения.по умолчанию() намерения.message_content = Истина клиент = discord.Client (намерения = намерения) @client.event асинхронная защита on_ready(): print(f'Мы вошли как {client.user}') @client.event асинхронное определение on_message (сообщение): если сообщение.автор == клиент.пользователь: возвращаться если message.content.startswith('$hello'): ожидание message.channel.send('Привет!') client.run('ваш токен здесь') 

Назовем этот файл example_bot.py . Не называйте его discord.py , так как это будет конфликтовать. с библиотекой.

Здесь много чего происходит, так что давайте проведем вас шаг за шагом.

  1. Первая строка просто импортирует библиотеку, если это вызывает ModuleNotFoundError или ImportError затем перейдите к разделу «Установка» для правильной установки.

  2. Далее мы создаем экземпляр Клиент . Этот клиент — наша связь с Discord.

  3. Затем мы используем декоратор Client.event() для регистрации события. В этой библиотеке много событий. Поскольку эта библиотека асинхронная, мы делаем что-то в стиле «обратного вызова».

    Обратный вызов — это, по сути, функция, которая вызывается, когда что-то происходит. В нашем случае событие on_ready() вызывается, когда бот завершил вход в систему и настройку вещей вверх и on_message() 9Событие 0020 вызывается, когда бот получил сообщение.

  4. Поскольку событие on_message() срабатывает для при каждом полученном сообщении , мы должны сделать уверены, что мы игнорируем сообщения от самих себя.


    Learn more

Только новые статьи

Введите свой e-mail

Видео-курс

Blender для новичков

Ваше имя:Ваш E-Mail: