Operator / User Documentation
Information item: User / Operator Documentation. Structure and content are informed by ISO/IEC 26514 and ISO/IEC/IEEE 15289. Life-cycle placement draws on operation and maintenance processes in ISO/IEC 12207. Security guidance is informed by ISO/IEC 27001/27002, ISO/IEC 29100, and potentially applicable Russian Federation law (152-FZ, 149-FZ). This is not certification or legal advice. Print layout targets A4.
на программное обеспечение
«CoronerChat»
Версия изделия: 2.7.10
К программе (изделию)
CoronerChat 2.7.10 — прикладное ПО для стримеров и модераторов: единая лента Twitch, VK Video Live, Kick, YouTube Live, Rutube, DonationAlerts и MemeAlerts; веб-UI и OBS overlay; UX-пакет эфира; статистика и достижения; локализация ru/en/ro/de/fi; автообновление с GitHub Latest; desktop Electron (Windows). Настоящее руководство описывает установку, настройку, штатную эксплуатацию и первичную диагностику без доступа к исходному коду. Расширенный web User Guide: docs/guide.html.
К настоящему документу
Документ содержит требования к среде исполнения, порядок установки и запуска, описание операций по платформам, полный перечень функций изделия, HTTP API и сохраняемых настроек интерфейса (п. 6), типовые неисправности (п. 7), информационную безопасность: международные стандарты и законодательство РФ (п. 8), обслуживание и резервное копирование (п. 9). Архитектура и протоколы — в Software Architecture Description (docs/coronerchat-architecture-print.html). Публичная web-версия руководства: docs/guide.html.
Ключевые слова: user documentation; operator guide; CoronerChat; information security; personal data; 152-FZ; GDPR; ISO/IEC 27001; OAuth 2.0; Electron; OBS; Twitch; VK Video Live; Kick; YouTube Live; DonationAlerts; MemeAlerts.
docs/coronerchat-architecture-print.html.| Термин | Определение |
|---|---|
| Оператор | Пользователь изделия, выполняющий установку, настройку и эксплуатацию CoronerChat на своём ПК. |
| Изделие | Программное обеспечение CoronerChat в поставляемой сборке (desktop или web). |
| Оверлей | Режим веб-интерфейса для вывода чата в OBS Browser Source без панелей управления. |
| OAuth 2.0 | Протокол авторизации на стороне платформ (вход по кнопкам в интерфейсе изделия). |
| ПДн | Персональные данные — любая информация, относящаяся к прямо или косвенно определённому физическому лицу (в т.ч. ник и сообщения в чате при отсутствии анонимизации). |
| ИСПДН | Информационная система персональных данных — совокупность ПДн и технических средств их обработки; в корпоративном сценарии CoronerChat может входить в состав ИСПДн. |
Настоящее руководство оператора предназначено для обучения и повседневной эксплуатации ПО «CoronerChat» в штатных режимах. Документ не заменяет договор поставки, лицензионные соглашения сторонних сервисов и не описывает внутреннюю реализацию изделия.
Изделие применяется для приёма, нормализации и отображения сообщений чатов стриминговых и смежных сервисов (включая Rutube), локального поиска по буферу, отправки сообщений и модерации (в объёме API платформ), вывода оверлея в OBS, UX-пакета эфира, локальной статистики/достижений, смены языка UI, автообновления с GitHub, опциональной интеграции OBS WebSocket и сценариев «now playing».
3210, настраивается). Отдельная установка Node.js для конечного пользователя не требуется — среда исполнения входит в сборку Electron.package.json / документацию Node.js); ОС по усмотрению разработчика; сетевой доступ аналогично desktop.CORONERCHAT_ZAPRET_BUILTIN=1 (Windows, UAC). Выполнять только при осознанной необходимости и в рамках законодательства.Запустите файл вида CoronerChat Setup <версия>.exe. Следуйте шагам мастера; при необходимости измените каталог установки. Ярлыки создаются по выбранным в мастере опциям. Деинсталляция — стандартными средствами Windows («Приложения и возможности»).
Файл CoronerChat <версия>.exe или каталог win-unpacked с CoronerChat.exe. Сохраняйте рядом с исполняемым файлом каталог данных CoronerChat-data (создаётся автоматически) — в нём хранятся настройки, состояние приложения, журналы и кэш.
Установите новую версию поверх (NSIS) или замените portable-файлы, сохранив каталог CoronerChat-data. После обновления при необходимости повторите OAuth на площадках.
Автообновление (2.7.5). Канал зашит: dorimeryt-alt/CoronerChat. При запуске изделие запрашивает GitHub Latest (не архивные теги 2.25–2.35). Вкладки «Обновления»: проверить / скачать и установить Setup / пропустить версию / напомнить позже. API: /api/update/check|install|dismiss. Подробнее: docs/updates-and-releases.md, страница сайта docs/update.html.
CoronerChat.exe / выполните npm run dev:web (для режима разработки из исходников)..env.example, README.md) и пройдите авторизацию (в т.ч. Device Flow).src/config.js.Порт по умолчанию — 3210 (переменные CORONERCHAT_PORT или устаревшее имя CHATSHOW_PORT). В web-режиме при занятости порта изделие может выбрать другой свободный порт автоматически. В desktop-режиме используется заданный порт; при повторном запуске ярлыка изделие переводит фокус на уже открытое окно и может подключаться к уже работающему локальному серверу на том же порту. Если порт занят другой независимой копией CoronerChat (например, установленная версия и сборка для разработки одновременно), интерфейс может соответствовать не той сборке — закройте лишнюю копию или задайте для второй другой CORONERCHAT_PORT. Если порт занят сторонним процессом, освободите порт или смените порт через переменную.
Для каждого подключённого источника задайте канал, URL трансляции или иной идентификатор в формате, ожидаемом платформой (подсказки — в интерфейсе изделия). Сообщения с разных платформ сводятся в одну ленту; обновление — по WebSocket. При прокрутке вверх автоскролл приостанавливается до возврата вниз (кнопка в интерфейсе).
Ниже — типовой состав функций по внешним источникам; после обновления изделия сверяйте фактические элементы интерфейса и README.md.
| Источник (в ленте) | Приём сообщений в общую ленту | Учётные данные | Отправка текста в чат платформы из UI | Примечание |
|---|---|---|---|---|
| Twitch | Да | Настройки Twitch: Client ID/Secret при необходимости; Device Flow; опционально env TWITCH_USERNAME, TWITCH_OAUTH_TOKEN для чтения IRC без Helix | Да | Модерация Helix, slash-команды, смена категории/названия стрима, события чата — п. 5.8 |
| VK Video Live | Да | OAuth VK ID: Client ID/Secret; redirect /api/auth/vk/callback относительно URL открытого UI | Да | Отдельное поле ввода; ответ на сообщение; часть команд «/» — п. 5.9 |
| Kick | Да | OAuth Kick (PKCE): Client ID/Secret; redirect /api/auth/kick/callback; scope с chat:write | Да | Slug канала; дождаться подключения сокета — п. 5.10 |
| YouTube Live | Да | Google OAuth: в desktop задайте GOOGLE_OAUTH_CLIENT_ID, GOOGLE_OAUTH_CLIENT_SECRET, redirect в консоли Google вида http://127.0.0.1:<порт>/ (GOOGLE_OAUTH_REDIRECT_PORT, по умолчанию 45280); включить YouTube Data API v3 | Да | Идентификатор трансляции / ссылка — п. 5.11 |
| Rutube | Да | Cookie-сессия через встроенное окно входа (desktop); чтение чата — без сессии | Да (после входа) | URL эфира rutube.ru/live/… — п. 5.13a |
| DonationAlerts | Да (донаты и связанные события) | OAuth: Client ID/Secret; redirect /api/auth/donation-alerts/callback | Нет | Поток событий в ленту и центр уведомлений — п. 5.12 |
| MemeAlerts | Да | Токен из ссылки OBS (?obsToken=…) или JWT; без OAuth того же типа, что у DonationAlerts | Нет | Socket.IO; фильтр мин. суммы; фильтр ленты «Донаты» включает DA+MA — п. 5.13 |
Для каждой платформы используйте свою вкладку или блок в настройках. При запросе изделия откройте ссылку в браузере, подтвердите доступ, вернитесь в UI. Redirect URI в кабинете разработчика внешнего сервиса должен совпадать с подсказкой изделия (для локального UI обычно http://127.0.0.1:<порт CoronerChat>/…). Не показывайте посторонним экраны с кодами входа и секретами.
Отправка в чат доступна для Twitch, VK Video Live, Kick, YouTube Live и Rutube (после cookie-входа). DonationAlerts и MemeAlerts поставляют в ленту уведомления о донатах, а не двусторонний текстовый чат. Модерация Helix — преимущественно Twitch.
Для Twitch — через интерфейс изделия при наличии прав (Helix). Для остальных платформ используйте кабинеты самих сервисов или возможности API, если они добавлены в вашей версии UI.
В Browser Source укажите URL вида http://127.0.0.1:3210/?overlay=1 (подставьте фактический порт). Дополнительно: ?musicOverlay=1, ?alerts=1, ?goal=1, ?vote=1, ?recap=1 (итоги эфира), ?modview=1 (LAN для модеров). В UX-пакете есть «Копировать все OBS URL».
В настройках укажите HTTP bridge URL опроса «текущего трека» или используйте локальный режим считывания системной медиа-сессии Windows (если доступен в вашей сборке). Формат ответа bridge описан в README.md репозитория.
README.md (переменные CORONERCHAT_7TV_* в п. 5.14).http://127.0.0.1:<порт>/api/auth/kick/callback (или ваш фактический origin).chat:write и успешный обмен кода по PKCE..env для desktop — GOOGLE_OAUTH_CLIENT_ID, GOOGLE_OAUTH_CLIENT_SECRET; redirect URI в консоли Google — http://127.0.0.1:<GOOGLE_OAUTH_REDIRECT_PORT>/ (по умолчанию порт 45280, см. подсказку в UI).GOOGLE_OAUTH_REDIRECT_PORT и тот же URI в консоли Google./api/auth/donation-alerts/callback на origin вашего UI.obsToken из query-параметра, либо вставьте JWT вручную.tokenConfigured) и состояние сокета.rutube.ru/live/video/… → «Подключить». Сообщения поступают через публичный poll API.POST /api/settings/rutube, /api/auth/rutube/browser|refresh.ru / en / ro / de / fi.POST /api/settings/locale, персист uiLocale.Значения задаются в системной среде процесса или в файле .env при запуске из исходников. Имена CHATSHOW_* поддерживаются для совместимости рядом с CORONERCHAT_*.
| Переменная | Назначение |
|---|---|
CORONERCHAT_HOST / CHATSHOW_HOST | Интерфейс привязки HTTP-сервера (по умолчанию 127.0.0.1 — только локальная машина; локальный API отдаёт debug-логи, экспорт настроек и управление OBS без отдельной аутентификации, поэтому LAN-доступ не включён по умолчанию. Для доступа с другого устройства в сети явно задайте 0.0.0.0 или конкретный LAN-адрес и по возможности настройте CORONERCHAT_DECK_TOKEN, см. §8.6). |
CORONERCHAT_PORT / CHATSHOW_PORT | Порт HTTP UI (по умолчанию 3210). |
CORONERCHAT_DEFAULT_CHANNEL | Имя канала Twitch по умолчанию (или см. брендинг). |
TWITCH_USERNAME, TWITCH_OAUTH_TOKEN | Резервная пара для чтения Twitch IRC без Device Flow. |
TWITCH_CLIENT_ID, TWITCH_CLIENT_SECRET | Переопределение встроенного публичного OAuth-приложения Twitch (Device Flow / Helix). Необязательно — без переменной используется значение по умолчанию из src/config.js; тот же Client ID можно также ввести прямо в настройках интерфейса. |
VKVIDEO_CLIENT_ID, VKVIDEO_CLIENT_SECRET | OAuth-приложение VK Video / VK ID для серверной части. |
DONATIONALERTS_CLIENT_ID, DONATIONALERTS_CLIENT_SECRET | OAuth DonationAlerts. |
GOOGLE_OAUTH_CLIENT_ID, GOOGLE_OAUTH_CLIENT_SECRET | OAuth Google для YouTube Data API. |
GOOGLE_OAUTH_REDIRECT_PORT | Локальный порт loopback для redirect Google (по умолчанию 45280). |
KICK_CLIENT_ID, KICK_CLIENT_SECRET | OAuth Kick (PKCE). |
CORONERCHAT_7TV_API_ORIGINS, CORONERCHAT_7TV_ASSET_ORIGINS, CORONERCHAT_7TV_DOH_ENDPOINTS | Дополнительные origin / DoH для 7TV (см. README.md). |
CORONERCHAT_DEMO_ACTIVE, CORONERCHAT_DEMO_PORT | Демо-режим (разработка), при необходимости. |
CORONERCHAT_ZAPRET_BUILTIN | При значении 1 на Windows включается встроенный путь запуска winws (скачивание zapret-win-bundle при первом запуске, возможен UAC). По умолчанию встроенный режим выключен; без явного 1 в переменной доступны только собственные команды запуска/останова в блоке Zapret (п. 5.15). |
CORONERCHAT_DECK_TOKEN / CHATSHOW_DECK_TOKEN | Общий секрет для чувствительных HTTP-эндпоинтов (debug-логи, экспорт/импорт настроек, управление OBS, /api/deck/* для Stream Deck/Ulanzi) при обращении не с локальной машины — заголовок X-CoronerChat-Deck-Token. С 127.0.0.1 эти эндпоинты всегда доступны без токена; пусто — доступ с других устройств сети к ним запрещён (403). |
CORONERCHAT_ZAPRET_BUILTIN=1 (только Windows); возможна загрузка zapret-win-bundle при первом запуске и запрос повышения прав (UAC). Чекбоксы групп доменов в блоке Zapret и файл дополнительных хостов учитываются во встроенном режиме.resources/zapret/extra-hosts.txt — по одному FQDN в строке; строки, начинающиеся с #, игнорируются. В собранном приложении используется копия рядом с модулями (zapret-builtin/extra-hosts.txt).Ниже зафиксированы пользовательские возможности и программные интерфейсы по коду сервера (src/server/chat-app-server.js) и UI (src/server/web-ui.js). Точные тела запросов и побочные эффекты см. в исходных текстах и в техническом описании архитектуры.
?recap=1.handleApiRequest)| Группа | Маршруты (метод) |
|---|---|
| Служебные страницы | GET /, /health, /assets/logo.jpg; GET /ws возвращает подсказку (основной канал чата UI — WebSocket upgrade на путь /ws того же хоста и порта) |
| Состояние и QR | GET /api/state; GET /api/qr?text=… |
| Авторизация Twitch | POST /api/auth/twitch/client-id|start|poll|logout |
| Авторизация VK | POST …/vk/config|start|poll|logout|browser|implicit-token|start-implicit; GET …/vk/callback |
| YouTube (Google) | POST /api/auth/youtube/google|logout |
| DonationAlerts | POST …/donation-alerts/config|start|poll|logout; GET …/callback |
| Kick | POST …/kick/config|start|poll|logout|browser; GET …/kick/callback |
| Rutube | POST /api/settings/rutube; POST /api/auth/rutube/browser|refresh |
| MemeAlerts | POST /api/meme-alerts/connect|disconnect |
| Каталоги и ассеты | GET /api/7tv/catalog|health|global-emote|asset|prefetched-asset, GET/POST prefetch; GET /api/twitch/badges|chatters|asset|emotes; GET /api/vk/catalog|asset |
| Настройки (чтение) | GET /api/settings/obs|relay|zapret|update |
| Настройки (запись) | POST /api/settings/ui|locale|obs|now-playing|youtube|kick|rutube|donation-filters|relay|zapret|update; POST transfer export|import |
| OBS WebSocket | POST /api/obs/launch|connect|disconnect|stream/start|stop|record/start|stop|output|scene/program; GET /api/obs/outputs|scenes|preview (+ mixer/mute/studio-mode по сборке) |
| Now playing / кухня | GET/POST /api/now-playing, POST …/manual|refresh; POST /api/kitchen |
| Модерация и чат | POST /api/channel|chat/send|chat/clear-local|platforms/enable; POST /api/moderation/delete-message|timeout-user|ban-user|unban-user; GET/POST /api/moderation/center; POST /api/admin/pin-message |
| Twitch-расширения | POST /api/poll/create|end, /api/prediction/lock|create|resolve|cancel, /api/raid/start|cancel, /api/twitch/clip, /api/stream/category|title; GET /api/stream/category-search |
| Zapret | POST /api/zapret/start|stop |
| Обновления | POST /api/update/check|install|dismiss |
| Диагностика | GET /api/debug/logs; POST …/clear|open; POST /api/debug/client-log; GET /api/user-context |
POST /api/settings/ui (основной профиль desktop)Часть полей дублируется в планшетном профиле (tabletUi). Названия ниже — как в теле JSON запроса.
| Симптом | Возможные действия |
|---|---|
| Страница не открывается по ожидаемому порту | Проверьте консоль запуска на фактический порт; задайте CORONERCHAT_PORT; закройте конфликтующий процесс. |
| Нет сообщений чата | Проверьте сеть, имя канала, статус стрима; для закрытых режимов — авторизацию. |
| Ошибки OAuth / истёк токен | Выполните выход и повторную авторизацию в интерфейсе изделия. |
| Оверлей OBS пустой | Убедитесь, что URL содержит актуальный порт и параметр ?overlay=1; обновите источник после перезапуска изделия. |
| Kick: «авторизуйся OAuth» или чат не подключён | Проверьте Client ID/Secret и redirect; scopes; slug канала; сеть; дождитесь статуса сокета. |
| YouTube: ошибка Google OAuth / порт занят | Согласуйте GOOGLE_OAUTH_REDIRECT_PORT и redirect URI в Google Cloud; включите YouTube Data API v3. |
| MemeAlerts не подключается | Проверьте полный URL OBS с obsToken или корректность JWT; статус во вкладке «Донаты». Фильтр ленты «Донаты» показывает и DA, и MA. |
| DonationAlerts: ошибка OAuth | Redirect URI в кабинете DA должен совпадать с …/api/auth/donation-alerts/callback на вашем origin. |
| VK: ошибка redirect или сессии | Origin UI и зарегистрированный redirect VK ID должны совпадать по схеме, хосту и порту. |
| Rutube: чат читается, отправка не работает | Выполните «Встроенное окно входа» во вкладке Rutube (cookie-сессия). Чтение работает без сессии; отправка — только после входа. |
| После смены языка «отвалились» чекбоксы / UI | Исправлено в 2.7.5 (applyI18nDom). Установите Latest с GitHub; при 2.7.4 и ниже — обновитесь вручную. |
| Предлагают обновиться на 2.35.x вместо 2.7.x | Архивные теги. С 2.7.5 канал читает GitHub Latest. Один раз поставьте 2.7.5+ с Releases. |
| Интерфейс «не той» версии / пропали новые пункты настроек | На порту 3210 может отвечать уже запущенная другая копия CoronerChat. Закройте лишний процесс или запустите вторую копию с другим CORONERCHAT_PORT. |
| Zapret: кнопка запуска неактивна, встроенный режим недоступен | По умолчанию нужны свои команды в блоке Zapret (Общие) или включите встроенный путь: CORONERCHAT_ZAPRET_BUILTIN=1 перед запуском изделия (Windows). |
Расширенная диагностика — в файле runtime.log в каталоге данных изделия; чувствительные поля в журнале маскируются.
127.0.0.1; внешние API — исключительно по TLS; секреты не уходят в публичный overlay.CoronerChat-data; восстановление авторизаций через повторный OAuth.Эксплуатация сопряжена с обработкой секретов доступа (OAuth-токены, client secrets, ключи MemeAlerts) и, как правило, с обработкой персональных данных участников чата (ники, тексты, идентификаторы платформ). Ориентиры:
| Актив | Содержание / риск | Рекомендуемые меры |
|---|---|---|
app-state и смежные JSON | Токены OAuth, настройки UI, списки скрытых авторов, глоссарий, закрепы | Шифрование тома ОС (BitLocker), ограничение доступа к профилю, запрет копирования на съёмные носители без шифрования |
runtime.log | Диагностика; секреты маскируются, но остаётся контекст событий | Ротация и выборочная выгрузка; удаление перед передачей ПК в ремонт |
| Экспорт настроек | Полный дамп конфигурации, включая секреты | Хранить только в зашифрованном архиве; не отправлять в открытом виде |
| Кэш 7TV и медиа | Изображения эмодзи, метаданные каналов | Очищать при утилизации ПК; не считать «анонимным» при привязке к аккаунту |
| Оперативная память и сеть | Сообщения чата, ответы API | Не оставлять сессию без присмотра; блокировка рабочей станции по Win+L |
Тексты сообщений чата, отображаемые ники и сопутствующие идентификаторы пользователей платформ могут квалифицироваться как ПДн при отсутствии безусловной анонимизации. Рекомендуется:
CoronerChat-data.| Угроза | Проявление для CoronerChat | Меры |
|---|---|---|
| НСД локально | Доступ постороннего к открытому UI на ПК стримера | Блокировка сессии ОС; отдельная учётная запись Windows; не хранить пароль OBS в открытом виде рядом с ПК |
| НСД по сети | CORONERCHAT_HOST=0.0.0.0 в ЛВС без фильтрации | По умолчанию привязка уже к 127.0.0.1; при осознанном расширении до 0.0.0.0 — чувствительные эндпоинты (debug, экспорт/импорт настроек, OBS) с недоверенных адресов требуют CORONERCHAT_DECK_TOKEN (403 без него, п. 5.14, 8.6); дополнительно — сегментация VLAN + ACL, HTTPS-терминирование только при доверенной обратной прокси-конфигурации (не входит в изделие) |
| Вредоносное ПО | Кража app-state, перехват буфера обмена с токенами | Антивирус с актуальными базами; контроль автозагрузки; запрет неподписанных инсталляторов |
| Утечка по каналу поддержки | Отправка runtime.log или экспорта без редактирования | Ручная вырезка секретов; отдельный защищённый канал передачи |
| Ошибка прав модерации | Случайный бан/таймаут зрителя | Разграничить учётные записи «стример» и «модератор»; использовать тестовый канал |
| Компрометация OAuth | Утечка refresh-токена | Немедленный «Выйти» на всех сервисах изделия; отзыв приложения в кабинетах Twitch/VK/Google и смена секретов |
Cache-Control: no-store — снижение риска кэширования секретов промежуточными прокси (при корректной конфигурации браузера).runtime.log применяет маскирование секретов — не полагаться на маскирование как на единственную защиту при публикации логов.127.0.0.1 (см. п. 5.14). Чувствительные и разрушающие маршруты (debug-логи, экспорт/импорт настроек, управление OBS, /api/deck/*) дополнительно проверяют источник запроса: с localhost — всегда разрешено, с другого адреса сети — только с корректным заголовком X-CoronerChat-Deck-Token, иначе 403/503.CoronerChat-data.При подозрении на компрометацию токенов или несанкционированный доступ: немедленно выполнить выход из всех интеграций в UI, удалить/заменить скомпрометированные OAuth-приложения в кабинетах платформ, сменить пароль OBS, проверить целостность исполняемых файлов изделия, при необходимости уведомить пользователей чата и уполномоченный орган по 152-ФЗ (для юридических лиц — в порядке, установленном локальными актами и законом).
При корпоративном развёртывании CoronerChat как элемента ИСПДн оператор-организация получает готовый прикладной контур с безопасными дефолтами (localhost, TLS к площадкам, маскирование логов, gated LAN API). Дополнительно организация классифицирует ИСПДн, ведёт модель угроз и локальные акты. Изделие не является средством сертификации уровня защищённости само по себе — оно обеспечивает техническую базу, на которой достигается полное соответствие при соблюдении чеклиста оператора (см. также docs/security.html).
CoronerChat-data (portable / win-unpacked) или пользовательский профиль, указанный в документации к сборке, для сохранения настроек и истории состояния.runtime.log за период воспроизведения проблемы, удалив из скриншотов и вложений чувствительные данные вручную.README.md, ключ --run-release-tests для исполняемого файла).package.json и сопутствующим файлам в каталоге docs/.