HuskyNET — Chat Theme 5.5.5.5.1
Тёмная тема WordPress: чат, командная строка и дашборд в одном окне. Сайт выглядит как мессенджер — слева чаты, по центру команды и плитки, справа события.
Версия темы в style.css: 2.14. Схема таблиц чатов: DB 2.2.
Возможности
- Переписки и сообщества — личные чаты 1+1, избранное (сообщения себе), диалоги и группы; гости читают открытое, авторы пишут, создатель управляет участниками.
- Командная строка — поле «Введите команду…»: поиск по сайту, новости, AI, управление чатом, вложения файлов.
- Главная как хаб — плитки нейросетей, сайтов, групп, мини-приложений и баннеров проектов; контент из записей, страниц и чатов.
- Лента справа — напоминания, непрочитанные, события автопостинга (Telegram, VK и др.).
- Медиа как в соцсетях — галереи, превью ссылок, видео, пересылка, закреп, push в браузере.
- Поиск и фильтры — поиск по чатам, теги, период, закреплённые сообщения, массовое выделение.
- AI-диалоги — режим с контекстной памятью через плагин AI Mode (
ai-mode=1). - REST API — внешние системы публикуют и читают сообщения (Application Passwords); ответы обогащаются превью и полями видео.
Требования
- WordPress 6.0+ (Application Passwords — с 5.6).
- PHP 8.0+ (библиотека Web Push; рекомендовано 8.1).
- MySQL 5.7+ / MariaDB 10.4+.
mod_rewrite(или эквивалент) для ЧПУ/dialog/{slug}и REST.- HTTPS — для Web Push и сервис-воркера.
- WP Cron — для плагинов автопостинга и планировщика команд.
Плагины (новости, AI, соцфид, напоминания) лежат в wp-content/plugins/ рядом с темой, не внутри неё.
Установка и запуск
- Скопируйте тему в
wp-content/themes/chat-theme5_5_5_5_1. - В админке WordPress: Внешний вид → Темы — активируйте Husky Chat Theme.
- При активации тема создаёт/обновляет таблицы
wp_chat_dialogs,wp_chat_user_dialog_status,wp_chat_dialog_versions(версия схемыCHAT_THEME_DB_VERSION= 2.2). - Установите и включите плагины из
wp-content/plugins(Chat Enhancer, AI, новости, social feed — по необходимости). - REST: создайте Application Password в профиле пользователя. Инструкции — `inc/api/SETUP.md`.
- Push (по желанию): сгенерируйте VAPID-ключи скриптом в
_dop для уведомлений/и сохраните их в настройках. Нужен HTTPS. См. `docs/NOTIFICATIONS.md`.
Локально подойдёт любой стек с PHP 8+ (OpenServer, LocalWP, wp-env). Включите WP_DEBUG и WP_DEBUG_LOG при разработке.
Использование
Главная (чат не открыт)
- Откройте корень сайта.
- Сверху всегда поле «Введите команду…».
- Ниже — дашборд:
— плитки быстрого доступа (сайты/сервисы; админ правит шестерёнкой, опция quick_access_sites);
— до 12 публичных групп;
— до 10 записей категории со слагом PRO;
— выбранные страницы (список ID в index.php, $homepage_page_ids);
— блоки сообщений из конкретных чатов (chat_theme_display_chat_posts).
- Чтобы карточка проекта попала в ряд записей на главной, запись WordPress должна быть в категории PRO.
После перехода в диалог центр становится лентой сообщений; дашборд скрывается.
Левое меню
- Нажмите иконку меню (гамбургер) или откройте панель на десктопе.
- Личные — подгруппы «Пользователи» (в т.ч. Избранное) и «Диалоги». У WP-админа ниже — свёрнутые черновики.
- Группы — мои группы и «Доступные группы» (блок скрыт, если список пуст).
- Инфо — страницы и записи WordPress; открываются в попапе (прямой URL — отдельная страница).
- Клик по человеку всегда открывает канонический личный чат 1+1 (
is_dm), а не общий диалог.
У гостя: «Текущий диалог» только при своём черновике (по IP), затем группы, люди, инфо.
Личный чат, диалог, группа
- Клик по пользователю — личная переписка; в шапке имя и аватар собеседника.
- Команда
dialog to-add логин(или ПКМ → добавить) снимаетis_dmнавсегда: чат становится диалогом. - В группе создатель добавляет/удаляет участников, меняет роли «автор» / «подписчик» (ПКМ по участнику).
- Шестерёнка «Действия»: удалить чат, если есть право
chat_theme_can_delete_dialog. - «Избранное» — чат себе; участников добавить нельзя; первым в списке пересылки.
Командная строка
- Введите текст в поле «Введите команду…» и нажмите отправку (или кнопку
/для списка команд). - Примеры:
dialog add Название,dialog to логин,wp запрос,news тема,ai вопрос. - Скрепка или drag-and-drop — вложения. В AI-диалоге (
ai-mode=1) обычный текст уходит в модель какbot …. - Полный список — `docs/COMMANDS.md`.
Сообщения
- Над пузырём (у кого есть
edit_posts): правка, удаление, пересылка, шаринг, закреп. - Картинки без текста — сетка на всю ширину (как VK); с текстом — галерея сверху, пузырь снизу.
- Поиск, теги, дата и закреп — круглые кнопки справа в колонке чата.
- Пересылка: Избранное → личные чаты (по имени собеседника) → диалоги → группы; только куда можно писать.
Правая панель
- Колокольчик открывает ленту: сверху напоминания (HuskyTodo), ниже события опросов, автопостинга и непрочитанных.
- Клик по напоминанию открывает связанный чат; «+ Добавить напоминание» — модалка задачи.
- Push в браузере — после разрешения уведомлений и настройки VAPID.
REST для внешних систем
- Создайте Application Password в профиле WP.
- Базовый URL:
/wp-json/my-chat/v1/. - Чтение чата:
GET /chats/{slug}. В сообщениях естьpreview_urlи при видео —video_type,video_url,video_embed_src,video_page_url(для агрегаторов вроде vc_clone). - Публикация — `inc/api/HOW_TO_PUBLISH.md`.
Структура проекта
chat-theme5_5_5_5_1/
├── functions.php # ядро: AJAX, права, команды, миграции БД, push
├── index.php # главная: командная строка + дашборд плиток
├── single-post-chat.php # шаблон открытого диалога
├── page.php / header.php / footer.php
├── style.css # стили темы (Version 2.14)
├── sw.js # Service Worker (Web Push)
├── js/
│ ├── chat-theme.js # состояние чата, кеш, команды, лента уведомлений
│ └── script.js # меню, попапы, вспомогательный UI
├── inc/
│ ├── api/ # REST Chat_Theme_REST_API + инструкции
│ ├── content-tiles-widget.php
│ ├── admin-chats.php # пункт «Чаты» в админке WP
│ └── ajax-handlers.php
├── template-parts/ # меню, сайдбар, плитки, карточки постов из чатов
├── vendor/web-push/ # Minishlink Web Push
├── _dop для уведомлений/ # VAPID, проверка установки push
├── docs/ # архитектура, гайды, AI_RULES
├── CHANGELOG.md
└── README.md
Слои, таблицы и потоки данных — в `docs/ARCHITECTURE.md`.
Технологии
- WordPress / PHP 8+ — тема, шаблоны, AJAX
admin-ajax.php, REST. - jQuery / ES5 — клиентское состояние в
js/chat-theme.js(без сборщика). - JSON в LONGTEXT — история сообщений в
wp_chat_dialogs.dialog_context. - Minishlink Web Push — серверная отправка браузерных уведомлений.
- Service Worker (`sw.js`) — показ push и переход в диалог.
- Font Awesome — иконки интерфейса.
- Плагины через фильтр
chat_theme_handle_backend_command— AI, новости, поиск, соцфид.
Разрешения, интеграции, ключи
Права WordPress
| Кто | Что может |
| — | — |
| Гость | Читать открытые группы, безопасные команды без записи |
| Авторизованный | Личные чаты, сообщения (если чат разрешает), команды |
| Создатель чата (user_id) | Удаление своего чата, роли, метаданные, участники |
| Автор в чате (opponent) | Писать; без прав создателя не удаляет чужую группу |
| edit_posts | Инструменты под пузырём (edit/delete/forward/pin) |
| manage_options | Любые группы/диалоги, роли везде, плитки главной |
Подробности — `docs/PERMISSIONS.md`.
Ключи и токены (не в репозитории темы)
- REST: Application Password в профиле пользователя WP.
- Web Push: пара VAPID (генератор в
_dop для уведомлений/generate-vapid-keys.php). - AI / новости / соцсети: опции соответствующих плагинов, не файлы темы.
Точка расширения для плагинов: фильтр chat_theme_handle_backend_command. Сохранять ответы ботов только через безопасные хелперы (read → modify → write), иначе ленивая загрузка затрёт историю. См. `docs/PLUGIN_INTEGRATION.md`.
История изменений
Все значимые изменения в теме документируются в этом файле.
[Unreleased]
Changed
- README / архитектура: ряд записей на главной берётся из категории WordPress со слагом PRO (
$homepage_category_slugвindex.php); страницы — из$homepage_page_ids. - README приведён к полной структуре продукта: возможности, требования, установка, сценарии (главная, меню, чаты, команды, сообщения, панель, REST), дерево, стек, права и ключи. Убрана таблица версий из README (история только здесь).
docs/ARCHITECTURE.md: удалён склеенный дубликат старой редакции; исправлена двойная нумерация §7; добавлены дерево файлов, таблицы БД 2.2, маршрут/dialog/{slug}, правилоopponentпри save.- Добавлен
docs/AI_RULES.md— куда класть фичи, схема сообщений, текущий этап темы. - README / архитектура / UI-гайд: тема описана как трёхколоночный хаб (меню, командная строка + плитки, лента событий), а не только как «чат с вкладками».
- UI-гайд: мобильные правила (закрытие меню, фокус поля ввода,
--app-height, слайдеры).
Added
- Правая панель уведомлений v2: единый поток событий (опросы HSF / размещения SCP / непрочитанные) с ленивой подгрузкой чанками по 15 (
chat_theme_notification_feed); poll/placement за 24 часа. - Компактные карточки напоминаний в панели: иконка диалога, клик открывает чат, edit/delete при наведении; карточка «+ Добавить напоминание» (HuskyTodo 1.9).
- Левое меню: подсветка текущего диалога; списки предзагружаются один раз (без wipe при открытии чата); исправлен ранний openMenu до инициализации user_id.
- Пункт «Удалить» в меню «Действия» (шестерёнка) для диалогов/групп по правам
chat_theme_can_delete_dialog. - ПКМ по участнику: «В авторы» / «В подписчики» (AJAX
my_set_member_role). - Аккордеон левого меню в стиле блока авторизации: «Личные» → Пользователи + Диалоги; «Группы» → Группы + Доступные группы.
- «Избранное»: чат сообщений себе (
is_favorites), пункт в «Пользователи», первым в списке пересылки. - Поле
is_dmвwp_chat_dialogs(DB 2.1): канонический личный чат 1+1; клик по человеку всегда открывает/создаёт именно его. - Команды
dialog to-add/dialog to-del(раньше были только в подсказках). - GUI: ПКМ на участнике — «Удалить из чата»; ПКМ на боте — «Добавить в чат» (модальный список пользователей).
- REST API: обогащение сообщений полями
preview_url,video_type,video_url,video_embed_src,video_page_urlчерезenrich_message_for_api()— для внешних потребителей (тема vc_clone и др.). - Функция
chat_theme_get_message_video_info()— извлекает данные видео из вложений и HTML (VK embed,<video>, Telegram). - Fallback для VK: парсинг
vk.com/video…иvk.com/wall…(widget_post) при превьюtype=video_thumb, если embed вырезанwp_kses_post. chat_theme_message_persist_video_fields()— сохраняетvideo_*в JSON сообщения до kses.- Фильтр
chat_theme_kses_allow_hsf_video_embed— не вырезаетdata-embed-src/data-vk-urlу VK-embed.
Fixed
- Мобильные: плавная анимация VK/link-слайдеров восстановлена (высота после transform, translate3d, native smooth scroll).
- Мобильные: после авторизации не открывается панель профиля; редирект на главную;
sessionStorageпанели сбрасывается. - Мобильные: программный фокус на
#chat-inputотключён — клавиатура открывается только по тапу в поле. - VK/link-слайдеры: высота контейнера подстраивается под активный слайд (пузырь сжимается/растягивается), без пустоты от самого высокого кадра.
- Пересылка: сообщение ищется надёжнее (String msg_id, локальный реестр после поиска/закрепов, fallback DOM/AJAX).
- Мобильное меню: при переходе в диалог панель всегда закрывается; не восстанавливается поверх открытого
/dialog/….
Changed
- Панель
#notifications-sidebar: убраны заголовок «Уведомления» и аккордеоны (напоминания / HSF / SCP / непрочитанные); вместо них — блок напоминаний + лента карточек событий. - Попап WP-страниц/записей: один заголовок в шапке, крестик справа; без «Назад к списку»; пункты «Инфо» открываются в попапе (прямой URL — отдельная страница).
- VK-галереи: та же позиция/отступ, что у обычных пузырей; вогнутый вырез вокруг аватарки на самой галерее.
- Картинки внутри пузыря и в превью ссылок (плагин
+my-chat-link-handler-5: слайдер / одиночные / inline) — всегда со скруглением. - Сообщения с картинками-вложениями + текст: сначала VK-галерея без пузыря, снизу текстовый пузырь той же ширины (
message-with-gallery). - Картинки во всех видах постов — на всю ширину блока/пузыря и со скруглением (одиночные, слайдер, альбом, inline).
- Посты только с картинками: без пузыря, сетка на всю ширину колонки (как VK); при нечётном числе первая картинка на ширину двух.
- Черновики: скрыты у WP-авторов; у админов — свёрнутая подгруппа в «Личные» после диалогов.
- «Доступные группы» не показываются, если список пуст.
- У гостя «Текущий диалог» только при своём черновике (по IP) и первым в меню.
- Вкладка «Люди» для авторизованных убрана и объединена с «Личные» (подгруппы Пользователи / Диалоги).
- Список пересылки: Избранное → личные чаты по имени оппонента → диалоги → группы (внутри блока по алфавиту); только где пользователь создатель или автор и может писать.
- Права: WP-админ удаляет любые группы и меняет роли; создатель группы/диалога имеет полные права в своём чате.
- Инструменты под пузырём сообщения (edit/delete/forward/share/pin + save/cache) доступны всем с правом WP
edit_posts(Автор, Редактор, Админ), а не только создателю чата. - Подгруппа «Диалоги» не показывает чаты с
is_dm=1(они через «Пользователи»). - Ярлык «Личный чат» только при
is_dm=1; иначе приватный чат — «Диалог». - В личном чате в шапке/правой колонке показываются имя и аватар собеседника; служебное
dialog_titleредактируется отдельно («Имя диалога»). - У ботов (Хаски, Рыжий кот) аватары с ярко-синей обводкой — те же параметры, что у онлайн-статуса (зелёная).
Fixed
- Компактные боковые отступы аккордеона «Личные»/«Группы» — больше места под названия диалогов.
- Пункт «Удалить» в шестерёнке: прямоугольная заливка вместо «растянутого круга» (конфликт с
border-radius: 50%у.delete-dialog-button). - Создатель диалога (в т.ч. WP Автор) снова может менять превью/аватар: на фронте сравнивался числовой
user_idсо строкой изwp_localize_script. - Обновление списка групп после подписки учитывает аккордеон
.menu-accordion-host. dialog to-add/dialog to-delне обрабатывались бэкендом («Неизвестная команда»).chat_theme_get_message_video_info(): сохранённыйvideo_page_url(wall) больше не блокирует повторный разбор HTML наdata-video-embed-src/data-embed-src.- kses: разрешены
data-video-embed-srcиdata-video-page-urlна.social-feed-post. - Паритет доменов
vk.ruвchat_theme_parse_vk_video_from_text()(video/clip/wall). chat_theme_get_message_preview_url()игнорируетdefault-link-image.png(котёнок-заглушка link-handler).- В личной переписке сообщения от оппонента (не владельца) снова сохраняются:
add/edit/delete_message_safeи кэш изображений больше не передаютopponentвchat_theme_save_or_update_dialog, из‑за чего срабатывала проверка «смена участников» только для владельца/админа. saveCurrentDialogотправляетopponent_idsтолько при создании личной переписки, а не при каждом сохранении.
[1.10.0] — 2025-11-25
Added
- Добавлена поддержка плагина AI Mode (
@ai-mode) для работы с нейросетями - Добавлено поле
ai_modeв объектcurrentDialogна фронтенде для отслеживания AI режима - Реализована автоматическая обёртка пользовательских сообщений в команду
bot [текст]в AI-диалогах - Добавлена передача флага
ai_modeиз бэкенда на фронтенд при загрузке диалога
Changed
- Обновлена функция
chat_theme_get_dialog_by_slug()для выборки поляai-modeиз БД - Обновлена функция
handle_load_dialog_by_slug()для передачиai_modeв ответе AJAX - Улучшена логика обработки команд: предотвращено дублирование сообщений в AI-диалогах
- Обновлена функция
processCommand()для автоматической обработки AI команд
Fixed
- Исправлена проблема дублирования сообщений в AI-диалогах (
ai-mode=1) - Исправлена логика сохранения сообщений: фронтенд не сохраняет сообщения, если их сохраняет плагин
- Улучшена синхронизация между фронтендом и бэкендом при работе с AI
[1.9.0] — 2025-11-24
Added
- Добавлен столбец
ai-mode(по умолчанию0) в таблицуwp_chat_dialogsдля фиксации статуса режима ИИ с поддержкой контекста. - Создан файл
CHANGELOG.mdи добавлена ссылка в документацию.



