Ежедневные вызовы в Discourse

:information_source: Summary Run time-limited challenges with leaderboards, automated posts, and badge awards.
:hammer_and_wrench: Repository Link R23DPrinting-group / discourse-daily-challenge · GitLab
:open_book: Install Guide How to install plugins in Discourse

Current Version: 1.5.0 (updated 4/2/2026)
License: MIT


The Story

I run a health and wellness community that recently migrated from Discord to Discourse. On Discord, I’d built a custom bot to run monthly fitness challenges — members would post their daily workouts, the bot tracked check-ins, posted weekly leaderboards, and announced winners at the end of each month. It was one of our most popular features.

After the move to Discourse, members started asking for the challenges back. I looked for an existing plugin and came up empty. So I built one.

What started as a quick solution turned into a full-featured challenge system that honestly works better than the original Discord bot. Since it might be useful to other communities, I’m sharing it here.


What It Does

discourse-daily-challenge lets you run structured, time-limited challenges directly in Discourse. Members check in by posting to a designated topic with a hashtag or photo. The plugin tracks everything automatically.

Core Features

:white_check_mark: Flexible Check-ins
Members check in by posting in the challenge topic with the configured hashtag or a photo attachment. Challenges can be configured for daily or weekly check-ins. The check-in window is evaluated in the challenge’s configured timezone, so global communities work correctly.

:bar_chart: Live Leaderboard & Streaks
The admin dashboard shows real-time standings including total check-ins, current streaks, and completion percentage for every participant. Streak labels automatically reflect the challenge interval (“Day streak” vs “Week streak”).

:robot: Automated Leaderboard Posts
Set a day and time for a weekly automated leaderboard post directly to the challenge topic. A final results post is also generated automatically the day after the challenge ends.

:sports_medal: Custom Badges
Define a minimum number of check-ins required to “complete” the challenge. Eligible participants automatically receive a custom Discourse badge when the challenge ends. The badge name auto-populates from the topic title.

:card_index_dividers: Multiple Simultaneous Challenges
Run as many challenges as you want at the same time. Each challenge has its own topic, schedule, time zone, badge, and leaderboard.

:file_folder: Archived Challenges
Completed challenges are preserved in an archived accordion view in the dashboard, so you can look back at historical results.

:hammer_and_wrench: Admin Check-in Management
Admins can manually add or remove check-ins — useful for catching missed posts or resolving disputes.

:pushpin: Manual Leaderboard Trigger
A “Post Leaderboard Now” button lets admins publish a leaderboard update on demand, outside the scheduled window.

:police_officer: Moderator Access
Full site moderators can create, edit, and manage challenges via a dedicated sidebar section. Can be enabled or disabled via site settings.

:card_index_dividers: Category Moderator Access
Category moderators can manage challenges scoped to their assigned categories via a dedicated /challenges route — no admin access required. Can be enabled or disabled independently via site settings.

:robot: ChallengeBot DMs
If a bot account is configured, ChallengeBot automatically sends members a confirmation DM after each check-in (with streak info and a link to the topic), reminder DMs when they haven’t checked in for a few days, and responds to commands sent via @mention in challenge topics or directly via Discourse Messages — all responses come via DM. It also detects when a member edits a post to add a hashtag or photo, and counts it as a check-in if within the allowed window. Leaderboard and final results posts are also sent from ChallengeBot instead of the system account.


Installation

Add the following to your containers/app.yml under hooks > after_code > exec > cmd:

- git clone https://gitlab.com/r23dprinting-group/discourse-daily-challenge.git

Then rebuild:

cd /var/discourse && ./launcher rebuild app

After the initial install, future updates can be applied via the in-panel Update button unless otherwise noted in the changelog.


Configuration

Creating a Challenge

Navigate to Admin → Plugins → Challenges → Discourse Challenges and click New Challenge.

