Vai al contenuto
Tutti i lavori
  • #web
  • #discord
  • #bots
  • #realtime
  • #roblox

Arise Crossover Tools

Timer in tempo reale per dungeon ed eventi del gioco Roblox Arise Crossover, alimentati da un bot Discord multi-server che legge gli annunci ufficiali e li inoltra al sito via WebSocket.

Ruolo
Sviluppatore unico del sito e del bot, più le partnership con creator e guild master.
Risultato
Oltre 1.000 dungeon ed eventi tracciati in diretta, più di 60 giocatori in contemporanea nei momenti di punta. Quando strumenti più grandi hanno affollato il settore, sono entrato nel server RankBreakers come sviluppatore.
Anno
2025
Stato
archiviato
Stack
  • React
  • TypeScript
  • Node.js
  • WebSockets
  • Discord.js v14
  • Tailwind
  • Vercel

Discord: l’annuncio del gioco

# dungeon-alerts

In attesa della prossima apparizione…

Il mio bot: analizza e inoltra

{  "type": "dungeon"}

Il sito: la scheda in diretta

Current Event

Dungeon Gate

Rank
Unknown
Location
Unknown
Map
Unknown
Rooms
Unknown
Ends in: --:--

Next Events

  • Dungeon GateStarts at --:--
  • Dedu Island RaidStarts at --:--

Una ricostruzione con apparizioni di esempio, basate su un annuncio reale. Il ciclo di 15 minuti è reale, mostrato nel tuo orario.

  1. L'inizio

    Un gioco scandito dall'orologio

    Arise Crossover è un gioco Roblox di CL Games costruito attorno a contenuti a tempo. Un portale dei dungeon si apre ogni 15 minuti, raid e world boss hanno i loro orari, e ogni portale estrae un rango, un'isola, una mappa e modificatori come i Red Gate e i Double Dungeon. I dettagli venivano annunciati dal bot del gioco sul suo Discord, come testo, e sepolti dal messaggio successivo pochi minuti dopo. Organizzare una partita voleva dire tenere d'occhio il canale.

  2. L'obiettivo

    Una pagina da lasciare aperta

    Volevo che la community restasse informata e potesse organizzarsi senza dover sorvegliare Discord: timer in tempo reale per ogni dungeon ed evento, schede che si completano nel momento in cui arriva un annuncio, e strumenti per l'economia del gioco. Prima di tutto su telefono, perché è lì che i giocatori controllano le cose mentre giocano.

  3. L'avventura

    Da un messaggio Discord a una scheda in diretta

    Ho costruito due metà che lavorano come una. Un bot Discord sta nel server ufficiale, trasforma ogni annuncio in dati strutturati e li inoltra via WebSocket. Un sito in React e TypeScript li riceve e mostra schede degli eventi in diretta, timer e un calcolatore del prezzo delle armi. Anche i server delle gilde volevano gli avvisi, così il bot è diventato multi-server, con ruoli da menzionare e canali degli annunci per ogni server. Lungo la strada ho stretto partnership con creator e guild master, che hanno portato giocatori e orientato le funzioni successive.

    Desktop: un header utile e tutto il calendario a colpo d'occhio.
  4. Le difficoltà

    Testo libero, traffico in diretta, tanti server

    Gli annunci erano testo libero con emoji, e il loro formato cambiava, quindi la lettura doveva essere robusta e fallire in modo evidente invece di mostrare una scheda sbagliata. Ogni browser aperto doveva ricevere gli aggiornamenti all'istante, anche durante gli eventi di punta, e restare aggiornato dopo ore. E funzionare in tanti server voleva dire configurazioni e permessi diversi ovunque, più i rigidi limiti di Discord quando si creano centinaia di ruoli.

  5. La fine

    Capire quando cambiare strada

    La piattaforma ha tracciato in diretta oltre 1.000 dungeon ed eventi e ha servito più di 60 giocatori in contemporanea nei momenti di punta, diventando un punto di riferimento per la community. Poi sono arrivati strumenti più grandi e con più risorse, e il settore si è affollato. Invece di competere in un mercato saturo, sono entrato nel server RankBreakers e sono diventato uno dei suoi sviluppatori. È stato il mio primo bot multi-server e la mia prima pipeline in tempo reale, e mi ha insegnato tanto sul capire quando cambiare strada o collaborare quanto sui WebSocket.

