Files
telegram-tui/REQUIREMENTS.md
Mikhail Kilin 051c4a0265
Some checks are pending
CI / Check (pull_request) Waiting to run
CI / Format (pull_request) Waiting to run
CI / Clippy (pull_request) Waiting to run
CI / Build (macos-latest) (pull_request) Waiting to run
CI / Build (ubuntu-latest) (pull_request) Waiting to run
CI / Build (windows-latest) (pull_request) Waiting to run
fixes
2026-01-28 01:29:03 +03:00

132 lines
11 KiB
Markdown
Raw 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.

# TTUI - Требование к приложению
## Описание приложения
Терминальный интерфейс для telegram
## Функциональные требования
### Интерфейс
┌─ TTUI ───────────────────────────────────────────────────────────────────────┐
│ 1:All │ 2:Personal │ 3:Work │ 4:Bots │
├──────────────────────┬───────────────────────────────────────────────────────┤
│ 🔍 Search... │ 👤 Mom (online) │
├──────────────────────┼───────────────────────────────────────────────────────┤
│ 📌 Saved Messages │ Today, Dec 21│
│ ▌ Mom (2)│ │
│ Boss │ Mom ────────────────────────────────────────── 14:20 │
│ Rust Community │ Привет! Ты покормил кота? │
│ Durov │ │
│ News Channel │ You ─────────────────────────────────────── 14:22 ✓✓ │
│ Spam Bot │ Да, конечно. Купил ему корм. │
│ Wife │ Скоро буду дома. │
│ Team Lead │ │
│ DevOps Chat (9)│ Mom ────────────────────────────────────────── 14:23 │
│ Server Alerts │ Отлично, захвати хлеба. │
│ Gym Bro │ │
│ Design Team │ You ─────────────────────────────────────── 14:25 ✓ │
│ Project X │ Ок. │
│ HR │ │
│ Mom's Friend │ │
│ Taxi Bot │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
├──────────────────────┼───────────────────────────────────────────────────────┤
│ [User: Online] │ > **message**
└──────────────────────┴───────────────────────────────────────────────────────┘
**commands**
### Список желаемого
1) футер - список папок в телеграме
2) список с чатами - лички и группы, сверху инпут для поиска чата
3) основной контент - открытый чат с сообщениями из чата, если никакой чат не открыт, то контент пустой, ничего не показываем. Снизу - инпут для ввода сообщения в чат, который открыт
4) снизу списка чата статус онлайн или нет сам пользователь приложения
5) при открытии чата должна загружаться история чата, а так же подгружаться новые сообщения от собеседника.
6) выделяем сообщения собеседника его никнеймом, группируем его сообщения и разделяем наши сообщения и сообщения собеседника, как на интерфейсе сверху
7) отображаем наше сообщение символом `✓`, если телеграм подтвердил, что сообщение отправлено, и выделяем `✓✓` если собеседник прочитал его
8) при навигации в чате выделяем строку курсивом, при выборе чата (то есть его открытии) ставим в начало символ ▌
9) `(2)` — счетчик непрочитанных (можно красить в красный/зеленый).
10) `muted` — статус чата (серый цвет).
11) `@` — пинг/меншн.
12) с видео/картинками/голосовые пока ничего не делаем, ренденим заглушку (с упоминанием что это картинка или видео и тд)
### Дополнительно реализованные возможности
13) **Markdown форматирование**: жирный, курсив, подчёркивание, зачёркивание, код, спойлеры, ссылки, упоминания
14) **Редактирование сообщений**: ↑ при пустом инпуте → выбор → Enter → редактирование
15) **Удаление сообщений**: d/в/Delete в режиме выбора → подтверждение → удаление
16) **Reply на сообщения**: r/к в режиме выбора → превью → отправка ответа
17) **Forward сообщений**: f/а в режиме выбора → выбор чата → пересылка
18) **Typing indicator**: отображение "печатает..." когда собеседник набирает текст
19) **Закреплённые сообщения**: отображение pinned message вверху чата с переходом
20) **Поиск по сообщениям**: Ctrl+F для поиска внутри чата, n/N для навигации
21) **Черновики**: автосохранение текста при переключении между чатами
22) **Профиль**: i для просмотра информации о пользователе/группе
23) **Копирование**: y/н для копирования сообщения в системный буфер
24) **Реакции**: e/у для добавления реакций, emoji picker с навигацией стрелками
25) **Конфигурация**: ~/.config/tele-tui/config.toml для настройки цветов и timezone
26) **Credentials**: приоритетная загрузка из ~/.config/tele-tui/credentials или .env
27) **Блочный курсор**: Vim-style курсор █ с навигацией ←/→/Home/End
28) **Динамический инпут**: автоматическое расширение до 10 строк
29) **Онлайн-статус**: зелёная точка ● для онлайн пользователей
30) **Индикаторы**: 📌 закреплённые чаты, 🔇 замьюченные, @ упоминания
31) **Состояние сети**: индикатор в футере (⚠ Нет сети, ⏳ Подключение...)
32) **Graceful shutdown**: корректное закрытие при Ctrl+C
### Управление
1) ctrl+c или command+c - выход из программы
2) "h j k l" - влево, вниз, вверх, вправо (навигация в левом столбце) vim-style управление
3) стрелки - управление, так же как и "h j k l"
4) "command + 1", "command + 2" и так далее - переключение между папками, которые созданы в телеграме
5) из интерфейса "**message**" - это инпут для ввода сообщения в открытый чат
6) ctrl + s - фокус в инпут поиска чата
7) Esc - закрытие открытого чата
8) command + стрелка вверх (или ctrl + k) - выделяем самый верхний чат (без открытия)
9) поддержка русской раскладки: "р о л д" соответствует "h j k l"
10) Ctrl+R - обновить список чатов
### Реализованные команды
#### Навигация
```
↑/↓ или k/j (р/о): Navigate | Enter: Open/Send | Esc: Close/Cancel | 1-9: Folders
Ctrl+S: Search Chats | Ctrl+R: Refresh | Ctrl+F: Search in Chat | Ctrl+C: Quit
```
#### Работа с сообщениями
```
↑ (пустой инпут): Select message | Enter: Edit | r/к: Reply | f/а: Forward
d/в/Delete: Delete | y/н: Copy | e/у: React | i: Profile
```
#### Emoji Picker (реакции)
```
←/→/↑/↓: Navigate | Enter: Toggle reaction | Esc: Close
```
## Технологии
Пишем на rust-е
1) ratatui 0.29 - для tui интерфейса
2) tdlib-rs 1.1 - для подключения апи телеграма (обёртка над TDLib)
3) tokio 1.x - async runtime
4) crossterm 0.28 - кроссплатформенный терминал
5) serde + serde_json 1.0 - сериализация/десериализация
6) toml 0.8 - парсинг конфигурации
7) dirs 5.0 - XDG директории (config, data)
8) clipboard 0.5 - работа с системным буфером обмена
9) chrono 0.4 - форматирование даты/времени
10) dotenvy 0.15 - загрузка .env файлов
## Нефункциональные требования
### Производительность
1) программа должна выдавать 60 фпс
2) интерфейс не должен мерцать
3) минимальное разрешение - 600 символов, максимального нет, не ограничиваем