Défis quotidiens Discourse

:information_source: Résumé Lancez des défis limités dans le temps avec des classements, des publications automatisées et des attributions de badges.
:hammer_and_wrench: Lien vers le dépôt GitHub - R23DPrinting/discourse-daily-challenge · GitHub
:open_book: 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

:white_check_mark: 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.

:bar_chart: 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 »).

:robot: 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.

:sports_medal: 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.

:card_index_dividers: 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.

:file_folder: 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.

:hammer_and_wrench: 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.

:pushpin: 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.

:police_officer: 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.

:card_index_dividers: 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

  1. Un membre publie une réponse dans le sujet du défi.
  2. La publication doit contenir le hashtag configuré ou une pièce jointe photo.
  3. 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).
  4. Si non, la présence est enregistrée et le classement est mis à jour.
  5. 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éfis
  • daily_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/dashboard et /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égoriedaily_challenge_mod_access_enabled et daily_challenge_category_mod_access_enabled peuvent ê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.

:link: GitHub - R23DPrinting/discourse-daily-challenge · GitHub

15 « J'aime »

C’est super, merci de partager. En ce qui concerne les fonctionnalités, je pourrais voir son utilité pour nous s’il était possible de spécifier l’intervalle de défi comme autre chose que quotidien, c’est-à-dire choisir un enregistrement de défi hebdomadaire plutôt que quotidien sur toute la durée du défi. Ce serait également formidable si les modérateurs/modérateurs de catégorie pouvaient créer des défis afin que ce ne soit pas seulement à l’administrateur de tout configurer.

1 « J'aime »

Laissez-moi m’assurer que j’ai bien compris les demandes :

Donc, vous voudriez configurer le défi pour, disons, 1 mois (du 1er au 30 avril), mais spécifier qu’il ne compte qu’une seule participation par semaine au lieu d’une participation par jour ? Voudriez-vous que la semaine soit du dimanche au samedi ou tous les 7 jours ?

C’est une bonne idée. Honnêtement, je n’ai aucun modérateur dans ma communauté, donc je ne sais pas à quoi ressemble le panneau d’administration pour eux. Laissez-moi créer un compte de modérateur dans mon environnement de développement et jouer avec.

1 « J'aime »

Oui, exactement. Notre communauté a un défi « 52 en 52 » où il y a un défi hebdomadaire pendant un an, donc des enregistrements non quotidiens donneraient plus de flexibilité pour différents types de défis.

Discourse Calendar (and Event) permet à l’administrateur de définir le début de la semaine le samedi, le dimanche ou le lundi, donc si vous souhaitez planifier la compatibilité avec ce plugin à l’avenir (comme la génération d’événements de calendrier pour les enregistrements ou la date de début/fin ?), je pourrais suivre la façon dont le Calendrier définit la semaine ? Pour ma communauté en particulier, je ne pense pas que cela ait d’importance.

Les modérateurs de catégorie en plus des modérateurs réguliers seraient vraiment géniaux – nous avons de petits groupes d’intérêt qui ont leurs propres sous-catégories, et il serait bon de permettre à ces modérateurs de catégorie d’organiser des défis distincts sans en faire des modérateurs à part entière.

1 « J'aime »

Ce sont d’excellentes idées. Merci de les avoir partagées ! Je vais voir ce que je peux faire pour les mettre en œuvre.

1 « J'aime »

Ce plugin nécessite-t-il que le plugin gamification soit activé, ou avez-vous sélectionné cette étiquette parce que votre plugin concerne la ludification en général ?

2 « J'aime »

Cela ne nécessite pas le plugin. J’ai juste sélectionné l’étiquette. Désolé pour ça.

2 « J'aime »

v1.2.0 est maintenant disponible !

Nouveautés de cette version :

  • Intervalle de connexion configurable — lancez des défis quotidiens ou hebdomadaires
  • Paramètre de début de semaine — pour les défis hebdomadaires, choisissez si les semaines commencent le dimanche, le lundi ou le samedi
  • Séries intelligentes selon l’intervalle — les étiquettes et les calculs de séries reflètent désormais l’intervalle du défi (« série hebdomadaire » contre « série quotidienne »)
  • Accès modérateur — les modérateurs complets du site peuvent désormais créer, modifier et gérer les défis via une section dédiée de la barre latérale. Cela peut être activé ou désactivé dans Admin → Paramètres → Plugins (daily_challenge_mod_access_enabled), afin que les communautés souhaitant garder la gestion des défis réservée aux administrateurs puissent le faire.
  • Renommé en « Défis Discourse » dans l’interface d’administration
Captures d'écran

Formulaire de défi — Intervalle de connexion

Tableau de bord — La semaine commence le

Accès de la barre latérale pour les modérateurs

