{[item.label]} {[item.state.loading?'Обновляется…':item.state.error?(item.state.at?'Не обновилось · показаны предыдущие данные':'Не удалось загрузить'):'Обновлено']}
🤖
Боты
{[eco.online]}🟢 {[eco.warn]}🟡 {[eco.dead]}🔴
🪣
Пул токенов
{[eco.poolFree]} своб. · {[eco.poolDead]}🗄
🔁
Авторотация
{[eco.autorotate?'Вкл':'Выкл']}
📥
В очереди
{[stats.queue_size||0]}
{[c.label]}
{[c.value]}
📊 Группы аудитории
Проверка, активность и VIP — доли зарегистрированных; группы пересекаются
{[funnelState=='load'?'Считаю…':(funnelState=='empty'?'Пока не по чему считать':'Не посчиталось — смотрите логи админки')]}
{[s.label]} · копится {[s.value]} · {[s.of_all]}%
доля зарегистрированных: {[s.of_all]}%
🔁 Удержание
Из пришедших на неделе — сколько вернулись потом
{[retentionState=='load'?'Считаю…':(retentionState=='empty'?'Пока не по чему считать':'Не посчиталось — смотрите логи админки')]}
Неделя Пришло +{[w]}
{[c.cohort.slice(5)]} {[c.size]} {[(c.weeks[w]||{}).pct ? (c.weeks[w].pct+'%') : '—']}
💰 Продажи VIP — сколько, когда и чем платят
Сегодня (МСК): {[sales.today.sales||0]} покуп. ≈ {[fmtRub(sales.today.rub)]} {[salesMethodName(m)]} {[n]} · тарифы: {[p]}×{[n]} 📥 пришло {[sales.today.total||0]} · промо {[sales.today.promo||0]} · по рефке {[sales.today.by_ref||0]} · gate одобрено {[sales.today.gate_approved||0]}
{[(sales.total||{}).count||0]}
покупок
≈ {[fmtRub((sales.total||{}).rub)]}
выручка · ${[(sales.total||{}).usd||0]}
{[(sales.total||{}).buyers||0]}
покупателей
{[(sales.total||{}).stars||0]} ⭐
звёзд
{[(sales.total||{}).vip_days||0]}
дней VIP продано
{[(sales.total||{}).repeat_buyers||0]}
вернулись за VIP
{[(sales.ref||{}).days||0]}
дн. реф-бонусов · {[(sales.ref||{}).count||0]} шт.
{[(casinoStats||{}).topup_stars||0]} ⭐
🎰 пополнений · {[(casinoStats||{}).topups||0]} шт.
За этот период покупок не было.
По дням — {[({count:'покупки',stars:'звёзды',vip_days:'дни VIP',rub:'выручка ₽'})[salesMetric]]} (МСК, наведите на столбик)
{[salesHover.day]} — {[salesHover.count]} покуп. · ≈ {[fmtRub(salesHover.rub)]} · {[salesHover.stars]} ⭐ · {[salesHover.vip_days]} дн. {[salesMethodName(m)]} {[n]} {[p]}×{[n]} 📥 {[salesHover.total||0]} · промо {[salesHover.promo||0]} · gate ✓{[salesHover.gate_approved||0]}
{[r[salesMetric]]}
{[salesLabel(r,i)]}
🔥 Акция идёт: −{[sales.sale.pct]}% у {[sales.sale.offers]} чел., использовано {[sales.sale.used]}, до {[(sales.sale.until||'').replace('T',' ').slice(0,16)]} сейчас нет {[saleResult]}
Скидка ложится персональным оффером, оплата-бот применит её сам (берёт самую выгодную из живых). Рассылка — одно сообщение человеку через любой его бот, фоном.
📅 По дням — продажи и приходы (последние {[Math.min(14,(sales.daily||[]).length)]} дн., МСК)
деньпокупок≈ ₽чемтарифы пришлочерез промопо рефкеактивны в промоgate заявокgate одобрено
{[r.day.slice(5)]} {[r.sales]} {[r.rub?fmtRub(r.rub):'–']} {[salesMethodName(m)]} {[n]} {[p]}×{[n]} {[r.total]} {[r.promo||'–']} {[r.by_ref||'–']} {[r.promo_active||'–']} {[r.gate_started||'–']} {[r.gate_approved||'–']}
Какие дни недели покупают
{[r.wd]}
{[r.count]}
В какие часы (МСК) — пик: {[salesPeakHour()]}
0:0012:0023:00
Чем платят
{[salesMethodName(r.method)]}{[r.count]} · {[Math.round(100*r.count/((sales.total||{}).count||1))]}% · {[r.stars]} ⭐
Какие тарифы берут
{[r.plan]}{[r.count]} · {[Math.round(100*r.count/((sales.total||{}).count||1))]}%
🎁 Кто приводит покупателей
Пока никто из приглашённых не покупал.
{[r.user_id]} {[r.nick]}+{[r.days]} дн. за {[r.count]} покуп.
📈 Пульс активности — обмен медиа (столбцы) и новые юзеры (линия) по дням
👥 Люди — пришли (столбцы: по ссылке / сами), ушли (красная линия: последний раз были в этот день и с тех пор тишина ≥7 дн.), прошли gate и купили VIP по дням
всего {[people.totals.all]} активны 24ч {[people.totals.active_1d]} · 7 дн {[people.totals.active_7d]} затихли 7–30 дн {[people.totals.quiet_7_30]} ушли >30 дн {[people.totals.gone_30]} пришли по ссылке за всё время {[people.totals.via_ref]}
📍 Откуда пришли (регистрация)
ботлюдейgateкупили
{[r.name]} {[r.type]}{[r.count]}{[r.passed]}{[r.buyers]}
🎁 Лучшие зазывалы (пригласили за период)
ктодрузейgateкупили
{[r.name]} {[r.user_id]}{[r.count]}{[r.passed]}{[r.buyers]}
🤖 Активность по ботам — кто тащит нагрузку
БотТипСтатус ЮзерыМедиа
{[b.emoji]} {[botListName(b.display_name||b.username)]} @{[b.username]} {[({exchange:'🔄 Обмен',payment:'💳 Оплата',reserve:'🛡 Резерв',gate:'🚪 Гейт',noforward:'🔀 NoFwd'})[b.bot_type]||b.bot_type]} {[b.health_label]}
Проверка давно не обновлялась
{[b.user_count]} {[b.media_count]}
Ботов нет

⏸ Пауза за неактивность

Кто перестал присылать медиа дольше таймаута своего уровня — тому выдача встаёт на паузу и уходит напоминание с кнопкой VIP. Пишет тот бот, где у человека открыт диалог. Повтор через 7 и 30 дней, дальше молчим. Прислал медиа — счётчик обнулился.
{[inact.paused_total||0]}
на паузе сейчас
{[inact.sent_7d||0]}
напомнили за 7 дней
{[inact.sent_30d||0]}
за 30 дней
{[inact.returned_30d||0]}
вернулись за неделю
{[inact.conversion||0]}%
конверсия
{[inact.repeated||0]}
получили повтор
На паузе по уровням
УровеньВсего Предупреждены
L{[r.level]} {[r.total]} {[r.notified]}
Никого
По ботам, за 30 дней
БотНапомнили Вернулись%
{[r.bot]} {[r.sent]} {[r.returned]} {[r.conversion]}%
Напоминаний пока не было

💤 Вернуть молчунов

Письмо тем, кто перестал приходить: сколько медиа прошло мимо, подарок в днях без лимитов по кнопке и скидка на VIP. Шлём из бота, где у человека открыт диалог, по одному сообщению в секунду. Повтор не чаще раза в 30 дней.
{[wbPreview.reachable||0]}
достучимся сейчас
{[wbPreview.unreachable||0]}
нет связи
{[wbStats.messaged||0]}
писали всего
{[wbStats.claimed||0]}
забрали подарок
{[wbStats.returned||0]}
вернулись
{[wbCfg.sent_today||0]} / {[wbCfg.daily_cap||30]}
за сутки / потолок
Лимит общий для ручного и автоматического запуска, считается по людям. Письмо придёт во все запущенные человеком боты, которые он не заблокировал. Подарок и скидка — один раз.

✉️ Шаблоны писем

Подстановки: {missed} — «и мимо прошло N новых медиа» (пусто, если данных нет), {days} — дни подарка, {discount} — процент скидки, {hours} — часы её действия. Разметка: *жирный*, _курсив_.
ушло {[wbOutcome(t.id).sent]} · забрали {[wbOutcome(t.id).claimed]} · вернулись {[wbOutcome(t.id).returned]} ({[wbConv(t.id)]}%)
🌐 Другие языки письма

📤 Запуск

