GigBuddy

Для участников

Как начать

Бот работает в личном чате: @gig_buddy_bot. Запуск по /start.

КомандаЧто открывает
/menuГлавное меню
/myМои гиги
/addДобавить гиг
/newБудущие гиги
/oldПрошлые гиги
/findПоиск
/helpСправка
/meМой профиль
/tellОбратная связь

Добавление гига

Бот принимает только гиги в Ирландии. Пришлите боту в личку одно из:

Что прислатьКак бот разбираетКому доступно
Ссылка Ticketmaster на гиг (ticketmaster.ie, ticketmaster.co.uk)Бот берет данные из Ticketmaster по API; ссылка на конкретный гиг - самый простой и надежный способ добавления гигавсем
Ссылка Ticketmaster на артиста (ticketmaster.ie)Тоже по API. Бот отберет гиги по ирландскому геовсем
Ссылка Eventbrite, Songkick, EventCartelРазметка страницы, при неудаче — ИИвсем
Ссылка на Instagram, сайт площадки и прочиеИИapproved и admin
Постер (картинка)ИИвсем
Текст по шаблону:
Name, DD.MM.YY, Venue
Разбор по шаблону, затем по API на Ticketmasterвсем
Текст со страницы заказов Ticketmaster (My Tickets)Разбор по шаблону, затем для будущих гигов - по API на Ticketmaster, для прошлых ссылку не ищет.всем
  • Ссылка Ticketmaster должна содержать в адресе имя/название выступающих. Короткую ссылку вида …/event/<id> бот разобрать не может и объясняет, как получить полную.
  • Присланный вне диалога текст бот воспринимает как начало добавления гига и предлагает распознать гиг.
  • Если введены неполные данные, бот запрашивает недостающее.
  • Для будущих гигов ссылка обязательна. Пользователь может добавить ссылку сам или воспользоваться помощью бота: бот ищет ссылку на Ticketmaster, если не получается найти — через Brave Search.
  • Если на постере или странице тура несколько дат, бот оставляет ирландские; если их несколько — предлагает выбрать.
  • При добавлении гига бот проверяет его на дубли по базе.
  • В конце процесса добавления гига бот предлагает запостить анонс в чате. Анонс в чате публикуется анонимно.
  • Бот позволяет указать в гиге 4 разогрева.

Добавление пачки гигов

Чтобы добавить гиги пачкой, нужно прислать выделенный мышкой текст со страницы My Tickets (раздел Upcoming Events или Past Events) Ticketmaster.
Бот проверяет гео и добавляет прошлые ирландские гиги с отметкой «Довелось», а будущие - с «Иду». Отметки можно потом поменять или убрать в карточке конкретного гига.

Брать пачку тут:
https://www.ticketmaster.ie/user/orders

Добавление гигов из чата

Ссылки:
Если пользователь прислал в чат ссылку, бот пишет пользователю в личку и предлагает добавить гиг по этой ссылке. Если пользователь соглашается, бот старается распознать ссылку, в случае удачи добавляет гиг в базу и предлагает запостить анонс в чате.
Если пользователь выбрал запостить, описание гига публикуется реплаем на его ссылку.

Постеры:
Чтобы бот отреагировал на постер так же, как на ссылку, нужно присылать постер в чат с подписью «анонс» (или «Анонс»). Это нужно, чтобы бот не принимал фото с концертов за постеры.
Если прислать в чат постер с такой подписью, действует та же схема, что со ссылкой, описание гига публикуется реплаем на постер.

Если в ссылке или постере есть несколько гигов в Ирландии, бот показывает дублинские или площадку «для всех», например, Slane Castle или The TLT.

Что прислать в чатКак бот разбираетКому доступно
Ссылка Ticketmaster на гиг (ticketmaster.ie, ticketmaster.co.uk)Бот берет данные из Ticketmaster по API; ссылка на конкретный гиг - самый простой и надежный способ добавления гигавсем
Ссылка Ticketmaster на артиста (ticketmaster.ie)Тоже по API. Бот отберет гиги по ирландскому геовсем
Ссылка Eventbrite, Songkick, EventCartelРазметка страницы, при неудаче — ИИвсем
Ссылка на Instagram, сайт площадки и прочиеИИдобавившим 1 гиг в базу, иначе - модерация
Постер с подписью «анонс»ИИдобавившим 1 гиг в базу, иначе - модерация
Текст по шаблонув чате не распознается—
Текст со страницы заказов Ticketmaster (My Tickets)в чате не распознается—

