Нормальная инструкция по созданию стикеров-информеров

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

Собственно, что я и сделал. Долго думать над темой мне было лениво, так что я взял самый тупой вариант — погоду. Ну и сделал стикеры, а потом забыл про них на месяц.

Как видите, я дизайнер от бога.

Пользуйтесь: ссылка для тех, у кого заблокирован Telegram.

Спустя месяц мне начали приходить просьбы добавить разные другие города, и я решил — вот она, популярность (на самом деле нет). Я подумал, что вместо того чтобы самому добавлять города, пусть люди сами делают себе такие модные стикеры.

Итак, собственно, инструкция:

Этап 0. Придумать, о чём вы хотите информировать людей.

Этап 1. Сделать бота в Telegram (про это уже был миллион статей, подробнее почитать можно, например, на «Хабре»).

Этап 2. Создать от имени бота свой стикерпак с первым стикером путём отправки простейшего запроса:

curl \ -F "name=myFirstStickerPack_by_YourBotName" \ -F "title=Stikerpack name" \ -F "emojis=❤️" \ -F "user_id=YourUserId" \ -F "png_sticker=@/path/to/FirstSticker \ https://api.telegram.org/bot<:botSecret>/createNewStickerSet

Тут возникают первые сложности:

Во-первых, где взять свой User ID: идём в поиск Telegram и ищем бота, который отвечает вашим ID (например @userid_bot).

Во-вторых, как загрузить картинку: загрузите её к себе на сервер и отдавайте в Telegram просто её адрес в интернетах.

В-третьих, Telegram говорит, что ваш запрос не секьюрный: мессенджер просит, чтобы у вас был SSL и вот это всё. Решение очевидно — выполнять запросы с адреса, на котором есть SSL, а не локально.

Этап 3. Добавляем свои стикеры.

К этому моменту вы уже должны уметь генерировать стикеры, которые вы будете загружать, сделать это можно на любом языке.

Всё практически аналогично предыдущему запросу, за исключением того, что это другой запрос и другие данные:

curl \ -F "name=myFirstStickerPack_by_YourBotName" \ -F "userid=YouUserId" \ -F "emojis=❤️" \ -F "png_sticker=@/path/to/FirstSticker \ https://api.telegram.org/bot<:botSecret>/addstickertoset

Поздравлю, вы восхитительны. Но что дальше?

Этап 4. Обновляем стикеры.

Чтобы обновить стикер, нужно удалить старый. Я делаю это не самым оптимальным путём, так как не хочу хранить на сервере промежуточную информацию о стикерах (читать как: мне лень было поднимать базы данных).

Поэтому получаем список стикеров в стикерпаке запросом.

curl \ -F "name=myFirstStickerPack_by_YourBotName" \ https://api.telegram.org/bot<:botSecret>/getStickerSet

Находим в нём стикер, который вы хотите обновить, по его эмодзи,
берём его file_id и затем удаляем путём отправки запроса:

curl \ -F "sticker=file_id" \ https://api.telegram.org/bot<:botSecret>/deleteStickerFromSet

А теперь просто отправляем новый, используя запрос из третьего этапа. Обратите внимание, если вы передаёте URL с адресом картинки, а не грузите её напрямую, то он каждый раз должен быть уникальным, так как Telegram кэширует данные.

Этап 5. Поздравляю, вы восхитительны, пишите статью на vc.ru и в «Спортлото»!

Если кому-нибудь будет интересно, я оформил всё вышесказанное в коде и опубликовал на GitHub. Будте готовы страдать, там наговнокожено

0
15 комментариев
Написать комментарий...
Егор Гугаев

```
Во-первых, где взять свой User ID: идём в поиск Telegram и ищем бота, который отвечает вашим ID (например @userid_bot).

Во-вторых, как загрузить картинку: загрузите её к себе на сервер и отдавайте в Telegram просто её адрес в интернетах.
```

Я правильно понял, что работоспособность стикерпака у сотен юзеров зависит от одного бесплатного бота и непонятного сервера?

А вообще крутая тема, ты восхитителен :)

Ответить
Развернуть ветку
Kokoulin Nikolay
Автор

Ну ты можешь создать своего бота, который тебе ответит твоим же userid если ты его по какой-то причине не знаешь. Другого, адекватного способа получить свой userid нет.
Ну если ты переживаешь за надежность сервера с которого ты грузишь обновления, можешь грузить на прямую в телеграм, но мне было лень

Ответить
Развернуть ветку
Дмитрий Гладышев

Пишем своему боту и смотрим ID в json, который придёт скрипту бота.

Ответить
Развернуть ветку
Дмитрий Гладышев

ой, ступил) А удалить уже не могу

Ответить
Развернуть ветку
Дмитрий Гладышев

Работоспособность стикеров не зависит от бота, который отвечает ID. Он нужен только один раз.

Ответить
Развернуть ветку
Вадим Скворцов

Нормально

Ответить
Развернуть ветку
YG

Интересно, давайте на github)
Все думал кто-то сделает с курсами межбанка такое, но, вероятно, не судьба...

Сам, как говорится, «гуманитарий»

Ответить
Развернуть ветку
Kokoulin Nikolay
Автор

Ну я оформил простой пример, это говнокод на богомерзком PHP, приправленный плохими практиками, так что будте готовы страдать: https://github.com/kokoulin/telegram-stickers

Ответить
Развернуть ветку
YG

Ушел в fintech из банка, за «страдать» соскучился. Спасибо)

Ответить
Развернуть ветку
Арсений Скурт

Это вы богомерзкий, а php в после 7.0 отличный язык для промышленной разработки.
Судя по вашему коду, вы даже не джун. А уже так смело поносите технологию.

Ответить
Развернуть ветку
Kokoulin Nikolay
Автор

А вы не умеете в сарказм (:

Ответить
Развернуть ветку
Kattie

Вы восхитительны!

Ответить
Развернуть ветку
Сева Петров

Ееее, топовые стикеры))

Ответить
Развернуть ветку
Аккаунт удален

Комментарий недоступен

Ответить
Развернуть ветку
Kokoulin Nikolay
Автор

И? Это все еще не быстрее чем написать цикл и запрос, и все ровно нужно еще сущности описывать для моделей которые в бд храниться будут. Для маленького тупого скрита это немного излишне

Ответить
Развернуть ветку
12 комментариев
Раскрывать всегда