Темп: одно сообщение в секунду; у человека может быть несколько ботов
Сегмент {[wbPreview.segment_label]} · по ботам: @{[b]}: {[n]} ·
Первые {[wbPreview.sample.length]} получателей и их письмо целиком — ничего не отправлено:
{[p.user_id]} · @{[p.bot]} · {[p.lang]} · мимо {[p.missed]}
{[p.text]}

📊 Кампании

Пока ни одной.
КогдаШаблонСегментПолучателейПропускСтатус
{[r.started_at ? r.started_at.slice(5,16).replace('T',' ') : '—']} {[r.template]} 🕒 {[r.segment_label]} {[r.sent]} / {[r.planned]} {[r.skipped]} ⏳ идёт ✅ 🛑 остановлена ⚠️ {[r.status]}

🎁 Приглашения

За каждого друга, прошедшего проверку, пригласивший получает {[refStats.reward_days||7]} дн. без лимитов неактивности. Награда выдаётся один раз и только после одобрения заявки админом.
{[refStats.rewarded||0]}
дошли до одобрения
{[refStats.invited||0]}
перешли по ссылке
{[refStats.vip_days_given||0]}
дней без лимитов выдано
{[refStats.inviters||0]}
приглашающих
{[refStats.rewarded_week||0]}
за 7 дней
⚠️ {[refStats.invited - refStats.rewarded]} чел. перешли по ссылке, но ещё не прошли проверку — награда за них не выдана.
Пока никто никого не привёл. Кнопка «Пригласить друга» — в резервном боте, секция 🚪, и её нужно включить в «Порядке в резервном боте».
{[usersTotal?((usersShownPage-1)*50+1)+'–'+Math.min(usersShownPage*50,usersTotal)+' из '+usersTotal:usersLoading?'Загрузка…':'0 пользователей']}Медиа: отправлено / получено · время МСК
Стр. {[usersShownPage]} из {[Math.ceil(usersTotal/50)]}
ПользовательУровеньСтатус · VIPМедиаПоследняя активностьРегистрацияПрофиль
{[usersLoading?'Загружаем пользователей…':usersError?'Не удалось загрузить список':'Пользователи не найдены. Попробуйте изменить фильтр или запрос.']}
{[u.nickname||u.first_name||'Без ника']}{[u.username?'@'+u.username:'ID '+u.user_id]}{[u.user_id]} Lv{[u.level]}
{[u.is_lifetime_vip?'VIP ∞':'VIP']}БАНЛЁДАДМОЖИД⚠ {[u.warn_count]}Обычный
{[u.is_vip?'до '+fmtDate(u.vip_expires):'истёк '+fmtDate(u.vip_expires)]}Без срока
{[u.media_sent_count||0]} / {[u.media_received_count||0]}за 7 дн: {[u.weekly_sent_count||0]}рейтинг: {[u.rating||0]} {[timeAgo(u.last_active)]}{[fmtDate(u.last_active)]} {[fmtDate(u.joined_at)]}
Стр. {[userPage]} из {[Math.ceil(usersTotal/50)]}
⚙️ Условия приёма заявок

Норма медиа остаётся в карточке каждого бота.

🤖 Автоодобрение: одобрен уже в N ботах

Выключено (0) по решению владельца — модераторы принимают сами. Чистый юзер (без варнов и заморозок), одобренный в стольких ботах, в новом одобряется сам при отправке заявки — штаб получает уведомление, а не задачу. 0 — выключить. Норма медиа задаётся в карточке каждого бота.

{[pendingList.length]} заявок
Выбрано: {[pendingSelected.size]}
· Только готовых ({[pendingList.filter(p=>p.ready).length]})
Нет заявок на модерации
{[pendingBotEmoji(p.bot_id)]}

{[p.nickname||p.first_name||'Пользователь']} ID:{[p.user_id]}

Регистрация: {[fmtDate(p.joined_at)]}

{[p.bot_name||p.bot_username||'Неизвестный бот']} @{[p.bot_username]} · ID {[p.bot_id||'нет']}

Тема: {[p.bot_category||'Не указана']} · {[pendingBotType(p.bot_type)]} · Первая загрузка: {[fmtDate(p.first_media_at)]}

Заявка подана: {[fmtDate(p.submitted_at)]}

⚠️ Исходный бот недоступен или отключён. Старые файлы могут не открываться. Для повтора выберите работающего бота.

{[p.submitted?'ПОДАЛ ЗАЯВКУ':'набирает']}
📨 Попыток заявок: {[p.application_history.attempts]} · ✅ Принято: {[p.application_history.accepted]} · ❌ Отклонено / повтор: {[p.application_history.declined]}
Медиа в этом боте: {[p.pending_media_count]} / {[p.target]} · Показано {[p.media_items.length]}
⚠️ Бот недоступен
Файл не загрузить
Превью недоступно

🪦 Кто топит ботов

Каждый снос бота — и автоматический, и ручная смена токена — запоминается вместе со списком тех, кто в этом боте состоял. Дальше видно, кто раз за разом оказывается рядом с умирающими ботами.
кто не заливал больше дн. — теряет одобрение во всех обмен-ботах и на входе подаёт заявку снова. VIP и штаб не трогаются. Раз в сутки. Сейчас под правило: {[reapply.would_users]} чел. / {[reapply.would_approvals]} одобр. Последний прогон: {[reapply.last]}
{[deaths.week||0]}
снесли за неделю
{[deaths.total||0]}
всего в журнале
{[deaths.avg_life_hours!==null && deaths.avg_life_hours!==undefined ? deaths.avg_life_hours+' ч' : '—']}
живут в среднем
{[(suspects.suspects||[]).length]}
под подозрением
Подозреваемые — клик по заголовку сортирует {[susRows().length]} чел.
{[c.l]} {[dSus.d>0?'▲':'▼']}
{[u.nickname||u.first_name||u.user_id]} @{[u.username]} 🚫 ❄️ 👁 {[u.deaths]} {[u.live_bots]} {[u.uploaded_to_dead]} {[u.taken||0]} / {[u.given||0]} {[u.last_before_death]} {[u.ratio]}% {[u.avg_hours_after_join!==null?u.avg_hours_after_join+' ч':'—']} {[fmtDate(u.last_death).slice(0,8)]}
{[(suspects.suspects||[]).length?'По фильтру никого.':'Пока никого: журнал только начал заполняться — записи появляются при следующих сносах.']}
Журнал сносов — клик по строке: кто был в боте {[logRows().length]}
{[c.l]} {[dLog.d>0?'▲':'▼']}
Журнал пуст

📉 Сносы по дням

Каких ботов в какой день снесли и откуда они были: аккаунт-создатель, партия, прокси аккаунта и прокси бота. Где сносы кучкуются — там и виновник.
Загрузка…

⚙️ Настройки ботов параметры · тексты · оформление

{[ settingsOpen ? '▲ свернуть' : '▼ развернуть' ]}
Боты и сервисы
Общие настройки

Найдено: {[settingsSearchResults.length]}

Попробуйте другое название или часть подсказки.

{[settingsScope]}

Обычные поля сохраняются после изменения. Тарифы, языки, таблицы игр, промо и эффекты — своей кнопкой «Сохранить».

Есть несохранённые изменения

🔄 Обмен Бот

Уровни доступа и оформление медиа. Доставка, тексты и уведомления вынесены в свои разделы.

Уровни доступа

Количество отправленных медиа для перехода на следующий уровень.

📊 Порог уровня 2 (медиа)

Сколько медиа нужно для повышения с Lv1 до Lv2

📊 Порог уровня 3

Lv2 → Lv3

📊 Порог уровня 4 (Элита)

Lv3 → Lv4 (👑 Элита)

Оформление медиа

Общая обфускация текста для обмен-ботов.

🌀 Zalgo включён

Лёгкие диакритики между буквами (анти-спам fingerprint: одинаковый текст = разный след). Выключи, если мешает читаемости. Применяется живьём в течение ~минуты.

💳 Оплата Бот

Способы оплаты, реквизиты и цены. Работа с заказами находится в разделе «Платежи».

Способы и реквизиты

Каталог партнёра и реквизиты для переводов.

🏦 Способы оплаты партнёра
{[m.label]} {[m.callback_data]} (нет в меню) 📌

Порядок и скрытие живут только у нас: «Перечитать меню» их не сбрасывает. 📌 — позиция закреплена вручную; новые способы партнёра приезжают в конец списка и закреплённые не сдвигают. Здесь же свои способы (CryptoBot, звёзды, карта) — их тоже можно скрыть и переставить.

Общий каталог способов оплаты настраивается в Cloud. Stars появляется здесь, когда включён для Nether.

Пусто. Добавьте платёжного юзербота в «Фабрике / Пуле» и нажмите «Перечитать меню».

