Помните, больше месяца назад вышло обновление, связанное с подарками от брендов (известных личностей)? Для выпуска подарков снуп дога.
Так вот, только сейчас в Bot API добавили поле, указывающее на то, кто выпустил этот подарок:
Вот и думайте теперь, сколько еще времени пройдет до момента появления функционала покупки премиум-подарков от лица ботов. Еще месяц? Телеграм, пошевелитесь там)
Так вот, только сейчас в Bot API добавили поле, указывающее на то, кто выпустил этот подарок:
Added the field publisher_chat to the classes Gift and UniqueGift which can be used to get information about the chat that published a gift.
Вот и думайте теперь, сколько еще времени пройдет до момента появления функционала покупки премиум-подарков от лица ботов. Еще месяц? Телеграм, пошевелитесь там)
15😁34😭10🫡9❤6
Поэтому, уже сейчас вы можете прогнать симуляцию прошлого дропа подарков и проверить, как это будет работать.
Please open Telegram to view this post
VIEW IN TELEGRAM
51❤48🔥21⚡11👍11👀1🤝1
FragMem | Dev Log
Please open Telegram to view this post
VIEW IN TELEGRAM
78❤35👍17🔥7⚡5👏4🎉2
Сегодня отмечаю день рождения в дороге, добрался наконец до Китая.
На днях сделал пару тестов, для проверки соответствия симуляции с реальной покупкой, дабы убедиться, что все готово к следующим подаркам. Вернусь в начале-середине сентября и в первые же выходные буду рассматривать вариант интеграции юзер ботов (для премиум подарков).
Пока что готовимся к первому сентября, тарить обычные подарки через бота)
На днях сделал пару тестов, для проверки соответствия симуляции с реальной покупкой, дабы убедиться, что все готово к следующим подаркам. Вернусь в начале-середине сентября и в первые же выходные буду рассматривать вариант интеграции юзер ботов (для премиум подарков).
Пока что готовимся к первому сентября, тарить обычные подарки через бота)
275❤106👍48🎉34🍾8🤣6🕊5💘3⚡2❤🔥2🔥2😎2
Please open Telegram to view this post
VIEW IN TELEGRAM
102👍66❤26🔥12💯5🕊4🤣4👏3
Всем спасибо за проявленное доверие и тем, кто успел воспользоваться ботом, я проделал большую работу по реализации этого функционала. Жаль, что телега все в моменте просто перевернула и отрезала функционал(
Please open Telegram to view this post
VIEW IN TELEGRAM
60❤47👍24🔥14🤝3
Если кто-то не в курсе: я работаю над разработкой нескольких прикольных проектов — @clips, @sounds, @texts, @saver. В общем, всё, что вы видите в списке приложений @notmeme.
Возможно, вам будет интересно узнать, как всё устроено внутри и что скрывается за, казалось бы, простой строкой - @sounds привет
Изначальная гипотеза была такая: современный "молодёжный" чат — это не только текст, а общение через стикеры, гифки и всё вот это. Мы решили расширить этот формат и привнести новую социальную механику — реакции короткими видео (что-то из разряда тиктока, но прямо в переписке).
1.1) Инлайн. Функционал Telegram, благодаря которому вы можете в любом чате ввести запрос и отправить контент без общения с ботом в личке.
1.2) Хранение. Все наши кружки хранятся в Telegram — оттуда мы быстро отдаём пользователю медиафайл при поиске. Поэтому результат виден почти мгновенно.
1.3) Поиск. Начинали с простого полнотекстового поиска: вычленяем слова из запроса, сравниваем с базой и собираем максимально релевантный список кружков. У каждой единицы контента есть описание и название — по ним и идёт сравнение.
2.1) Источник контента. Чтобы кружки вообще появились, их нужно было где-то взять. Первую партию мы добавили так: спарсили несколько мемных площадок, преобразовали видосы в кружки, сделали описания и названия, а затем занесли всё в базу.
2.2) Но парсингом одним не живём: мы решили, что пользовательский контент важнее просто сборника видосов из интернета. Поэтому быстро собрали MVP мини-приложения, где за пару кликов можно подредактировать любой видос из вашей галереи, добавить описание и название — и он попадёт в общую выдачу.
2.3) Модерация. Как и в любом сервисе с пользовательским контентом, важно помнить, что не все пользователи милые и пушистые. Поэтому после ваших пары кликов всё уходит на модерацию: там мы проверяем опасный контент и соответствие видео и текста.
Чтобы всем этим было удобно пользоваться, мы сделали так, что контент живёт сразу в двух местах:
— в Telegram (как хранилище и источник для быстрой отправки),
— и в нашем мини-приложении Telegram, где уже есть нормальный интерфейс.
В мини-приложении можно:
- посмотреть все мемы/кружки,
- искать, включать фильтрацию и быстро находить нужное,
- увидеть, какие мемы вы залили,
- проверить, на каком статусе модерации каждый мем (в обработке / одобрен / отклонён и т.д.).
И ещё важный момент: все уведомления синхронизированы с личкой Telegram. Результаты модерации и любая важная инфа для пользователя прилетают туда, где это реально заметно и привычно — прямо в чат.
- Более 700.000 пользователей
- 100.000 кружков в нашей базе
- Юзеры отправили кружки более 6.000.000 раз
- Более 180.000 пользователей с нами ежемесячно
@FragMemBots | @katant
Please open Telegram to view this post
VIEW IN TELEGRAM
20❤65👍17🔥11🤮3
Когда вы пишете в боте запрос типа "гойда" или "ну давай нападай", кажется, что это просто "поиск по базе".
Но внутри это больше похоже на умный поиск Google, только заточенный под нашу базу (звуки/кружки).
У нас есть три слоя, которые работают вместе:
• PostgreSQL — основная база, где хранятся сами звуки (название, описание, теги).
• Elasticsearch — быстрый “мозг” для полнотекстового поиска (умеет искать по словам, ошибкам, похожим формулировкам).
• ZomboDB — магический мост между ними: позволяет делать Elasticsearch-поиск прямо из SQL, как будто это обычный запрос в Postgres. Он также занимается формированием индексов на основе данных Postgres в ElasticSearch.
То есть: данные живут в Postgres, а ищем мы силой Elasticsearch, при этом всё выглядит как "одна база".
Каждый звук индексируется по трём главным полям:
• noscript (название)
• denoscription (описание)
• tags (теги)
Они собираются в "единый поисковый документ", и по нему строится индекс.
Фишка ZomboDB: когда звук меняется в Postgres — индекс в Elasticsearch обновляется автоматически. Без ручной синхронизации.
Поиск доступен двумя способами:
• Inline в Telegram: @bot <запрос>
• Через наш MiniApp, там происходит запрос в API: GET /api/sounds?query=...
Но самое главное: оба пути приходят в один и тот же метод — SoundDAO.get_list()
(то есть логика поиска единая и вы получите одинаковый результат, независимо от источника взаимодействия).
Когда вы вводите текст, система делает несколько попыток найти лучшее совпадение.
1) Сначала — "строгий" поиск (MUST)
Логика: все слова из запроса должны встретиться.
Это даёт максимально точные результаты.
И да: поиск умеет "прощать" опечатки — включён режим fuzziness: AUTO, то есть:
• «превет» может найти «привет»
• «смешной звук» найдёт даже если где-то ошиблись
2) Если строго не нашло — включается "мягкий" поиск (SHOULD)
Логика: берём только слова длиннее 3 букв, и достаточно, чтобы совпала примерно половина.
Когда полезен:
• длинный
• с лишними словами
• "криво сформулирован"
3) Если и "мягкий" не помог — включается "нечёткий" поиск (FUZZY / SIMILARITY)
Логика: мы смотрим на запрос целиком и пытаемся найти похожие варианты, даже если слова написаны по-разному, перепутан порядок или опечаток больше обычного.
Это такой режим “ну ты понял, что я имел в виду”.
Когда полезен:
• короткий и неточный (типа «ааа ну тот звук»)
• с кучей опечаток / транслитом («privet», «prvyt», «preevet»)
• с переставленными словами («звук смешной» vs «смешной звук»)
• когда помнишь только кусок фразы, а остальное “примерно”
Результаты сортируются так:
• по релевантности (насколько “попали в смысл запроса”) — это score от Elasticsearch
• по популярности (сколько раз звук использовали)
То есть идеальный вариант — и подходит по смыслу, и реально любимый людьми.
Если запрос пустой, мы не делаем никакого поиска — вместо этого собираем витрину:
• Промо-звуки (сейчас их нет)
• Ваша история (последние отправленные)
• Топ популярных (по количеству использований)
И всё это аккуратно склеивается в один список (до 50 штук), с дедупликацией, чтобы не было повторов.
Когда вы выбираете звук в inline — мы не пишем счётчик сразу в базу (это бы замедлило систему).
Вместо этого событие улетает в Redis Stream, а дальше отдельный воркер:
• читает события пачками
• обновляет счётчики
• записывает историю
В итоге бот отвечает быстро, а статистика обновляется асинхронно.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤26🔥10👍8❤🔥1