Создание и деплой готового Discord-бота на Python с базой данных SQlite3

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

Функциональность бота

  1. Модерация
  2. Взаимодействия
  3. Развлечения
  4. Экономика
  5. Репутация
  6. Другое
Пример функциональности бота
Пример функциональности бота

После написания кода бота, мы развернем его на облаке Amvera буквально за пару минут и три команды в IDE, используя GitOps-подход (или перетянув файлы в интерфейсе, если вам не знаком Git). Это позволит осуществлять обновления проекта существенно проще, чем при использовании классического VPS.

Создание бота

Для создания бота нам нужно зайти на сайт разработчиков Discord. Нажимаем New application. Вводим имя вашего бота, подтверждаем согласие и нажимаем Create.

Создание бота в Discord 
Создание бота в Discord 

После создания переходим во вкладку Bot, листаем чуть ниже и включаем Intents.

Включение Intents 
Включение Intents 

Теперь нам нужно добавить бота на сервер, для этого нам нужна ссылка авторизации. Переходим во вкладку OAuth2. В разделе SCOPES выбираем bot.

Создание и деплой готового Discord-бота на Python с базой данных SQlite3

далее нам нужно выбрать разрешения, листаем ещё вниз и выбираем Administrator.

Создание и деплой готового Discord-бота на Python с базой данных SQlite3

Теперь мы можем получить ссылку для авторизации бота на сервере. Листаем ещё вниз и копируем ссылку.

Создание и деплой готового Discord-бота на Python с базой данных SQlite3

Копируем ссылку и вставляем в браузер

Скопированную ссылку нужно вставить в поисковую строку браузера. Теперь мы можем добавить бота на сервер.

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

После добавления бота мы можем перейти к разборке кода бота.

Исходный код будет в конце статьи.

Примерно так выглядит ваша папка с ботом:

Создание и деплой готового Discord-бота на Python с базой данных SQlite3

Конечно, присутствует лишнее, но как получилось.

Пройдёмся сверху вниз.

Папка cogs:

Создание и деплой готового Discord-бота на Python с базой данных SQlite3

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

  1. Модерация

Доступные команды: ban unban kick mute unmute slowmode clear

Примеры использования команд:

Создание и деплой готового Discord-бота на Python с базой данных SQlite3

Все команды работают, подойдёт для больших серверов, модерировать чат.

2. Взаимодействия

Доступные команды: bite blush bonk bully cringe cry custom dance eat handhold happy highfive hug kiss lick pat poke slap smile smug wave wink

Их очень много, это грубо говоря “РП” команды.Пример использования:

Создание и деплой готового Discord-бота на Python с базой данных SQlite3

Вывод:

Создание и деплой готового Discord-бота на Python с базой данных SQlite3

3. Развлечения

Доступные команды: ben animals coin nsfw

Мало команд, но зато интересные.

Пример использования:

Создание и деплой готового Discord-бота на Python с базой данных SQlite3

Вывод:

Создание и деплой готового Discord-бота на Python с базой данных SQlite3

4. Экономика

Доступные команды: balance withdraw deposit bet work bonus pay coin_eco leaderboard

Пример использования

Создание и деплой готового Discord-бота на Python с базой данных SQlite3

Вывод:

Создание и деплой готового Discord-бота на Python с базой данных SQlite3
Создание и деплой готового Discord-бота на Python с базой данных SQlite3

5. Репутация

Доступные команды: reputation-stats reputation-manage reputation-leaderboard

Лично для меня классная функция, которая показывает репутацию каждого участника сервера)

Пример использования:

Создание и деплой готового Discord-бота на Python с базой данных SQlite3
Создание и деплой готового Discord-бота на Python с базой данных SQlite3

Вывод:

Создание и деплой готового Discord-бота на Python с базой данных SQlite3
Создание и деплой готового Discord-бота на Python с базой данных SQlite3

6. Другое

Доступные команды: say info avatar report text-symbol

Примеры использования:

Создание и деплой готового Discord-бота на Python с базой данных SQlite3

Вывод:

Создание и деплой готового Discord-бота на Python с базой данных SQlite3

Дальше идёт файл `config.py`:

