Найти в Дзене
Fake programmer

Запуск проекта бот "Таро" для telegram.

Другие статьи серии:

1) Описание проекта

2) Разбор функционала

3) Исходный код

Пришло время разобраться как запускать нашего бота. Для этого была выбрана система автоматизации развёртывания docker. Скачать и установить его можно с официального сайта бесплатно.
Перед запуском, нам надо определиться какой gpt адаптер мы будем использовать (проще говоря к какой нейросети бот будет обращаться за гаданием). В текущей реализации есть 3 варианта

1) MockGptApi - тестовая заглушка, она просто отправляет в чат сам промпт и карты которые выпали при гадании.

2) ChatGptApi - адаптер к ChatGpt, в тестовом варианте api запросов очень немного, с оплатой и регистрацией есть санкционные сложности, поэтому использовал я его совсем немного, просто чтобы проверить работает ли.

3) GigaChatApi - сберовская нейронка, тут все проще, регаемся, получаем api ключ и токены для бесплатных запросов, настройки вносим в appsettings.json (все настройки описаны в первой статье цикла про таро бота).

Блок настроек gigachat api в appsettings.json
Блок настроек gigachat api в appsettings.json

В файле Program.cs нам нужно подменить реализацию IGptModelApi на нужный нам адаптер нейронки.

Регистрация сервиса для общения с gpt
Регистрация сервиса для общения с gpt

Затем нам необходимо заполнить в настройках токен доступа к телеграм апи (есть куча туториалов по общению с bot-father, я думаю, что вы справитесь)

Блок настроек telegram api в appsettings.json
Блок настроек telegram api в appsettings.json

Для того чтоб запустить бота в докере нам нужно сначала собрать образ нашей программы (те кто пользовались софтом, чтоб пиратить диски с играми в стародавние времена, понимают о чем речь, остальные прямо так и гуглите “образ”, про докер куча статей, разобраться в основных-основах не составит труда, я уверен). Для сборки образа мы используем Dockerfile, в нем описано как и что должно добавляться в образ нашей программы.

Dockerfile
Dockerfile

Из интересного в нашем файле только копирование сертификатов. Они нужны для того чтоб общаться с gigachat’oм, вот ссылка на документацию, где описано почему они необходимы. В остальном dockerfile стандартный.

Для того чтоб в образ бота скопировалось не только приложение, но и его данные (картинки карт и файлы настроек) мы добавляем в настройках проекта бота <ItemGroup> которая говорит, что после сборки в директорию с артефактами сборки надо копировать и данные, чтоб докер собрал все это в образ.

Настройки и зависимости Taro-bot.csproj
Настройки и зависимости Taro-bot.csproj

Сборку образа проводим следующим образом:

1) Запускаем docker

2) Открываем терминал в папке с решением бота (там где лежит Dockerfile)

3) В терминале выполняем команды docker build -t taro-bot-image .

После этого в ui клиента docker во вкладке Images у вас должен появится образ нашего приложения бота.

Вкладка Images в docker desktop
Вкладка Images в docker desktop

Для запуска бота, нам необходима запущенная база данных. Ее образ мы возьмем уже готовым.
Для запуска сразу нескольких контейнеров (контейнер это запущенный экземпляр образа), мы будем использовать
docker compose. Вот файл docker-compose.yaml в котором мы описываем что именно нам надо запустить:

docker-compose.yaml
docker-compose.yaml

Здесь мы описываем запуск нашего taro-bot-image, вместе с ним запускаем контейнер с mongo:6.0, контейнер при запуске выполняет скрипт mongo-init.js (он создает базу данных mainDb и пользователя admin для нее), также мы устанавливаем username и password для управления подключением к БД.

Переходим в наш терминал и выполняем команду docker-compose up -d

Результат должен быть таким:

Терминал
Терминал

А в ui докера мы сможем увидеть наши запущенные контейнеры:

Вкладка Containers в docker desktop
Вкладка Containers в docker desktop

Переходите в бота и начинаете диалог 🙃

Внешний вид стартового меню бота
Внешний вид стартового меню бота

Следующим постом я выложу исходники бота на boosty, чтоб вы могли использовать их по своему усмотрению 😎

В комментариях можем обсудить добавление нового функционала к боту, в частности хочу добавить адаптер к gpt api https://chat.deepseek.com/ и добавить админам возможности рассылать посты пользователям бота.

Удачи, добычи! 😀