Рабочее место модератора¶
Если вы впервые открыли раздел, начните с практического руководства Как работать с модерацией: там разобран полный флоу и показаны реальные экраны на тестовых данных.
Раздел Модерация (/channels/{channelId}/moderation) объединяет сигналы Twitch, наблюдение, рекомендации доверенных каналов и решения команды. Автоматических санкций нет: каждое внешнее действие подтверждает человек.
Очереди и профиль¶
- Счётчики прямо у очередей: новые кейсы, работа, наблюдение, наступившие пересмотры и завершённые кейсы за 1/7/30 дней. На телефоне раздел выбирается из компактного списка; на компьютере — слева от сигналов.
- Поиск по нику/ID: точный публичный аккаунт Twitch и все найденные совпадения из истории канала. Похожие ники отмечаются отдельно, всегда нужен явный выбор. Подсказки при опечатках ограничены выборкой истории (до 100 кандидатов на запрос), не всем Twitch. Доступен ручной кейс даже для аккаунта без истории канала.
- Очереди «Новые», «В работе», «Мои», «Наблюдение», «Отложенные», «Пора пересмотреть», «Рассмотренные», «Все кейсы», «Журнал».
- Назначение себе, возвращение в общую очередь, наблюдение, срок пересмотра, завершение и отклонение с пояснением.
- Категории, включая «Неадекватное / деструктивное поведение», и метки описывают эпизод, а не являются глобальным ярлыком человека.
- Метки редактируются прямо в блоке «Что уже известно»: кнопка + Добавить метку показывает самые используемые метки этого канала, поддерживает поиск и позволяет создать новую. Подсказки локальны для команды канала; новая метка появится среди них после сохранения.
- Один открытый кейс на пользователя/канал, проверка версии при одновременных решениях, неизменяемый журнал. Новый эпизод создаёт новый кейс.
Очередь обновляется каждые 30 секунд, если вкладка видима и не открыт разбор; есть ручное обновление. При переключении вкладок события журнала не используются как карточки кейсов.
Активность и значимость берутся из существующей аналитики и не уменьшают moderation risk. Низкая активность не доказывает нарушение и не означает низкую ценность человека.
Кейс открывается отдельной страницей /channels/{channelId}/moderation/cases/{caseId}: обзор и решение, сообщения, история, доверенные источники, действия Twitch. Ссылка назад сохраняет очередь и фильтр пользователя. Настройки стримера вынесены в /channels/{channelId}/moderation/settings; очередь не перегружена настройками и панелью разбора.
Дело пользователя и список «На заметке»¶
Найдите ник и нажмите Открыть дело. Страница /channels/{channelId}/moderation/subjects/{subjectId} объединяет комментарии команды, связанные аккаунты и отдельные состояния Twitch/PulseCaster. Кейс создавать необязательно: выберите «Комментарий о пользователе», напишите наблюдение и сохраните. Из дела доступны все кейсы пользователя и существующий профиль аналитики.
На заметке — список сохранённых пользователей для следующей смены. Добавление требует пояснения, но не следит за сообщениями, не меняет риск и не включает санкции. Если нужно реагировать на следующее сообщение, создайте кейс и выберите «Наблюдать в PulseCaster». Для изменения поведения чата используйте отдельно подтверждаемое действие Twitch.
Связи аккаунтов имеют два уровня: Предположение и Подтверждено командой. Укажите другой точный аккаунт Twitch, проверьте оба ID и запишите основание. «Подтверждено» не является проверкой личности со стороны Twitch. Ошибочную связь можно отозвать с пояснением; история сохранится. Связь видна с обеих сторон только команде текущего канала. Баны, риск, обычные заметки и наблюдение между аккаунтами не переносятся; федерация связей не получает.
В карточке сигнала и на странице кейса видны тип события, причина, автор и длительность таймаута, когда Twitch их передал. Для старого события без ника показывается ID модератора; без ID — «Автор не указан в полученном событии». Автор санкции не подменяется владельцем канала или ответственным за кейс. Импорт старого бан-листа не восстанавливает отсутствующего автора.
Баны/таймауты и наблюдение/ограничение Twitch показаны раздельно. Снятие наблюдения Twitch не снимает бан и не выключает локальное наблюдение PulseCaster. Состояние наблюдения берётся из последнего полученного события, независимо от страницы истории; запоздалое событие не заменяет более новое. Если событий нет, интерфейс не утверждает, что ограничений нет. Для приёма нужен moderator:read:suspicious_users; настройки подключения находятся во вкладке Twitch и бот, источники и пороги — во вкладке Доверенные каналы.
«Контекст перед сигналом» выбирает до 10 сообщений пользователя за 15 минут перед событием и до 20 сообщений чата за две минуты перед последним сообщением пользователя. Для ручного кейса без события точка отсчёта — создание кейса. При новом ручном кейсе, сигнале Twitch, требующем разбора, или ручном действии кабинета в транзакции ставится задание сохранения приватного снимка в PostgreSQL. Сбор из ClickHouse запускается фоново: до пяти попыток с интервалом не менее двух минут при задержке или недоступности. Снимки не передаются в федерацию. Через 180 дней текст удаляется, остаются сведения о событии; API скрывает просроченный текст даже до работы очистки. Общий срок хранения аналитики не меняется. Для старых кейсов снимки задним числом не создаются. Сбой аналитики не блокирует разбор. История и контекст требуют права аналитики, точный поиск Twitch — только просмотра модерации; существующая аналитика пока не поддерживает Twitch ID больше uint32. Кейсы и сигналы хранят полные строковые ID.
Действия Twitch¶
Владелец/администратор сначала включает выключатель кабинета (по умолчанию выключен). Каждое действие требует отдельного подтверждения пользователя, причины и текущей версии кейса:
- предупреждение;
- таймаут от 1 секунды до 14 дней;
- постоянный бан;
- снятие бана/таймаута;
- наблюдение, ограничение и снятие наблюдения/ограничения Twitch.
Для отправки нужны управление модерацией и отдельное право «Санкции к зрителям». Разрешение «Действовать от имени владельца» больше не нужно для этого кабинета. Кнопки объясняют отсутствие разрешений Twitch. Выполнение идёт от Twitch-аккаунта бота, автор решения сохраняется отдельно. Бот должен быть модератором канала; при недоступности его токена система не подставляет токен владельца. Для предупреждений и ограничений может потребоваться переподключение бота с moderator:manage:warnings и moderator:manage:suspicious_users. Лимит — 10 новых операций в минуту на канал. Read-only, dry-run, запрет внешних действий и shadow-compare блокируют отправку.
При потере связи результат может быть неизвестен: интерфейс не объявляет пользователя забаненным. Повтор той же операции только читает сохранённый результат. Новые действия блокируются до события Twitch или ручной сверки: проверьте журнал и состояние пользователя непосредственно в Twitch, запишите проверенное и подтвердите. Сверка не объявляет старую операцию успешной и не повторяет её.
Локальное наблюдение не ограничивает в Twitch. Следующее замеченное сообщение наблюдаемого зрителя возвращает кейс на проверку. Нативное наблюдение — отдельное действие.
Ручной разбан создаёт исключение до нового человеческого сигнала доверенного источника. Есть также исключения до даты и постоянные. Исключение влияет только на федеративную рекомендацию, не отменяет локальные правила и само не разбанивает. Старое событие, синхронизация и машинная санкция исключение не снимают.
Запрещённые слова¶
Внизу страницы — тот же список запрещённых слов канала, что и в общих настройках. Модератор с правом «Модерация зрителей: управлять» ведёт его здесь, не получая доступа к остальным настройкам бота. Изменения попадают в живой журнал канала в раздел «Модерация».
Автоматические таймауты за спам командами¶
Таймауты антиспама команд выдаются автоматически и
не проходят через этот кабинет: у них нет кейса, подтверждения и отдельной причины от
модератора. Причина для зрителя формируется сама: «Ты слишком часто используешь !рост,
попробуй через 1 мин 20 с». Таймаут выдаётся от владельца, если у его токена есть
moderator:manage:banned_users, иначе от бота-модератора. На канал — не больше
10 таких таймаутов в минуту. Модераторов и стримера антиспам не таймаутит.
Федерация¶
Участие добровольное, вступление подтверждает владелец. Управление источниками/порогами делегируется отдельным правом. Доверие направленное: до 100 участников, положительные веса не больше 10. Каналы добавляются из списка с поиском. У каждого свой вес и переключатели учёта таймаутов и снятых банов; текущие человеческие баны учитываются всегда.
Вклад человеческой санкции источника: текущий бан — 1; снятый бан — до 0,5 с затуханием за 90 дней; таймаут — до 0,25 с затуханием за 30 дней. Берётся максимум. Риск — взвешенная сумма вкладов, делённая на сумму весов источников. Несколько каналов одного владельца — один независимый источник.
Локальная синхронизация включается владельцем в настройках через «Включить и обновить бан-лист» независимо от федерации. Twitch требует аккаунт владельца именно для чтения полного бан-листа — это не отправка санкций. В очереди есть отдельный список действующих банов/таймаутов; из него можно создать кейс с причиной, без повторной санкции. Показаны последнее успешное обновление и ошибка, состояние проверяется каждые 15 секунд. Кнопка может временно отклонить повторный запрос, если уже идёт загрузка или настройки менялись менее 30 секунд назад.
Синхронизация: после подключения, затем раз в 12 часов ±30 минут; после ошибки повтор примерно через час. Нет успешной синхронизации за 24 часа — вклад нулевой, вес остаётся в знаменателе. Отзыв участия исключает источник.
Импортированный бан неизвестного происхождения не считается человеческим голосом: один снимок Twitch не позволяет надёжно отличить историческую машинную санкцию. Такой бан показан отдельно. Подтверждённые ручные сигналы учитываются, машинные действия PulseCaster исключаются. Shared-ban IDs Twitch не добавляют независимых голосов.
Порог по умолчанию: риск от 60%, пять текущих банов, пять независимых владельцев, покрытие от 80%. Пять человеческих банов из восьми равновесных источников дают 62,5%; четыре и один только что снятый — 56,25%. Новое событие санкции доверенного источника может создать рекомендацию в очереди. Предпросмотр проверяет известные данные и пороги, ничего не сохраняет и не выполняет санкций. После изменения настроек исторические совпадения доступны в предпросмотре, но массово новые кейсы не создаются.
Обычные заметки остаются внутри команды. Публикация — отдельная форма и отдельное право с подтверждением текста. Отзыв удаляет текст/метки, сохраняя факт публикации/отзыва. Панель перепроверяет публикации каждые 30 секунд; если доступ проверить невозможно, загруженные тексты скрываются. Live показывает служебные карточки без частных заметок и текстов чата.
Запуск и границы¶
Доступ: владелец, модераторы канала, администратор с учётом зоны «Модерация зрителей». Просмотр позволяет читать. Отдельное разрешение «Заметки о пользователях» (ранее «Заметки в кейсах», тот же код права) добавляет внутренние комментарии в дела и кейсы без решений и санкций; готовый набор «Разбор кейсов: просмотр и заметки» включает также просмотр аналитики. Управление позволяет изменять кейсы, список «На заметке» и связи аккаунтов. Санкции, управление источниками и публикация заметок требуют отдельных разрешений. Каждая операция с кейсом или делом требует UUID и ожидаемую версию.
Миграции, обновление API/Twitch-компонентов и frontend обязательны; см. контракт и запуск в docs/contracts/moderation-workspace.md в репозитории. При нехватке scopes переподключается соответствующий аккаунт: бот для действий, владелец для чтения бан-листа и EventSub. Давность последнего события не является полной диагностикой EventSub.
Автоматические/отложенные санкции, публичная доска нарушителей и viewer-facing апелляции не входят в согласованный MVP. Приватный AI-портрет пользователя доступен как экспериментальная справка: новый кейс ставит обновление в очередь, а модератор может запросить его из дела пользователя. Портрет не влияет на риск и санкции; устройство, обезличивание и rollout описаны в операционном руководстве docs/operations/moderation-ai-portraits.md в репозитории. Передача кейса конкретному коллеге, общие rules-engine trust-триггеры и расширенные метрики false positives пока не реализованы. При сбое записи chat-сигнала наблюдения ошибка журналируется; отдельной очереди повторной доставки этих сообщений нет.