settings = { 'color': 0x95c4fc, # вот тут цвет ембеда 'avatar_bot': 'https://discord.com/', # вот тут ссылка аватарки 'support_server': 'https://discord.com/', # вот тут ссылка на сервер поддержки 'add_bot': 'https://discord.com/', # вот тут ссылка на добавление бота 'emoji_money': '💰' # вот тут эмодзи экономики }

Токен, которые мы получили выше, вставим на хостинг чуть позже.Строчка "color" отвечает за цвет embed'a сообщений бота. (описал в комментариях всё выше).

В "avatar_bot" мы вставляем ссылку на аватарку бота, "support_server" вставляем ссылку на сервер поддержки бота, "add_bot" вставляем ссылку на добавление бота на сервер (все эти строчки в команде /help and /info если я не ошибаюсь).

Следующий файл - main.py. Основной файл, который отвечает за пару команд и за включение самого бота, в принципе там не о чем говорить, но покажу запуск бота:

import disnake from disnake.ext import commands from config import settings @bot.event async def on_ready(): print('Я готов к полёту! От: {0.user}'.format(bot)) bot.run(os.environ["TOKEN"]) # сам токен на хостинге в переменной

Файл requirements.txt - это файл с зависимостями, т.е. с библиотеками, которые нам будут нужны для деплоя на хостинг.

Файл start.bat отвечает за включение бота. Запускаете данный файл (если вы ранее скачали уже python) и вуаля! Вот так выглядит данный файл:

@echo off python main.py pause

Бот запущен! Поздравляю 🥳

Подготовка к деплою на удаленный сервер

Деплой мы произведем в облаке Amvera.

Встроенный функционал CI/CD Amvera позволит нам накатывать обновления простой командой git push amvera master и максимально упростить процесс развертывания в сравнении с классической VPS.

Но перед деплоем нам необходимо создать конфигурационный файл amvera.yml и файл с зависимостями requirements.txt

Файл amvera.yaml

Сгенерировать yaml файл можно прямо во флоу создания проекта в Amvera.

Создание и деплой готового Discord-бота на Python с базой данных SQlite3

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

Вот так выглядит файл конфигурации (рекомендую создать через сайт, на случай учета изменений в структуре файла в будущем):

meta: environment: python toolchain: name: pip version: 3.10 build: requirementsPath: requirements.txt run: scriptName: main.py persistenceMount: /data containerPort: 80

Следует обратить внимание, что порт в конфигурации должен соответствовать порту в коде. Это поможет избежать 502 ошибки.

Примечание: Если вы используете SQLite3, то сохраняйте ее в постоянном хранилище /data. Это позволит избежать ее утери при пересборке проекта.

Файл requirements.txt

Для его создания, используем командную строку.

Открываем ее и вводим команду pip freeze > requirements.txt

Переходим к папке которая была указана в командной строке и забираем оттуда файл с зависимостями.

Примечание: в файл будут записаны все библиотеки которые у вас установлены, будьте осторожнее и не загружайте лишние библиотеки в проект. Лучше составить данный файл руками. Более подробная инструкция создания файла есть по ссылке.

Деплой через интерфейс

  1. Нажимаем на кнопку создать проект.
  2. Выбираем тип сервиса - приложение, вводим название проекта и выбираем тарифный план.
  3. Нажимаем далее.
Создание и деплой готового Discord-бота на Python с базой данных SQlite3

Выбираем файлы которые нужно закинуть в проект и перемещаем их в это окошко.

Создание и деплой готового Discord-бота на Python с базой данных SQlite3

На следующем шаге добавим все токены в соответствующие переменные. Создадим секрет - токен нашего бот в bot.run() мы указали просто слово TOKEN, теперь нужно добавить переменную как секрет. Для этого заходим во вкладку переменные в проекте и нажимаем создать секрет. В поле название вводим нашу переменную TOKEN, а в поле значение, вводим сам токен.

Создание и деплой готового Discord-бота на Python с базой данных SQlite3

Нажимаем на кнопку далее. У нас появится вот это окно.

Создание и деплой готового Discord-бота на Python с базой данных SQlite3

Тут ничего делать не надо так как мы закинули файл amvera.yaml и все настраивается автоматически. Нажимаем “Завершить”

Если вы сделали все правильно то ваше приложение будет запущено.

Развертывание альтернативным способом, используя git push amvera master

Деплой через git push является альтернативным способом развернуть приложение. Он чуть сложнее, но в дальнейшем позволит обновлять наш проект тремя командами в терминале не переходя на сайт облака, что намного удобнее.

Создаем папку и закидываем туда все файлы. Открываем командную строку, и переходим в нашу папку с помощью команды cd “путь к папке”. Создаем репозиторий с помощью команды git init. Заходим в Amvera и создаем проект.

На данном этапе мы выбираем метод “Через Git”.

Создание и деплой готового Discord-бота на Python с базой данных SQlite3

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

Создание и деплой готового Discord-бота на Python с базой данных SQlite3

После чего вводим команды для добавления файлов и создания коммита:

git add . git commit -m "initial commit"

Теперь нам остается запушить все файлы и сборка начнется автоматически. Для этого вводим команду:

git push amvera master

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

Приложение запущено, а значит наш бот должен появиться в сети.

Создание и деплой готового Discord-бота на Python с базой данных SQlite3

В этой статье мы поговорили о том как сделать и задеплоить готового python бота в Discord и развернули его в облаке Amvera, используя GitOps-подход.

Данный пример содержит самую базовую функциональность, но надеюсь, даст первое представление о работе discord-ботов.

4 комментария