Dungeon ed eventi tracciati finché è rimasto attivo
1.000+
Dungeon ed eventi tracciati finché è rimasto attivo
Giocatori in contemporanea al suo picco
60+
Giocatori in contemporanea al suo picco
Visitatori che usavano il sito al lancio
100+
Visitatori che usavano il sito al lancio
  • Eventi in tempo reale

    Timer per ogni dungeon ed evento, con i dettagli che arrivano via WebSocket nel momento in cui vengono annunciati.

  • Direttamente dagli annunci ufficiali

    Il bot legge gli annunci del Discord del gioco e li inoltra al sito in tempo reale.

  • Calcolatore del prezzo delle armi

    Calcola quanto valgono le armi e quante ne servono per un potenziamento.

  • Prima di tutto su telefono

    Pensato per il telefono che controlli mentre giochi, e altrettanto completo su desktop.

  • Avvisi nel tuo server

    I server delle gilde scelgono un canale per gli avvisi e ricevono ruoli da menzionare per rango, isola e portali speciali.

  • Costruito con la community

    Partnership con creator e guild master, e con altri sviluppatori di bot in server da oltre 1.000 giocatori.

Il sito

React e TypeScript su Vercel, con Tailwind e pensato prima di tutto per il telefono: una colonna su telefono, due su tablet, il layout completo a più colonne su desktop e spazi più ampi sugli schermi grandi.

Desktop: un header utile e tutto il calendario a colpo d'occhio.
Telefono: schede impilate e controlli a misura di dito.

I portali speciali dovevano saltare all'occhio, quindi ogni modificatore cambia il colore e le etichette della scheda:

Red Gate.
Double Dungeon.
Entrambi insieme, in attesa dell'annuncio.

Il calcolatore del prezzo delle armi

Il calcolatore aiutava i giocatori a dare un prezzo alle armi e a pianificare i potenziamenti: stima il valore di un'arma, calcola quante armi servono per un potenziamento e avvisa quando ne hai più del necessario. Gli input vengono validati e i risultati si aggiornano all'istante.

Il bot negli altri server

I server delle gilde volevano gli avvisi nei propri canali, quindi il bot gira in molti server, ognuno con la sua configurazione.

  • /announce-dungeon

    Admin

    Sceglie il canale di testo dove vengono pubblicati gli avvisi dei dungeon.

  • /deannounce-dungeon

    Admin

    Lo rimuove, e gli avvisi si fermano per quel server.

  • /create-dungeon-roles

    Admin

    Crea in un colpo tutti i ruoli da menzionare, per rango, per isola e per i portali speciali, con nomi e colori modificabili.

  • /delete-dungeon-roles

    Admin

    Li rimuove tutti, per ripartire da zero.

Ogni comando risponde con un riepilogo privato di ciò che è stato creato o rimosso, e di cosa non è riuscito, così gli admin sanno sempre a che punto sono.

/create-dungeon-roles
/delete-dungeon-roles

Da un messaggio Discord a una scheda in diretta

L'originale: l'annuncio del gioco (in basso a sinistra) e la scheda che il mio sito ne ha ricavato.
  1. Ascolto

    Il bot sta nel server ufficiale e osserva il canale degli annunci.
  2. Lettura

    Espressioni regolari, con alternative di riserva, estraggono rango, isola, mappa, boss e i segnali Red e Double da testo libero con emoji.
  3. Inoltro

    L'evento strutturato va a un server WebSocket, che lo spinge a ogni browser aperto.
  4. Visualizzazione

    La scheda esiste già, perché il sito sa quando si apre ogni portale; i campi "Unknown" si completano nel momento in cui arrivano i dati.

Il numero di stanze arriva in un messaggio separato e viene abbinato al suo portale. Tutto ciò che non si riesce a leggere manda un avviso a me invece di produrre una scheda sbagliata.

Architettura

  • Bot Discord

    Node.js, discord.js v14, TypeScript

    Osserva i canali ufficiali, trasforma gli annunci non strutturati in eventi strutturati, gestisce casi limite e variazioni dei messaggi, e inoltra tutto in tempo reale.

  • Server WebSocket

    Node.js, ws

    Mantiene una connessione persistente con ogni client e spinge subito nuovi eventi e aggiornamenti dei timer, senza ricaricare la pagina.

  • Frontend

    React, TypeScript, Tailwind

    Gestione dello stato e rendering condizionale per le schede in diretta, i timer e il calcolatore, su un design system responsive.

  • Distribuzione

    Vercel

    Distribuzione rapida in tutto il mondo, con deploy automatici per iterare velocemente.

