Введение
Это первая статья про создание бота для Discord. В конце статьи находятся ссылки на следующие части, со временем они будут дополняться. Статьи следуют друг за другом, без каких-либо "информационных дыр". Если нашли опечатку или неточность, отпишите о проблеме в комментариях или в личных сообщениях, максимально оперативно всё поправим! А теперь переходим непосредственно к созданию бота.
В данной части
Создание тестового сервера
Включение режима разработчика
Создание приложения и получение токена
Добавление бота на сервер
Установка библиотеки discord.py
Первые строчки кода
Создание сервера
Гайд будет максимально подробный, поэтому и начинать будем с создания тестового сервера. Зачем он нужен? Лишь для вашего удобства и безопасности, если у вас уже есть большой сервер, тем более не стоит сразу добавлять на него разрабатываемого бота. Никто не защищён от багов и дыр в безопасности.
Заходим в дискорд
-
Слева видим список серверов, листаем в самый низ до кнопки "Создать сервер".
Создаём сервер по любому из предложенных шаблонов.
Включаем режим разработчика
Это необязательно, но очень желательно. В режиме разработчика появляются некоторые полезные элементы для удобства разработки, например, в меню пользователя появляется пункт, который позволяет скопировать его ID.
Чтобы включить этот режим, заходим в настройки.
В категории "Настройки приложения" ищем "Расширенные".
И включаем режим разработчика.
Получение токена
Для начала нам нужно зайти на страницу создание приложений и нажать New Application.
После этого вам предложат назвать ваше приложение (Потом можно будет изменить).
После создания, попадаем на страницу настройки приложения. В меню выбираем "Bot".
На данной странице нажимаем на "Add Bot". Скопируем токен и сохраним его.
Так же, сразу можно выдать дополнительные разрешения боту, чтобы потом об этом не задумываться.
Добавление бота на сервер
В меню ищем пункт OAuth2 –> 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.
Следующие части
Скоро...
Комментарии (5)
kgleba
13.07.2022 18:31Даёшь больше однотипных статей!
https://habr.com/ru/post/511454, https://habr.com/ru/post/494600/
Немного комментариев по существу (АКА предложения по улучшению):
Никто не защищён от багов и дыр в безопасности.
Интересно узнать, о каких "дырах в безопасности" речь? От проблем самой платформы или утечки токена не спасет ничего, настройка же уровней доступа делается буквально в пару строк кода.
Это необязательно, но очень желательно. В режиме разработчика появляются некоторые полезные элементы для удобства разработки, например, в меню пользователя появляется пункт, который позволяет скопировать его ID.
Из статьи мы узнаем, что режим разработчика добавляет возможность копировать ID – и тут у новичка (а статья на начинающих, как я небезосновательно полагаю, и рассчитана) появляется вопрос: А зачем он, собственно, нужен? Позднее это нигде не раскрывается.
Если у вас Windows, для проверки можете использовать следующую команду.
А почему только Windows?.. А почему точка на конце?
Программирование в статьях будет происходить в PyCharm, хоть это и довольно тяжёлая IDEA, она удобная и бесплатная для студентов.
Произошло программирование =)
Кажется, каждый читающий хабы "Программирование" и "Python" знаком с основами языка и работы с IDE. Я бы на вашем месте убрал из статьи все подробные гайды "как открыть файл в пайчарме" – уважайте время вашего читателя)P.s. Не обращайте внимания на другую тему IDEA.
Больше воды – лучше статья, не правда ли? Но, к сожалению, оно так не работает.
И откуда вы так упорно берете букву А в IDE? Integrated Development Environment ведь...Вставляем код ниже и запускаем.
Вы пытались... Объяснить код редкими комментариями через неизвестные начинающему термины и не дать их определения – вот что нам нужно!
Зачем, скажите мне на милость, картинка с IDE с ровно тем же самым кодом под блоком Хабра?!
они скорее всего просто
Скорее всего выделяется запятыми.
они, скорее всего, простоИдём в дискорд и используем нашу первую команду.
<...>Немного объясним данную структуру.
О том, что речь идет о ctx, я понял лишь по следующим предложениям... А первые несколько секунд я вообще не понимал, как произошел переход. Может быть, вы вырезали кусок статьи и забыли поменять структуру предложения?
Если вы знакомы с синтаксисом языка, то данный список можно получить с помощью встроенной функции dir.
Если честно, мне кажется, что в данном случае лучше было бы даже просто дать ссылку на документацию и отправить читателей копошиться самим. Да, по названиям интуитивно понятно, за что отвечает тот или иной функционал, но список полей не дает абсолютно никакого понимания, какие аргументы принимаются, в каком контексте вызываются, и прочее, прочее...
minusd Автор
13.07.2022 18:34Даёшь больше однотипных статей!
Прочитай внимательнее заключение, я знаю что подобных статей много, но это будет серия, поэтому я хочу что бы она была полная и подробная. По этой же причине показаны такие вещи как открытие и запуск в IDE.
kgleba
13.07.2022 18:41А в чем проблема была указать ссылку на одну из имеющихся уже статей и сразу приступить к написанию второй, продвинутой части?
И небольшое примечание. Статьи строятся на основании того, что у вас есть опыт и знания программирования на python.
По этой же причине показаны такие вещи как открытие и запуск в IDE.
IlyaBurdin
Листаем
Чтобы
Чтобы
В появившемся
Вручную
Синтаксисом
я хотел бы, чтобы в них было
minusd Автор
Всё исправил, спасибо!