Создание и деплой готового Discord-бота на Python с базой данных SQlite3
Данный бот предназначен для модерации серверов, взаимодействия с другими участниками сервера, взаимодействие с репутацией того или иного участника и многого другого.
Функциональность бота
- Модерация
- Взаимодействия
- Развлечения
- Экономика
- Репутация
- Другое
После написания кода бота, мы развернем его на облаке Amvera буквально за пару минут и три команды в IDE, используя GitOps-подход (или перетянув файлы в интерфейсе, если вам не знаком Git). Это позволит осуществлять обновления проекта существенно проще, чем при использовании классического VPS.
Создание бота
Для создания бота нам нужно зайти на сайт разработчиков Discord. Нажимаем New application. Вводим имя вашего бота, подтверждаем согласие и нажимаем Create.
После создания переходим во вкладку Bot, листаем чуть ниже и включаем Intents.
Теперь нам нужно добавить бота на сервер, для этого нам нужна ссылка авторизации. Переходим во вкладку OAuth2. В разделе SCOPES выбираем bot.
далее нам нужно выбрать разрешения, листаем ещё вниз и выбираем Administrator.
Теперь мы можем получить ссылку для авторизации бота на сервере. Листаем ещё вниз и копируем ссылку.
Копируем ссылку и вставляем в браузер
Скопированную ссылку нужно вставить в поисковую строку браузера. Теперь мы можем добавить бота на сервер.
После добавления бота мы можем перейти к разборке кода бота.
Исходный код будет в конце статьи.
Примерно так выглядит ваша папка с ботом:
Конечно, присутствует лишнее, но как получилось.
Пройдёмся сверху вниз.
Папка cogs:
В ней присутствуют все команды бота, название файла - то, что находится в файле, коги очень удобны при разработке чат-ботов.
- Модерация
Доступные команды: ban unban kick mute unmute slowmode clear
Примеры использования команд:
Все команды работают, подойдёт для больших серверов, модерировать чат.
2. Взаимодействия
Доступные команды: bite blush bonk bully cringe cry custom dance eat handhold happy highfive hug kiss lick pat poke slap smile smug wave wink
Их очень много, это грубо говоря “РП” команды.Пример использования:
Вывод:
3. Развлечения
Доступные команды: ben animals coin nsfw
Мало команд, но зато интересные.
Пример использования:
Вывод:
4. Экономика
Доступные команды: balance withdraw deposit bet work bonus pay coin_eco leaderboard
Пример использования
Вывод:
5. Репутация
Доступные команды: reputation-stats reputation-manage reputation-leaderboard
Лично для меня классная функция, которая показывает репутацию каждого участника сервера)
Пример использования:
Вывод:
6. Другое
Доступные команды: say info avatar report text-symbol
Примеры использования:
Вывод:
Дальше идёт файл `config.py`:
Токен, которые мы получили выше, вставим на хостинг чуть позже.Строчка "color" отвечает за цвет embed'a сообщений бота. (описал в комментариях всё выше).
В "avatar_bot" мы вставляем ссылку на аватарку бота, "support_server" вставляем ссылку на сервер поддержки бота, "add_bot" вставляем ссылку на добавление бота на сервер (все эти строчки в команде /help and /info если я не ошибаюсь).
Следующий файл - main.py. Основной файл, который отвечает за пару команд и за включение самого бота, в принципе там не о чем говорить, но покажу запуск бота:
Файл requirements.txt - это файл с зависимостями, т.е. с библиотеками, которые нам будут нужны для деплоя на хостинг.
Файл start.bat отвечает за включение бота. Запускаете данный файл (если вы ранее скачали уже python) и вуаля! Вот так выглядит данный файл:
Бот запущен! Поздравляю 🥳
Подготовка к деплою на удаленный сервер
Деплой мы произведем в облаке Amvera.
Встроенный функционал CI/CD Amvera позволит нам накатывать обновления простой командой git push amvera master и максимально упростить процесс развертывания в сравнении с классической VPS.
Но перед деплоем нам необходимо создать конфигурационный файл amvera.yml и файл с зависимостями requirements.txt
Файл amvera.yaml
Сгенерировать yaml файл можно прямо во флоу создания проекта в Amvera.
Файл можно скачать и добавить в репозиторий. На сайте он загрузится сам.
Вот так выглядит файл конфигурации (рекомендую создать через сайт, на случай учета изменений в структуре файла в будущем):
Следует обратить внимание, что порт в конфигурации должен соответствовать порту в коде. Это поможет избежать 502 ошибки.
Примечание: Если вы используете SQLite3, то сохраняйте ее в постоянном хранилище /data. Это позволит избежать ее утери при пересборке проекта.
Файл requirements.txt
Для его создания, используем командную строку.
Открываем ее и вводим команду pip freeze > requirements.txt
Переходим к папке которая была указана в командной строке и забираем оттуда файл с зависимостями.
Примечание: в файл будут записаны все библиотеки которые у вас установлены, будьте осторожнее и не загружайте лишние библиотеки в проект. Лучше составить данный файл руками. Более подробная инструкция создания файла есть по ссылке.
Деплой через интерфейс
- Нажимаем на кнопку создать проект.
- Выбираем тип сервиса - приложение, вводим название проекта и выбираем тарифный план.
- Нажимаем далее.
Выбираем файлы которые нужно закинуть в проект и перемещаем их в это окошко.
На следующем шаге добавим все токены в соответствующие переменные. Создадим секрет - токен нашего бот в bot.run() мы указали просто слово TOKEN, теперь нужно добавить переменную как секрет. Для этого заходим во вкладку переменные в проекте и нажимаем создать секрет. В поле название вводим нашу переменную TOKEN, а в поле значение, вводим сам токен.
Нажимаем на кнопку далее. У нас появится вот это окно.
Тут ничего делать не надо так как мы закинули файл amvera.yaml и все настраивается автоматически. Нажимаем “Завершить”
Если вы сделали все правильно то ваше приложение будет запущено.
Развертывание альтернативным способом, используя git push amvera master
Деплой через git push является альтернативным способом развернуть приложение. Он чуть сложнее, но в дальнейшем позволит обновлять наш проект тремя командами в терминале не переходя на сайт облака, что намного удобнее.
Создаем папку и закидываем туда все файлы. Открываем командную строку, и переходим в нашу папку с помощью команды cd “путь к папке”. Создаем репозиторий с помощью команды git init. Заходим в Amvera и создаем проект.
На данном этапе мы выбираем метод “Через Git”.
Теперь нам нужно подключиться к существующему репозиторию, для этого копируем команду ниже и вставляем в командную строку.
После чего вводим команды для добавления файлов и создания коммита:
Теперь нам остается запушить все файлы и сборка начнется автоматически. Для этого вводим команду:
Если вы все сделали правильно, то после сборки начнется запуск. Если же выдает ошибку, полезно ознакомиться с Логом сборки и Логом приложения и посмотреть частые ошибки в документации сервиса.
Приложение запущено, а значит наш бот должен появиться в сети.
В этой статье мы поговорили о том как сделать и задеплоить готового python бота в Discord и развернули его в облаке Amvera, используя GitOps-подход.
Данный пример содержит самую базовую функциональность, но надеюсь, даст первое представление о работе discord-ботов.