Каталог пока пуст. Способы оплаты настраиваются в Cloud, Stars для Nether — в разделе «Платежи → Telegram Stars».

Одна ссылка на все тарифы — сумму пользователь вписывает в CryptoBot сам, бот пишет её в сообщении (в $ и ₽, с учётом личной скидки). Такие платежи подтверждаются вручную кнопкой «✅ Оплачен» в разделе Заказы.

💵 USDT TRC-20

💵 USDT Solana

💎 TON

₿ BTC

Цены и прайс

Курсы, тарифы и изображения прайса текущего проекта.

⭐ Долларов за одну звезду

Telegram по API курс не отдаёт. Сейчас ≈ 0.013.

₽ Рублей за доллар

Для справочной рублёвой цены под кнопками.

💵 Тарифы
{[planPreview(p)]}

Колонка ⭐ пустая = цена в звёздах считается из доллара по курсу; заполненная — берётся как есть (для «красивых» 249 / 499 / 999). Скидка масштабирует и её. Порядок строк = порядок кнопок у юзера. Ключ участвует в кнопках покупки: меняете ключ — старые сообщения в истории на него уже не сработают (юзер увидит «тариф изменился» и список заново). Удалённые строки удаляются из базы при сохранении.

🖼 Картинка прайса
{[slot.title]} ● ○ нет

Языковая версия важнее общей: если для языка юзера картинка есть, показывается она, иначе общая. Галочка выключает картинку у всех, файлы при этом остаются. Рестарт не нужен.

🛡 Резерв Бот

Резервный хаб использует общий каталог ботов и собственные переводы.

Как устроен резерв

Современный резерв-бот настраивается через каталог и словарь. Старые поля хаба сохранены в «Текстах и переводах → Совместимость» до окончательного вывода старой ветки из кода.

Настройки не дублируются: каждая ссылка выше ведёт к действующему редактору.

🌐 Сеть и оформление

Настройки профилей, резервных ссылок и смены токенов для текущего проекта.

Токены и переезд

Автоматическая замена токенов и уведомление пользователей.

🔁 Авторотация включена

Когда Telegram банит токен бота (устойчиво ~9 мин), система сама берёт свободный живой токен из пула и переносит название и описание через 90 минут после замены, аватарку — через 36 часов. Нет свободного токена — бот ждёт в очереди и подхватится, как только добавите новый. Забаненные токены уезжают в 🗄 Архив на странице 🪣 Пул. Свободные токены проверяются по очереди (без флуда).

📣 Сообщать юзерам о переезде забаненного бота

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

Telegram-профили

Слоганы, порядок резервов и обновление описаний.

📝 Telegram-описания: порядок резервов и пауза обновления

Оба резерва остаются в каждом описании, но одинаковый текст у всех 27 ботов — отпечаток сети, поэтому порядок чередуется. Выключено — везде один порядок.

Описания раскатываются фоном, по одному боту, в случайном порядке с этой паузой (±40%): 27 ботов × 90 с ≈ 40 мин. 0 — все сразу, как раньше.

💬 Слоган (RU)

Первая строка описания. Пусто — в описании будет только список резервных хабов.

💬 Слоган (EN)

🔄 Обновить описания у всех ботов

Перезапишет Telegram-описание у всех активных ботов (кроме gate). Обычно происходит автоматически при добавлении/свапе/бане, но кнопка форсит вручную.

{[settingsDescriptionResult]}

Резервный сайт

Общий адрес и публикация ссылок на сайте.

🌐 Резервный сайт

