Грок, картина не влезает в телегу!
Недавно я рассказывал о том, как делал бота для телеги, который постит NASA Picture of the Day в канал. Сегодня захожу — картинки нет. Она должна быть ежедневно, но сегодня как-то не задалось.
Ну, надо разбираться. Лезу в логи (благо, Grok отлично настроил логирование) — и вижу, что картинку не пропускает именно Телеграм. Жалуется на её размеры. Это оказалось немного неожиданным, но, в принципе, проблема небольшая.
Поскольку идея этого проекта была в том, что его полностью пишет ИИ, то и решение этой проблемы я делегировал ему. Открываю вкладку с Grok’ом, кидаю ему ошибку "как есть" со stack trace'ом и буквально говорю, что словил ошибку — пусть анализирует и предлагает решение. Тут нужно уточнить, что это было написано в том же контекстном окне, в котором он мне выдал весь предыдущий код — иначе пришлось бы добавлять тексты классов, которые генерят и отправляют картинку в Телеграм.
Наш ИИ мгновенно оценил ситуацию, заглянул в доки ТГ, нашёл, что картинка не должна быть больше 10k × 10k пикселей, и предложил уменьшать её до вменяемого размера, если по одной из сторон она неадекватна.
Я говорю: мол, давай — ты предложил, тебе и карты в руки. И он выдаёт переделанный метод, который всё делает чётко: открывает картинку, ресайзит при необходимости, генерит QR-код, накладывает его на картинку и возвращает всё в лучшем виде.
Я посмотрел на это, немного поскрипел зубами и говорю: "Бро, давай подойдём с умом всё-таки. Соблюдём принцип единственной ответственности и разобьём метод на несколько поменьше — каждый будет решать свою конкретную задачу". Он, похоже, даже обрадовался такому подходу — выдал что-то в духе: "Так и надо было, отличная идея" и всё в таком духе.
Мгновенно переработал класс, выдал всё в лучшем виде: код отдельно, пояснения отдельно...
Почитал код — удивился, что не знал одну штуку. Когда раньше приходилось менять размер картинки, сохраняя соотношение сторон, я всегда писал свой метод, который высчитывает конечные размеры. А Grok заюзал метод из либы ImageSharp, который это делает сам. Причём ты ему задаёшь максимальную длину и ширину, а остальное он рассчитывает сам. Несложно, но крайне удобно!
Ну всё — деплой на сервак, и одной проблемой меньше.
Пока ИИ справлялся с ресайзом, а я смотрел на картинки, ко мне пришла мысль, что кое-чего не хватает — нормального описания. Причём в NASA API оно есть. Поэтому в следующей серии у меня такой план: тянуть из API описание, скармливать его агенту ChatGPT, который сделает красивый перевод на русский (ну или на испанский, кому что надо), и выкладывать картинку с понятным описанием.
Хочешь следить за развитием — подписывайся, спрашивай, комментируй. А если интересно, как я общаюсь с ИИ — могу выкладывать конкретные промпты.
Все исходники, как обычно, тут: https://github.com/migihajami/TelegramNasaBot
Мой ТГ-канал — тут: https://t.me/dotnet_nomad