Skip to main content
QRAuth — модуль Lampac NextGen из папки Modules/Community/QRAuth. Он заменяет стандартный экран входа на страницу с QR-кодом и подключает Telegram-бота. Пользователь сканирует QR телефоном, подтверждает вход в боте, и телевизор входит сам. Модуль работает поверх accsdb. Он не заменяет авторизацию Lampac, а дописывает пользователей в общий users.json.

Возможности

  • Вход по QR. Экран входа показывает QR-код на https://t.me/<бот>?start=qr_<сессия>. После подтверждения в боте страница входит этим аккаунтом.
  • Заявки на доступ. Новый пользователь нажимает Запросить доступ, админ одобряет одной кнопкой. Пароль приходит пользователю в личку.
  • Управление из Telegram. Команда /users: список пользователей, карточки, бан и разбан, статистика.
  • Фон из постеров. Сервер собирает стену из постеров TMDB в одну картинку, поэтому слабым ТВ почти нечего считать.

Включение модуля

1

Включите в manifest.json

В файле Modules/Community/QRAuth/manifest.json установите "enable": true. По умолчанию в репозитории стоит false.
2

Проверьте SkipModules

Убедитесь, что QRAuth нет в BaseModule.SkipModules в init.conf.
3

Включите accsdb

Задайте accsdb.enable: true и длинный shared_passwd. Модуль работает только поверх accsdb.
4

Добавьте секции QRAuthBot и DenyPage

Скопируйте пример ниже в init.conf. Полный набор полей лежит в Modules/Community/QRAuth/init.merge.example.json.
5

Перезапустите сервер

Выполните systemctl restart lampac (Linux) или перезапустите контейнер (Docker).
Собирать модуль не нужно. Lampac компилирует .cs при запуске, а Telegram.Bot.dll уже лежит в references/.
Модуль с "enable": false в manifest.json пропускается молча, без записи в лог. Если в логе нет строк compilation QRAuth и loaded module: QRAuth, проверьте манифест.

Конфигурация

Токен бота выдаёт @BotFather по команде /newbot. Свой Telegram ID для admin_ids покажет @userinfobot.

QRAuthBot

Поле называется admin_ids и принимает массив. Вариант "admin_id": 123 модуль молча игнорирует, и админов не будет.

DenyPage

Правки секции DenyPage подхватываются без перезапуска. Модуль перегенерирует plugins/override/deny.js.
Docker: users_file_path и log_path — пути внутри контейнера, обычно /lampac/.... Путь хоста приведёт к тому, что бот пишет пользователей в файл, которого Lampac не видит.

Совместная работа с Tg-notify

QRAuth нужен отдельный бот. Если рядом стоит Tg-notify (секция TelegramBot), у QRAuthBot и TelegramBot должны быть разные bot_token.
Оба модуля сами опрашивают Telegram через long polling (GetUpdates). Общего обработчика событий нет. На одном токене возникают три проблемы:
  1. Конфликт опроса. Telegram отвечает 409 Conflict: terminated by other getUpdates request. Модули сбивают друг друга, лог забивается ошибками 409.
  2. Потерянные нажатия. Каждое событие получает модуль, который первым забрал его из очереди. Нажатие Выдать доступ может уйти в Tg-notify, который такой кнопки не знает. Кнопки срабатывают через раз.
  3. Неподтверждённый вход. Если tg_target указывает на бот Tg-notify, /start с номером сессии уйдёт туда, и вход не подтвердится.
Создайте в @BotFather два бота: один для QRAuth, другой для Tg-notify.
До переименования QRAuth читал секцию TelegramBot, ту же, что и Tg-notify. Если вы обновляетесь со старой версии, переименуйте секцию QRAuth в init.conf в QRAuthBot. Иначе бот QRAuth не запустится.

Как работает вход по QR

1

Страница запрашивает сессию

Экран входа вызывает GET /tgbot/qr/start и получает session. QR ведёт на https://t.me/<бот>?start=qr_<session>.
2

Пользователь сканирует QR

В боте приходит /start qr_<session>. Если доступа нет, бот предлагает Запросить доступ.
3

Пользователь подтверждает вход

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

Страница входит

Экран входа опрашивает GET /tgbot/qr/status?session=…, получает токен и входит через /testaccsdb, как при вводе пароля.
  • Сессия живёт 3 минуты, хранится в памяти и одноразовая. По истечении страница сама берёт новый QR.
  • У каждой загрузки страницы своя сессия, поэтому устройства друг другу не мешают.
  • Перезапуск Lampac обнуляет активные сессии.

Команды бота

Повторная заявка от того же пользователя игнорируется 10 минут. У доступа нет срока действия, только бан и разбан.

Связь с accsdb

Модуль и ядро Lampac не вызывают друг друга напрямую. Связь идёт через общий users.json и эндпоинт /testaccsdb.
  • При выдаче доступа модуль генерирует токен и записывает его в поле id. Это и пароль пользователя.
  • Ядро перечитывает users.json примерно раз в секунду. Между Выдать и возможностью войти бывает задержка до секунды.
  • Бан ставит ban: true в существующей записи. Удалять строку нельзя: ядро не забывает удалённых пользователей до перезапуска.
Пример записи в users.json:

HTTP API

Модуль сам пропускает /tgbot/qr/* для неавторизованных посетителей через EventListener.Accsdb. Добавлять tgbot/qr в accsdb.whitepattern не нужно.

Диагностика

Значения state у /tgbot/qr/posters: Подробности сбоев пишутся в tgbot.log.
Last modified on October 1, 2026