Фонд золотых цитат: генерируйте стикеры из сообщений в Telegram
Рассказываем, как сделать стикер-бота без лишних телодвижений, и отдаем свое творение на тест.
Все началось с одной из учебных групп в Telegram. Студенты там очень любят делать стикеры из сообщений своего преподавателя. Я выяснил, что делаются они в полуавтоматическом режиме: сообщение пересылается в бота, который рисует «пузырек» сообщения, а результат пересылается в официального стикер-бота.
Схема рабочая, но напрашивается идея минимизировать количество пересылок. Тем более, что в Telegram существуют боты, создающие пользовательские стикерпаки. Концепт идеи прост: пользователь пересылает сообщение в диалог с ботом, бот создает стикер.
Чтобы было интереснее, введем дополнительные ограничения:
- никаких баз данных, даже встроенных;
- никаких промежуточных файлов, стараемся делать все в памяти.
Такой подход усложняет разработку бота, но значительно упрощает его эксплуатацию:
- вся информация хранится в Telegram, у бота нет данных — не нужно думать о резервном копировании;
- для запуска бота нужен только код и файл конфигурации;
- бот может быть запущен даже на Raspberry Pi.
Сервер с «малинкой» можно получить в Selectel в течение часа после заказа. Всего за 499 рублей в месяц.
→ Потестить на каникулах
Для разработки я выбрал язык Python версии 3.8. Сперва сделаем основу бота, которая получает сообщения и выводит доступную информацию.
Итак, регистрируем нового бота или используем старого. Все операции с ними производятся через официального BotFather. Для начала хватит идентификатора бота (username) и токена для API.
Представленный в статье код адаптирован для объяснения в контексте статьи. Ссылка на оригинальный исходный код будет в конце.Для Bot API уже есть обертка, названная python-telegram-bot. В статье используется версия 13.4.1. Создаем простой обработчик текстовых сообщений:
Создаем бота и регистрируем обработчик.
Теперь боту можно переслать любое сообщение, и он выведет в stdout данные, которые ему доступны.
Вывод обработчика без чувствительных данных:
В представленном выводе доступна следующая информация:
- forward_from — информация об авторе пересланного сообщения;
- text — текст пересланного сообщения.
Для того, чтобы нарисовать «пузырек» сообщения, не хватает лишь аватарки. Получаем ее парой отдельных вызовов:
Вызов get_user_profile_photos() возвращает двумерный массив записей типа File. Первое измерение задает количество аватарок у пользователя, но не больше limit. Второе измерение задает аватарку разных размеров. В нашем случае достаточно забрать первую попавшуюся картинку, но для оптимизации стоит сразу выбирать картинку подходящего разрешения.
Объект file имеет метод download_as_bytearray(), что позволяет загрузить аватарку в память без использования промежуточных файлов.
Теперь, когда есть необходимая информация, можно нарисовать «пузырек».
Пример созданного изображения
Для рисования используем библиотеку Pillow версии 8.4.0. Шрифт — OpenSans, такой же используется в официальных приложениях Telegram.
Мессенджер накладывает ограничение на стикеры: как минимум одна сторона должна быть размером 512 пикселей. Так как мы генерируем сообщение, то можно зафиксировать ширину, а высоту рассчитывать в зависимости от количества текста.
Функция textwrap.wrap() разбивает строку на массив строк, пытаясь сделать перенос по пробелам. Расчет высоты картинки прост:
- отступ от начала — BUBBLE_PADDING, в моем случае 10px;
- имя отправителя — font_height;
- сообщение — font_height * len(text);
- отступ до конца — BUBBLE_PADDING.
Если сообщение большое, то высота картинки может получиться больше 512 пикселей. В этом случае наши полномочия — лапки, выбрасываем исключение. Если размер меньше, то можем продолжать. Проверяем наличие аватарки у пользователя и адаптируем ее к нашему стикеру.
Теперь у нас есть сообщение и аватарка. Создаем «холст» и начинаем рисовать. Обязательно выбираем цветовой режим RGBA и делаем прозрачный (alpha = 0) основным цветом «холста».
Финальный штрих — сохранить изображение. Так как мы все держим в памяти, то сохраняем также в виртуальный байтовый поток.
Осталось совсем немного: загрузить стикер в Telegram и передать его пользователю.
Те, кто создавал собственные наборы, знают, что для всех операций со стикерами необходимо обращаться к боту Stickers. Однако, в Bot API есть набор вызовов для взаимодействия со стикерами, в том числе функция создания набора. Созданный ботом набор стикеров имеет следующие особенности:
- уникальное имя набора (используется в ссылках вида https://t.me/addstickers/<имя>) обязательно должно заканчиваться на _by_%BOT_USERNAME%;
- набор стикеров принадлежит пользователю и может быть отредактирован через бота Stickers;
- для управления набором стикеров через бота требуется его уникальное имя и идентификатор пользователя.
Как упоминалось ранее, бот должен работать без базы данных. Таким образом, уникальное имя набора должно быть вычисляемым. Самый простой способ — использовать идентификатор пользователя в имени набора. Однако это некорректно: любой пользователь набора стикеров может «вычислить» автора.
Имя бота в уникальном имени набора неявно используется для аутентификации действий бота. Так, зная идентификатор пользователя, произвести деструктивные действия с набором не получится.
Эта «особенность» исправляется хэшированием. Мне показалось подходящим использовать UUIDv5, который использует SHA-1 для хэширования. Правда, UUIDv5 не соответствует сразу двум ограничениям Telegram:
- может начинаться с цифры;
- имеет запрещенные символы — дефисы.
Первая проблема решается префиксом, а вторая — удалением запрещенных символов. Таким образом, UUIDv5 от идентификатора пользователя — отличное вычисляемое решение. А чтобы усложнить угадывание автора, можно добавить «соль» к идентификатору.
Теперь у нас все есть, создаем набор с первым стикером.
Если функция вернула True, то стикерпак создан. Если мы хотим добавить еще один стикер, то сперва набор нужно найти.
Стикеры добавляются в набор мгновенно, но у пользователей отображаются в течение нескольких часов. Наиболее оперативный способ обновить набор — удалить из сохраненных наборов и добавить заново.
В качестве ответа бот будет отправлять только что добавленный стикер, подтверждая, что он действительно загружен.
Вот и все, бот готов.
Конечно, это далеко не продуктовый вариант, так как Emoji не поддерживаются, существует ограничение на 120 стикеров на человека и совершенно нет кастомизации сообщений. Но для начала сойдет.
Еще один маленький шажок для автоматизации рутинных процессов.
Генерация стикеров — не самый популярный случай, но, если вдруг захочется автоматизировать, теперь вы знаете как. Для быстрого тестирования можете использовать моего бота: ohmyquotebot (если что, он не будет жить вечно).
Бот не отвечает на команду /start, так что не волнуйтесь и просто пересылайте ему сообщение, из которого хотите сделать стикер.
Как сделать стикеры в ТГ из сообщений
Стикеры в Telegram — это веселые и красочные изображения, которые можно использовать в чатах, группах и каналах. Их создание не является трудоемким процессом, и вы можете создавать свои стикеры прямо из сообщений в Telegram, используя несколько простых способов. В этом гайде мы рассмотрим различные способы создания стикеров в Telegram, включая:
- Создание стикеров из сообщений используя StickerizerBot
- Создание стикеров с телефона в Telegram
- Создание стикеров на iPhone в Telegram
- Создание стикеров из фото в Telegram
- Использование приложения Sticked для создания стикеров из любых изображений и текста.
Создание стикеров из сообщений используя StickerizerBot
StickerizerBot — это бот Telegram, который позволяет создавать стикеры напрямую в чате. Этот бот очень легко использовать, и вы можете создать собственные стикеры всего за несколько секунд. Вот как это сделать:
- Откройте любой чат, группу или ваш канал.
- Введите название бота @stickerizerbot с пробелом после него.
- Напишите любой текст и подождите, пока сформируется стикер.
- Нажмите на стикер, чтобы его отправить.
Создание стикеров с телефона в Telegram
Если вы хотите создать свои стикеры, то вам необходимо загрузить приложение для создания стикеров в Telegram на свой телефон. Для этого введите запрос «создание стикеров Telegram» или «telegram stickers» в поисковик магазина приложений на своем телефоне. Установите любое понравившееся приложение и следуйте инструкциям для создания своих стикеров.
Создание стикеров на iPhone в Telegram
Владельцы iPhone могут легко создавать свои собственные стикеры для Telegram прямо из приложения «Фото». Вот, как это сделать:
- Откройте нужную картинку на iPhone в приложении «Фото».
- Удерживайте палец на объекте до его отделения на изображении.
- Переключитесь на Telegram другим пальцем.
- Перетащите объект на поле ввода текста и отпустите палец.
- Бот распознает стикер и предложит добавить его в стикерпак.
Создание стикеров из фото в Telegram
Вы также можете создать стикеры, используя фото на вашем телефоне. Для этого необходимо:
- Выбрать картинки или фотографии, которые вы хотите использовать в качестве стикеров.
- Проверить, что изображения соответствуют требованиям Telegram (разрешение не выше 512х512 пикселей, формат png).
- Загрузите изображения в социальную сеть через Telegram бота для стикеров.
- Найдите и добавьте новый стикерпак в свои наборы.
Использование приложения Sticked для создания стикеров из любых изображений и текста
Sticked — это приложение для создания стикеров, которое позволяет вам создавать стикеры из любых изображений и текста. Вы можете создавать целые стикерпаки из фотографий своих друзей или домашних питомцев. Используя Sticked, вы можете создавать стикеры абсолютно бесплатно и легко делиться ими с другими пользователями Telegram.
Полезные советы и выводы
- Размер стикеров не должен превышать 512х512 пикселей и они должны быть в формате png.
- Если вы пользуетесь iPhone, то создание стикеров станет еще проще благодаря приложению «Фото».
- Если вы хотите создавать стикеры профессионального качества, используйте приложение Sticked.
- Используйте StickerizerBot для быстрого создания стикеров прямо в чате.
- Не забудьте проверить качество изображения перед созданием стикера.
- Создавайте свои уникальные стикеры, чтобы сделать чаты с друзьями или коллегами еще более веселыми и увлекательными.
Как создать стикеры в Телеграм через телефон
Далее нужно открыть «Photo & Picture Resizer» и найти созданное в предыдущем приложении фото в разделе «Мои файлы». После открытия фото в этом приложении, нажмите на «Изменить» и выберите «Размер изображения». Затем выбираем размер 512×512 пикселей и сохраняем результат. После этого нажимаем на кнопку «Сохранить изменения» и выбираем папку для сохранения измененного фото. Возвращаемся в приложение «Мой стикер Maker». Нажимаем на значок «+» в правом верхнем углу и выбираем «Загрузить из галереи». Находим созданное ранее фото в галерее и выбираем. Затем прикрепляем фото к стикерпаку и добавляем название. Нажимаем кнопку «Сохранить» и готово! Теперь вы можете использовать свои созданные стикеры в Телеграме.
Как сделать стикеры в Телеграме со своими фотками
Для того чтобы сделать стикеры в Телеграме с помощью своих фотографий, нужно выполнить несколько простых шагов.
Сначала нажмите на объект на фотографии, который вы хотите вырезать, и удерживайте палец на нем, пока он не выделится белым цветом по контуру. Затем, чтобы отделить этот объект от фона, зажмите его одним пальцем и слегка сдвиньте изображение в сторону.
После этого откройте Телеграм с помощью другого пальца и перетащите фотографию в окно ввода. Бот в Телеграме превратит этот объект в стикер.
Теперь вы можете использовать свой собственный стикер при общении с друзьями в Телеграме. Это отличный способ добавить свою индивидуальность и оригинальность в переписку.
Как создать стикеры в ДС на телефоне
Для создания собственных стикеров в Discord на телефоне можно воспользоваться следующей инструкцией:
- Откройте приложение Discord на своем телефоне и выполните вход в аккаунт.
- Перейдите в тот текстовый канал, в котором вы хотите использовать стикеры.
- Нажмите на символ смайла, который находится рядом с опцией GIF или просто на кнопку GIF, если таковая имеется.
- В появившемся окне выберите нужный стикер из предложенных вариантов и добавьте его к сообщению.
- При желании можно удерживать клавишу SHIFT и добавлять сразу несколько стикеров.
Теперь вы знаете, как создать стикеры в Discord на телефоне. Эта возможность позволит вам добавить индивидуальность и оригинальность в ваши сообщения и коммуникацию с другими участниками.
Как сделать свой стикеры на айфоне
В открывшемся меню выберите «Стикери», а затем коснитесь кнопки «Создать».
- Обрежьте изображение по желанию, а затем коснитесь кнопки «Готово».
- Выберите место для сохранения стикера: в альбоме «Стикеры» или в приложении «Фото».
- Введите имя для стикера и коснитесь кнопки «Готово».
- Теперь ваш стикер будет доступен в разделе «Стикеры» в приложении «Сообщения».
- Чтобы использовать стикер в чате, откройте приложение «Сообщения», выберите чат и коснитесь значка стикеров в нижнем левом углу клавиатуры.
- В разделе «Стикеры» выберите нужный стикер и отправьте его собеседнику.
Таким образом, вы можете легко создавать свои собственные стикеры на iPhone и использовать их для общения со своими друзьями и близкими.
StickerizerBot — это бот, который позволяет создавать стикеры из текста прямо в чате. Для этого нужно выбрать любой чат, группу или свой канал и ввести название бота — @stickerizerbot. Затем через пробел написать любой текст и подождать, пока бот сформирует соответствующий стикер. Далее, чтобы отправить стикер, достаточно нажать на него. В результате получается удобный способ создания персональных стикеров для использования в различных ситуациях. Это может быть использовано как для развлечения, так и для более серьезных целей — например, для создания визуальных инструкций или для общения в виртуальной командной работе. В целом, StickerizerBot это простой и удобный инструмент для создания стикеров в Telegram.
StickerizerBot — как создать стикеры из текста прямо в чате
Сегодня расскажем вам о боте, который создает стикеры из вашего текста — @StickerizerBot. Бот работает в инлайн режиме, а это значит, что его можно запустить только в чате.
Как пользоваться ботом
1. Выберите любой чат, группу или ваш канал и введите название бота @stickerizerbot.
2. Через пробел напишите любой текст и подождите пока сформируется стикер.
3. Нажмите на стикер, чтобы его отправить.
Также есть возможность изменить цвет текста и фон стикера. Ниже приведена таблица доступных форматов:
Для этого введите @StickerizerBot, затем код, который указан в таблице и текст. Например:
@stickerizerbot #43 привет, как дела?
В итоге мы получим вот такой стикер:
Используйте только один из доступных форматов кода, комбинировать их невозможно.
В Desktop версии Telegram бот может работать не совсем корректно и иногда не видно предпросмотр стикера. Но вы все равно можете нажать на пустое место, чтобы отправить стикер.
Подписывайтесь на канал Вам Телеграм — актуальные новости, полезные статьи и советы по работе с Telegram.