275 lines
16 KiB
Markdown
275 lines
16 KiB
Markdown
# 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 <nickname>` | Показать последнее появление и сообщение пользователя |
|
||
| `/topic` или `/topic <text>` | Просмотр или изменение текущей темы комнаты |
|
||
| `/search <keyword(s)>` | Поиск ключевых слов в полном логе чата |
|
||
| `/time` | Показать текущее время сервера (UTC) и локальное |
|
||
| `/ping` | Ответить PONG! для подтверждения активности системы |
|
||
| `/meteo <city>` | Получить информацию о погоде для города (требует интернет + API) |
|
||
|
||
### Команды социального взаимодействия
|
||
|
||
| Команда | Описание |
|
||
|-----------------------------|---------------------------------------------------|
|
||
| `/e` | Отправить случайные эмодзи из внутреннего списка |
|
||
| `/c <message>` | Отправить цветное сообщение со случайными цветами фона и шрифта |
|
||
| `@nickname` | Упомянуть пользователя с цветной подсветкой |
|
||
| `$e` | Вставить случайный эмотикон в любое место сообщения |
|
||
| `/welcome` или `/welcome <nickname>` | Отправить приветственное сообщение в комнату или конкретному пользователю |
|
||
|
||
### Команды статуса пользователя
|
||
|
||
| Команда | Описание |
|
||
|-----------------------------|---------------------------------------------------|
|
||
| `/hi`, `/bye`, `/brb`, `/lol`, `/exit`, `/quit`, `/away`, `/back`, `/notice` | Отправить обновления статуса или реакции |
|
||
| Пример | `/hi Hello World!` — синтаксис работает для всех команд статуса |
|
||
|
||
### Административные команды (ограниченный доступ)
|
||
|
||
> Доступны только системным администраторам через `/admincmd`
|
||
|
||
| Команда | Описание |
|
||
|--------------------------|---------------------------------------------------|
|
||
| `/clear` | Удалить последнее сообщение навсегда |
|
||
| `/clear N` | Удалить последние N сообщений, например `/clear 3` |
|
||
| `/clear user <nickname>` | Удалить все сообщения от конкретного пользователя |
|
||
| `/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, выбор темы чата и т.д.)
|
||
|
||
### Команды администрирования
|
||
|
||
(например, добавление или удаление нескольких администраторов)
|