Будущие и прошлые гиги

Список будущих гигов показывает все гиги, дата которых еще не прошла.

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

Список прошлых гигов показывает гиги за последние полгода. Более старые гиги можно увидеть либо в «Мои гиги», если на них есть отметка пользователя, либо через «Поиск».

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

Карточка гига

Состав карточек будущего и прошлого гига отличается.

Только на карточке будущего гига:

  • отметки «Иду» и «Хочу пойти»;
  • список «Кто идет» — те, кто отметил «Иду»;
  • переключатель показа своего имени в «Кто идет»;
  • добавление в календарь;
  • разделы «Комментарии» и «Попутчики».

Только на карточке прошлого гига:

  • отметки «Довелось» и «Не довелось» (аналоги «Иду» и «Хочу пойти»).

На обеих карточках:

  • информация о гиге;
  • добавление в плейлист и вишлист;
  • редактирование и удаление гига.

Комментарии и Попутчики

В комментариях предполагается делиться данными о пресейлах, препати, stage time и так далее — до трех комментариев в одни руки, имя в них не скрывается.

Попутчики устроены так же, просто отдельно от комментариев: здесь предполагается просить подвезти, предлагать подвезти или искать попутчиков, чтобы поехать вместе. Имена тоже не скрываются.

На чужую запись в комментариях или попутчиках можно пожаловаться. После трех жалоб от разных людей запись скрывается до решения админов.

Мои гиги

В «Мои гиги» попадают гиги с отметкой:
«Иду» - будущий гиг, на который пользователь точно идет,
«Хочу пойти» - будущий гиг, на который пользователь хочет пойти,
«Довелось» - прошлый гиг, на котором пользователь был,
«Не довелось» - прошлый гиг, на который пользователь хотел (бы) сходить.

Отметки

Отметки ставятся вручную при добавлении гига или автоматически при добавлении пачки гигов.
Поменять или снять отметку можно на карточке гига.

Отметка «Иду» добавляет имя пользователя в список «Кто идет» на карточке гига, если пользователь не выбрал скрывать имя. Это единственная отметка с именем, видимая другим.

«Хочу пойти» имя не показывает и в «Кто идет» не попадает.

Когда гиг переходит из будущих в прошлые, отметки «Иду»/«Хочу пойти» заменяются на «Довелось»/«Не довелось», если имя в «Иду» показывалось, оно скрывается.

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

Списки

В списки гигов в разделе «Мои гиги» попадают только те гиги, на которых стоит отметка пользователя. Соответственно, добавленный пользователем гиг без отметки пользователя в списки не попадет, а добавленный кем-то еще гиг с отметкой пользователя - попадет.

Мои гиги показывает три списка для будущих гигов, чья дата еще не прошла - список гигов с отметкой «Иду», список гигов с отметкой «Хочу пойти» и сумму этих двух - список «Все будущие».

Аналогично для прошлых гигов ведутся три списка: с отметкой «Довелось», с отметкой «Не довелось» и общий «Все прошлые».
В отличие от общего списка «Прошлые гиги» в главном меню, где показываются гиги только за последние полгода, список «Все прошлые» в «Мои гиги» показывает все прошлые гиги пользователя без ограничения.

Мой профиль

«Мой профиль» показывает статус пользователя в боте и настройки пользователя, а также содержит рекомендации, плейлист и вишлист.

Рекомендации

Цель рекомендаций - помочь не пропустить интересный гиг. Бот пытается определить «похожих людей» в чате и рекомендует те гиги, на которые идут эти самые похожие люди.

Бот использует четыре источника похожести: история гигов, планы на будущие гиги, содержимое плейлиста и содержимое вишлиста. Бот формирует из них четыре списка рекомендаций и пятый список как сумма первых четырех, и выдает топ-5 (число настраивается) из всех пяти. Гиги, на которые пользователь уже отметился, в рекомендации не попадают.