Field Description
Topic ID The Discourse topic where members will check in. The topic title will auto-populate the badge name field.
Hashtag Trigger Required hashtag for check-ins (without #, e.g. workout)
Check-in Interval Daily or weekly check-in mode
Week Start For weekly challenges: which day starts the week (Sunday, Monday, or Saturday)
Start Date First day of the challenge (inclusive)
End Date Last day of the challenge (inclusive)
Challenge Timezone Timezone for evaluating the check-in window (optional, defaults to UTC)
Check-ins Needed Minimum check-ins to earn the completion badge
Description Optional description of the challenge
Enable Weekly Leaderboard Post Toggle automated weekly leaderboard posts
Post Day of Week Day of week for the automated leaderboard post
Post Hour Hour (0–23, in challenge timezone) for the automated leaderboard post
Award Completion Badge Toggle automatic badge awarding at challenge end
Badge Name Name of the badge to create and award — auto-populates from the topic title
Enable Reminder DMs Send reminder DMs to participants who haven’t checked in recently (requires bot username to be configured). Defaults to enabled.

Site Settings

Setting Default Description
daily_challenge_enabled true Globally enable or disable the plugin
daily_challenge_mod_access_enabled true Allow full site moderators to manage challenges
daily_challenge_category_mod_access_enabled true Allow category moderators to manage challenges in their assigned categories
daily_challenge_bot_username "" Username of the bot account that sends DMs and posts leaderboards

How Check-ins Work

  1. A member posts a reply to the challenge topic
  2. The post must contain the configured hashtag or a photo attachment
  3. The plugin checks whether the member has already checked in during the current period (day or week, depending on the challenge interval)
  4. If not, the check-in is recorded and the leaderboard is updated
  5. One check-in per member per period is allowed

Admins can view and manage all check-ins from the admin dashboard.


Moderator & Category Mod Access

Full site moderators can access challenge management via a CHALLENGES section in the main sidebar (if daily_challenge_mod_access_enabled is on).

Category moderators can access a scoped version at /challenges/dashboard and /challenges/challenges — they can only see and manage challenges linked to topics in their assigned categories. This requires daily_challenge_category_mod_access_enabled to be on and the user to be assigned as a category moderator via Admin → Categories → [Category] → Moderation.


Setting Up ChallengeBot

ChallengeBot is optional but enables DM features and attributed leaderboard posts. Skip this section if you don’t need DM functionality.

  1. SSH into your server and run:
cd /var/discourse
./launcher enter app
rake admin:create

When prompted, enter the bot’s email and a strong password. Answer n to admin privileges.

  1. In Admin → Users, find the newly created account and:

    • Click Approve
    • Set Trust Level to 1
    • Update the username to ChallengeBot (or your preferred name)
  2. Optionally set a profile picture for the bot account.

  3. Go to Admin → Plugins → Challenges → Settings and enter the exact username in the Bot username field. Note: this field is case-sensitive.

ChallengeBot Commands

Members can trigger commands by @mentioning the bot in any active challenge topic, or by sending a direct message to ChallengeBot via their profile. The bot always responds via DM and never posts in topics.

If you’re in multiple active challenges, ChallengeBot will ask you to pick one (or reply A for all).

Command Description
status Stats across all active challenges
leaderboard Current standings for that challenge
streak Your current streak
checkins List of all your check-in dates
progress Check-ins done vs needed, days remaining
help List all available commands

Rate limited to 10 commands per user per hour.

Note: Set min_personal_message_post_length to 1 in site settings to allow short DM commands like status.


Automated Posts

Weekly Leaderboard

The plugin runs an hourly background job that checks whether it’s time to post the weekly leaderboard. When the configured day + hour arrives (in the challenge timezone), it creates a formatted post in the challenge topic showing the current standings.

Final Results Post

The day after the challenge ends, a final results post is automatically published. It lists all participants, their total check-ins, completion status, and congratulates badge earners.


Database Tables

  • daily_challenges — Challenge definitions
  • daily_check_ins — Individual check-in records per user per challenge per period

Compatibility

  • Discourse 3.x+
  • Tested on self-hosted installations
  • Ruby 3.x, Rails 7.x+

Roadmap (v1.6.0)

No specific features planned yet. Have a suggestion? Open an issue on GitLab or reply to this topic.


Changelog

Show Changelog

v1.5.0

  • Edit detection — if a member edits a post to add the challenge hashtag or a photo, the plugin now counts it as a check-in. Daily challenges allow edits within 24 hours of the original post; weekly challenges allow edits within the same challenge week. The check-in is dated to the original post.
  • DM commands — members can now send commands directly to ChallengeBot via Discourse Messages, or reply to an existing ChallengeBot DM thread. No need to @mention in the challenge topic.
  • Challenge picker — when a member is in multiple active challenges, ChallengeBot presents a numbered list to select which challenge to query. Members in only one challenge get an immediate response.

v1.4.0

  • ChallengeBot check-in confirmation DMs — automatic DM after each successful check-in with streak info and a clickable link to the challenge topic
  • Reminder DMs — daily challenges nudge after 2+ missed days; weekly challenges nudge on the last day of the week if not yet checked in. Includes current check-in count and goal. Per-challenge toggle, defaults to enabled.
  • @mention commands — members mention the bot in challenge topics to get stats via DM. Never posts in the topic. Commands: status, leaderboard, streak, checkins, progress, help. Rate limited to 10 per user per hour.
  • Leaderboard and final results posts — now posted by ChallengeBot if configured, falls back to system account
  • New site settingdaily_challenge_bot_username
  • New challenge field — reminder DMs toggle (defaults to enabled)

v1.3.0

  • Category moderator access — category mods can create, edit, delete, and manage check-ins for challenges in their assigned categories via /challenges/dashboard and /challenges/challenges — no admin access required
  • Badge name auto-populate — badge name field auto-populates from the topic title when a topic ID is entered
  • Badge name validation — badge name is required when “Award completion badge” is enabled; returns a proper error instead of a 500
  • Separate mod/category mod togglesdaily_challenge_mod_access_enabled and daily_challenge_category_mod_access_enabled can be toggled independently

v1.2.0

  • Configurable check-in interval — run daily or weekly challenges
  • Week start setting — for weekly challenges, choose whether weeks start on Sunday, Monday, or Saturday
  • Interval-aware streaks — streak labels and calculations now reflect the challenge interval
  • Moderator access — full site moderators can manage challenges via a dedicated sidebar section
  • Renamed to “Discourse Challenges” in the admin UI

v1.1.1

  • Multi-challenge dashboard showing all active challenges simultaneously
  • Archived challenges accordion showing historical results

v1.1.0

  • Per-challenge timezone support
  • Weekly post schedule now per-challenge (day, hour, enable/issues toggle)

v1.0.0

  • Initial release

Feedback & Contributions

This plugin was built to solve a real need in our community, and I’m sharing it in case it helps yours. Issues, PRs, and feature requests are welcome on GitLab.

If you’re running a community where accountability and consistency matter — fitness, language learning, writing, creative habits — daily challenges can be a genuinely powerful engagement tool. I hope this plugin makes it easier to bring that to your Discourse community.

:link: R23DPrinting-group / discourse-daily-challenge · GitLab

15 лайков

Отлично, спасибо за публикацию. Что касается функций, это могло бы быть полезно для нас, если бы можно было указывать интервал между заданиями не только ежедневно, например, выбирать еженедельную проверку выполнения задания вместо ежедневной на протяжении всего периода челленджа. Также было бы здорово, если бы модераторы или модераторы категорий могли создавать задания, чтобы настройка не лежала исключительно на администраторах.

1 лайк

Давайте уточню, чтобы убедиться, что я правильно понял ваши запросы:

Итак, вы хотите настроить задачу, например, на 1 месяц (с 1 по 30 апреля), но указать, что засчитывается только 1 запись в неделю вместо 1 записи в день? Вы хотите, чтобы неделя была с воскресенья по субботу или просто каждые 7 дней?

Это отличная идея. Честно говоря, у меня в сообществе нет модераторов, поэтому я не знаю, как выглядит панель администратора для них. Давайте я создам учётную запись модератора в моей тестовой среде и поэкспериментирую с ней.

1 лайк

Да, именно. В нашем сообществе есть челлендж «52 за 52», где в течение года проводится еженедельное испытание, поэтому ежедневные отметки не требуются, что обеспечивает большую гибкость для различных видов челленджей.

Ссылка Discourse Calendar (and Event) позволяет администраторам устанавливать начало недели на субботу, воскресенье или понедельник. Поэтому, если вы планируете в будущем обеспечить совместимость с этим плагином (например, для генерации календарных событий для отметок или указания дат начала/окончания?), возможно, стоит следовать тому, как плагин Calendar определяет начало недели? Для моего конкретного сообщества это, думаю, не имеет значения.

Было бы здорово добавить возможность назначать модераторов категорий в дополнение к обычным модераторам — у нас есть небольшие группы по интересам, у которых есть свои подкатегории, и было бы удобно позволить этим модераторам категорий проводить отдельные челленджи, не назначая их полными модераторами.

1 лайк

Отличные идеи! Спасибо, что поделились! Я посмотрю, что смогу сделать, чтобы их реализовать.

1 лайк

Требуется ли для этого плагина включение плагина gamification, или вы выбрали этот тег, потому что ваш плагин посвящен геймификации в целом?

2 лайка

Это не требует плагина. Я просто выбрал тег. Извините за это.

2 лайка

v1.2.0 уже доступна!

Новое в этом выпуске:

  • Настраиваемый интервал проверки — проводите ежедневные или еженедельные челленджи
  • Настройка начала недели — для еженедельных челленджей выберите, с какого дня начинается неделя: воскресенье, понедельник или суббота
  • Серийность с учётом интервала — метки серий и расчёты теперь отражают интервал челленджа («серия недель» против «серия дней»)
  • Доступ для модераторов — полные модераторы сайта теперь могут создавать, редактировать и управлять челленджами через специальный раздел боковой панели. Это можно включить или отключить в разделе Администрирование → Настройки → Плагины (daily_challenge_mod_access_enabled), чтобы сообщества, предпочитающие оставлять управление челленджами только за администраторами, могли это сделать.
  • Переименовано в «Discourse Challenges» в интерфейсе администратора
Скриншоты

Форма челленджа — Интервал проверки

Панель управления — Начало недели

Доступ модераторов к боковой панели

Примечание: Для применения миграций базы данных в этом выпуске требуется выполнить ./launcher rebuild app — кнопка «Обновить» в панели управления не сработает для этого выпуска.


Что касается доступа модераторов категорий — я активно работаю над этим вопросом. Проблема в том, что Discourse не предоставляет модераторам категорий статус сотрудников, поэтому они не могут получить доступ к маршрутам /admin вообще, независимо от настроек плагина. Я изучаю возможность создания отдельного немодераторского маршрута специально для модераторов категорий, который предоставит им ограниченный доступ к челленджам в их категориях. Ожидайте это в версии v1.3.0.

1 лайк

Я не могу создать испытание — для любого действия возвращается ошибка 500.

Это странно. Я запускаю это на двух разных форумах без проблем, и я провёл довольно много тестов. Какая у вас версия Discourse? У вас последняя версия плагина (1.2.0)?

Можете ли вы подключиться к серверу по SSH, выполнить несколько команд и опубликовать результаты?

Сначала проверьте номер версии плагина:

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

Затем попробуйте создать испытание. Когда появится ошибка 500, сразу же выполните это в сеансе SSH:

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

Сообщите результаты, и мы постараемся разобраться в проблеме.

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)