Remarque : Cette version nécessite ./launcher rebuild app pour appliquer les migrations de base de données — le bouton de mise à jour dans le panneau ne fonctionnera pas pour cette version.


Concernant l’accès modérateur aux catégories — c’est quelque chose sur lequel nous travaillons activement. Le défi est que Discourse n’accorde pas le statut de personnel aux modérateurs de catégories, ce qui signifie qu’ils ne peuvent pas accéder aux routes /admin du tout, quelle que soit la configuration du plugin. Nous explorons une route non-admin séparée spécifiquement pour les modérateurs de catégories, qui leur donnerait un accès ciblé aux défis dans leurs catégories. Attendez-vous à cela dans la version v1.3.0.

1 « J'aime »

Je ne peux pas créer de défi ; il renvoie une erreur 500 pour toute action.

C’est étrange. Je l’exécute sur 2 forums différents sans problème, et j’ai effectué pas mal de tests. Quelle version de Discourse utilisez-vous ? Êtes-vous sur la dernière version du plugin (1.2.0) ?

Pouvez-vous vous connecter en SSH à votre serveur, exécuter quelques commandes et publier les résultats ?

D’abord, vérifiez le numéro de version du plugin :

./launcher enter app
cat /var/www/discourse/plugins/discourse-daily-challenge/plugin.rb | grep version

Ensuite, essayez de créer un défi. Lorsque vous obtenez l’erreur 500, exécutez immédiatement ceci dans la session SSH :

./launcher enter app
tail -50 /var/www/discourse/log/production.log

Faites-moi savoir les résultats, et nous pourrons essayer de résoudre le problème.

Discourse 2026.3.0-latest.1 - https://github.com/discourse/discourse version f2781e1455274ea2c011fd1d161ac2ad9fde72bd

# version: 1.2.0
# required_version: 2.7.0
Started POST "/drafts.json" for 2804:1b0:f442:e48c:3056:bd27:b4ae:52b3 at 2026-0                                                                                        3-26 20:49:05 +0000
Processing by DraftsController#create as JSON
  Parameters: {"draft_key" => "topic_17746", "sequence" => "2", "data" => "{\"re                                                                                        ply\":\"@Discipulo na minha opinião eu não vou me estressar\",\"action\":\"reply                                                                                        \",\"categoryId\":14,\"tags\":[],\"archetypeId\":\"regular\",\"metaData\":null,\                                                                                        "composerTime\":25298,\"typingTime\":3900,\"locale\":\"\"}", "owner" => "fee91ce                                                                                        037e64ec297a500af13091165", "force_save" => "false"}
Completed 200 OK in 11ms (Views: 0.1ms | ActiveRecord: 0.0ms (0 queries, 0 cache                                                                                        d) | GC: 0.1ms)
Started GET "/t/os-melhores-blogs-de-games-no-brasil/15399?__cf_chl_rt_tk=5M6_rd                                                                                        _fq46BL9PZ6VvZRAVdIsJ84aL9XIfa1Re_paQ-1773238724-1.0.1.1-g20DH5dkOVXOIHhKYVpNwYR                                                                                        CQNnUboE4.po6L1TFk1E" for 164.52.120.12 at 2026-03-26 20:49:06 +0000
Processing by TopicsController#show as */*
  Parameters: {"__cf_chl_rt_tk" => "5M6_rd_fq46BL9PZ6VvZRAVdIsJ84aL9XIfa1Re_paQ-                                                                                        1773238724-1.0.1.1-g20DH5dkOVXOIHhKYVpNwYRCQNnUboE4.po6L1TFk1E", "slug" => "os-m                                                                                        elhores-blogs-de-games-no-brasil", "topic_id" => "15399"}
  Rendered layout layouts/application.html.erb (Duration: 107.3ms | GC: 1.4ms)
Completed 200 OK in 192ms (Views: 109.0ms | ActiveRecord: 0.0ms (0 queries, 0 ca                                                                                        ched) | GC: 2.4ms)
Started POST "/drafts.json" for 2804:1b0:f442:e48c:3056:bd27:b4ae:52b3 at 2026-0                                                                                        3-26 20:49:11 +0000
Processing by DraftsController#create as JSON
  Parameters: {"draft_key" => "topic_17746", "sequence" => "3", "data" => "{\"re                                                                                        ply\":\"@Discipulo na minha opinião eu não vou me estressar com o comportamento                                                                                         \",\"action\":\"reply\",\"categoryId\":14,\"tags\":[],\"archetypeId\":\"regular\                                                                                        ",\"metaData\":null,\"composerTime\":31344,\"typingTime\":4600,\"locale\":\"\"}"                                                                                        , "owner" => "fee91ce037e64ec297a500af13091165", "force_save" => "false"}