Чтобы бот начал пытаться считать рекомендации, нужно, как минимум, по 5 отметок в прошлых и будущих гигах и по 5 имен в плейлисте и вишлисте соответственно.

Рекомендации считаются по ночам и рассылаются утром. Если бот обнаруживает новую рекомендацию, он присылает ее пользователю, если у пользователя включены уведомления.

Плейлист и Вишлист

С карточки гига имена артистов (хедлайнера и разогревов) можно добавить в плейлист или в вишлист.

Плейлист — любимая музыка пользователя. Используется для расчета рекомендаций «по вкусам»: бот ищет людей с похожим плейлистом, чтобы рекомендовать гиги, на которые идут они.

Вишлист — музыка, которую пользователь хотел бы послушать живьем, то есть список желаемых гигов. Служит двум задачам: бот отслеживает по нему новые анонсы и так же, как плейлист, использует его для расчета рекомендаций — «по желаниям».

Бот регулярно проверяет Ticketmaster на предмет новых гигов артистов из вишлистов и, если находит, присылает уведомление в личку и анонс в чат. Если такой гиг добавляет кто-то из участников — анкетой, ссылкой, постером, постом в чате или через «My tickets», — подписчики вишлиста тоже получают уведомление в личку.

У плейлиста и вишлиста общий лимит — по 33 имени в каждом (настраивается).

Настройки

Статус показывает данные из Telegram и статус в боте.

Гео — свой город, если это не Дублин: гиги в Дублине и на площадках «для всех» (например, Slane Castle или The TLT) и так считаются подходящими для всех. Город используется для вишлиста и рекомендаций.

Показ имени влияет на новые отметки «Иду»: показывать имя в списке пришедших можно по умолчанию для всех гигов или скрывать его на отдельном гиге, независимо от общей настройки.

Уведомления включают или выключают личные сообщения о новых гигах из вишлиста и о новых рекомендациях.

Удаление данных стирает следы общения с ботом; после удаления некоторое время еще могут приходить уведомления, поставленные в очередь раньше.

Обратная связь

Обратная связь — для позитивного и негативного фидбека, сообщений о багах и пожеланий по новой функциональности.

Для админов

Роли и доступ

Роль бот берет из статуса в чате Telegram.

РольКак получитьПрава
memberучастник чатаотметки, комментарии, попутчики, плейлист и вишлист, добавление гигов (анкета, постер, ссылки Ticketmaster/Eventbrite/Songkick/EventCartel, пачка с «My tickets»), «Найти ссылку», публикация анонсов, правка и удаление своих гигов
approvedучастник чата с тегом admin approvedплюс: любые ссылки через ИИ; правка записей бота в комментариях и попутчиках
adminсоздатель чата или администратор с любым другим титулом (или без титула)все функции: правка и удаление любых гигов и любых записей в комментариях/попутчиках, Admin console

Помимо ролей, используются статусы:

СтатусКак получитьЧто происходит
Заблокирован админами (blocked_by_admin)админы блокируют в Жалобах («Заблокировать двуногое») или в All usersЭкраны смотреть может, но действия молча не выполняются: отметки, добавление гигов, комментарии и т.п. Снимается в Not good или All users.
Ограничен в чате (restricted)админы чата ограничили участника в TelegramТо же самое. Роль approved/admin сбрасывается в member.
Вышел из чата (left)участник сам вышел из чатаТо же самое. Роль сбрасывается в member, данные сохраняются.
Исключен из чата (kicked)админы чата удалили участника из чата в TelegramТо же самое. Роль сбрасывается в member. Через 30 дней удаляется из бота полностью, как при «Забыть меня совсем», но только после перепроверки статуса в Telegram.
Заблокировал бота в личке (bot_dm_blocked)участник заблокировал бота в Telegram; бот узнает об этом, когда не может отправить ему сообщениеДоступ не теряет. Личные уведомления не приходят, пока снова не напишет боту.

Admin console

