Бот для Telegram
В ответ на присланный url делает скриншот сайта, сохраняет его на диск (volume) и присылает в ответном сообщении
Может показать информацию WHOIS и GeoIP для сайта
Запускается в контейнере Docker
Для работы используются контейнеры Redis, PostgreSQL, Rabbitmq (для очереди задач)
- файл
.env.exampleпереименовать в.env - в
.envпрописать токен своего бота. Если его нет - следуйте инструкции - создать контейнеры командой
make build(если они еще не созданы) - запустите контейнеры командной
make run(запуск контейнеров с ботом, БД, Redis) - для остановки контейнеров используйте команду
make stop
- файл
.env.local.exampleпереименовать в.env.local - в
.env.localпрописать токен своего бота. Если его нет - следуйте инструкции - создать контейнеры командой
make build-dev(если они еще не созданы) - запустите контейнеры командной
make run-dev(запуск контейнеров с ботом, БД, Redis) - установите зависимости
make install - установите зависимости для playwright -
playwright install --with-deps chromium - запустите бота
make bot-run - запустите воркер (если нужно)
make worker-run - для остановки контейнеров используйте команду
make stop-dev
Настройки бота задаются в .env (при запуске локально - .env.local)
BOT_TOKEN- токен ботаBOT_DEBUG- (True/False) режим отладкиBOT_PAGE_TIMEOUT- время в миллисекундах для ожидания загрузки сайтаBOT_DROP_UPDATES_ON_START- (True/False) отбрасывать ли старые сообщения в момент запуска ботаTELEGRAPH_TIMEOUT- время в секундах ожидания при загрузке файла картинки на сервер TelegraphBOT_WORKER_USED- (True/False) использовать ли воркеры. Если нет, основной бот будет делать сам всю работуBOT_MAX_TASKS- количество одновременно открываемых страниц одним ботом/воркером
/start- выводит информацию о боте/stat- выводит статистику запросов к боту - за день и текущий месяц
Бот использует библиотеку aiogram
Для получения скриншотов страниц используется библиотека playwrigth
Скриншоты запрошенных сайтов сохраняются в директорию по умолчанию /data (можно изменить в config.py)
Скриншоты загружаются на telegra.ph и в ответном сообщении скидывается ссылка на них.
Поддерживается два языка сообщений - русский и английский. Текст сообщений задан в locales.py
Бот запоминает выбранный язык пользователя и сохраняет в базу.
Чтобы не дергать каждый раз базу - используется кэш Redis. Для одного экземпляра бота решение избыточное,
но при работе с воркерами будет полезным.
Воркер - отдельный экземпляр (или экземпляры) бота, который получает задание от основного бота, делает скриншот,
сохраняет данные на диск, и отправляет ответ в чат
Для работы бота в чатах необходимо, чтобы бот мог читать сообщения в чате. Для этого
Перейдите в BotFather, напишите команду /mybots и выберите нужного бота.
Перейдите в Bot Settings → Group Privacy.
Выберите Turn off.
Должна появиться фраза Privacy mode is disabled for Bot.
- Тесты! - нет ни одного:(
- получение скриншота на некоторых сайтах просто падает
- некоторые сайты (ya.ru) принимают за робота (так оно и есть) и требуют решать капчу