Completed 200 OK in 11ms (Views: 0.1ms | ActiveRecord: 0.0ms (0 queries, 0 cache                                                                                        d) | GC: 0.0ms)
Started GET "/leaderboard" for 2804:1e68:c201:632a:1161:4504:ea4d:9983 at 2026-0                                                                                        3-26 20:49:15 +0000
Processing by DiscourseGamification::GamificationLeaderboardController#respond a                                                                                        s JSON
Completed 200 OK in 30ms (Views: 0.1ms | ActiveRecord: 0.0ms (0 queries, 0 cache                                                                                        d) | GC: 0.0ms)
Started POST "/drafts.json" for 2804:1b0:f442:e48c:3056:bd27:b4ae:52b3 at 2026-0                                                                                        3-26 20:49:16 +0000
Processing by DraftsController#create as JSON
  Parameters: {"draft_key" => "topic_17746", "sequence" => "4", "data" => "{\"re                                                                                        ply\":\"@Discipulo na minha opinião eu não vou me estressar com o comportamento                                                                                         das outras pessoas \",\"action\":\"reply\",\"categoryId\":14,\"tags\":[],\"arche                                                                                        typeId\":\"regular\",\"metaData\":null,\"composerTime\":36481,\"typingTime\":510                                                                                        0,\"locale\":\"\"}", "owner" => "fee91ce037e64ec297a500af13091165", "force_save"                                                                                         => "false"}
Completed 200 OK in 11ms (Views: 0.1ms | ActiveRecord: 0.0ms (0 queries, 0 cache                                                                                        d) | GC: 0.0ms)
Started GET "/leaderboard/6?period=daily" for 2804:1e68:c201:632a:1161:4504:ea4d                                                                                        :9983 at 2026-03-26 20:49:19 +0000
Processing by DiscourseGamification::GamificationLeaderboardController#respond a                                                                                        s JSON
  Parameters: {"period" => "daily", "id" => "6"}
Completed 200 OK in 20ms (Views: 0.1ms | ActiveRecord: 0.0ms (0 queries, 0 cache                                                                                        d) | GC: 0.0ms)
Processing by UserAvatarsController#show as PNG
  Parameters: {"hostname" => "segredin.com", "username" => "mary", "size" => "28                                                                                        8", "version" => "8962_2"}
Completed 418  in 8ms (Views: 0.2ms | ActiveRecord: 0.0ms (0 queries, 0 cached)                                                                                         | GC: 0.0ms)
Sent file /var/www/discourse/public/uploads/default/optimized/2X/8/86ba5981dfff7                                                                                        6df7de0f2141a1a87ad805e2c5c_2_288x288.jpeg (0.2ms)
Started GET "/latest.json" for 2804:79d4:f008:68f:fd8c:855b:db16:bbee at 2026-03                                                                                        -26 20:49:23 +0000
Processing by ListController#latest as JSON
Completed 200 OK in 143ms (Views: 0.1ms | ActiveRecord: 0.0ms (0 queries, 0 cach                                                                                        ed) | GC: 6.8ms)
Started GET "/t/17746/1.json?track_visit=true&forceLoad=true" for 2804:79d4:f008                                                                                        :68f:fd8c:855b:db16:bbee at 2026-03-26 20:49:31 +0000
Processing by TopicsController#show as JSON
  Parameters: {"track_visit" => "true", "forceLoad" => "true", "topic_id" => "17                                                                                        746", "post_number" => "1"}
Completed 200 OK in 114ms (Views: 0.1ms | ActiveRecord: 0.0ms (0 queries, 0 cach                                                                                        ed) | GC: 1.8ms)
Started POST "/drafts.json" for 2804:1b0:f442:e48c:3056:bd27:b4ae:52b3 at 2026-0                                                                                        3-26 20:49:32 +0000
Processing by DraftsController#create as JSON
  Parameters: {"draft_key" => "topic_17746", "sequence" => "5", "data" => "{\"re                                                                                        ply\":\"@Discipulo na minha opinião eu não consigo k\",\"action\":\"reply\",\"ca                                                                                        tegoryId\":14,\"tags\":[],\"archetypeId\":\"regular\",\"metaData\":null,\"compos                                                                                        erTime\":46059,\"typingTime\":8500,\"locale\":\"\"}", "owner" => "fee91ce037e64e                                                                                        c297a500af13091165", "force_save" => "false"}
Completed 200 OK in 13ms (Views: 0.1ms | ActiveRecord: 0.0ms (0 queries, 0 cache                                                                                        d) | GC: 0.0ms)
Started POST "/drafts.json" for 2804:1b0:f442:e48c:3056:bd27:b4ae:52b3 at 2026-0                                                                                        3-26 20:49:36 +0000
Processing by DraftsController#create as JSON
  Parameters: {"draft_key" => "topic_17746", "sequence" => "6", "data" => "{\"re                                                                                        ply\":\"@Discipulo na minha opinião eu não consigo julgar \",\"action\":\"reply\                                                                                        ",\"categoryId\":14,\"tags\":[],\"archetypeId\":\"regular\",\"metaData\":null,\"                                                                                        composerTime\":50400,\"typingTime\":9100,\"locale\":\"\"}", "owner" => "fee91ce0                                                                                        37e64ec297a500af13091165", "force_save" => "false"}
