| Résumé | Lancez des défis limités dans le temps avec des classements, des publications automatisées et des attributions de badges. | |
| Lien vers le dépôt | GitHub - R23DPrinting/discourse-daily-challenge · GitHub | |
| Guide d’installation | Comment installer des plugins dans Discourse |
Version actuelle : 1.3.0 (mise à jour le 27/03/2026)
Licence : MIT
L’Histoire
Je gère une communauté de santé et de bien-être qui a récemment migré de Discord vers Discourse. Sur Discord, j’avais créé un bot personnalisé pour gérer des défis mensuels de remise en forme : les membres publiaient leurs entraînements quotidiens, le bot suivait les présences, affichait des classements hebdomadaires et annonçait les gagnants à la fin de chaque mois. C’était l’une de nos fonctionnalités les plus populaires.
Après le passage à Discourse, les membres ont commencé à réclamer le retour de ces défis. J’ai cherché un plugin existant, mais sans succès. Alors, j’en ai créé un.
Ce qui a commencé comme une solution rapide s’est transformé en un système de défis complet qui, honnêtement, fonctionne mieux que le bot Discord original. Puisqu’il pourrait être utile à d’autres communautés, je le partage ici.
Ce qu’il fait
discourse-daily-challenge vous permet de lancer des défis structurés et limités dans le temps directement dans Discourse. Les membres se connectent en publiant dans un sujet désigné avec un hashtag ou une photo. Le plugin suit tout automatiquement.
Fonctionnalités principales
Présences flexibles
Les membres se connectent en publiant dans le sujet du défi avec le hashtag configuré ou une pièce jointe photo. Les défis peuvent être configurés pour des présences quotidiennes ou hebdomadaires. La fenêtre de présence est évaluée selon le fuseau horaire configuré du défi, ce qui permet aux communautés mondiales de fonctionner correctement.
Classement en direct et séries
Le tableau de bord de l’administrateur affiche les classements en temps réel, y compris le nombre total de présences, les séries en cours et le pourcentage d’achèvement pour chaque participant. Les étiquettes de série reflètent automatiquement l’intervalle du défi (« Série de jours » ou « Série de semaines »).
Publications automatisées du classement
Définissez un jour et une heure pour une publication automatique hebdomadaire du classement directement dans le sujet du défi. Une publication des résultats finaux est également générée automatiquement le lendemain de la fin du défi.
Badges personnalisés
Définissez un nombre minimum de présences requis pour « compléter » le défi. Les participants éligibles reçoivent automatiquement un badge Discourse personnalisé à la fin du défi. Le nom du badge est automatiquement rempli à partir du titre du sujet.
Plusieurs défis simultanés
Lancez autant de défis que vous le souhaitez en même temps. Chaque défi a son propre sujet, son calendrier, son fuseau horaire, son badge et son classement.
Défis archivés
Les défis terminés sont conservés dans une vue accordéon archivée dans le tableau de bord, vous permettant de consulter les résultats historiques.
Gestion manuelle des présences par l’administrateur
Les administrateurs peuvent ajouter ou supprimer manuellement des présences — utile pour récupérer les publications manquées ou résoudre les litiges.
Déclencheur manuel du classement
Un bouton « Publier le classement maintenant » permet aux administrateurs de publier une mise à jour du classement à la demande, en dehors de la fenêtre programmée.
Accès des modérateurs
Les modérateurs complets du site peuvent créer, modifier et gérer des défis via une section dédiée de la barre latérale. Peut être activé ou désactivé via les paramètres du site.
Accès des modérateurs de catégorie
Les modérateurs de catégorie peuvent gérer les défis limités à leurs catégories assignées via une route dédiée /challenges — aucun accès administrateur n’est requis. Peut être activé ou désactivé indépendamment via les paramètres du site.
Installation
Ajoutez ce qui suit à votre containers/app.yml sous hooks > after_code > exec > cmd :
- git clone https://github.com/R23DPrinting/discourse-daily-challenge.git
Ensuite, reconstruisez :
cd /var/discourse && ./launcher rebuild app
Après l’installation initiale, les mises à jour futures peuvent être appliquées via le bouton Mise à jour dans le panneau, sauf indication contraire dans le journal des modifications.
Configuration
Création d’un défi
Accédez à Admin → Plugins → Défis → Défis Discourse et cliquez sur Nouveau défi.
| Champ | Description |
|---|---|
| ID du sujet | Le sujet Discourse où les membres se connecteront. Le titre du sujet remplira automatiquement le champ du nom du badge. |
| Déclencheur de hashtag | Hashtag requis pour les présences (sans #, par ex. workout) |
| Intervalle de présence | Mode de présence quotidien ou hebdomadaire |
| Début de semaine | Pour les défis hebdomadaires : quel jour commence la semaine (dimanche, lundi ou samedi) |
| Date de début | Premier jour du défi (inclus) |
| Date de fin | Dernier jour du défi (inclus) |
| Fuseau horaire du défi | Fuseau horaire pour l’évaluation de la fenêtre de présence (optionnel, par défaut UTC) |
| Présences nécessaires | Nombre minimum de présences pour obtenir le badge d’achèvement |
| Description | Description facultative du défi |
| Activer la publication hebdomadaire du classement | Activer/désactiver les publications automatiques du classement hebdomadaire |
| Jour de la publication | Jour de la semaine pour la publication automatique du classement |
| Heure de la publication | Heure (0–23, dans le fuseau horaire du défi) pour la publication automatique du classement |
| Attribuer le badge d’achèvement | Activer/désactiver l’attribution automatique du badge à la fin du défi |
| Nom du badge | Nom du badge à créer et attribuer — rempli automatiquement à partir du titre du sujet |
Paramètres du site
| Paramètre | Par défaut | Description |
|---|---|---|
daily_challenge_enabled |
true |
Activer ou désactiver globalement le plugin |
daily_challenge_mod_access_enabled |
true |
Permettre aux modérateurs complets du site de gérer les défis |
daily_challenge_category_mod_access_enabled |
true |
Permettre aux modérateurs de catégorie de gérer les défis dans leurs catégories assignées |
Fonctionnement des présences
- Un membre publie une réponse dans le sujet du défi.
- La publication doit contenir le hashtag configuré ou une pièce jointe photo.
- Le plugin vérifie si le membre s’est déjà connecté pendant la période en cours (jour ou semaine, selon l’intervalle du défi).
- Si non, la présence est enregistrée et le classement est mis à jour.
- Une seule présence par membre par période est autorisée.
Les administrateurs peuvent voir et gérer toutes les présences depuis le tableau de bord administrateur.
Accès des modérateurs et des modérateurs de catégorie
Les modérateurs complets du site peuvent accéder à la gestion des défis via une section DÉFIS dans la barre latérale principale (si daily_challenge_mod_access_enabled est activé).
Les modérateurs de catégorie peuvent accéder à une version limitée à /challenges/dashboard et /challenges/challenges — ils ne peuvent voir et gérer que les défis liés aux sujets de leurs catégories assignées. Cela nécessite que daily_challenge_category_mod_access_enabled soit activé et que l’utilisateur soit assigné comme modérateur de catégorie via Admin → Catégories → [Catégorie] → Modération.
Publications automatisées
Classement hebdomadaire
Le plugin exécute un tâche d’arrière-plan horaire qui vérifie s’il est temps de publier le classement hebdomadaire. Lorsque le jour et l’heure configurés arrivent (dans le fuseau horaire du défi), il crée une publication formatée dans le sujet du défi affichant les classements actuels.
Publication des résultats finaux
Le lendemain de la fin du défi, une publication des résultats finaux est automatiquement publiée. Elle liste tous les participants, leur nombre total de présences, leur statut d’achèvement et félicite les gagnants de badges.
Tables de base de données
daily_challenges— Définitions des défisdaily_check_ins— Enregistrements individuels de présence par utilisateur, par défi, par période
Compatibilité
- Discourse 3.x+
- Testé sur des installations auto-hébergées
- Ruby 3.x, Rails 7.x+
Feuille de route (v1.4.0)
- @ChallengeBot commandes de mention — les membres peuvent mentionner le compte bot @ChallengeBot dans les sujets de défi pour obtenir des statistiques personnelles via MP (
status,leaderboard,streak,help) - MP de confirmation de présence — MP automatique après chaque présence réussie avec les informations sur la série en cours
- MP de rappel — paramètre optionnel par défi ; les défis quotidiens envoient un rappel après 2 jours manqués ou plus, les défis hebdomadaires envoient un rappel le dernier jour de la semaine si aucune présence n’a encore été enregistrée
Journal des modifications
v1.3.0
- Accès des modérateurs de catégorie — les modérateurs de catégorie peuvent créer, modifier, supprimer et gérer les présences pour les défis dans leurs catégories assignées via
/challenges/dashboardet/challenges/challenges— aucun accès administrateur n’est requis - Remplissage automatique du nom du badge — le champ du nom du badge est rempli automatiquement à partir du titre du sujet lorsqu’un ID de sujet est saisi
- Validation du nom du badge — le nom du badge est requis lorsque « Attribuer le badge d’achèvement » est activé ; renvoie une erreur appropriée au lieu d’une erreur 500
- Bascules séparées pour modérateur/modérateur de catégorie —
daily_challenge_mod_access_enabledetdaily_challenge_category_mod_access_enabledpeuvent être basculés indépendamment
v1.2.0
- Intervalle de présence configurable — lancer des défis quotidiens ou hebdomadaires
- Paramètre de début de semaine — pour les défis hebdomadaires, choisir si les semaines commencent le dimanche, le lundi ou le samedi
- Séries adaptées à l’intervalle — les étiquettes et calculs de série reflètent désormais l’intervalle du défi
- Accès des modérateurs — les modérateurs complets du site peuvent gérer les défis via une section dédiée de la barre latérale
- Renommé en « Défis Discourse » dans l’interface d’administration
v1.1.1
- Tableau de bord multi-défis affichant tous les défis actifs simultanément
- Accordéon des défis archivés affichant les résultats historiques
v1.1.0
- Prise en charge du fuseau horaire par défi
- Le calendrier de publication hebdomadaire est désormais par défi (jour, heure, bascule activer/désactiver)
v1.0.0
- Version initiale
Commentaires et contributions
Ce plugin a été créé pour répondre à un besoin réel dans notre communauté, et je le partage au cas où il aiderait la vôtre. Les problèmes, les demandes de tirage (PR) et les demandes de fonctionnalités sont les bienvenus sur GitHub.
Si vous gérez une communauté où la responsabilisation et la régularité comptent — remise en forme, apprentissage des langues, écriture, habitudes créatives — les défis quotidiens peuvent être un outil d’engagement véritablement puissant. J’espère que ce plugin facilitera l’intégration de cette fonctionnalité dans votre communauté Discourse.




