У нас в беклоге давно висела задача - показывать аватарки пользователей, групп и каналов в личном кабинете и на странице победы. Казалось бы мелочь, но мелочь которая всегда рябила мне глаз.

Вы наверняка знаете эти стандартные аватарки Telegram - первая буква имени на красивом градиентном фоне. Но когда запрашиваешь их через API - в ответ прилетает null. Telegram просто не хранит их на серверах, клиент приложение рисует их сам.

Поэтому мы давно сделали свои простые заглушки и жили с ними. Но меня это всегда беспокоило - выглядело не как Telegram, значит некрасиво). Вчера наконец разобрался как это работает - реализацию еще не сделали, но хотя бы стало понятно что делать.

Знаю что на канале есть билдеры TMA - эта подсказка может сэкономить вам время.

У Telegram открытый исходный код и в нем буквально захардкожено все что нужно: 7 градиентов и одна формула:
color_index = abs(peer_id) % 7
Берешь peer_id, делишь на 7, берешь остаток - получаешь индекс цвета от 0 до 6:
0 - 🔴 красно-розовый
1 - 🟠 оранжево-жёлтый
2 - 🟣 фиолетово-голубой
3 - 🟢 зелёный
4 - 🩵 бирюзовый
5 - 🔵 синий
6 - 🩷 фиолетово-розовый


Еще один нюанс: у супергрупп/каналов Bot API отдает chat_id с префиксом -100, а цвет нужно считать от реального peer_id без него. Без этого цвет будет не тот что видит пользователь в приложении.

〰️〰️〰️
Если у вас нет аватарки - отметьтесь в комментариях 😄