Простой бот, который делает картинки с Лебедевым по шаблону. Использует API основы или Telegram для двух разных версий бота.
Программа работает на Python 3.6+ с использованием Pillow для создания картинки.
Для запуска скрипта сначала необходимо установить необходимые библиотеки:
python3 -m pip install -r requirements.txt
Также, для авторизации необходимы токены Основы (Telegram) и Imgur. Они должны находиться в файле auth.env (исключен из системы контроля версий). Формат файла указан ниже.
TJ_TOKEN=XXXXXXX
IMGUR_CLIENT=XXXXXX
TG_TOKEN=XXXXXXXX
Далее инструкции разные в зависимости от платформы, на которой находится бот.
Запусакете lebedev_tj.py. Всё.
Во время первого запуска скрипт создаст файл конфигурации, чтобы не заспамить все прошлые комментарии, где вас упоминали.
Для работы бота на Telegram необходим сервер с публичным IP и действительным сертификатом (требование Telegram, судя по всему).
Чтобы быстро запустить обе части бота, можно использовать docker/docker-compose.yaml, который построит два Docker-образа, сразу полностью запускающие бота. Обе части можно запускать и раздельно, пользуясь командами,указанными в Dockerfile для обоих частей.
Скрипт каждые 10 секунд проверяет все упоминания себя через систему уведомлений TJ. Из-за того, что система прочтения уведомлений работает нестабильно (вообще не работает), скрипт создает файл config.json, где хранит ID последнего прочитанного уведомления. Во время первого запуска бот пропускает все упоминания, так как API Основы может вернуть все упоминания с самого создания аккаунта (или введения упоминаний, смотря что было раньше).
Функция получения уведомлений возвращает список упоминаний, с которыми уже можно работать. Скрипт создает картинку с помощью PIL в файле mememaker.py, и загружает ее на Imgur с анонимным токеном. API Основы отказалось принимать картинки через /uploader/upload и постоянно возвращало 400, из-за чего и был вставлен этот костыль.
Бот состоит из двух частей:
- Сервер, который генерирует картинки и хранит их в кэше. Путь кэша по умолчанию указан в docker/Dockerfile-tgserver, его можно спокойно менять.
- Клиент Telegram, который принимает сообщения и отвечает картинкой со ссылкой на сервер.
Такая архитектура была выбрана для ускорения времени отклика программы и для соответствия требованиям API Telegram.
Сначала отправляется запрос на /generate с JSON-параметром phrase, сервер при этом создает картинку и сохраняет её в кэше. При последующих обращениях файлы картинок запрашиваются по MD5 хэшу (добавить соль?) через /img.
- Аргументы командной строки
- Более гибкая регулярка
- Еще больше обработки ошибок
- Более простой Docker
- Логи
- Подчистка структуры и импортов
- Подчистка кода класса Бота TJ