Tg with Notifications, bags fixxed
This commit is contained in:
78
TELEGRAM_STATUS_README.md
Normal file
78
TELEGRAM_STATUS_README.md
Normal file
@@ -0,0 +1,78 @@
|
||||
# Система статуса пользователей для Telegram (Shipgram)
|
||||
|
||||
## Описание
|
||||
|
||||
Реализована система отображения статуса "online/offline" для пользователей в Telegram приложении (Shipgram) игрового телефона. Статус показывает, действительно ли игрок находится онлайн в игре.
|
||||
|
||||
## Что реализовано
|
||||
|
||||
### 1. Серверная часть (server.js)
|
||||
|
||||
- **Отслеживание онлайн пользователей**: Переменная `onlineUsers` хранит ID пользователей, которые в данный момент подключены к WebSocket
|
||||
- **Отслеживание времени последнего онлайн**: Переменная `lastSeenTimes` хранит время последнего подключения/отключения каждого пользователя
|
||||
- **WebSocket события**:
|
||||
- При подключении: `userStatusChanged` с `isOnline: true`
|
||||
- При отключении: `userStatusChanged` с `isOnline: false`
|
||||
- **API endpoint**: `/api/users/status` возвращает список пользователей с их статусом
|
||||
|
||||
### 2. Клиентская часть (Game.js)
|
||||
|
||||
- **Обновленный API вызов**: `loadTelegramContacts()` теперь использует `/api/users/status` вместо `/api/users`
|
||||
- **WebSocket обработчик**: Слушает события `userStatusChanged` и обновляет статус в реальном времени
|
||||
- **Периодическое обновление**: Каждые 30 секунд обновляет статус пользователей
|
||||
- **Визуальные индикаторы**:
|
||||
- Зеленая точка для онлайн пользователей
|
||||
- Цветной текст статуса (зеленый для онлайн, серый для офлайн)
|
||||
- Время последнего онлайн для офлайн пользователей
|
||||
|
||||
### 3. API функции (auth.js)
|
||||
|
||||
- Добавлена функция `getUsersStatus()` для получения статуса пользователей
|
||||
|
||||
## Как это работает
|
||||
|
||||
1. **Подключение пользователя**:
|
||||
- Пользователь входит в игру
|
||||
- WebSocket middleware добавляет его в `onlineUsers`
|
||||
- Обновляется `lastSeenTimes`
|
||||
- Отправляется событие `userStatusChanged` всем клиентам
|
||||
|
||||
2. **Отключение пользователя**:
|
||||
- Пользователь выходит из игры или теряет соединение
|
||||
- Обновляется `lastSeenTimes`
|
||||
- Отправляется событие `userStatusChanged` всем клиентам
|
||||
- Пользователь удаляется из `onlineUsers`
|
||||
|
||||
3. **Отображение в Telegram**:
|
||||
- При открытии Telegram загружается список пользователей с их статусом
|
||||
- Статус обновляется в реальном времени через WebSocket
|
||||
- Периодически обновляется через API для синхронизации
|
||||
|
||||
## Файлы, которые были изменены
|
||||
|
||||
- `server.js` - добавлена логика отслеживания статуса и WebSocket события
|
||||
- `src/Game.js` - обновлено Telegram приложение для отображения статуса
|
||||
- `src/api/auth.js` - добавлена функция для получения статуса пользователей
|
||||
- `test_telegram_status.html` - тестовый файл для проверки API
|
||||
|
||||
## Тестирование
|
||||
|
||||
1. Запустите сервер
|
||||
2. Откройте `test_telegram_status.html` в браузере
|
||||
3. Введите JWT токен пользователя
|
||||
4. Нажмите "Тестировать API"
|
||||
5. Проверьте, что статус пользователей отображается корректно
|
||||
|
||||
## Особенности
|
||||
|
||||
- **Реальное время**: Статус обновляется мгновенно при подключении/отключении
|
||||
- **Надежность**: Периодическое обновление через API обеспечивает синхронизацию
|
||||
- **Производительность**: WebSocket события отправляются только при изменении статуса
|
||||
- **Визуальная обратная связь**: Зеленые точки и цветной текст для лучшего UX
|
||||
|
||||
## Возможные улучшения
|
||||
|
||||
1. **Кэширование**: Добавить кэширование статуса пользователей
|
||||
2. **Группировка**: Группировать пользователей по статусу
|
||||
3. **Уведомления**: Уведомления о том, что пользователь стал онлайн
|
||||
4. **Статистика**: Время, проведенное онлайн, активность и т.д.
|
||||
Reference in New Issue
Block a user