6.5 KiB
Настройка музыкального модуля Nakama
Установка зависимостей
Для работы музыкального модуля требуется установить дополнительные пакеты:
npm install adm-zip music-metadata
- adm-zip - для распаковки ZIP-архивов при загрузке альбомов
- music-metadata - для извлечения метаданных (название, исполнитель, обложка) из аудио файлов
Структура файлов
Backend
Модели:
backend/models/Artist.js- Исполнителиbackend/models/Album.js- Альбомыbackend/models/Track.js- Трекиbackend/models/FavoriteTrack.js- Избранные треки пользователей
Routes:
backend/routes/music.js- API для музыки (загрузка, поиск, избранное)backend/routes/bot.js- Обновлен для отправки треков в Telegrambackend/routes/posts.js- Обновлен для поддержки музыкальных вложений
Бот:
backend/bot.js- Добавлена функцияsendAudioToUser()для отправки треков
Frontend
Страницы:
frontend/src/pages/Media.jsx- Главная страница Media с категориямиfrontend/src/pages/MediaFurry.jsx- Поиск Furry контентаfrontend/src/pages/MediaAnime.jsx- Поиск Anime контентаfrontend/src/pages/MediaMusic.jsx- Музыкальный сервис
Компоненты:
frontend/src/components/MiniPlayer.jsx- Мини-плеер (внизу экрана)frontend/src/components/FullPlayer.jsx- Полный плеерfrontend/src/components/MusicAttachment.jsx- Отображение музыки в постах
Контекст:
frontend/src/contexts/MusicPlayerContext.jsx- Управление состоянием плеера
API:
frontend/src/utils/musicApi.js- API функции для работы с музыкой
Функционал
1. Media Hub
- Главная страница с тремя категориями: Furry, Anime, Music
- Квадратные кнопки-карточки с цветовой кодировкой
- Анимации и состояния как в остальном приложении
2. Furry / Anime
- Отдельные страницы для каждой категории
- Поиск по тегам (e621 / gelbooru)
- Автокомплит тегов
- Просмотр изображений
- Добавление в посты
- Отправка в Telegram
- Режим выбора нескольких изображений
3. Music Service
Загрузка:
- Загрузка отдельных треков (MP3, WAV, OGG, M4A, FLAC)
- Загрузка альбомов из ZIP архива
- Автоматическое извлечение метаданных из аудио файлов:
- Название трека
- Исполнитель
- Альбом
- Год
- Жанр
- Номер трека
- Обложка (из ID3 тегов)
- Возможность редактирования метаданных при загрузке
- Автоматическое создание исполнителей и альбомов
Поиск:
- Поиск по трекам, исполнителям, альбомам
- Фильтрация результатов
Плеер:
- Мини-плеер (закреплен внизу)
- Полный плеер (открывается по клику)
- Управление воспроизведением (play/pause/next/prev)
- Прогресс-бар с перемоткой
- Регулировка громкости
- Очередь воспроизведения
Избранное:
- Добавление треков в избранное
- Просмотр избранных треков
Telegram интеграция:
- Отправка треков в личные сообщения
- Треки отправляются как аудио файлы с метаданными
4. Музыка в постах
- Прикрепление треков к постам
- Воспроизведение через общий плеер
- Отображение в ленте
API Endpoints
Music
GET /api/music/search?q=query&type=all - Поиск музыки
GET /api/music/tracks?limit=50&page=1 - Список треков
GET /api/music/tracks/:trackId - Получить трек
GET /api/music/albums/:albumId - Получить альбом с треками
POST /api/music/upload-track - Загрузить трек
- FormData: track (file), title, artistName, albumTitle, trackNumber, year, genre
POST /api/music/upload-album - Загрузить альбом (ZIP)
- FormData: album (zip), artistName, albumTitle, year, genre
POST /api/music/favorites/:trackId - Добавить в избранное
DELETE /api/music/favorites/:trackId - Удалить из избранного
GET /api/music/favorites - Получить избранные треки
POST /api/music/tracks/:trackId/play - Отметить прослушивание
Bot
POST /api/bot/send-track - Отправить трек в Telegram
{
"userId": 123456789,
"trackId": "track_id"
}
Навигация
Вкладка "Search" переименована в "Media" с иконкой Layers.
Цветовая схема
- Furry:
var(--tag-furry)- оранжевый (#FF8A33) - Anime:
var(--tag-anime)- синий (#4A90E2) - Music:
#9b59b6- фиолетовый
Примечания
- Музыкальные файлы хранятся в
backend/uploads/music/ - Поддерживаемые форматы: MP3, WAV, OGG, M4A
- Максимальный размер файла: 50MB
- ZIP архивы автоматически распаковываются и создают альбом
- Плеер работает глобально - музыка продолжает играть при навигации
- Треки в постах воспроизводятся через общий плеер