No description
- TypeScript 99.5%
- JavaScript 0.5%
| .claude | ||
| prisma | ||
| src | ||
| tests | ||
| .env.example | ||
| .gitignore | ||
| 4mans-bot.service | ||
| bun.lock | ||
| bunfig.toml | ||
| drizzle.config.ts | ||
| ecosystem.config.cjs | ||
| eslint.config.js | ||
| package.json | ||
| README.md | ||
| tsconfig.json | ||
4Mans Bot
Bot Discord per Rocket League 4mans con coda, creazione partite, Elo personalizzato e controllo rank tramite staff.
Avvio Rapido (Bun)
- Installa dipendenze:
bun install
- Copia il file ambiente:
copy .env.example .env
- Compila
.envcon i tuoi valori Discord/PostgreSQL. - Genera il client Prisma:
bun run prisma:generate
- Applica migrazioni:
bun run prisma:migrate --name initbun run prisma:migrate --name rank-s-staff-controls
- Avvia in sviluppo:
bun run dev
Policy Rank
- Rank S, A, B, C sono supportati.
- Rank S non e ottenibile tramite Elo automatico.
- Solo lo staff puo promuovere da Rank A a Rank S.
- I range Elo sono modificabili da staff via comando e persistiti su database.
Permessi Staff con Role IDs
Il bot usa role IDs, non permessi Administrator.
Configura in .env:
STAFF_ROLE_IDS="123456789012345678,987654321098765432"
Se vuoto, i comandi staff rispondono con messaggio di configurazione mancante.
Canali Richiesti
Configura in .env:
RANK_{S,A,B}_QUEUE_CHANNEL_ID: canale testo per tier che contiene il pannello coda con pulsanti.RANK_{S,A,B}_CATEGORY_ID: categoria per tier dove creare canali temporanei match.RANK_{S,A,B}_ROLE_ID: ruolo Discord assegnato al tier (sincronizzato in automatico dopo le partite).
Architettura Comandi (un file per comando)
- src/commands/ping.ts
- src/commands/queue.ts
- src/commands/report.ts
- src/commands/rank.ts
- src/commands/rankcheck.ts
- src/commands/staffrank.ts
- src/commands/rankconfig.ts
- Registro/router: src/commands/index.ts
- Bootstrap bot: src/index.ts
Comandi Slash
/ping/queue action: entra|esci|stato|svuota/report match_id winner/rank action: io|top/rankcheck action: crea|approva|rifiuta|aperti/staffrank action: promuovi_s|rimuovi_s/rankconfig action: mostra|imposta
Nota: la coda e ora anche gestita tramite pulsanti nel pannello fisso del canale queue.
Nuovo Flusso Partita (automatico)
- Nel canale queue c'e sempre un pannello con 2 pulsanti: entra/esci coda.
- Se qualcuno scrive nel canale queue, il pannello viene rigenerato come ultimo messaggio.
- Quando la coda raggiunge 4 giocatori, vengono creati:
- un canale testo temporaneo di partita
- un canale voce lobby temporaneo
- Nel testo partita i 4 giocatori votano il metodo squadre:
- Capitani random
- Squadre random
- Con maggioranza (3/4):
- Capitani: primo capitano sceglie 1 compagno, l'altro prende il restante
- Random: squadre generate casualmente
- Dopo la scelta squadre vengono creati 2 canali voce (limite 2 utenti ciascuno).
- Nel canale testo della partita compare un embed con Team 1/Team 2 e pulsanti voto vincitore.
- Con maggioranza report (3/4) viene assegnato Elo/MMR.
- A fine partita vengono eliminati:
- canale testo partita
- voce lobby partita
- due canali voce team
Il canale voce lobby viene eliminato anche se resta vuoto dopo uscita giocatori.
Audit Log Staff
Le azioni staff vengono salvate nel database in StaffActionLog.
Esempi: svuota coda, promozione/rimozione Rank S, update range rank, azioni ticket.
Prossimo Step Piano
- Integrazione webhook/API del sistema ticket esterno per sincronizzazione automatica stato ticket.