Il bot, server per server

  • Architettura multi-server

    Design modulare

    I comandi slash vengono registrati per ogni server, e ogni server ha la sua configurazione in JSON.

  • Gestione dei ruoli

    Limiti di richieste

    Discord permette di creare 250 ruoli ogni 48 ore, quindi la creazione è limitata, ritentata con attese esponenziali e salta i ruoli che esistono già. Ruoli separatori, per rango e per isola tengono la lista ordinata.

  • Collegamento in tempo reale

    WebSocket

    I messaggi verso il sito vengono letti, gli errori gestiti e la connessione ristabilita in automatico.

  • Log

    Winston

    Ogni server ha la sua cartella di log, con output colorato in console e log degli errori separati, il che ha reso sopportabile il debug delle configurazioni altrui.

Sfide

Problema

Leggere dati non strutturati

Gli annunci ufficiali cambiavano formato e contenuto, e questo rendeva difficile una lettura affidabile.

Soluzione

Lettura basata su regex con alternative per ogni variazione, gestione degli errori e un avviso all'admin per i casi limite invece di una scheda sbagliata.

Problema

Affidabilità in tempo reale

Ogni utente doveva ricevere gli aggiornamenti all'istante, anche durante gli eventi più affollati.

Soluzione

Connessioni WebSocket persistenti, heartbeat e riconnessione automatica dei client, con i messaggi in coda mentre una connessione è giù.

Problema

Tanti server, tante configurazioni

Ogni server aveva la sua configurazione e la sua struttura di permessi.

Soluzione

File di configurazione per server, registrazione dei comandi per server e controlli dei permessi che si adattano a ciascuno.

Problema

Una community in rapida crescita

La piattaforma doveva stare al passo con le esigenze di una base di giocatori in rapida crescita.

Soluzione

Canali per il feedback, iterazioni rapide e partnership con guild master e creator per farsi conoscere.

Competenze acquisite

  • React e TypeScript

    Architettura di web app

    Un frontend in tempo reale manutenibile, con codice tipizzato dall'inizio alla fine.

  • Node.js e WebSocket

    Backend in tempo reale

    Consegna degli eventi in diretta con connessioni persistenti, heartbeat e riconnessione.

  • Bot Discord su larga scala

    discord.js v14

    Progettazione multi-server, comandi slash, gestione degli eventi e dei ruoli nei limiti di Discord.

  • Trasformazione dei dati

    Lettura e mappatura

    Trasformare messaggi Discord non strutturati in eventi strutturati affidabili.

  • Progettazione di algoritmi

    Calcolo dei prezzi

    La logica dietro il valore delle armi e il costo dei potenziamenti.

  • Community e collaborazione

    Partnership

    Lavorare con creator, guild master e altri sviluppatori di bot, e capire quando unire le forze.

Cos'è Arise Crossover?

Un gioco Roblox di CL Games costruito attorno a contenuti a tempo: portali dei dungeon ogni 15 minuti, raid, world boss e un sistema di armi, ombre e reliquie. È il suo calendario sempre in movimento ad aver reso così utili gli strumenti di tracciamento.

Da dove arrivavano i dati sugli eventi?

Dagli annunci ufficiali sul Discord del gioco. Il mio bot li leggeva appena venivano pubblicati, li trasformava in eventi strutturati e li spingeva al sito via WebSocket.

Perché i WebSocket?

Perché l'annuncio di un dungeon è utile solo per pochi minuti. Con una connessione persistente il server spinge ogni evento nel momento in cui viene letto, così ogni pagina aperta si aggiorna all'istante senza che nessuno debba ricaricarla.

Altri server potevano usare il bot?

Sì. Girava in molti server, ognuno con il suo canale degli annunci, i suoi ruoli da menzionare e la sua configurazione, impostati con pochi comandi per gli admin.

Il progetto è ancora attivo?

No. Quando strumenti più grandi hanno affollato il settore, ho scelto di collaborare invece di competere: sono entrato nel server RankBreakers come uno dei suoi sviluppatori.

Ti serve qualcosa di simile?

Dimmi cosa deve fare, dove gira e per quando ti serve.

Contattami