# Skrzynka Impostora Bot - Instrukcje dla Copilot ## Opis projektu To jest projekt Discord Bot o nazwie "Skrzynka Impostora Bot" służący do zarządzania wiadomościami powiatalnymi na serwerach Discord. Projekt składa się z: - **Backend**: Node.js + Express z biblioteką discord.js - **Frontend**: React SPA (Single Page Application) - **Baza danych**: PostgreSQL - **Funkcjonalności**: Discord slash commands, panel web OAuth2, edytor wiadomości ## Struktura projektu ``` /backend/ - Serwer Node.js i bot Discord /commands/ - Slash commands dla Discord /database/ - Zarządzanie bazą danych /web/ - API serwer dla panelu web /frontend/ - React aplikacja (panel administracyjny) /src/components/ - Komponenty React /src/pages/ - Strony aplikacji /src/services/ - Serwisy API /src/hooks/ - React hooks /database/ - Skrypty migracji i seedowania /shared/ - Współdzielone utilities ``` ## Kluczowe technologie - **Discord.js v14** - Biblioteka Discord API - **Express.js** - Web framework - **PostgreSQL** - Baza danych relacyjna - **React 18** - Frontend framework - **JWT** - Autoryzacja - **OAuth2** - Logowanie przez Discord ## Główne funkcjonalności 1. **Slash Commands**: - `/skrzynka` - komendy użytkownika - `/skrzynka-adm` - komendy administracyjne 2. **Panel Web**: - Logowanie przez Discord OAuth2 - Edytor wiadomości z podglądem - Zarządzanie serwerami - Historia zmian 3. **Zarządzanie wiadomościami**: - Wsparcie Discord Markdown - Live preview - Walidacja długości (2000 znaków) - Automatyczna aktualizacja na Discord ## Style kodowania - Używaj ES6+ składni - Preferuj async/await nad Promise.then() - Zastosuj destructuring tam gdzie możliwe - Używaj const/let zamiast var - Komponenty React jako funkcyjne z hooks - Nazwy plików: PascalCase dla komponentów, camelCase dla utilities ## Bezpieczeństwo - Wszystkie zapytania API wymagają JWT token - Walidacja danych wejściowych przez express-validator - Helmet.js dla zabezpieczeń HTTP - CORS skonfigurowany dla specific origins - SQL prepared statements (pg library) ## Środowisko i konfiguracja - Zmienne środowiskowe w pliku .env - Development: localhost:3000 (API), localhost:3001 (React) - Production: buildy React serwowane przez Express ## Konwencje nazewnictwa - Tabele bazy: snake_case (np. welcome_messages) - Kolumny bazy: snake_case (np. guild_id) - JavaScript: camelCase (np. guildId) - Komponenty React: PascalCase (np. MessageEditor) - CSS classes: kebab-case (np. discord-button) ## Pomocne wskazówki - Bot wymaga uprawnień MANAGE_CHANNELS do działania - Discord API ma limit 2000 znaków na wiadomość - Używaj PostgreSQL JSONB dla embed_data - Zawsze dodawaj error handling dla Discord API calls - Frontend używa Tailwind-like CSS classes w App.css