Самая первая строка описания у всех ботов (с https:// — иначе не кликается). Он же — в шапке каждого списка ботов (обмен, резерв, оплата). Дальше — слоган, потом «BACKUP:» и резерв-боты.

🌐 Что показывать на сайте sinao.baby

Сайт живёт в Vercel, ссылки — в его базе. Cloud обновляет группы CLOUDE PARADISE и NETHER PARADISE из обоих реестров каждую минуту. VIP находится внутри своего проекта. LINK CHECKER сохраняется; NO FORWARD — отдельная группа. Снятая галочка убирает категорию с сайта.

Эффекты сообщений

Анимация праздничных событий, списков ботов и модерации.

🎬 Эффекты сообщений

Telegram умеет проигрывать анимацию поверх сообщения (фейерверк, огонь, сердце). Работает только в личных чатах — в группах поле игнорируется. Список эффектов Telegram ботам не отдаёт, поэтому выбери пресет или вставь свой id и проверь тестом: увидишь анимацию — id верный. Если Telegram отклонит id, сообщение всё равно уйдёт, просто без эффекта.

{[ ev.hint ]}

🧩 Шаблон обмен-бота

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

Таймауты и оформление

Используются при создании нового обмен-бота.

⏳ Таймаут Lv1 (часы)

Через сколько часов без активности юзер Lv1 считается неактивным

⏳ Таймаут Lv2 (часы)

Дефолт 12

⏳ Таймаут Lv3 (часы)

Дефолт 36

⏳ Таймаут Lv4 (часы)

Дефолт 72. VIP — без лимита

🫥 Спойлер по умолчанию

С каким значением создаётся новый бот

📝 Подписи к медиа

Разрешить юзерам дописывать текст к медиа

⭐ Рейтинги (реакции)

Поштучная доставка с кнопками реакций

Применить к существующим

Массовая операция перезаписывает выбранные настройки всех обмен-ботов.

📤 Применить шаблон к существующим ботам

Проверка перед применением · {[projectKey==='nether'?'Nether':'Cloud']}

Будут перезаписаны настройки обмен-ботов: {[settingsBulk.count]}.

  • {[row]}

Индивидуальные значения указанных параметров будут заменены. Остальные параметры сохранятся.

{[settingsBulkResult]}

Перезапишет значения у всех обмен-ботов. Таймауты подхватываются живьём, без рестарта.

🌐 Языки ботов

Для всех типов ботов текущего проекта. Cloud и Nether настраиваются отдельно.

{[languageError]}

Доступные языки и язык по умолчанию
Доступные языки

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

Загрузка…

✅ Настройки языка сохранены.

📝 Тексты и переводы

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

{[phraseStatus]}

Загружаю словари…

Не удалось загрузить список фраз.
Общие тексты обмена

Индивидуальные тексты карточки бота могут перекрывать эти значения. Пустое поле оставляет следующий доступный текст по правилам обработчика.

💬 Текст приветствия /start

Показывается при первом /start (Markdown поддерживается)

📜 Правила бота

Текст команды /rules

📜 Правила (RU)
Общие тексты оплаты

Сохраняются в существующие настройки оплаты, без изменения приоритета переводов.

👋 Приветствие (первый экран /start)

Поля: русский, английский, китайский. Пусто = текст по умолчанию из кода бота.

💎 Что даёт VIP (кнопка «Что дает VIP?»)
🧾 Заголовок экрана тарифов
Промо под медиа

Тексты кампании и частота показов в выдаче.

📣 Промо-строки в подписи под медиа
≈ {[promoData.shows_per_week||0]} показов в неделю (медиа за неделю: {[promoData.media_week||0]}) 0 = промо выключено полностью

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

Текст RUТекст ENДругие языки КомуВес Показов
🌐 ZH / ES / PT
{[l.shows||0]}

«Кому»: без VIP — для продающих строк, рекламировать VIP владельцу VIP бессмысленно; только VIP — подсказки про /history, /filter, /hideoff, которые без VIP не работают. Галочка слева включает и выключает строку, не удаляя её. Вес — шанс выпасть среди подходящих: вес 3 против веса 1 выпадает втрое чаще. Вес 0 = строка не показывается.

Так это выглядит у юзера:
👤 #nickname ⭐🌧
{[promoPreview]}
Совместимость: старый хаб

Старый хаб внутри обмен-бота. Современный резерв-бот эти поля не читает; сохранённые значения и обработка старых кнопок оставлены.

🛡 Главный текст Хаба (RU) Старая ветка хаба

Markdown. Читается только старой веткой хаба в обмен-боте, когда его ID совпадает с BACKUP_BOT_TOKEN. Современный резерв-бот этот текст не читает: его фразы находятся в «Текстах и переводах» → «Резерв — хаб». Поле сохранено до проверки использования старой ветки.

📚 Список ресурсов (RU) Старая ветка хаба

Список для старого хаба в обмен-боте и ответа на кнопку hub:resources, в том числе в ранее отправленных сообщениях. Современный резерв-бот это поле не читает. Перед удалением нужно проверить использование старого хаба.

🔗 Ссылка на главного бота Старая ветка хаба

Старая ветка хаба в обмен-боте: кнопка главного бота. Оплата-бот это поле не читает. Перед удалением нужно проверить, используется ли режим хаба.

🎰 Казино — настройки

Баланс ⭐, слоты и колесо в оплата-боте. Шансы — веса в таблицах ниже; RNG криптостойкий, исход выбирается до анимации.

Доступ и ограничения

Режим работы, пополнения, лимиты и защита от злоупотреблений.

Режим

В тесте кнопку 🎰 и игры видят только админы, овнеры и тестеры; рассылок нет. «Для всех» — открывает всем и включает анонсы.

➕ Пакеты пополнения, ⭐

Через запятую. Цена в ₽ — по курсам из настроек цен.

🛑 Платных круток в сутки на человека

⏸ Пауза после пустых подряд
пустых → мин

Только платные крутки. 0 — без паузы.

🔥 Серия кубика в чате

🎟 Приветственная крутка в оплата-боте

🕵️ Антифарм: активаций друзей в день → штабу

Уведомление «возможный фарм» (событие 🎰 Крупный выигрыш). 0 — выкл.

Игры и призы

Цена крутки, веса исходов и таблицы призов для каждой игры.

{[({slots:'🎰 Слоты',wheel:'🎡 Колесо',wheel_free:'🎡 Бесплатное колесо',boxes:'📦 Коробки',dice:'🎲 Кубик дня'})[name]||name]}
RTP по прайсу ≈ {[casinoRtp(g)]}%
веспризшанс
{[casinoOdds(g,i)]}
{[casinoMsg]}

Призы: vip:N (дней VIP в банк), nolimit:N (дней без лимитов), discount:P (% на VIP, 24 ч), stars:N, spins:N, achievement:код, none. Шанс = вес / сумма весов. Обязателен хотя бы один none.

Анонс и напоминания

Тексты анонса и период напоминания об игре в чате.

📣 Анонс казино
{[casinoMsg]}

В режиме теста уходит только штабу и тестерам (проверить текст), в режиме «для всех» — всем одобренным без бана.

🎲 Напоминание в чате, дней

Если человек не бросал кубик дня N дней подряд — одно напоминание, только в режиме «для всех».

Статистика за 30 дней
пополнений {[casinoStats.topups]} на {[casinoStats.topup_stars]} ⭐ платных круток {[casinoStats.paid_spins]} · потрачено {[casinoStats.stars_spent]} ⭐ бесплатных {[casinoStats.free_spins]} выигрышей {[casinoStats.wins]} · RTP факт {[casinoStats.rtp==null?'—':Math.round(casinoStats.rtp*100)+'%']} VIP с баланса {[casinoStats.vip_buys]} на {[casinoStats.vip_buy_stars]} ⭐ игроков {[casinoStats.players]} на балансах: {[casinoStats.liabilities.stars]} ⭐ · {[casinoStats.liabilities.vip_days]} дн. VIP в банках · {[casinoStats.liabilities.free_spins]} 🎟
Призы: {[p.prize]}×{[p.count]}
Операции

💳 Платежи

Заказы, поступления и ситуации, которые нужно разобрать.

🧾 Заказы
Страница {[orderPage+1]}
когдактотарифсуммаспособстатус
{[ (o.created_at||'').replace('T',' ').slice(5,16) ]} {[o.nickname||o.user_id]} {[o.plan_key]} · {[ o.days===0?'∞':o.days+'д' ]} {[o.method_cb==='payment_stars_partner' ? o.stars+' ⭐' : o.amount_rub+' ₽']} {[ o.provider || o.method_cb || '—' ]} ✅ оплачен 💰 деньги получены · выдача ожидает ⚠️ неоднозначно ⏳ ждёт {[o.status]} 🔗
Заказов пока нет.

«✅ Оплачен» выдаёт VIP и гасит скидку. Повторное нажатие ничего не удвоит — начисление идёт через единую точку с защитой от дублей.

💰 Платежи Оплачено: {[payStats.paid_count||0]} · {[payStats.stars_total||0]} ⭐ · возвратов: {[payStats.refunded_count||0]}
когдактотарифсуммаднейстатус
{[ (p.created_at||'').replace('T',' ').slice(0,16) ]} {[p.nickname||p.user_id]} {[p.plan||'—']} {[ p.stars ? p.stars+' ⭐' : p.method ]} {[ p.days===0 ? '∞' : p.days ]} ↩️ возвращён 👑 навсегда 🌟 до {[ (p.vip_expires_at||'').slice(0,10) ]} —

Возврат отправляет звёзды обратно покупателю и снимает выданный за них VIP. Проверка gate не снимается — её проходят сами. Отменить возврат нельзя.

⚠️ Подтверждения без заказа
Неразобранных подтверждений нет.
{[r.receipt_key]}{[r.provider==='stars_partner'?'⭐ по ID заявки':(r.amount_rub===null?'сумма не разобрана':r.amount_rub+' ₽')]} {[r.provider||'способ неизвестен']}заказ {[r.attempted_order_id||'не определён']} {[r.project_key]}

Проверяйте подтверждение у партнёра и совпадение суммы до привязки. Сообщения без суммы требуют отдельной проверки оплаты.

🔒 Удержанные суммы старых счетов
Сумм с риском поздней оплаты нет.
Заказ #{[h.id]} · user {[h.user_id]} · {[h.amount_rub]} ₽ · {[h.status]} {[h.method_cb||'']}

Сумма не выдаётся новому заказу, пока старый счёт ещё может быть оплачен. Освобождайте только после проверки у партнёра, что счёт безвозвратно закрыт и неразобранных оплат по нему нет.

⭐ Ссылки Telegram Stars не хватает {[starsCfg.missing.length]}

Звёзды принимает канал: создайте в нём платную инвайт-ссылку под каждую сумму ниже. Бот выдаст человеку ссылку под его тариф и скидку, после вступления VIP выдаёт кассир (ниже) или вы — через 💬 Чат. Ссылки нет → человек идёт через оператора, а в чат падает подсказка, какую создать.

🛠 Создать в канале ссылки на:
{[m.stars]} ⭐ — {[m.title]} (−{[m.pct]}%)
Тариф {[p?'−'+p+'%':'без скидки']}
{[pl.title]}
{[pl.days?pl.days+' дн.':'навсегда']}
{[pl.cells[String(p)].stars]} ⭐
🔥 Доплата до пачки

Telegram продаёт звёзды пачками (250, 500, 1000…), и со скидкой у человека всегда остаётся хвост: тариф 400 ⭐ → пачка 500 ⭐ → 100 ⭐ виснут на балансе. Создайте в канале платную ссылку ровно на номинал пачки — бот покажет её второй кнопкой «Выгоднее», а кассир выдаст указанный срок (узнаёт ссылку и по сумме).

Пачка Даёт Ссылка на эту сумму
{[pk.pack]} ⭐ {[pk.title]}

Пусто — значения по умолчанию: 250 ⭐ → 10 дней, 500 ⭐ → 45 дней, 1000 ⭐ → 110 дней, 2500 ⭐ → 400 дней, 10000 ⭐ → навсегда. Предложение показывается, только когда оно реально выгоднее тарифа человека.

⭐ Докупка остатком (2-й канал)

Человек купил тариф за 400 ⭐, Telegram продал ему пачку 500 — 100 ⭐ остались. Через 2–3 мин после выдачи VIP бот предложит обменять их на дни по ссылке ровно на остаток. Ссылки — во втором канале: в основном он уже состоит. Второй канал же отдаётся и при обычной повторной покупке (вторая строка в ячейках тарифов). Список сумм считан по всем тарифам и скидкам.

Остаток Даёт Ссылка во 2-м канале на эту сумму
{[lf.amount]} ⭐ +{[lf.days]} дн.

Дни считаются от тарифа, из которого остаток возникает: его цена дня минус скидка, но не дешевле самого выгодного тарифа (иначе ссылку начнут пересылать как лучшую покупку). «Навсегда» и остатки без реальной скидки в список не попадают.

Ссылка на чат уходит вместе с сообщением о VIP — и при покупке, и когда выдаёте вручную (здесь или /setvip). Пожизненный получает всегда.

Кассир раз в минуту принимает заявки штаба, пожизненных и тех, у кого действующий VIP с покупкой от «дней VIP» выше; остальных (7 дней, истёкшие, чужие) отклоняет. Паузы 3–8 с, до 20 заявок за проход, итог — штабу.

🏧 Кассир — автовыдача VIP за вступление в канал

Ботов в канал не добавляем. Вступления по платным ссылкам читает личный аккаунт — он должен быть админом канала. {[projectKey==='nether'?'Для Nether используется общий аккаунт-кассир Cloud; настройте отдельные каналы и VIP-чат Nether.':'Войдите им ниже, в разделе 🤖 Юзерботы (вход по номеру); такие аккаунты фабрика не трогает.']} Вступление по ссылке из таблицы выдаёт VIP этого проекта. Первый запуск только запоминает текущее состояние, старые вступления не трогает.

📨 Уведомления за Stars-покупки

«Отправляется» означает неопределённый ответ Telegram. Проверьте чат исходного платёжного бота до повтора.

#{[n.id]} · {[n.user_id]} · {[n.days||'∞']} дн. · {[n.status]} {[n.error]}
Доставка сообщений

🔔 Уведомления

Отдельные настройки для штаба и пользователей ботов.

🔔 Уведомления штаба
Событие 👑 Владельцы 🛡 Админы
{[e.title]}
{[e.hint]}

Заявки и жалобы приходят карточками из самого бота тем, кто его открывал; сюда попадают только те, до кого карточка не дошла. Сохраняется сразу, рестарт не нужен.

Проверить доставку — кому и через какой бот доходит
{[p.role==='owner'?'👑':'🛡']} {[p.nick]} {[p.user_id]} {[staffTest[p.user_id].ok?('✅ через '+staffTest[p.user_id].via):'❌ ни один бот не дотянулся']}

📋 Реестр ботов

🛡 Порядок в резервном боте

Секции всегда идут в этом порядке: 🔄 Обмен → 💬 Чат → 💳 Оплата → 🛡 Резерв → 🔀 NoForward → 🚪 Вход. Стрелками меняется порядок внутри секции. NoForward и Gate по умолчанию скрыты — включи галочкой «показывать». У обмен-ботов тут же задаётся 📁 папка: пусто = «Прочее». Папки появляются в списке, когда обмен-ботов 7+ и папок хотя бы две; порядок папок — по первому боту в ней, то есть теми же стрелками.
{[sec.title]} ({[sec.items.length]})
— нет ботов
{[idx+1]} {[b.emoji]} {[botListName(b.display_name||b.username)]} @{[b.username]} ⛔ 🔕
{[bot.bot_type=='exchange'?'🔄':bot.bot_type=='payment'?'💳':bot.bot_type=='gate'?'🚪':bot.bot_type=='noforward'?'🔀':bot.bot_type=='chat'?'💬':bot.bot_type=='promo'?'🎁':'🛡']} {[bot.emoji]} {[botListName(bot.display_name||bot.username)]}
@{[bot.username]} · {[bot.bot_id]}
[{[bot.category]}]
{[bot.health_label||botHealthLabel(bot.health)]}
{[ bot.autorotate===false ? '🔒 без авто-смены' : '🔄 авто-смена' ]}
{[ bot.proxy_country || bot.proxy_addr ]}
🏠 напрямую
🙈 Скрыт Telegram
⛔ BANNED
🔕 Inactive
♥ {[bot.heartbeat_age]}s
👥 {[bot.user_count||0]} юзеров 🟢 {[bot.active_24h]} за сутки 🗂 {[bot.media_count]} медиа ✅ {[bot.passed]} прошли 🔀 {[bot.media_24h||0]} медиа/сутки 💬 {[bot.messages_24h||0]} сообщений/сутки 💳 {[bot.payments_24h||0]} оплат/сутки ⏳ {[bot.pending_approvals]} заявок 📥 {[bot.collecting]} набирают 💬 Подписи ⚠ {[bot.tg_reason]}
{[bot.description]}
🆕 Выбрано ботов: {[annPicked.length]} Уйдут одним сообщением — списком со ссылками
🤖
Нет зарегистрированных ботов в реестре
Добавьте бота, вставив его токен

📋 Журнал модерации

ВремяКтоПользовательБотДействиеПричина / срокПодробности
{[fmtDate(e.created_at)]}{[e.actor_name||e.actor_id|| (e.actor_source==='web'?'Веб-админка':'Автоматически')]}{[e.user_id]}{[e.bot_name||e.bot_id||'—']}{[modLabel(e.action)]}{[e.reason||'—']}
До {[fmtDate(e.until_at)]}
Показать
Очистка #{[e.details.job_id]} · {[e.details.scope==='all'?'Все боты':'Один бот']} · Объектов: {[e.details.count]}
Бот {[bid]}: удалено копий {[b.removed||0]}, не удалось {[b.failed||0]}, без привязки {[b.untracked||0]}
Решение применено.
Записей пока нет. Журнал ведётся с этого обновления.
{[modJournal.page]} · Всего {[modJournal.total]}

Очистки медиа

#{[j.id]} · {[j.user_id]} · {[j.scope==='all'?'Все боты':'Один бот']} · {[cleanupStatus(j.status)]}
Обработано {[j.completed]}/{[j.total]} · Удалено копий {[j.removed]} · Не удалось {[j.failed]}
{[r.reason]}: {[r.count]}
Повтор: очистка #{[j.retry_job_id]}
По ботам
{[b.name||bid]}: обработано {[b.items]}, удалено копий {[b.removed]}, не удалось {[b.failed]}, без привязки {[b.untracked]}

🗑 Очистка пользователя {[cleanupPreview.user_id]}

Всего: {[cleanupPreview.total]}. Список фиксируется сейчас; новые отправления не затрагиваются.

{[b.name]} — {[b.media]} медиа, {[b.messages]} сообщений, {[b.copies]} NF-копий

Старые копии без сохранённой привязки или за пределами срока Telegram могут остаться у получателей. Результат появится в журнале.

🌐 Прокси для всех ботов

Обмен, промо, резерв, NoForward, gate, чат и оплата. Выключено — боты соединяются с Telegram напрямую. Применяется в течение 10 секунд; текущий запрос может завершиться позже.

Прокси Telegram-аккаунтов и фабрики управляются отдельно.

{[g.bot_type==='promo'?'🎁':'🔄']} {[g.name]}
{[g.size]} в очереди

Ботов: {[g.bots_total]} · на паузе: {[g.paused_bots]}
Раздаётся сейчас: {[g.active_senders]} · ждут отправители: {[g.sender_queue_size]}
Ограничены Telegram: {[g.floodwait_users_count]} получателей · до {[Math.ceil(g.floodwait_remaining/60)]} мин

Обычно до начала раздачи: {[waitTime(g.avg_start_seconds)]}
Старейшее ожидающее медиа: {[waitTime(g.oldest_wait_seconds)]}
Ждут дольше {[g.wait_threshold_minutes]} мин: {[g.overdue_count||0]} · на проверке: {[g.pending_review||0]}

Bot API за 15 минут: {[g.requests]} запросов · {[g.errors]} ошибок
Среднее время запроса: {[g.avg_ms===null?'—':g.avg_ms+' мс']}

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

⏳ Пороги ожидания и уведомлений

Уведомления включаются в разделе «Уведомления → Штабу». Проблема должна подтвердиться двумя проверками; затем отправляется один сигнал и сообщение о восстановлении.

Скорость и ошибки Bot API · последние 15 минут

Среднее время запроса к Telegram, без длительного опроса getUpdates. Это время запроса, а не ожидание сообщения в очереди. Пусто — ещё нет измерений.

БотПодключениеЗапросыСреднееОшибкиПоследняя ошибка
{[g.name]}
{[b.name]}{[b.route==='direct'?'Напрямую':b.route==='proxy'?'Прокси':'—']}{[b.requests]}{[b.avg_ms===null?'—':b.avg_ms+' мс']}{[b.errors]}{[b.last_error||'—']}
⚙️ Настройки:

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

🌊 FloodWait от Telegram

429-е приходят, когда бот шлёт быстрее, чем Telegram разрешает. Единичные — норма, но систематический флуд Telegram наказывает баном токена. Считается по всем ботам сразу.

{[flood.hour||0]}
за час
{[flood.day||0]}
за сутки
{[flood.week||0]}
за неделю
{[flood.worst_wait||0]}с
худшее ожидание
Боты (24ч)
{[b.name]}{[b.count]}
Методы (24ч)
{[m.method]}{[m.count]}
Последние события
{[fmtDate(e.at)]} · {[e.bot]} · {[e.method]} · ждать {[e.retry_after]}с · чат {[e.chat_id]}
Событий нет — либо всё спокойно, либо боты ещё не перезапускались после включения учёта.
🛡 Профилактика: паузы перед отправкой

Действуют на все исходящие сообщения всех ботов — раздачу, эхо медиа, заявки, рассылки. Применяются в течение минуты, перезапуск не нужен. 0 = выключить.

♻️ Дубли

Файл ловится по паспорту Telegram (file_unique_id) и по отпечатку из метаданных (размеры × длительность × байты). Уровень за файл начисляется один раз на всю экосистему — тот же файл в другом боте раздаётся, но не засчитывается. Спам дублями → авто-варн по общей лестнице.

{[dupes.day||0]}
дублей за сутки
{[dupes.week||0]}
за неделю
{[dupes.sig_week||0]}
только по отпечатку
{[dupes.warns_week||0]}
авто-варнов за неделю
Кто шлёт дубли (24ч)
{[u.user_id]} {[u.nick]} ⚠️ {[u.n]} ({[u.pool]}/{[u.apps]})
Боты (24ч)
{[b.name]}{[b.count]}
Совпадения только по отпечатку — проверить на ложные

Паспорт файла не совпал, совпали размеры и байты. Для видео это почти наверняка тот же файл; у фото стоит выборочно глянуть по /user, не режем ли разные картинки.

{[fmtDate(e.at)]} · {[e.bot]} · {[e.user_id]} {[e.nick]} · {[e.kind]} · {[e.fuid]}
Дублей пока не было.
⚠️ Когда варнить
⚡ ТЕМП
{[queueSpeed]}
сообщений/сек на бота
пауза {[queueData.rate]}с · сбор {[queueData.batch]}с
📦 В ОЧЕРЕДИ
{[queueData.size||0]}
⚡ {[queueData.active_senders]} раздаётся сейчас ⏳ {[queueData.sender_queue_size]} ждут очереди Очередь пуста
👥 В последней раздаче: {[queueData.recipient_count]}
🔄 СТАТУС
{[queueData.paused ? '⏸ ПАУЗА' : '▶ ИДЁТ']}
{[queueData.bots_total||0]} обменных и промо-ботов · на паузе: {[queueData.paused_bots]} {[queueData.paused ? 'выдача остановлена' : 'выдача идёт']}
🚨 Telegram притормозил отправку
Осталось ждать ~{[Math.ceil(queueData.floodwait_remaining/60)]} мин, пропускается получателей: {[queueData.floodwait_users_count]}. Остальным медиа продолжают идти.

⚙️ Скорость

Чем короче пауза, тем быстрее расходится пачка. Лимиты Telegram начинаются примерно с 30 сообщений в секунду — рисковать ради секунд смысла мало.
{[queueData.rate]}с
0.05с1с2с
{[queueData.batch]}с
Сколько ждём следующих файлов от того же человека, чтобы отправить их одним альбомом.
1с5с10с15с
Выдавать всем подряд
Не смотреть, присылает ли человек что-то сам
↩️ Возвращать копию автору
Сейчас бот удаляет присланное сообщение и шлёт копию от себя — ради анонимности. Выключить: копия не приходит, зато сообщение человека остаётся на месте, и бот экономит одно исходящее на каждый принятый файл.
📨 Пересылать от автора (эксперимент)
Медиа уходит получателям как пересланное сообщение от отправителя, а не от бота. Без подписей, спойлеров и кнопок реакций; альбом сохраняется как у автора. Оригинал в чате автора не удаляется. Что прислано до включения — уходит по-старому. Выключается в любой момент, ничего не ломает. Анонимность отправителя пропадает (если у него не скрыта пересылка в настройках Telegram).
⚡ Отправлять в несколько потоков
Быстрее в разы. При первом же ограничении Telegram бот сам вернётся к одному потоку.
Потоков {[queueData.parallel_concurrency]}
Управление {[queueScope ? '— выбранный бот' : '— все обменные и промо-боты']}
📥 Лимит загрузки
Каждый принятый файл уходит всей аудитории бота, поэтому объём заливки и есть главный источник исходящих — сейчас {[(upCfg.outgoing_24h||0).toLocaleString('ru')]} отправок в сутки. Лимит считается для каждого бота отдельно: прислал норму в одного — можно продолжить в другом. VIP, админов и владельца не касается.
Ограничивать загрузку
Выключить — принимаем сколько пришлют, как было раньше
{[upCfg.per_window]}
Сколько файлов человек может прислать одному боту за окно. 0 — без лимита.
050150300
{[upCfg.window_hours]} ч
Отсчёт идёт от первого файла: прислал норму — ждёт до конца окна. Получается {[uploadPerDay]} медиа в сутки на одного бота с человека.
1 ч6 ч24 ч48 ч
Кто больше всех прислал за последние {[upCfg.window_hours_used||upCfg.window_hours]} ч (в разрезе бота)
Человек Бот Медиа Под лимитом
{[u.nickname||u.user_id]} @{[u.username]} {[u.bot||'—']} {[u.media]} {[ !upCfg.enabled ? 'лимит выключен' : (!upCfg.per_window ? 'без лимита' : (u.media>upCfg.per_window ? ('срезало бы на '+(u.media-upCfg.per_window)) : 'проходит')) ]}
За это окно никто ничего не присылал
🔥 Прогрев новых ботов
Свежий бот первые часы не берёт заявки: люди присылают свои 10 файлов и ждут, бот в это время почти ничего не рассылает. Файлы не пропадают — как только прогрев кончится, заявки уйдут на проверку обычным порядком. Свежие токены сейчас живут 12–37 часов, так что запас имеет смысл.
{[upCfg.warmup_hours ? upCfg.warmup_hours+' ч' : 'выключено']}
0 (выкл)24 ч72 ч120 ч
Отсчёт от даты заведения бота в админке. На уже работающие боты не влияет — у них этот срок давно прошёл.
📦 Архив при входе
Новичку бот предлагает прислать последние медиа и ждёт ответа — в том же сообщении рассказывает про VIP. VIP, админы и владелец получают весь архив сразу, без вопросов. Самый большой архив сейчас: {[archCfg.biggest[0].media]}— медиа (@{[archCfg.biggest[0].username]}).
Спрашивать у обычных юзеров
Выключить — архив снова поедет сразу после входа, как раньше
{[archCfg.limit_regular]}
Последние N файлов. VIP это ограничение не касается — им едет всё.
503001000
{[archCfg.album_delay]}с
Альбом — 10 медиа. При {[archCfg.album_delay]}с {[archCfg.limit_regular]} файлов уедут за {[archTime]}.
15с90с300с
{[archCfg.parallel_max]}
Сколько человек получают архив параллельно из одного бота. Остальные ждут своей очереди.
{[archCfg.user_gap]}
Из одного бота архив едет одному человеку за раз, следующий ждёт эту паузу. Друг купил VIP → VIP получили оба — им не польётся разом. 0 = слать параллельно (как раньше).
Пропускать вперёд живую раздачу
Пока бот раздаёт свежее медиа, архив ждёт — но не дольше пяти минут
🎁 Промо-боты (свободный обмен)
Вход без заявки и gate. Медиа приходят капельницей — тем реже, чем меньше человек отдаёт сам; в паузах бот напоминает про VIP и «5 друзей». Очередь и защита от флуда — те же, что у обмена (темп каждого промо-бота правится выше, в селекторе «Настройки»). Ботов: {[(promoCfg.bots||[]).length]} — {[i?', ':'']}{[b.emoji]} @{[b.username]} ({[b.users]} чел., {[b.media_24h]} медиа/сутки). создать — 🤖 Боты → ➕ Добавить → тип «🎁 Промо-бот».
👥 из промо: {[promoCfg.funnel.promo_users||0]} 🚀 старт: {[promoCfg.funnel.promo_start||0]} 🎁 активаций друзей: {[promoCfg.funnel.promo_ref_activated||0]} 🔓 открыли вход: {[promoCfg.funnel.promo_ref_target||0]} ⏳ напоминаний: {[promoCfg.funnel.promo_nudge||0]} 💎 VIP из промо: {[promoCfg.funnel.vip_from_promo||0]}
{[promoCfg.drip_sec]} с
Личный интервал получения после прохождения gate. VIP и штаб получают без личной паузы.
{[promoCfg.drip_slow_sec]} с
Есть хотя бы одна принятая отправка за сутки в этом боте.
{[promoCfg.drip_idle_sec]} с
За сутки ничего не прислал.
{[promoCfg.nudge_min]} мин
Не чаще раза в столько минут: «следующее через…, VIP, друзья N/5».
{[promoCfg.nudge_day_max]}
Потолок на человека за 24 ч; дальше молчим до его следующего медиа. 17.09 без потолка люди получали по 9–18.
Без остановки по неактивности

Если человек не присылает медиа, новые поступают с интервалом «Без отправок». Давность активности не отключает промо-поток.

{[promoCfg.ref_target]}
Столько активированных приглашённых открывают gate_passed.
{[promoCfg.caption_every]}
Строки с аудиторией «промо» из блока промо-строк. 0 — выключить.
{[promoCfg.archive_n]}
Прошедшим gate — до N медиа по кнопке. VIP и штабу — полный архив. До gate архив закрыт.
{[promoCfg.archive_delay_sec]} с
Архив выдаётся отдельно от основной очереди, альбомами по 10 медиа.
{[promoCfg.discount_pct]}%
Персональный оффер при регистрации в промо; виден в питче и напоминаниях, оплата-бот применит сам. 0 — без скидки.
{[promoCfg.discount_hours]} ч
Часов с момента регистрации.
Подстановки: {categories} (список ботов — цитатой), {target}, {have}. Разметка: *жирный*, _курсив_. Пусто — встроенный текст.
{categories}, {target}, {have}
{wait}, {have}, {target}
{wait}, {have}, {target}
{have}, {target}
{have}, {target}
{target}, {reserve}
{target}, {reserve}
Второе сообщение при входе («📤 Присылай фото и видео…»). Разметка: *жирный*, _курсив_, `код`, [текст](ссылка). Пусто — встроенный текст.
{bot} — @юзернейм живого промо-бота. Показывается после заявки в gate, при повторе и в резерве.
{bot}
📜 Правила / /rules в промо. {target}. Пусто — встроенный текст. Правила в карточке бота (rules_text) перебивают.
{target}
🚪 Выдача gate-ботов
Каждая заявка уезжает всем администраторам — сейчас их {[gateCfg.admins||0]}. Заявка на 100 медиа это 10 альбомов каждому, поэтому два числа ниже решают, как бот выглядит со стороны Telegram.
{[gateCfg.album_delay]}с
Внутри одной заявки. При 30с сотня медиа уезжает одному человеку примерно за 5 минут.
5с30с60с120с
{[gateCfg.stagger]}с
Насколько позже стартует каждый следующий получатель. Ноль — все разом, как было раньше: залп одинаковых альбомов на два десятка чатов.
0 (разом)15с30с60с
{[gateCfg.vip_delay]}с
Одобренная заявка едет всем VIP одним потоком: не больше одного альбома с бота за этот срок. При 60с и 24 VIP сотня медиа расходится примерно за 4 часа.
15с60с300с600с

Последний из {[gateCfg.admins||0]} получателей начнёт примерно через {[gateLastStart]}, вся заявка разойдётся за {[gateFullTime]}.

{[b.emoji]} {[botListName(b.display_name||b.username)]} · порог {[b.threshold]} медиа · забанен
🤖 По ботам
Свои настройки перебивают общие. Нажмите на строку, чтобы править именно этого бота.
Бот Пауза/сбор В очереди Аудитория ОжиданиеПричина / состояние
{[b.emoji]} {[b.username||b.bot_id]} {[b.bot_type==='promo'?'промо':'обмен']} ⚙️ {[b.effective.rate]}с / {[b.effective.batch]}с {[b.size]} {[b.recipient_count]} Старейшее: {[waitTime(b.oldest_wait_seconds)]}
Долго ждут: {[b.overdue_count||0]} · до старта: {[waitTime(b.avg_start_seconds)]}
{[b.state_label||'—']}
Почему / что делать

{[b.explanation]}

На проверке: {[b.pending_review]}

Обменных и промо-ботов нет
{[u.nickname?u.nickname[0].toUpperCase():'?']} {[u.unread_count>9?'9+':u.unread_count]}
🔴 💳 ⚠️ {[u.nickname||u.first_name]} 👑 🛡️ 💎 ⭐ L{[u.level]} 🚫 ❄️ 🔇 {[tgName(u,16)]}
{[tgFull(u,28)]}
{[chatPreviewLine(u)]}
Выберите пользователя для начала диалога
{[gatePassedTotal===null?'Загрузка…':(gatePassedTotal ? (gateShownOffset+1)+'–'+(gateShownOffset+gatePassed.length)+' из '+gatePassedTotal : '0 результатов')]}
Юзер Дата Через бота Одобрил L Меdia Дн. ⚠️ Статус ⚙
{[u.nickname||u.first_name||'—']} 👑 🛡 ⭐
@{[u.username||'—']} · {[u.user_id]}
{[fmtDate(u.gate_passed_at)]} {[u.gate_bot_username?'@'+u.gate_bot_username:'—']} {[u.approver_nick||(u.gate_approved_by?u.gate_approved_by:'auto')]} {[u.level||0]} {[u.media_sent_count]} {[u.days_active!==null?u.days_active:'—']} {[u.reports_against||'']} 🚫 ❄
{[gateLoading?'Загрузка…':(gateError?'Не удалось загрузить — нажмите 🔄':'Никто не прошёл')]}
{[gatePassedTotal===null?'Загрузка…':(gatePassedTotal ? (gateShownOffset+1)+'–'+(gateShownOffset+gatePassed.length)+' из '+gatePassedTotal : '0 результатов')]}
Юзер Бот Прогресс Старт Last media Submitted Decision
{[u.nickname||u.first_name||'—']} 🚫
@{[u.username||'—']} · {[u.user_id]}
@{[u.bot_username||'—']} {[u.media_count]}/{[u.threshold]}
{[fmtDate(u.started_at)]} {[fmtDate(u.last_media_at)]} {[u.submitted_at?fmtDate(u.submitted_at):'—']} {[u.decision||'—']}
{[gateLoading?'Загрузка…':(gateError?'Не удалось загрузить — нажмите 🔄':'Очередь пуста')]}
👤 Всего юзеров
{[nfStatsLoaded?(nfStats.total_users||0):'…']}
🟢 Активны (7д)
{[nfStatsLoaded?(nfStats.active_users||0):'…']}
💳 Premium (всего)
{[nfStatsLoaded?(nfStats.premium_count||0):'…']}
включая admin/owner/VIP
📤 Медиа сегодня
{[nfStatsLoaded?(nfStats.media_today||0):'…']}
🗂 Медиа всего
{[nfStatsLoaded?(nfStats.media_total||0):'…']}
🎁 Рефералов
{[nfStatsLoaded?(nfStats.referrals_total||0):'…']}
{[nfUsers.length?(nfShownOffset+1)+'–'+(nfShownOffset+nfUsers.length):nfUsersLoading?'Загрузка…':nfUsersError?'Ошибка загрузки':'Нет результатов']}
Юзер Бот Lang Режим Linked Медиа 🎁 Рефы Статус Последняя активность ⚙️
{[u.first_name||'—']} 🚫
@{[u.username||'—']} · {[u.user_id]}
{[u.bot_id]} {[u.language]} {[u.send_mode]} {[u.linked_count]} {[u.media_total||0]} +{[u.media_today]} {[u.referrals_count]} 0 /+{[u.referrals_days]}d ← 👑 🛡 🌟 💳 🚫 🔇 — {[u.last_active?fmtDate(u.last_active):'—']}
{[nfUsersLoading?'Загрузка…':(nfUsersError?'Не удалось загрузить пользователей':'Нет юзеров')]}
{[nfUsers.length?(nfShownOffset+1)+'–'+(nfShownOffset+nfUsers.length):'Нет результатов']}
🤖 Платёжные юзерботы

Аккаунты для работы с партнёрским ботом оплаты. Доступные действия зависят от роли.

🤖 Юзерботы
{[a.phone]} @{[a.username]} 🧊 заморожен 💀 мёртв {[ a.protected ? '🛡 есть резерв' : '⚠️ без резерва' ]} сессий: {[ a.sessions.map(s => s.role).join(', ') || '—' ]}
Ни одного аккаунта. Добавьте номер ниже.

{[ ubHint ]}

⏳ Загружаем пул токенов…

{[poolLoadError]}

{[ swapCandidates.length ]} свободных · 🧊 {[frozenTokens.length]} на мёрзлых аккаунтах · 🛡 {[heldTokens.length]} в резерве · {[ tokenPool.length ]} всего · {[ tokenPool.filter(x=>x.used_at).length ]} занятых · 🗄 {[ tokenPool.filter(x=>x.is_alive===false).length ]} в архиве
Бот / Токен Статус Заметки Добавлен ⚙
@{[t.username||'—']} #{[t.bot_id]}
{[t.token]}
✅ Свободен
🔍 проверен {[fmtDate(t.last_checked_at)]}
🟡 {[t.used_bot_type_label||'Бот']}
@{[t.used_bot_username||('ID '+t.used_for_bot_id)]}
{[t.used_bot_display_name]}
{[t.ping_result.ok ? '✅ Рабочий · @'+t.ping_result.username : '❌ '+t.ping_result.error]}
{[t.notes||'—']} {[fmtDate(t.created_at)]}
Живых токенов в пуле нет. Добавьте токен или загрузите сессии в фабрику ниже.
стр. {[ Math.min(poolPage,poolPageCount-1)+1 ]} из {[ poolPageCount ]} · всего {[ poolLive.length ]}
💀 @{[t.username||'—']} #{[t.bot_id]}
{[t.token]}
💀 Забанен
🔍 {[fmtDate(t.last_checked_at)]}
{[t.ping_result.ok ? '✅ Рабочий · @'+t.ping_result.username : '❌ '+t.ping_result.error]}
{[t.notes||'—']}
💡 Забанят бот — авторотация сама подхватит свободный живой токен из пула (переносит имя/описание/аватар). Вручную: «🪣 Свапнуть из пула» в карточке бота на 🤖 Боты. Мёртвые токены уходят в 🗄 Архив и не удаляются — если Telegram разбанит, перепроверка (🔍) вернёт их в строй.

🏭 Фабрика ботов — загружаешь сессии пачкой, получаешь токены в пул

📥 В очереди загрузки: {[farm.state.queued_uploads]} файлов ({[farm.state.queued_batches]} пачек) выбрано: {[ farmSelIds.length ]} · операции пойдут по ним ничего не выбрано · разведка возьмёт {[ farmCount('scan') ]}, прогон — {[ farmCount('run') ]}
выделить:

⚙️ Общие настройки фабрики

Cloud и Nether · у владельца и Гтуса один набор. Изменения сохраняются сразу. ✱ — инструкция к блоку.

{[ group.title ]}
✱ Как работает

{[ block.help ]}

Параметры · сохранены, не действуют

Изменяет только владелец.

⚙️ {[ farm.run_id ? '✅' : '💤' ]} {[ !farmStatusLoaded ? 'Загрузка состояния…' : ((farm.state && farm.state.busy) ? 'Идёт процесс' : (farm.run_id ? 'Последний процесс завершён' : 'Процесс не запущен')) ]} run {[ farm.run_id ]}
⏳ {[ farm.state.phase ]}
{[ farmJobStatus(farm.state.job.status) ]}. Текущий аккаунт завершается безопасно.
Осталось заданий: {[farm.state.job.remaining]}. Аккаунт #{[farm.state.job.account_id]} · {[farmStage(farm.state.job.stage)]}. В работе: {[Math.floor(farm.state.job.elapsed_seconds/60)]} мин.
{[farm.state.job.wait_reason]} · не раньше {[fmtDate(farm.state.job.wait_until)]} МСК
⚠️ Этап не менялся {[Math.floor(farm.state.job.no_progress_seconds/60)]} мин. Операция ещё выполняется; очередь остаётся занята до безопасного отключения. Лимит на одно задание — 60 минут.
аккаунтов пройдено {[ farm.state.done ]} / {[ farm.state.total ]}
📦 архив свежих сессий готов — скачать
# Аккаунт Состояние Боты на аккаунте · выбор в пул В пуле Выход Очередь Сессия
#{[a.id]} 🆕 ✅ {[a.phone]} 🔒
ID: {[ a.tg_user_id || '—' ]} ·
🧊 заморожен 💀 мёртв 🚫 BotFather не даёт ✓ рабочий
⚠️ {[ a.status==='active' ? 'сбой последней проверки' : a.check_error ]}
{[ a.check_ok_at ? 'Связь: '+fmtDate(a.check_ok_at) : 'Успешной проверки ещё нет' ]}
не разведан
ботов нет — фабрика создаст новых
{[ a.live_bots ]}
🪣 {[ a.spare_bots ]}
— снесены, ждёт нового
— рабочих ботов нет
🟢 {[a.live]} · 💀 {[a.lost]} · 🪣 {[a.spare]}
{[ a.country || '—' ]} ⏳ сейчас 🔑 нужен пароль 2FA 🆕 ждёт прогона в очереди {[ a.done_at ? 'обработан' : '—' ]}
добавлен {[ fmtDate(a.added_at) ]}
⬇️ .session —
Аккаунтов нет — загрузите сессии.
стр. {[ Math.min(farmPage,farmPageCount-1)+1 ]} из {[ farmPageCount ]} · всего {[ farmAccountsSorted.length ]}

📋 Очередь и отчёты

{[fmtDate(j.created_at)]} · {[farmJobKind(j.kind)]} {[farmJobStatus(j.status)]} {[j.finished]}/{[j.total]} · добавлено {[j.added]} · уже есть {[j.duplicates]} · ошибок {[j.failed]} · проверить {[j.review]} · пропущено {[j.skipped]} · отменено {[j.cancelled]}
🔗 Cloud ↔ Nether: {[farm.consistency.status==='ok' ? 'общий код совпадает' : farm.consistency.status==='waiting' ? 'проверка ожидается' : 'расхождений: '+farm.consistency.difference_count]}
Проверка каждые 15 минут, без остановки ботов. {[farm.consistency.at ? 'Последняя: '+fmtDate(farm.consistency.at) : '']}. Общий файл настроек: {[farm.consistency.settings_shared ? 'доступен' : 'проверяется']}.
{[d.project]} · {[d.target]} / {[d.file]} — {[d.reason]}
⏳ {[ farm.state.phase ]} · аккаунтов пройдено {[ farm.state.done ]}/{[ farm.state.total ]}
{[ c.admin_ok ? '👑' : '⏳' ]} {[ c.title || '—' ]} {[ c.phone || ('#'+c.account_id) ]} {[ c.link ]} ⚠️
📜 Журнал процесса · МСК ● live
{[ farmLogTime(l.at) ]} {[ l.account_id ? '#'+l.account_id : '' ]} {[ l.phone ]} {[ farmLogText(l) ]}
📦 Архивы свежих сессий + tdata · {[ farm.archives.length ]} (по одному на прогон)

Внутри архива: файлы .session (Telethon) и рядом папки <номер>/tdata/ — их кладут в папку Telegram Desktop. Ключ один и тот же, лишнего входа в аккаунт не появляется.

⬇️ sessions_{[a.run_id]}.zip {[ fmtStamp(a.at) ]} · {[ Math.round(a.size/1024) ]} КБ

Порядок: 1️⃣ загрузить сессии → разведка запускается сама и показывает ботов каждого аккаунта → 2️⃣ отметить, кого берём в пул → 3️⃣ прогон. В 🪣 Пул уходит один выбранный бот с аккаунта (приоритет 1). Остальным ботам аккаунта токен тоже перевыпускается — не ради пула, а чтобы закрыть доступ прежнему владельцу. Переписка с BotFather стирается, сам он блокируется.

🌐 Прокси px6 — свой IPv4 каждому живому аккаунту в стране номера, само

❌ {[px6.error]}
💰 Баланс: {[px6.balance]} {[px6.currency==='RUB'?'₽':px6.currency]} 🌐 Своих прокси: {[px6.own]} (всего активных {[px6.active]}) 📅 Неделя продлений: {[px6.week_cost]} ₽ 🛍 Новый IPv{[px6.version]} на {[px6.period]} дн.: {[px6.price_period]} ₽
{[px6Last]}

При загрузке сессии — свой прокси сразу, до первого входа (страна — по номеру в имени файла). Раз в 10 минут: живым аккаунтам без своего прокси покупается личный в стране номера (нет такой страны для выбранного типа — в запасной); тем, у кого аренда кончается через 2 дня, — продлевается. Аккаунтам «снесены, ждёт нового» и мёртвым прокси не покупаются и не продлеваются — истекают. Цена дня одинакова при любом сроке, поэтому берём коротко. Пока px6 включён, автоцикл фабрики гонит в BotFather только аккаунты со своим прокси. Не хватает денег — уведомление штабу (🔔 «Баланс прокси»). Личные аккаунты («фабрике не трогать») не трогаются.

🌍 Общие прокси Cloud и Nether

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

{[p.host]}:{[p.port]} {[p.country]} {[ p.use_ipv6 ? 'IPv6 наружу' : 'IPv4' ]} ✅ живой ⏳ временно недоступен · архив после суток сбоев Сбои с {[fmtDate(p.unreachable_since)]} аккаунтов: {[p.accounts]} {[p.last_error]}
Активных прокси нет. Добавьте новый или проверьте прокси из архива.
📦 Архив прокси · {[archivedProxies.length]}

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

{[p.host]}:{[p.port]} {[p.country]} · аккаунтов: {[p.accounts]} {[p.last_error || (p.last_ok===false?'Не отвечает':'Истёк или отключён')]}

Недоступный прокси исключается из новых подключений, но остаётся здесь на проверке. В архив он уходит после неудачной проверки спустя 24 часа с первого сбоя. Успешная проверка сбрасывает отсчёт. Истёкшие прокси провайдера архивируются сразу.

Формат: host:port или host:port:логин:пароль, страну можно дописать через |. Прокси выдаётся наименее занятый — два аккаунта с одного адреса Telegram связывает между собой.

🔧 Восстановление доставки

Массовые операции для устранения проблем с получением медиа.

🔓 Снять mute со всех

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

{[m.name]}
{[m.display]}