Открывается только командой /admin, набранной вручную, — ее нет ни в меню, ни в списке команд. Работает и когда бот на паузе.

Рубильник

Пять переключателей; у включенного — «✓» перед названием, сверху — статус каждого («работает» / «на паузе»).

КнопкаКогда выключеноКто переключает
ИИИИ не вызывается: источники, которым нужен ИИ, в личке отклоняются с пояснением, в чате бот молчитadmin
ИИ в чатев чате разбираются только ссылки без ИИadmin
Ботв личке записывать могут только admin, остальные видят «Бот на паузе», экраны для чтения доступны; в чате бот молчит, публикации ждут в очередиadmin
Бот в чатев чат ничего не пишется; публикации ждут в очереди и уходят после включенияadmin
Stage timeбот не ищет stage timeadmin

Большой брат

  • Жалобы — на записи в Комментариях/Попутчиках, за 30 дней, новые сверху, по одной на экран. Можно отправить в архив, скрыть или вернуть проблемную запись и заблокировать автора.
  • Модерация — см. ниже.
  • Not good — пользователи без доступа: блокировка админами, ограничение, выход или исключение из чата. Заблокированных админами можно разблокировать.
  • All users — поиск по Telegram ID, имени или username; можно заблокировать и разблокировать.

Модерация

Цель модерации - фильтр возможного спама.

Посты из чата от авторов, у которых еще нет ни одного гига в базе, если пост нужно разбирать через ИИ (произвольная ссылка или постер). Один экран на автора, первым показан тот, кто ждет дольше: можно разрешить — тогда бот пишет автору в личку по каждому его посту, как обычно, — или отклонить, тихо, без уведомления автору. О новом авторе в очереди приходит одно уведомление в боточат.

Ссылки Ticketmaster, Eventbrite, Songkick и EventCartel модерацию не проходят.

Справочники

Площадки

  • Поиск по площадке или городу латиницей; служебное слово 67 показывает все площадки «для всех».
  • Если ничего не нашлось, площадку можно добавить: город бот сам ищет в Ticketmaster, а если не находит — просит указать его вручную.
  • У каждой площадки есть карточка: название и город можно поправить (если после правки она совпадет с уже существующей, бот предлагает объединить их, а старое название становится другим написанием найденной), можно пометить «для всех» (дублинской это не нужно — Дублин и так домашний регион для всех) и удалить.
  • Удалить нельзя, пока на площадке есть будущие гиги. В прошлых гигах удаленная площадка заменяется на «gigbuddy».

Артисты

  • Поиск по имени/названию латиницей. Добавить нового артиста отсюда нельзя.
  • Карточка показывает, есть ли у артиста Ticketmaster ID, число гигов и записей в Wishlist и Playlist; имя можно поправить (сразу видно во всех гигах и списках; совпадение с другим артистом не допускается) и удалить.
  • Удалить нельзя, пока у артиста есть будущие гиги. В прошлых гигах удаленный артист заменяется на «gigbuddy», из вишлистов и плейлистов он убирается. Сугубо техническая штука для удаления следов неверного распознавания имен.

Диагностика

Selftest

Показывает ✅/❌ по каждому пункту.

ПунктЧто проверяет
D1запись и чтение тестового значения в базе
KVзапись и чтение в KV-кэше
Queueтестовое сообщение в очереди разбора и уведомлений
Telegramдоступность Bot API и вебхука, показывает pending_update_count
Ticketmasterдоступность Discovery API
Geminiдоступность ИИ-ключа (если ИИ включен)
Обязательные ключи Settingsвсе нужные настройки на месте
Последний запуск фоновых задачпо каждой из 12 задач — когда последний раз выполнялась и успешно ли

Счетчики

ПунктЧто показывает
Пользователивсего и с доступом к боту
Гигибудущих и прошлых
Артистывсего в базе
Вишлист / Плейлистчисло записей
Обновления за суткисколько обновлений Telegram обработано за 24 часа
Outboxсколько публикаций/уведомлений в очереди по статусам (pending/held/failed)
Ошибки за суткив логах и отдельно — ошибки обработки вебхука
Размер базыобъем D1
pending_update_countсколько обновлений Telegram еще не доставлено
Возраст старейшего задания в Queueсколько ждет самое старое необработанное задание
Задержка обработки / скорость запросов к баземетрики производительности из Analytics Engine

