| Sintesi | Esegui sfide a tempo limitato con classifiche, post automatizzati e assegnazione di badge. | |
| Link al Repository | GitHub - R23DPrinting/discourse-daily-challenge · GitHub | |
| Guida all’Installazione | Come installare i plugin in Discourse |
Versione Corrente: 1.3.0 (aggiornata il 27/03/2026)
Licenza: MIT
La Storia
Gestisco una community di salute e benessere che ha recentemente migrato da Discord a Discourse. Su Discord, avevo creato un bot personalizzato per gestire sfide mensili di fitness: i membri pubblicavano i loro allenamenti quotidiani, il bot tracciava i check-in, pubblicava classifiche settimanali e annunciava i vincitori alla fine di ogni mese. Era una delle nostre funzionalità più popolari.
Dopo il passaggio a Discourse, i membri hanno iniziato a chiedere il ritorno delle sfide. Ho cercato un plugin esistente ma non ho trovato nulla. Così ne ho creato uno.
Ciò che è iniziato come una soluzione rapida si è trasformato in un sistema completo di sfide che, onestamente, funziona meglio del bot originale di Discord. Dato che potrebbe essere utile ad altre community, lo condivido qui.
Cosa Fa
discourse-daily-challenge ti permette di gestire sfide strutturate e a tempo limitato direttamente in Discourse. I membri effettuano il check-in pubblicando in un topic designato con un hashtag o una foto. Il plugin traccia tutto automaticamente.
Funzionalità Principali
Check-in Flessibili
I membri effettuano il check-in pubblicando nel topic della sfida con l’hashtag configurato o un allegato fotografico. Le sfide possono essere configurate per check-in giornalieri o settimanali. La finestra di check-in viene valutata nel fuso orario configurato per la sfida, garantendo il corretto funzionamento per le community globali.
Classifica in Tempo Reale e Serie
La dashboard dell’amministratore mostra le classifiche in tempo reale, inclusi i totali dei check-in, le serie attuali e la percentuale di completamento per ogni partecipante. Le etichette delle serie riflettono automaticamente l’intervallo della sfida (“Serie giornaliera” vs “Serie settimanale”).
Post Automatici della Classifica
Imposta un giorno e un’ora per un post automatico settimanale della classifica direttamente nel topic della sfida. Un post con i risultati finali viene generato automaticamente anche il giorno successivo alla fine della sfida.
Badge Personalizzati
Definisci un numero minimo di check-in necessari per “completare” la sfida. I partecipanti idonei ricevono automaticamente un badge Discourse personalizzato alla fine della sfida. Il nome del badge viene popolato automaticamente dal titolo del topic.
Molteplici Sfide Simultanee
Esegui quante sfide desideri contemporaneamente. Ogni sfida ha il proprio topic, programma, fuso orario, badge e classifica.
Sfide Archiviare
Le sfide completate sono conservate in una visualizzazione a fisarmonica archiviata nella dashboard, così puoi consultare i risultati storici.
Gestione Check-in da parte dell’Amministratore
Gli amministratori possono aggiungere o rimuovere manualmente i check-in, utile per recuperare post persi o risolvere dispute.
Attivazione Manuale della Classifica
Un pulsante “Pubblica Classifica Ora” permette agli amministratori di pubblicare un aggiornamento della classifica su richiesta, al di fuori della finestra programmata.
Accesso dei Moderatori
I moderatori dell’intero sito possono creare, modificare e gestire le sfide tramite una sezione dedicata nella barra laterale. Può essere abilitato o disabilitato tramite le impostazioni del sito.
Accesso dei Moderatori di Categoria
I moderatori di categoria possono gestire le sfide limitate alle loro categorie assegnate tramite una route dedicata /challenges, senza necessità di accesso da amministratore. Può essere abilitato o disabilitato indipendentemente tramite le impostazioni del sito.
Installazione
Aggiungi quanto segue al tuo file containers/app.yml sotto hooks > after_code > exec > cmd:
- git clone https://github.com/R23DPrinting/discourse-daily-challenge.git
Quindi ricostruisci:
cd /var/discourse && ./launcher rebuild app
Dopo l’installazione iniziale, gli aggiornamenti futuri possono essere applicati tramite il pulsante Aggiorna nel pannello, a meno che non sia specificato diversamente nel registro delle modifiche.
Configurazione
Creazione di una Sfida
Naviga in Admin → Plugins → Challenges → Discourse Challenges e clicca su Nuova Sfida.
| Campo | Descrizione |
|---|---|
| ID Topic | Il topic Discourse dove i membri effettueranno il check-in. Il titolo del topic popolerà automaticamente il campo nome del badge. |
| Trigger Hashtag | Hashtag richiesto per i check-in (senza #, es. workout) |
| Intervallo Check-in | Modalità di check-in giornaliera o settimanale |
| Inizio Settimana | Per le sfide settimanali: quale giorno inizia la settimana (Domenica, Lunedì o Sabato) |
| Data Inizio | Primo giorno della sfida (incluso) |
| Data Fine | Ultimo giorno della sfida (incluso) |
| Fuso Orario Sfida | Fuso orario per valutare la finestra di check-in (opzionale, predefinito UTC) |
| Check-in Necessari | Numero minimo di check-in per ottenere il badge di completamento |
| Descrizione | Descrizione opzionale della sfida |
| Abilita Post Settimanale Classifica | Attiva i post automatici settimanali della classifica |
| Giorno della Settimana Post | Giorno della settimana per il post automatico della classifica |
| Ora Post | Ora (0–23, nel fuso orario della sfida) per il post automatico della classifica |
| Assegna Badge Completamento | Attiva l’assegnazione automatica del badge alla fine della sfida |
| Nome Badge | Nome del badge da creare e assegnare — popolato automaticamente dal titolo del topic |
Impostazioni del Sito
| Impostazione | Predefinito | Descrizione |
|---|---|---|
daily_challenge_enabled |
true |
Abilita o disabilita globalmente il plugin |
daily_challenge_mod_access_enabled |
true |
Permetti ai moderatori dell’intero sito di gestire le sfide |
daily_challenge_category_mod_access_enabled |
true |
Permetti ai moderatori di categoria di gestire le sfide nelle loro categorie assegnate |
Come Funzionano i Check-in
- Un membro pubblica una risposta nel topic della sfida.
- Il post deve contenere l’hashtag configurato o un allegato fotografico.
- Il plugin verifica se il membro ha già effettuato il check-in durante il periodo corrente (giorno o settimana, a seconda dell’intervallo della sfida).
- Se non l’ha fatto, il check-in viene registrato e la classifica viene aggiornata.
- È consentito un solo check-in per membro per periodo.
Gli amministratori possono visualizzare e gestire tutti i check-in dalla dashboard di amministrazione.
Accesso Moderatori e Moderatori di Categoria
I moderatori dell’intero sito possono accedere alla gestione delle sfide tramite una sezione SFIDE nella barra laterale principale (se daily_challenge_mod_access_enabled è attivo).
I moderatori di categoria possono accedere a una versione limitata su /challenges/dashboard e /challenges/challenges — possono vedere e gestire solo le sfide collegate a topic nelle loro categorie assegnate. Questo richiede che daily_challenge_category_mod_access_enabled sia attivo e che l’utente sia assegnato come moderatore di categoria tramite Admin → Categorie → [Categoria] → Moderazione.
Post Automatizzati
Classifica Settimanale
Il plugin esegue un’operazione in background ogni ora che verifica se è il momento di pubblicare la classifica settimanale. Quando arriva il giorno e l’ora configurati (nel fuso orario della sfida), crea un post formattato nel topic della sfida che mostra le classifiche attuali.
Post dei Risultati Finali
Il giorno successivo alla fine della sfida, viene pubblicato automaticamente un post con i risultati finali. Elenca tutti i partecipanti, il loro totale di check-in, lo stato di completamento e congratula chi ha ottenuto il badge.
Tabelle del Database
daily_challenges— Definizioni delle sfidedaily_check_ins— Record individuali di check-in per utente, per sfida, per periodo
Compatibilità
- Discourse 3.x+
- Testato su installazioni self-hosted
- Ruby 3.x, Rails 7.x+
Roadmap (v1.4.0)
- Comandi di menzione @ChallengeBot — i membri possono menzionare l’account del bot @ChallengeBot nei topic delle sfide per ottenere statistiche personali via DM (
status,leaderboard,streak,help) - DM di conferma check-in — DM automatico dopo ogni check-in riuscito con le informazioni sulla serie corrente
- DM di promemoria — impostazione opzionale per sfida; le sfide giornaliere inviano un promemoria dopo 2+ giorni persi, le sfide settimanali inviano un promemoria l’ultimo giorno della settimana se non è ancora stato effettuato il check-in
Registro delle Modifiche
v1.3.0
- Accesso moderatori di categoria — i moderatori di categoria possono creare, modificare, eliminare e gestire i check-in per le sfide nelle loro categorie assegnate tramite
/challenges/dashboarde/challenges/challenges— non è richiesto l’accesso da amministratore - Popolamento automatico nome badge — il campo nome del badge viene popolato automaticamente dal titolo del topic quando viene inserito un ID topic
- Convalida nome badge — il nome del badge è obbligatorio quando “Assegna badge completamento” è attivo; restituisce un errore appropriato invece di un 500
- Interruttori separati mod/mod categoria —
daily_challenge_mod_access_enablededaily_challenge_category_mod_access_enabledpossono essere attivati o disattivati indipendentemente
v1.2.0
- Intervallo di check-in configurabile — esegui sfide giornaliere o settimanali
- Impostazione inizio settimana — per le sfide settimanali, scegli se la settimana inizia di Domenica, Lunedì o Sabato
- Serie consapevoli dell’intervallo — le etichette e i calcoli delle serie riflettono ora l’intervallo della sfida
- Accesso moderatori — i moderatori dell’intero sito possono gestire le sfide tramite una sezione dedicata nella barra laterale
- Rinominato in “Discourse Challenges” nell’interfaccia di amministrazione
v1.1.1
- Dashboard multischiera che mostra tutte le sfide attive simultaneamente
- Fisarmonica delle sfide archiviate che mostra i risultati storici
v1.1.0
- Supporto del fuso orario per ogni sfida
- Programmazione post settimanale ora per ogni sfida (giorno, ora, interruttore abilita/disabilita)
v1.0.0
- Rilascio iniziale
Feedback e Contributi
Questo plugin è stato creato per risolvere un’esigenza reale nella nostra community e lo condivido nel caso possa aiutare la vostra. Su GitHub sono benvenuti problemi, PR e richieste di funzionalità.
Se gestisci una community dove la responsabilità e la costanza sono importanti — fitness, apprendimento linguistico, scrittura, abitudini creative — le sfide giornaliere possono essere uno strumento di coinvolgimento genuinamente potente. Spero che questo plugin renda più facile portare questa esperienza nella tua community Discourse.