Хм. В этом логе не отображается ошибка 500. Когда именно возникает ошибка? Вы видите какое-либо сообщение об ошибке на экране или только общее сообщение «Что-то пошло не так»? Вы точно заполняете все поля? Особенно ID темы?

Попробуйте создать вызов снова и сразу же после появления ошибки 500 выполните следующую команду. Мы немного увеличим размер вывода:

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

(пост удалён автором)

Подождите, я снова включу.

Ах, я думаю, я понял проблему. Имя бейджа должно браться из заголовка темы, но, кажется, я что-то напутал в последнем обновлении. Можешь попробовать заполнить поле имени бейджа и проверить, пройдёт ли оно? Как только доберусь до дома, я тоже выкатю исправление.

2 лайка

Что-то новенькое? Я обновил страницу, но пока ничего не появилось.

Привет. Извините. Я забыл обновить этот пост вчера вечером. Я выпустил обновление, которое включает исправление для значков (а также несколько других улучшений). Если вы перейдете в Администрирование > Обновить Discourse, вы увидите, что доступно обновление.

Скоро я опубликую полный пост с описанием изменений.

2 лайка

Уверен, что делаю это неправильно.

Первый вопрос: может ли ID темы уже существовать или нужно создавать новую?
Я понял, что тег пишется без #.

Могут ли даты начала и конца охватывать несколько дней или недель, или я могу установить, например, до декабря?

В любом случае я подожду ваших разъяснений, так как мне нравится этот плагин, и я здесь, чтобы предоставить обратную связь.

Это должен быть существующий ID темы, к которому у вашего аккаунта есть доступ (предполагаю, что вы администратор, поэтому это не должно быть проблемой). Пример: если URL темы выглядит так:

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

то в качестве ID темы, который вы вводите, укажите: 722

После ввода номера под полем должно появиться название темы, чтобы подтвердить, что вы ввели правильный ID.

Вы правы. Вводите хештег без символа #. Если вы хотите использовать #testtag, просто введите testtag в поле.

Даты начала и окончания могут быть любыми, какие вы пожелаете.

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'

Моя первая конфигурация

А мои последние логи