Логи

Последние 20 ошибок, новые сверху. Кнопками можно отфильтровать по типу события (до 6 типов, встреченных среди этих 20):

Тип событияЧто значит
telegram_api_errorне удался вызов Telegram Bot API
update_failedне удалось обработать входящее обновление от Telegram
outbox_failedне удалось отправить публикацию/уведомление из очереди
admin_notify_group_failedне удалось отправить уведомление в боточат
stage_time_search_failedне удался поиск stage time
cron_<задача>_failedсбой при выполнении фоновой задачи <задача> (outbox_picker, parse_stall_picker, admin_alerts, wishlist, poster, backup и т.п.)
cron_<задача>_claim_failedсбой при попытке занять суточную задачу (проблема с D1)
cron_nightly_<подзадача>_failedсбой одной из подзадач «Ночной» (nightly_dedup, nightly_reconcile, stage_time)
cron_retention_<правило>_failedсбой одного из правил очистки по срокам хранения
cron_retention_group_confirm_messages_failedсбой очистки сообщений group_confirm
cron_retention_kicked_users_failedсбой удаления исключенных из чата
cron_recs_nightly_user_failedсбой расчета рекомендаций для одного пользователя

Почта

Сообщения из «Обратной связи» за 30 дней, новые сверху, по одному на экран; каждое можно отправить в архив. Каждое новое сообщение также сразу приходит в боточат.

💩 & 🪵

  • Хотелки и Баги — общий список идей и ошибок для админов, свои разделы для каждого. Новую хотелку или баг можно добавить текстом; существующие листаются по одному, целиком, и удаляются сразу, без подтверждения. Хранятся месяц.

Уведомления в боточат

Боточат - отдельный Telegram-чат для служебных сообщений. Туда приходят:

  • новые сообщения из Обратной связи;
  • сообщения из очереди Модерации;
  • о скрытых по жалобам записях в Комментариях и Попутчиках;
  • пачка с «My tickets», в которой что-то не разобралось, — с исходным текстом;
  • сообщения о суточном лимите автопубликаций;
  • алерты (раз в час): появились неотправленные сообщения (failed), какая-то ежедневная задача не завершалась больше 26 часов, у Telegram копятся необработанные обновления.

Если сообщение в боточат отправить не удалось, копия идет в личку админше бота.

Расписание фоновых задач

Время — Дублин.

КогдаЗадача
каждый день, 01:00Рекомендации: расчет для запросивших
каждый день, 02:00Сверка статусов пользователей с чатом
каждый день, 04:00Объединение дублей прошлых гигов
каждый день, 05:00Отметки прошедших гигов → «Довелось»/«Не довелось», удаление их комментариев и попутчиков, окончательное удаление гигов, удаленных больше 30 дней назад; поиск stage time на завтра и сегодня
каждый день, 06:00Очистка по срокам хранения
каждый день, 07:00Проверка вишлистов по Ticketmaster, уведомления и анонсы
каждый день, 09:00Рассылка новых рекомендаций
каждый день, 14:00Повторный поиск stage time на сегодня
пятница, 10:00Афиша в чат
воскресенье, 03:00Резервная копия базы
каждый часАлерты в боточат
каждые 15 минутOutbox-подборщик (отправка отложенных публикаций и уведомлений)
каждую минутуПодборщик зависших parse-заданий

Автопубликаций в чат — не больше 5 в сутки (число настраивается), с интервалом не меньше 15 минут; лишние ждут следующего дня.

Сроки хранения

ДанныеСколько хранятся
Жалобы, Обратная связьв консоли видны 30 дней, удаляются через 90
Логи90 дней
Удаленные гиги30 дней, до этого повторное добавление того же гига с Ticketmaster восстанавливает запись
Комментарии и Попутчикидо ночи после гига
Хотелки и Баги30 дней
Незавершенные диалоги24 часа
Исключенные из чата30 дней, затем удаляются полностью