Completed 200 OK in 10ms (Views: 0.1ms | ActiveRecord: 0.0ms (0 queries, 0 cache                                                                                        d) | GC: 0.0ms)
Started POST "/drafts.json" for 2804:1b0:f442:e48c:3056:bd27:b4ae:52b3 at 2026-0                                                                                        3-26 20:49:37 +0000
Processing by DraftsController#create as JSON
  Parameters: {"draft_key" => "topic_17746", "sequence" => "7", "data" => "{\"re                                                                                        ply\":\"@Discipulo na minha opinião eu não consigo julgar \",\"action\":\"reply\                                                                                        ",\"categoryId\":14,\"tags\":[],\"archetypeId\":\"regular\",\"metaData\":null,\"                                                                                        composerTime\":51596,\"typingTime\":9100,\"locale\":\"\"}", "owner" => "fee91ce0                                                                                        37e64ec297a500af13091165", "force_save" => "false"}
Completed 200 OK in 10ms (Views: 0.1ms | ActiveRecord: 0.0ms (0 queries, 0 cache                                                                                        d) | GC: 0.0ms)
Processing by TopicsController#timings as */*
  Parameters: {"timings" => {"1" => "59036"}, "topic_time" => "59036", "topic_id                                                                                        " => "17746"}
Completed 418  in 8ms (Views: 0.2ms | ActiveRecord: 0.0ms (0 queries, 0 cached)                                                                                         | GC: 0.0ms)

Hmmmm. Ces journaux ne montrent pas l’erreur 500. À quel moment exact l’erreur se produit-elle ? Voyez-vous une erreur à l’écran, ou seulement le message générique « Quelque chose s’est mal passé » ? Vous assurez-vous de remplir tous les champs ? Surtout l’ID du sujet ?

Pouvez-vous essayer de créer à nouveau un défi et d’exécuter la commande suivante dès que vous voyez l’erreur 500 ? Nous allons légèrement augmenter la taille :

./launcher enter app
tail -100 /var/www/discourse/log/production.log | grep -A 30 "500\|Error\|exception"

(post supprimé par l’auteur)

Attendez, je vais réactiver à nouveau.

Ahhh. Je pense que je vois le problème. Le nom du badge est censé être extrait du titre du sujet, mais je pense que j’ai fait une erreur lors de ma dernière mise à jour. Pouvez-vous essayer de remplir le champ du nom du badge et voir si cela fonctionne ? Je pousserai également une mise à jour pour corriger cela dès que je serai rentré à la maison.

2 « J'aime »

Quoi de neuf ? Je me suis mis à jour ici et rien pour l’instant

Salut. Désolé. J’ai oublié de mettre à jour ce post hier soir. J’ai bien poussé une mise à jour qui incluait la correction pour les badges (ainsi que quelques autres améliorations). Si vous allez dans Admin > Mettre à jour Discourse, vous devriez voir qu’une mise à jour est disponible.

Je ferai un post complet avec les changements dans un instant.

2 « J'aime »

Je suis certain que je procède de la mauvaise manière.

Premier doute : l’ID du sujet peut-il exister ou faut-il en créer un nouveau ?
J’ai compris que le tag est sans #.

Le début et la fin peuvent-ils couvrir quelques jours ou semaines, ou puis-je définir une date jusqu’en décembre par exemple ?

Quoi qu’il en soit, j’attendrai vos explications car j’apprécie ce plugin et je suis ici pour fournir des retours.

Il doit s’agir d’un identifiant de sujet existant auquel votre compte a accès (je suppose que vous êtes administrateur, ce qui ne devrait donc pas poser problème). Exemple : si l’URL du sujet est :

https://community.com/t/test-formatting/722

L’identifiant de sujet que vous devez saisir est : 722

Lorsque vous tapez le numéro, le nom du sujet devrait apparaître en dessous pour confirmer que vous avez saisi le bon identifiant.

Vous avez raison. Saisissez le hashtag sans le #. Si vous souhaitez utiliser #testtag, tapez simplement testtag dans la zone de saisie.

Les dates de début et de fin peuvent être celles que vous souhaitez.

activerecord (8.0.5) lib/active_record/inheritance.rb:76:in 'ActiveRecord::Inheritance::ClassMethods#new'
plugins/discourse-daily-challenge/app/controllers/discourse_daily_challenge/admin_daily_challenges_controller.rb:26:in 'DiscourseDailyChallenge::AdminDailyChallengesController#create'

ma première configuration

Et mes journaux récents