📊 Панель управления
| Неделя | Пришло | +{[w]} |
|---|---|---|
| {[c.cohort.slice(5)]} | {[c.size]} | {[(c.weeks[w]||{}).pct ? (c.weeks[w].pct+'%') : '—']} |
| день | покупок | ≈ ₽ | чем | тарифы | пришло | через промо | по рефке | активны в промо | 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||'–']} |
| бот | людей | 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]} |
| Ботов нет | ||||
👥 Пользователи
{[usersTotal]} {[userQ||userFilter!=='all'?'найдено':'всего']}⏸ Пауза за неактивность
| Уровень | Всего | Предупреждены |
|---|---|---|
| L{[r.level]} | {[r.total]} | {[r.notified]} |
| Никого | ||
| Бот | Напомнили | Вернулись | % |
|---|---|---|---|
| {[r.bot]} | {[r.sent]} | {[r.returned]} | {[r.conversion]}% |
| Напоминаний пока не было | |||
💤 Вернуть молчунов
✉️ Шаблоны писем
{missed} — «и мимо прошло N новых медиа» (пусто, если данных нет),
{days} — дни подарка, {discount} — процент скидки,
{hours} — часы её действия. Разметка: *жирный*, _курсив_.
🌐 Другие языки письма
📤 Запуск
📊 Кампании
| Когда | Шаблон | Сегмент | Получателей | Пропуск | Статус |
|---|---|---|---|---|---|
| {[r.started_at ? r.started_at.slice(5,16).replace('T',' ') : '—']} | {[r.template]} 🕒 | {[r.segment_label]} | {[r.sent]} / {[r.planned]} | {[r.skipped]} | ⏳ идёт ✅ 🛑 остановлена ⚠️ {[r.status]} |
🎁 Приглашения
| # | Кто | Перешли | Дошли | Конверсия | Дней | Последний |
|---|---|---|---|---|---|---|
| {[i+1]} | {[r.name]} {[r.username?'@'+r.username:r.user_id]} |
{[r.invited]} | {[r.rewarded]} | {[ r.invited ? refConv(r)+'%' : '—' ]} | {[r.days]} | {[r.last_at?fmtDate(r.last_at):'—']} |
| Когда | Кто привёл | Кого | Дней | Откуда |
|---|---|---|---|---|
| {[fmtDate(r.created_at)]} | {[r.referrer]} | {[r.invited]} | {[r.days]} | {[r.source]} |
| Пользователь | Уровень | Статус · 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)]} | |
⚙️ Условия приёма заявок
Норма медиа остаётся в карточке каждого бота.
🤖 Автоодобрение: одобрен уже в N ботах
Выключено (0) по решению владельца — модераторы принимают сами. Чистый юзер (без варнов и заморозок), одобренный в стольких ботах, в новом одобряется сам при отправке заявки — штаб получает уведомление, а не задачу. 0 — выключить. Норма медиа задаётся в карточке каждого бота.
⏳ Заявки на вступление
{[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)]}
⚠️ Исходный бот недоступен или отключён. Старые файлы могут не открываться. Для повтора выберите работающего бота.
Файл не загрузить
🪦 Кто топит ботов
| {[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?'По фильтру никого.':'Пока никого: журнал только начал заполняться — записи появляются при следующих сносах.']} | ||||||||||
| {[c.l]} {[dLog.d>0?'▲':'▼']} | ||||
|---|---|---|---|---|
| {[botTypeIcon(d.bot_type)]} {[d.username||d.bot_id]} {[d.reason=='manual_swap'?'✋':'🚫']} | {[fmtDate(d.died_at)]} | {[d.lived_hours!==null?d.lived_hours+' ч':'—']} | {[d.media_24h]} | {[d.audience]} |
|
Загрузка…
Список состава не сохранился
Кто был в боте ({[dMembers.length]}), последние активные первыми; красные — есть в подозреваемых
{[m.nickname||m.first_name||m.user_id]} ×{[m.deaths]}
… +{[dMembers.length-60]}
| ||||
| Журнал пуст | ||||
📉 Сносы по дням
По дням
| Время | Бот | Причина | Прожил | Людей | Аккаунт-создатель | Партия | Прокси аккаунта | Прокси бота |
|---|---|---|---|---|---|---|---|---|
| {[x.time]} | @{[x.username||'?']} {[x.bot_type]} | {[banReason(x.reason)]} | {[x.lived_hours!==null?banLife(x.lived_hours):'—']} | {[x.audience]} |
|
{[x.batch||'—']} | {[x.acc_proxy||'—']} | {[x.bot_proxy||'—']} |
👤 Аккаунты-создатели
сколько ботов снесли из всех, что аккаунт выпустил| Аккаунт | Статус | Партия | Прокси | Снесено | Каких ботов | Последний снос |
|---|---|---|---|---|---|---|
| {[accLabel(a.status)]} | {[a.batch||'—']} | {[a.proxy||'—']} |
{[a.deaths]}из {[a.made||'?']}
|
{[t]} {[n]} | {[a.last]} |
{[card.title]}
{[card.hint]}⚙️ Настройки ботов параметры · тексты · оформление
{[ settingsOpen ? '▲ свернуть' : '▼ развернуть' ]}Найдено: {[settingsSearchResults.length]}
Попробуйте другое название или часть подсказки.
{[settingsScope]}
Обычные поля сохраняются после изменения. Тарифы, языки, таблицы игр, промо и эффекты — своей кнопкой «Сохранить».
🔄 Обмен Бот
Уровни доступа и оформление медиа. Доставка, тексты и уведомления вынесены в свои разделы.
Уровни доступа
Количество отправленных медиа для перехода на следующий уровень.
📊 Порог уровня 2 (медиа)
Сколько медиа нужно для повышения с Lv1 до Lv2
📊 Порог уровня 3
Lv2 → Lv3
📊 Порог уровня 4 (Элита)
Lv3 → Lv4 (👑 Элита)
Оформление медиа
Общая обфускация текста для обмен-ботов.
🌀 Zalgo включён
Лёгкие диакритики между буквами (анти-спам fingerprint: одинаковый текст = разный след). Выключи, если мешает читаемости. Применяется живьём в течение ~минуты.
💳 Оплата Бот
Способы оплаты, реквизиты и цены. Работа с заказами находится в разделе «Платежи».
Способы и реквизиты
Каталог партнёра и реквизиты для переводов.
🏦 Способы оплаты партнёра
{[m.callback_data]}
(нет в меню)
📌
Порядок и скрытие живут только у нас: «Перечитать меню» их не сбрасывает. 📌 — позиция закреплена вручную; новые способы партнёра приезжают в конец списка и закреплённые не сдвигают. Здесь же свои способы (CryptoBot, звёзды, карта) — их тоже можно скрыть и переставить.
Общий каталог способов оплаты настраивается в Cloud. Stars появляется здесь, когда включён для Nether.
Каталог пока пуст. Способы оплаты настраиваются в Cloud, Stars для Nether — в разделе «Платежи → Telegram Stars».
🤖 Ссылка на CryptoBot
Одна ссылка на все тарифы — сумму пользователь вписывает в CryptoBot сам, бот пишет её в сообщении (в $ и ₽, с учётом личной скидки). Такие платежи подтверждаются вручную кнопкой «✅ Оплачен» в разделе Заказы.
💵 USDT TRC-20
💵 USDT Solana
💎 TON
₿ BTC
Цены и прайс
Курсы, тарифы и изображения прайса текущего проекта.
⭐ Долларов за одну звезду
Telegram по API курс не отдаёт. Сейчас ≈ 0.013.
₽ Рублей за доллар
Для справочной рублёвой цены под кнопками.
💵 Тарифы
Колонка ⭐ пустая = цена в звёздах считается из доллара по курсу; заполненная — берётся как есть (для «красивых» 249 / 499 / 999). Скидка масштабирует и её. Порядок строк = порядок кнопок у юзера. Ключ участвует в кнопках покупки: меняете ключ — старые сообщения в истории на него уже не сработают (юзер увидит «тариф изменился» и список заново). Удалённые строки удаляются из базы при сохранении.
🖼 Картинка прайса
Языковая версия важнее общей: если для языка юзера картинка есть, показывается она, иначе общая. Галочка выключает картинку у всех, файлы при этом остаются. Рестарт не нужен.
🛡 Резерв Бот
Резервный хаб использует общий каталог ботов и собственные переводы.
Как устроен резерв
Современный резерв-бот настраивается через каталог и словарь. Старые поля хаба сохранены в «Текстах и переводах → Совместимость» до окончательного вывода старой ветки из кода.
Настройки не дублируются: каждая ссылка выше ведёт к действующему редактору.
🌐 Сеть и оформление
Настройки профилей, резервных ссылок и смены токенов для текущего проекта.
Токены и переезд
Автоматическая замена токенов и уведомление пользователей.
🔁 Авторотация включена
Когда 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]}
Доступные языки и язык по умолчанию
Загрузка…
✅ Настройки языка сохранены.
📝 Тексты и переводы
Выберите фразу слева и отредактируйте нужные языки. Настройки сохраняются только в текущем проекте.
Загружаю словари…
Список фраз и поиск
Редактор переводов
{[phraseTitle(phraseCurrent())]}
{[phraseGroups[phraseCurrent().group]]} · {[phraseId]}Изменения появятся в ботах в течение 30 секунд, в промо — минуты. Уже отправленные сообщения не меняются.
{[language.flag]} {[language.label]} · Не сохранено
Перевод на этот язык пока не подключён.
Сохраните переменные: {[variable]}
{[phraseCurrent().defaults[language.code]]}
Черновики сохраняются при переключении между фразами, пока открыта эта страница. При перезагрузке несохранённые правки потеряются.
Где ещё настраиваются тексты?
Индивидуальные тексты остаются в карточках ботов и имеют приоритет. Здесь доступны словари ботов, тексты оплаты и промо; часть коротких ответов и подписей кнопок пока находится в коде. Сохраняйте разметку HTML / Markdown и ссылки.Общие тексты обмена
Индивидуальные тексты карточки бота могут перекрывать эти значения. Пустое поле оставляет следующий доступный текст по правилам обработчика.
💬 Текст приветствия /start
Показывается при первом /start (Markdown поддерживается)
📜 Правила бота
Текст команды /rules
📜 Правила (RU)
Общие тексты оплаты
Сохраняются в существующие настройки оплаты, без изменения приоритета переводов.
👋 Приветствие (первый экран /start)
Поля: русский, английский, китайский. Пусто = текст по умолчанию из кода бота.
💎 Что даёт VIP (кнопка «Что дает VIP?»)
🧾 Заголовок экрана тарифов
Промо под медиа
Тексты кампании и частота показов в выдаче.
📣 Промо-строки в подписи под медиа
Два независимых уровня: частота решает, как часто вообще показывать промо, вес строки — какую из подходящих выбрать. Промо идёт второй строкой под ником и значками, в пачке медиа — только под первым.
| Текст 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]}
| вес | приз | шанс | |
|---|---|---|---|
| {[casinoOdds(g,i)]} |
Призы: vip:N (дней VIP в банк), nolimit:N (дней без лимитов), discount:P (% на VIP, 24 ч), stars:N, spins:N, achievement:код, none. Шанс = вес / сумма весов. Обязателен хотя бы один none.
Анонс и напоминания
Тексты анонса и период напоминания об игре в чате.
📣 Анонс казино
В режиме теста уходит только штабу и тестерам (проверить текст), в режиме «для всех» — всем одобренным без бана.
🎲 Напоминание в чате, дней
Если человек не бросал кубик дня N дней подряд — одно напоминание, только в режиме «для всех».
Статистика за 30 дней
💳 Платежи
Заказы, поступления и ситуации, которые нужно разобрать.
{[paymentWorkspaceError]}
🧾 Заказы
| когда | кто | тариф | сумма | способ | статус | |
|---|---|---|---|---|---|---|
| {[ (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]}
Проверяйте подтверждение у партнёра и совпадение суммы до привязки. Сообщения без суммы требуют отдельной проверки оплаты.
🔒 Удержанные суммы старых счетов
Сумма не выдаётся новому заказу, пока старый счёт ещё может быть оплачен. Освобождайте только после проверки у партнёра, что счёт безвозвратно закрыт и неразобранных оплат по нему нет.
⭐ Ссылки Telegram Stars не хватает {[starsCfg.missing.length]}
Звёзды принимает канал: создайте в нём платную инвайт-ссылку под каждую сумму ниже. Бот выдаст человеку ссылку под его тариф и скидку, после вступления VIP выдаёт кассир (ниже) или вы — через 💬 Чат. Ссылки нет → человек идёт через оператора, а в чат падает подсказка, какую создать.
| Тариф | {[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 ⭐ → навсегда. Предложение показывается, только когда оно реально выгоднее тарифа человека.
Человек купил тариф за 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 этого проекта. Первый запуск только запоминает текущее состояние, старые вступления не трогает.
«Отправляется» означает неопределённый ответ Telegram. Проверьте чат исходного платёжного бота до повтора.
🔔 Уведомления
Отдельные настройки для штаба и пользователей ботов.
🔔 Уведомления штаба
| Событие | 👑 Владельцы | 🛡 Админы |
|---|---|---|
| {[e.title]} {[e.hint]} |
Заявки и жалобы приходят карточками из самого бота тем, кто его открывал; сюда попадают только те, до кого карточка не дошла. Сохраняется сразу, рестарт не нужен.
Проверить доставку — кому и через какой бот доходит
Неактивность
Общие параметры проверки и отправки. Индивидуальные таймауты задаются в карточках ботов.
🔔 Включить уведомления
Выключи, если временно не хочешь беспокоить юзеров
⏱ Период проверки (мин)
Как часто бот ищет неактивных. Дефолт 10 мин
📦 Макс. за один проход
Сколько уведомлений шлём за раз. Защита от бана при большом скопе
🐢 Пауза между сообщениями (сек)
≥1.1с = безопасно для per-chat лимита Telegram
Ежедневная статистика
Рассылка статистики и напоминания пользователям с нулём медиа.
🔔 Рассылка включена
Мастер-выключатель всей ежедневной статистики
🕐 Час рассылки (UTC)
0–23 UTC. 10 UTC = 13:00 МСК. Меняется без рестарта.
📅 Окно активности (дней)
Слать тем, кто был активен за последние N дней
🛡 Не слать админам/владельцам
💎 Не слать VIP
У VIP нет лимитов/прогресса — стата им менее актуальна
🌫 Не слать нулевым (0 медиа)
🌱 Напоминание нулевым
Отдельное «отправь первое медиа» тем, кто ничего не слал
📋 Реестр ботов
🛡 Порядок в резервном боте
📋 Журнал модерации
| Время | Кто | Пользователь | Бот | Действие | Причина / срок | Подробности |
|---|---|---|---|---|---|---|
| {[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]} Решение применено. |
| Записей пока нет. Журнал ведётся с этого обновления. | ||||||
Очистки медиа
Обработано {[j.completed]}/{[j.total]} · Удалено копий {[j.removed]} · Не удалось {[j.failed]}
По ботам
🗑 Очистка пользователя {[cleanupPreview.user_id]}
Всего: {[cleanupPreview.total]}. Список фиксируется сейчас; новые отправления не затрагиваются.
Старые копии без сохранённой привязки или за пределами срока Telegram могут остаться у получателей. Результат появится в журнале.
📡 Очередь выдачи
Обмен, промо, резерв, NoForward, gate, чат и оплата. Выключено — боты соединяются с Telegram напрямую. Применяется в течение 10 секунд; текущий запрос может завершиться позже.
Прокси Telegram-аккаунтов и фабрики управляются отдельно.
Ботов: {[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]}
Среднее время запроса: {[g.avg_ms===null?'—':g.avg_ms+' мс']}
От загрузки до начала раздачи — среднее за последний час. Возраст очереди считается с попадания в очередь. Таймеры собираются с обновления: для старых медиа без замера показывается «нет замеров».
⏳ Пороги ожидания и уведомлений
Уведомления включаются в разделе «Уведомления → Штабу». Проблема должна подтвердиться двумя проверками; затем отправляется один сигнал и сообщение о восстановлении.
Среднее время запроса к 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 наказывает баном токена. Считается по всем ботам сразу.
Последние события
Действуют на все исходящие сообщения всех ботов — раздачу, эхо медиа, заявки, рассылки. Применяются в течение минуты, перезапуск не нужен. 0 = выключить.
♻️ Дубли
Файл ловится по паспорту Telegram (file_unique_id) и по отпечатку из метаданных (размеры × длительность × байты). Уровень за файл начисляется один раз на всю экосистему — тот же файл в другом боте раздаётся, но не засчитывается. Спам дублями → авто-варн по общей лестнице.
Совпадения только по отпечатку — проверить на ложные
Паспорт файла не совпал, совпали размеры и байты. Для видео это почти наверняка тот же файл; у фото стоит выборочно глянуть по /user, не режем ли разные картинки.
⚙️ Скорость
| Человек | Бот | Медиа | Под лимитом |
|---|---|---|---|
| {[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)) : 'проходит')) ]} |
| За это окно никто ничего не присылал | |||
📦 Архив при входе
Если человек не присылает медиа, новые поступают с интервалом «Без отправок». Давность активности не отключает промо-поток.
Последний из {[gateCfg.admins||0]} получателей начнёт примерно через {[gateLastStart]}, вся заявка разойдётся за {[gateFullTime]}.
| Бот | Пауза/сбор | В очереди | Аудитория | Ожидание | Причина / состояние |
|---|---|---|---|---|---|
| {[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]} |
| Обменных и промо-ботов нет | |||||
{[fmtDate(sidePanelData.bot_blocked_at)]}
🚪 Gate verification
| Юзер | Дата | Через бота | Одобрил | 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?'Не удалось загрузить — нажмите 🔄':'Никто не прошёл')]} | |||||||||
| Юзер | Бот | Прогресс | Старт | 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?'Не удалось загрузить — нажмите 🔄':'Очередь пуста')]} | ||||||
🔀 NoForward
| Юзер | Бот | 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?'Не удалось загрузить пользователей':'Нет юзеров')]} | |||||||||
🤖 Платёжные юзерботы
Аккаунты для работы с партнёрским ботом оплаты. Доступные действия зависят от роли.
🤖 Юзерботы
{[ ubHint ]}
🏭 Фабрика ботов / Пул токенов
⏳ Загружаем пул токенов…
{[poolLoadError]}
| Бот / Токен | Статус | Заметки | Добавлен | ⚙ |
|---|---|---|---|---|
|
@{[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)]} |
|
| Живых токенов в пуле нет. Добавьте токен или загрузите сессии в фабрику ниже. | ||||
|
💀 @{[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||'—']} |
|
🏭 Фабрика ботов — загружаешь сессии пачкой, получаешь токены в пул
⚙️ Общие настройки фабрики
Cloud и Nether · у владельца и Гтуса один набор. Изменения сохраняются сразу. ✱ — инструкция к блоку.
{[ group.title ]}
✱ Как работает
{[ block.help ]}
Параметры · сохранены, не действуют
Изменяет только владелец.
| # | Аккаунт | Состояние | Боты на аккаунте · выбор в пул | В пуле | Выход | Очередь | Сессия | |
|---|---|---|---|---|---|---|---|---|
| #{[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]}
|
|
⏳ сейчас
🔑 нужен пароль 2FA
🆕 ждёт прогона
в очереди
{[ a.done_at ? 'обработан' : '—' ]}
добавлен {[ fmtDate(a.added_at) ]}
|
⬇️ .session — |
📋 Очередь и отчёты
🔗 Cloud ↔ Nether: {[farm.consistency.status==='ok' ? 'общий код совпадает' : farm.consistency.status==='waiting' ? 'проверка ожидается' : 'расхождений: '+farm.consistency.difference_count]}
📦 Архивы свежих сессий + tdata · {[ farm.archives.length ]} (по одному на прогон)
Внутри архива: файлы .session (Telethon) и рядом папки <номер>/tdata/ — их кладут в папку Telegram Desktop. Ключ один и тот же, лишнего входа в аккаунт не появляется.
Порядок: 1️⃣ загрузить сессии → разведка запускается сама и показывает ботов каждого аккаунта → 2️⃣ отметить, кого берём в пул → 3️⃣ прогон. В 🪣 Пул уходит один выбранный бот с аккаунта (приоритет 1). Остальным ботам аккаунта токен тоже перевыпускается — не ради пула, а чтобы закрыть доступ прежнему владельцу. Переписка с BotFather стирается, сам он блокируется.
🌐 Прокси px6 — свой IPv4 каждому живому аккаунту в стране номера, само
При загрузке сессии — свой прокси сразу, до первого входа (страна — по номеру в имени файла). Раз в 10 минут: живым аккаунтам без своего прокси покупается личный в стране номера (нет такой страны для выбранного типа — в запасной); тем, у кого аренда кончается через 2 дня, — продлевается. Аккаунтам «снесены, ждёт нового» и мёртвым прокси не покупаются и не продлеваются — истекают. Цена дня одинакова при любом сроке, поэтому берём коротко. Пока px6 включён, автоцикл фабрики гонит в BotFather только аккаунты со своим прокси. Не хватает денег — уведомление штабу (🔔 «Баланс прокси»). Личные аккаунты («фабрике не трогать») не трогаются.
🌍 Общие прокси Cloud и Nether
Добавление, проверка и удаление синхронизируются между проектами за несколько секунд. Число аккаунтов показано для выбранного проекта.
{[p.host]}:{[p.port]}
📦 Архив прокси · {[archivedProxies.length]}
Не участвуют в новых подключениях и автоматических проверках. После продления или исправления данных нажмите «Проверить»: рабочий прокси вернётся в основной список.
{[p.host]}:{[p.port]}
Недоступный прокси исключается из новых подключений, но остаётся здесь на проверке. В архив он уходит после неудачной проверки спустя 24 часа с первого сбоя. Успешная проверка сбрасывает отсчёт. Истёкшие прокси провайдера архивируются сразу.
Формат: host:port или host:port:логин:пароль, страну можно дописать через |. Прокси выдаётся наименее занятый — два аккаунта с одного адреса Telegram связывает между собой.
🔧 Восстановление доставки
Массовые операции для устранения проблем с получением медиа.
🔓 Снять mute со всех
Снимает флаг is_muted со всех пользователей. Используйте для восстановления доставки после ошибочных ограничений. Пользователи, действительно заблокировавшие бота, снова отметятся при следующей рассылке.