Files
2025-11-23 10:31:05 -06:00

275 lines
16 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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, выбор темы чата и т.д.)
### Команды администрирования
(например, добавление или удаление нескольких администраторов)