> ## Content Index
> Fetch the complete content index at: https://www.rozhkov.me/llms.txt
> Use this file to discover other available public pages before exploring further.

# Олімпіадники strikes back
- URL: https://www.rozhkov.me/olympic-nerds-strikes-back/
- Published: 2024-05-29T06:24:00.000Z
- Updated: 2024-05-30T18:15:48.000Z
- Author: Vova Rozhkov
- Tags: проєкти

Щодня [@Donate1024Bot](https://t.me/Donate1024Bot) надсилає своїм підписникам звіти по завершених зборах. Це посилання на соцмедіа, відео з фото та супровідний текст.

Деколи ті звіти не відправляються через костурбатість [Telegram Bot API](https://core.telegram.org/bots/api):

- Текст до картинок не може бути довшим ніж 1024 символи. Щоб запобігти цьому обмеженню я додав у себе в адмінці валідацію на розмір тексту
- Файлів з медіа не може бути більше ніж 10\. Щоб уникнути цієї помилки я просто брав перших 10 файлів, якщо випадково в адмінці додавав більше при створенні звіту

І найнапряжніше це `document can't be mixed with other media types`. Олімпіадники Дурова не змогли зробити одночасну відправку різних типів файлів. Найчастіше у мене ця помилка падає коли випадково разом з JPEG файлами додав PNG. Також неможливо відправити PDF або щось інше разом з картинками.

В чому проблема це зробити для мене загадка. Хоче користувач додати одним повідомленням кілька картинок різних форматів, відео, та бінарний файл — ну покажи замість прев'юшки іконку файлу і все.

😡А найцікавіше що ***джипег та відео можна відправити одним повідомленням***! Чому не можна одночасно відправити PNG та JPEG?

Signal до речі, теж цим страждає. Тупе обмеження яке програмісти придумали напевне щоб спростити собі життя.

Рік я ігнорував цю проблему і коли телеграм не хотів відправляти мій звіт користувачам, то це попадало в [Sentry](https://sentry.io/), а далі я вже вручну дивився що не так і переробляв звіт.

Але врешті мені воно надоїло і я додав «тестування» звіту: при його створенні відразу відправляти у приватний чат. Таким чином я точно знатиму що звіт валідний та буде належним чином доставлений користувачам.

Інтеграційне тестування на продакшені👊