122 lines
6.3 KiB
Plaintext
122 lines
6.3 KiB
Plaintext
chatcli — headless chat CLI for uTun
|
||
=====================================
|
||
|
||
TCP JSON-RPC клиент для управления чатом uTun без GUI.
|
||
|
||
Настройка сервера
|
||
-----------------
|
||
В конфиге uTun в секции [chatserver] добавить:
|
||
headless_control_bind=127.0.0.1:9999
|
||
|
||
Протокол
|
||
--------
|
||
JSON line: запрос {"id":N,"cmd":"...","params"} → ответ {"id":N,"ok":true,"data":...}
|
||
При подписке (subscribe) сервер шлёт асинхронные события: {"event":"...",...}
|
||
|
||
Переменные окружения
|
||
--------------------
|
||
CHATCLI_HOST — хост по умолчанию (127.0.0.1)
|
||
CHATCLI_PORT — порт по умолчанию (9999)
|
||
|
||
Команды
|
||
-------
|
||
|
||
ping
|
||
Проверка соединения и uptime сервера.
|
||
Пример: chatcli ping
|
||
|
||
status
|
||
Статус узла: NTP синхронизация, активные соединения, NAT.
|
||
Пример: chatcli status
|
||
|
||
channels
|
||
Список всех каналов с метаданными: id, имя, owner, число мемберов,
|
||
число сообщений, сколько онлайн.
|
||
Пример: chatcli channels
|
||
|
||
members <ch_id>
|
||
Список участников канала с полным состоянием:
|
||
node_id, имя, online, connected, публичные ключи (x25519/ed25519 hex),
|
||
адреса (ip, port, proto, rtt).
|
||
Пример: chatcli members 12345
|
||
|
||
messages <ch_id> [count]
|
||
Последние N сообщений канала (по умолчанию 20):
|
||
id, timestamp, author_id, author_name, content_type, data.
|
||
Пример: chatcli messages 12345 10
|
||
|
||
send <ch_id> <text>
|
||
Отправить текстовое сообщение в канал.
|
||
Пример: chatcli send 12345 "hello world"
|
||
|
||
attach <ch_id> <path> [--video]
|
||
Прикрепить файл к сообщению. Файл копируется в медиа-каталог канала.
|
||
С флагом --video — файл обрабатывается как видео: если ffmpeg доступен,
|
||
перекодируется в H.264/MP4 (720p, ≤2 Мбит); если уже в нужном формате —
|
||
отправляется как есть.
|
||
Пример: chatcli attach 12345 /tmp/photo.jpg
|
||
chatcli attach 12345 /tmp/clip.mov --video
|
||
|
||
poll <ch_id> <question> <option1> <option2> ... [--multiple] [--custom]
|
||
Создать неизменяемый опрос. По умолчанию разрешён один пункт.
|
||
--multiple разрешает несколько пунктов; --custom разрешает собственный текст.
|
||
Пример: chatcli poll 12345 "Куда пойдём?" "В парк" "В кафе" --multiple --custom
|
||
Ответ содержит message_id; он также виден в команде messages.
|
||
|
||
vote <ch_id> <message_id> [option_id ...] [--custom <text>]
|
||
Сохранить полный новый ответ. Номера пунктов начинаются с 0, как id в feedback.
|
||
Пустой выбор без собственного текста отменяет голос, сохраняя новый ver.
|
||
При выборе одного пункта свой ответ заменяет готовый пункт; при нескольких дополняет выбор.
|
||
Пример: chatcli vote 12345 <message_id> 0 1 --custom "Ещё один вариант"
|
||
chatcli vote 12345 <message_id>
|
||
|
||
react <ch_id> <message_id> [emoji_or_id] [--off] [--clear]
|
||
Установить единственную реакцию, заменив предыдущую; --off снимает выбранную, --clear отменяет свою реакцию.
|
||
Пример: chatcli react 12345 <message_id> "👍"
|
||
chatcli react 12345 <message_id> 0 --off
|
||
chatcli react 12345 <message_id> --clear
|
||
|
||
reactions
|
||
Общий каталог постоянных номеров и эмодзи.
|
||
|
||
feedback <ch_id> <message_id>
|
||
Текущие реакции, свои состояния, результаты и подписанные ответы участников.
|
||
Для нескольких пунктов проценты считаются от числа ответивших и могут суммарно превышать 100%.
|
||
Отсутствующее исходное сообщение обозначается pending; ответы сохраняются до его получения.
|
||
|
||
invite <ch_id> [node_id]
|
||
Создать invite-ссылку для канала (формат utun://...).
|
||
Без node_id — автоматический выбор лучшего достижимого узла.
|
||
С node_id — ссылка ведёт на указанный узел (hex, например 0x1234).
|
||
Ссылка включает pubkey, адреса выбранного узла и ID канала.
|
||
Пример: chatcli invite 12345
|
||
chatcli invite 12345 0x1a2b3c
|
||
|
||
invite_nodes <ch_id>
|
||
Список достижимых узлов канала, пригодных для invite (включая свой узел).
|
||
Ответ содержит auto_node_id — узел, выбранный авто-логикой,
|
||
и список nodes (node_id, имя).
|
||
Пример: chatcli invite_nodes 12345
|
||
|
||
connect <utun://...>
|
||
Подключиться к каналу по invite-ссылке.
|
||
Декодирует ссылку, сохраняет pubkey и адреса узла в БД,
|
||
запускает процесс подключения.
|
||
Пример: chatcli connect utun://AgR0ZXN0...
|
||
|
||
create <name>
|
||
Создать новый канал. Генерирует ключи X25519/Ed25519,
|
||
подписывает join-сообщение.
|
||
Пример: chatcli create "My Group"
|
||
|
||
listen
|
||
Подписаться на события и слушать в реальном времени.
|
||
Получает: новые сообщения, изменения мемберов, приглашения.
|
||
Выход: Ctrl+C
|
||
Пример: chatcli listen
|
||
|
||
Настройки хоста/порта
|
||
---------------------
|
||
chatcli --host 192.168.1.1 --port 8888 channels
|
||
CHATCLI_HOST=10.0.0.1 CHATCLI_PORT=7777 chatcli status
|