Можно сделать такого телеграм бота?

Можно ли сделать бота, который делает скриншоты и скидывать в группу Телеграм? Нужен бот, который будет автоматически заходить на определённый сайт, делать фотографию, скидывать фото и текст и сразу же после этого в группе создавать опрос.

К примеру: появляется фотография, а под ней текст, а после создаётся опрос с нужными ответами на вопрос. Через 90 секунд опрос заканчивается и появляются итоги опроса.

Так же фотография только уже актуальная и текст (к примеру: люди проголосовали что цена пойдет вверх через 5 мин) и после этого, если цена пошла в вверх, бот скидывает актуальное фото, где видно, что цена пошла вверх, и скидывает итоги (на сколько пунктов цена ушла вверх или вниз), и пишет определенный текст. Если цена не пошла в ту сторону, куда проголосовали, бот скидывает так же фото и текст-перекрытие 2 мин в ту сторону, куда проголосовали.

И что бы так было 24/7

Если вы знаете как это сделать, можете сказать где взять источники для этой работы. Ищу уже несколько дней, не могу найти


Ответы (2 шт):

Автор решения: citn

Выбираешь язык - Python/Node.js -> для того, чтобы бот мог делать скриншоты используешь библиотеки Selenium(для питона) или Puppeteer(для Node.js) -> отправляешь через Telegram Bot API сообщения и фотографии -> вроде Телеграм поддерживает создание опросов через API, если не ошибаюсь метод sendpoll -> а для мониторинга цен можно использовать BeautifulSoup(питон) или Cheerio(Node.js) -> ну а после уже прописываешь логику, которая обрабатывает результаты опроса через n-ое время и, делающая скришоты+отправляющая их в зависимости результатов опроса

→ Ссылка
Автор решения: Kein Sandorson

Мой старый код, переделай под себя, ничего сложно не вижу:

import pytest
import asyncio
from seleniumbase import BaseCase
from PIL import Image
from io import BytesIO
from telegram import Bot

class TestLoginOut(BaseCase):
    
    # Помечаем тест меткой "smoke" (быстрый тест, проверяющий основную функциональность)
    @pytest.mark.smoke
    def test_avh_kz(self):
        # Получаем существующий цикл событий (event loop) для работы с асинхронными функциями
        loop = asyncio.get_event_loop()
        # Запускаем асинхронную функцию для выполнения теста
        loop.run_until_complete(self.test_avh_kz_async())

    # Асинхронная версия теста для работы с веб-сайтом
    async def test_avh_kz_async(self):
        try:
            # Открываем веб-страницу
            self.open("http://.......")
            # Пытаемся кликнуть на элемент с классом 'articles1'
            self.click('li.articles1')
        except:
            # В случае ошибки делаем скриншот и отправляем уведомление в Telegram
            screenshot = await self.take_screenshot()  # Получаем скриншот страницы
            await self.send_telegram_notification(
                token="324",  # Токен бота Telegram
                chat_id="34242",  # ID чата Telegram
                message="Комент",  # Сообщение с уведомлением
                screenshot=screenshot  # Прикрепляем скриншот к уведомлению
            )
            # Пробрасываем исключение для фиксации в отчете о тестировании
            raise

    # Асинхронная функция для получения скриншота страницы
    async def take_screenshot(self):
        # Получаем скриншот в формате PNG
        screenshot = self.driver.get_screenshot_as_png()
        # Открываем изображение с помощью библиотеки Pillow
        return Image.open(BytesIO(screenshot))

    # Асинхронная функция для отправки уведомления в Telegram с прикрепленным скриншотом
    async def send_telegram_notification(self, token, chat_id, message, screenshot):
        bot = Bot(token=token)  # Инициализация бота с помощью токена
        screenshot_buffer = BytesIO()  # Буфер для хранения изображения
        screenshot.save(screenshot_buffer, format="PNG")  # Сохраняем скриншот в буфер в формате PNG
        screenshot_buffer.seek(0)  # Ставим указатель буфера в начало для чтения
        # Отправляем фотографию с сообщением в указанный чат Telegram
        await bot.send_photo(chat_id=chat_id, photo=screenshot_buffer, caption=message)
→ Ссылка