# The Chat Room! RU-Edition IRC-стиль чата для **Reticulum NomadNet**, оптимизирован для **MeshChat v2.1+**. Автор: F. Переведено на русский Sudo-Ivan. --- ## Демо Официальная страница NomadNet: **Ссылка на страницу NomadNet (оптимизировано для MeshChat v2.1+):** `d251bfd8e30540b5bd219bbbfcc3afc5:/page/index.mu` --- ## Информация Добро пожаловать в **THE CHATROOM** – v2.00 от F. Первый IRC-стиль чата для Reticulum/Nomadnet, оптимизирован для Nomadnet и Meshchat v2.x+. Создан в v1 (beta) 10 августа 2025. Стабильная версия v2.00: 01/10/2025 --- ## Обзор проекта Скрипт страницы Nomadnet на Python для создания IRC-стиля чата. Файлы уже находятся в папке `./nomadnetwork/storage/pages/`. Сделайте файлы исполняемыми через `chmod +x` и запустите узел Nomadnet. - Децентрализованная mesh-сеть на базе NomadNetwork - Регистрация не требуется — выберите никнейм и начинайте общаться - Никнеймы автоматически окрашиваются и сохраняются между сессиями - Привязка никнейма к адресу LXMF через Fingerprint в Meshchat v2+ для сохранения и восстановления никнейма между сессиями (благодарность: **THOMAS**) - Построен на Python и компонентах Micron, JSON и SQL БД для чата, темы и сохранения никнеймов - Официальный скрипт чата размещён на VPS для стабильной работы Демо: `d251bfd8e30540b5bd219bbbfcc3afc5:/page/index.mu` GitHub: [https://github.com/fr33n0w/thechatroom](https://github.com/fr33n0w/thechatroom) --- ## Требования Проект использует встроенные модули Python и сторонние библиотеки. ### Встроенные модули (установка не требуется) | Модуль | Назначение | |---------------------|---------------------------------------------------------------------| | `os` | Работа с операционной системой (пути к файлам, переменные окружения)| | `sys` | Доступ к системным параметрам и функциям | | `json` | Парсинг и работа с JSON данными | | `time` | Операции со временем (задержки, временные метки) | | `random` | Генерация случайных значений | | `re` | Сопоставление с регулярными выражениями | | `shutil` | Высокоуровневые файловые операции (копирование, перемещение) | | `collections` | Специализированные структуры данных, например `Counter` | | `datetime` | Работа с датой и временем | ### Сторонние библиотеки (установка через pip) | Пакет | Назначение | |------------|---------------------------------------------------------------------| | `pytz` | Определения и преобразования часовых поясов | | `requests` | Упрощённые HTTP запросы (нужно только для команды /meteo) | | `geopy` | Геолокационные сервисы (поиск адресов через Nominatim) | Установка: ```bash pip install pytz requests geopy ``` Примечание: `sqlite3` является встроенным модулем Python и не требует установки. Также необходимо установить и настроить NomadNet для размещения страницы: ```bash pip install nomadnet ``` Протестировано и работает с rns_server_pages от SebastianObi: https://github.com/SebastianObi/RNS-Tools/tree/main/rns_server_page --- ## Установка ### 1. Скачать файлы Клонировать репозиторий или скачать ZIP: ```bash git clone https://github.com/Sudo-Ivan/thechatroom.git cd thechatroom ``` ### 2. Сделать файлы исполняемыми Файлы уже находятся в правильной директории. Сделайте их исполняемыми: ```bash chmod +x ./nomadnetwork/storage/pages/nomadnet.mu chmod +x ./nomadnetwork/storage/pages/meshchat.mu chmod +x ./nomadnetwork/storage/pages/fullchat.mu chmod +x ./nomadnetwork/storage/pages/last100.mu ``` ### 3. Запустить NomadNet ```bash nomadnet -d --config ./nomadnetwork --rnsconfig ./.reticulum/ ``` Готово! Примечание: TheChatRoom создан и запускался на машинах с правами root, возможно потребуются права root для запуска. --- ## Установка через Docker ### Требования - Docker - Docker Compose ### Быстрый старт ```bash git clone https://github.com/Sudo-Ivan/thechatroom.git cd thechatroom docker compose up -d ``` Контейнер запустится с предустановленной конфигурацией Reticulum и интерфейсами. По умолчанию используется host network mode для работы с mesh-сетью. ### Персистентное хранение данных (опционально) Для сохранения данных между перезапусками контейнера раскомментируйте строки volumes в `docker-compose.yml`: ```yaml volumes: - ./nomadnetwork:/app/nomadnetwork - ./.reticulum:/home/appuser/.reticulum ``` Это позволит сохранять логи чата и конфигурацию Reticulum на хосте. ### Управление контейнером ```bash docker compose logs -f docker compose restart docker compose down ``` --- ## Технические заметки - Чат не обновляется автоматически из-за ограничений Micron → Используйте кнопки **Reload** в нижней панели меню для просмотра новых сообщений - Никнеймы можно сохранять через **Fingerprint binding** в MeshChat - Использование: нажмите кнопку fingerprint, установите никнейм и перезагрузите страницу. Никнейм сохранён. → Это позволяет сохранять никнейм между сессиями (благодарность Thomas!) - Для восстановления никнейма при потере кэша сессии нажмите fingerprint снова, и он появится автоматически - Основной вид чата показывает **последние 30 сообщений** для соответствия окнам браузера MeshChat, можно настроить лимит в скрипте → Полные логи доступны через кнопку **View Logs** в нижнем меню - Команда `/meteo` использует внешние API → Требует установки `requests` и `geopy` - Построен на Python и компонентах Micron → Совместим с MeshChat v2.1+ и чистым клиентом NomadNet --- ## Справочник команд ### Общие информационные и служебные команды | Команда | Описание | |------------|----------------------------------------------------| | `/info` | Показать информацию о чате, использование и отказ | | `/cmd` | Показать все доступные команды пользователя | | `/stats` | Показать статистику чата, включая Топ-5 участников | | `/users` | Список всех активных пользователей чата | | `/version` | Показать версию скрипта, последние обновления | ### Интерактивные команды чата | Команда | Описание | |-----------------------------|---------------------------------------------------| | `/lastseen ` | Показать последнее появление и сообщение пользователя | | `/topic` или `/topic ` | Просмотр или изменение текущей темы комнаты | | `/search ` | Поиск ключевых слов в полном логе чата | | `/time` | Показать текущее время сервера (UTC) и локальное | | `/ping` | Ответить PONG! для подтверждения активности системы | | `/meteo ` | Получить информацию о погоде для города (требует интернет + API) | ### Команды социального взаимодействия | Команда | Описание | |-----------------------------|---------------------------------------------------| | `/e` | Отправить случайные эмодзи из внутреннего списка | | `/c ` | Отправить цветное сообщение со случайными цветами фона и шрифта | | `@nickname` | Упомянуть пользователя с цветной подсветкой | | `$e` | Вставить случайный эмотикон в любое место сообщения | | `/welcome` или `/welcome ` | Отправить приветственное сообщение в комнату или конкретному пользователю | ### Команды статуса пользователя | Команда | Описание | |-----------------------------|---------------------------------------------------| | `/hi`, `/bye`, `/brb`, `/lol`, `/exit`, `/quit`, `/away`, `/back`, `/notice` | Отправить обновления статуса или реакции | | Пример | `/hi Hello World!` — синтаксис работает для всех команд статуса | ### Административные команды (ограниченный доступ) > Доступны только системным администраторам через `/admincmd` | Команда | Описание | |--------------------------|---------------------------------------------------| | `/clear` | Удалить последнее сообщение навсегда | | `/clear N` | Удалить последние N сообщений, например `/clear 3` | | `/clear user ` | Удалить все сообщения от конкретного пользователя | | `/clearall` | Очистить весь лог чата и базу данных (необратимо) | | `/backup` | Создать полную резервную копию `chat_log.json` в папке скрипта | > Некоторые команды требуют доступа в интернет или сторонних библиотек (`requests`, `geopy`). > Административные команды защищены и доступны только авторизованным пользователям. (Отредактируйте никнейм SYSADMIN в скрипте!!) --- ## Дополнительные возможности ### Антиспам The ChatRoom! включает список фильтров антиспама на основе отдельных слов или комбинаций фраз. Добавьте свои или удалите ненужные заблокированные слова в секции spam_patterns скрипта. ### Фиксированные окна интерфейса Интерфейс фиксирован с помощью переменной DISPLAY_LIMIT, ограничен примерно 28 сообщениями для соответствия окну браузера MeshChat 2.0+. То же для страницы Nomadnet с более простым подходом, ограничение строк примерно до 36. Примечание: Длинные сообщения пользователей разбиваются на несколько строк, что может изменять размер финального интерфейса. ### Система цветов никнеймов Автоматическое окрашивание никнейма пользователя для лучшей читаемости, сохраняется для любого сообщения или команды, один никнейм — один цвет. Можно редактировать цвета по умолчанию в скрипте. ### Привязка никнейма к отпечатку LXMF (благодарность Thomas!) Нажав кнопку Fingerprint в meshchat v2.1+, вы отправляете свой lxmf в чат, и скрипт автоматически привяжет никнейм и адрес lxmf как автовход. При повторном входе в чат никнейм будет автоматически восстановлен. Если переменные окружения meshchat отсутствуют (например, после перезагрузки), просто нажмите fingerprint снова, и на основе вашего lxmf никнейм появится автоматически. Никнейм и соответствующий адрес LXMF сохраняются в SQL БД для восстановления. ### Функция разбиения длинных сообщений Длинные сообщения автоматически разбиваются на несколько строк для сохранения постоянного макета и формата интерфейса. ### Команды статистики и пользователей Показывают статистику чата, топ участников, общее количество отправленных сообщений на пользователя, общее количество пользователей в чате (команды: /stats или /users) --- ## Планируемые функции ### Персонализированные настройки пользователя (например, установка предпочтений цвета никнейма, возможность кликнуть по никнейму для отправки адреса lxmf для приватного чата, удаление привязки никнейма и lxmf, выбор темы чата и т.д.) ### Команды администрирования (например, добавление или удаление нескольких администраторов)