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

:information_source: Краткое описание Проводите ограниченные по времени челленджи с таблицами лидеров, автоматическими публикациями и наградами в виде значков.
:hammer_and_wrench: Ссылка на репозиторий R23DPrinting-group / discourse-daily-challenge · GitLab
:open_book: Руководство по установке Как установить плагины в Discourse

Текущая версия: 1.5.0 (обновлено 02.04.2026)
Лицензия: MIT


История создания

Я управляю сообществом, посвящённым здоровью и благополучию, которое недавно переехало с Discord на Discourse. В Discord я создал кастомного бота для проведения ежемесячных фитнес-челленджей: участники публиковали свои ежедневные тренировки, бот отслеживал отметки о выполнении, публиковал еженедельные таблицы лидеров и объявлял победителей в конце каждого месяца. Это была одна из наших самых популярных функций.

После перехода на Discourse участники начали просить вернуть челленджи. Я искал существующий плагин, но ничего не нашёл. Тогда я создал свой собственный.

То, что началось как быстрое решение, превратилось в полноценную систему челленджей, которая, честно говоря, работает даже лучше оригинального бота для Discord. Поскольку это может быть полезно и другим сообществам, я делюсь этим здесь.


Что это делает

discourse-daily-challenge позволяет проводить структурированные, ограниченные по времени челленджи прямо в Discourse. Участники отмечают выполнение задания, публикуя посты в специальной теме с хештегом или фото. Плагин отслеживает всё автоматически.

Основные возможности

:white_check_mark: Гибкая система отметок
Участники отмечают выполнение задания, публикуя посты в теме челленджа с настроенным хештегом или вложением фото. Челленджи можно настроить на ежедневные или еженедельные отметки. Окно для отметок оценивается в настроенном часовом поясе челленджа, что обеспечивает корректную работу для глобальных сообществ.

:bar_chart: Таблица лидеров и серии в реальном времени
Панель администратора отображает текущее положение участников, включая общее количество отметок, текущие серии (стрики) и процент выполнения для каждого участника. Метки серий автоматически отражают интервал челленджа («Серия дней» или «Серия недель»).

:robot: Автоматические публикации таблицы лидеров
Настройте день и время для еженедельной автоматической публикации таблицы лидеров прямо в теме челленджа. Публикация с итогами также генерируется автоматически на следующий день после окончания челленджа.

:sports_medal: Кастомные значки
Определите минимальное количество отметок, необходимое для «завершения» челленджа. Участники, выполнившие это условие, автоматически получают кастомный значок Discourse по окончании челленджа. Название значка автоматически заполняется на основе заголовка темы.

:card_index_dividers: Несколько одновременных челленджей
Запускайте столько челленджей одновременно, сколько захотите. У каждого челленджа есть своя тема, расписание, часовой пояс, значок и таблица лидеров.

:file_folder: Архивированные челленджи
Завершённые челленджи сохраняются в архивированном виде (аккордеон) в панели управления, чтобы вы могли просмотреть исторические результаты.

:hammer_and_wrench: Управление отметками администраторами
Администраторы могут вручную добавлять или удалять отметки — это полезно для исправления пропущенных постов или разрешения споров.

:pushpin: Ручной запуск таблицы лидеров
Кнопка «Опубликовать таблицу лидеров сейчас» позволяет администраторам публиковать обновление таблицы лидеров по требованию вне запланированного окна.

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

:card_index_dividers: Доступ модераторов категорий
Модераторы категорий могут управлять челленджами, ограниченными их назначенными категориями, через специальный маршрут /challenges — доступ администратора не требуется. Можно включить или отключить независимо через настройки сайта.

:robot: Личные сообщения от ChallengeBot
Если настроена учётная запись бота, ChallengeBot автоматически отправляет участникам подтверждение в ЛС после каждой отметки (с информацией о серии и ссылкой на тему), напоминания, если они не отмечались несколько дней, и отвечает на команды, отправленные через @упоминание в темах челленджей или напрямую через сообщения Discourse — все ответы приходят в ЛС. Бот также обнаруживает, когда участник редактирует пост, чтобы добавить хештег или фото, и засчитывает это как отметку, если это сделано в допустимое окно. Публикации таблицы лидеров и итогов также отправляются от имени ChallengeBot, а не системной учётной записи.


Установка

Добавьте следующее в ваш файл containers/app.yml в секцию hooks > after_code > exec > cmd:

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

Затем пересоберите контейнер:

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

После первоначальной установки будущие обновления можно применять через кнопку «Обновить» в панели управления, если в списке изменений не указано иное.


Настройка

Создание челленджа

Перейдите в Администрирование → Плагины → Челленджи → Discourse Challenges и нажмите Новый челлендж.

Поле Описание
ID темы Тема Discourse, в которой участники будут отмечать выполнение. Заголовок темы автоматически заполнит поле названия значка.
Хештег-триггер Обязательный хештег для отметок (без #, например workout)
Интервал отметок Режим ежедневных или еженедельных отметок
Начало недели Для еженедельных челленджей: какой день считается началом недели (воскресенье, понедельник или суббота)
Дата начала Первый день челленджа (включительно)
Дата окончания Последний день челленджа (включительно)
Часовой пояс челленджа Часовой пояс для оценки окна отметок (необязательно, по умолчанию UTC)
Требуемые отметки Минимальное количество отметок для получения значка за завершение
Описание Необязательное описание челленджа
Включить еженедельную публикацию таблицы лидеров Вкл/выкл автоматические еженедельные публикации таблицы лидеров
День недели публикации День недели для автоматической публикации таблицы лидеров
Час публикации Час (0–23, в часовом поясе челленджа) для автоматической публикации таблицы лидеров
Наградить значком за завершение Вкл/выкл автоматическое награждение значком по окончании челленджа
Название значка Название значка для создания и награждения — автоматически заполняется из заголовка темы
Включить напоминания в ЛС Отправлять напоминания участникам, которые не отмечались недавно (требуется настройка имени пользователя бота). По умолчанию включено.

Настройки сайта

Настройка По умолчанию Описание
daily_challenge_enabled true Глобально включить или отключить плагин
daily_challenge_mod_access_enabled true Разрешить полноправным модераторам сайта управлять челленджами
daily_challenge_category_mod_access_enabled true Разрешить модераторам категорий управлять челленджами в их назначенных категориях
daily_challenge_bot_username "" Имя пользователя учётной записи бота, отправляющего ЛС и публикующего таблицы лидеров

Как работают отметки

  1. Участник публикует ответ в теме челленджа.
  2. Пост должен содержать настроенный хештег или вложение фото.
  3. Плагин проверяет, не отмечался ли уже этот участник в текущем периоде (день или неделя, в зависимости от интервала челленджа).
  4. Если нет, отметка фиксируется, и таблица лидеров обновляется.
  5. Разрешена только одна отметка от одного участника за период.

Администраторы могут просматривать и управлять всеми отметками из панели администратора.


Доступ модераторов и модераторов категорий

Полноправные модераторы сайта могут получить доступ к управлению челленджами через раздел ЧЕЛЛЕНДЖИ в главной боковой панели (если включена настройка daily_challenge_mod_access_enabled).

Модераторы категорий могут получить доступ к ограниченной версии по адресу /challenges/dashboard и /challenges/challenges — они могут видеть и управлять только теми челленджами, которые связаны с темами в их назначенных категориях. Для этого должна быть включена настройка daily_challenge_category_mod_access_enabled, а пользователь должен быть назначен модератором категории через Администрирование → Категории → [Категория] → Модерация.


Настройка ChallengeBot

ChallengeBot является опциональным, но включает функции ЛС и публикации таблицы лидеров с указанием автора. Пропустите этот раздел, если вам не нужна функциональность ЛС.

  1. Подключитесь к серверу по SSH и выполните:
cd /var/discourse
./launcher enter app
rake admin:create

При запросе введите email бота и надёжный пароль. На вопрос о правах администратора ответьте n.

  1. В разделе Администрирование → Пользователи найдите недавно созданную учётную запись и:

    • Нажмите Одобрить
    • Установите Уровень доверия на 1
    • Обновите имя пользователя на ChallengeBot (или ваше предпочтительное имя)
  2. При желании установите изображение профиля для учётной записи бота.

  3. Перейдите в Администрирование → Плагины → Челленджи → Настройки и введите точное имя пользователя в поле Имя пользователя бота. Примечание: это поле чувствительно к регистру.

Команды ChallengeBot

Участники могут запускать команды, упоминив бота через @ в любой активной теме челленджа или отправив прямое сообщение ChallengeBot через свой профиль. Бот всегда отвечает в ЛС и никогда не публикует посты в темах.

Если вы участвуете в нескольких активных челленджах, ChallengeBot попросит вас выбрать один (или ответить A для всех).

Команда Описание
status Статистика по всем активным челленджам
leaderboard Текущее положение в этом челлендже
streak Ваша текущая серия
checkins Список всех дат ваших отметок
progress Выполненные отметки против требуемых, оставшиеся дни
help Список всех доступных команд

Ограничение скорости: 10 команд на пользователя в час.

Примечание: Установите min_personal_message_post_length в 1 в настройках сайта, чтобы разрешить короткие команды в ЛС, такие как status.


Автоматические публикации

Еженедельная таблица лидеров

Плагин запускает фоновую задачу каждый час, проверяя, пришло ли время опубликовать еженедельную таблицу лидеров. Когда наступает настроенный день и час (в часовом поясе челленджа), в теме челленджа создаётся форматированный пост с текущим положением участников.

Публикация итогов

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


Таблицы базы данных

  • daily_challenges — Определения челленджей
  • daily_check_ins — Индивидуальные записи отметок для каждого пользователя, челленджа и периода

Совместимость

  • Discourse 3.x+
  • Протестировано на самохостинговых установках
  • Ruby 3.x, Rails 7.x+

Дорожная карта (v1.6.0)

Пока конкретных функций не запланировано. Есть предложение? Откройте задачу на GitLab или ответьте в этой теме.


Список изменений

Показать список изменений

v1.5.0

  • Обнаружение редактирования — если участник редактирует пост, чтобы добавить хештег челленджа или фото, плагин теперь засчитывает это как отметку. Для ежедневных челленджей редактирование допускается в течение 24 часов после оригинального поста; для еженедельных — в течение той же недели челленджа. Дата отметки соответствует дате оригинального поста.
  • Команды в ЛС — участники теперь могут отправлять команды напрямую в ChallengeBot через сообщения Discourse или отвечать на существующую ветку сообщений от ChallengeBot. Больше не нужно использовать @упоминание в теме челленджа.
  • Выбор челленджа — когда участник находится в нескольких активных челленджах, ChallengeBot предлагает нумерованный список для выбора, какой челлендж запросить. Участники только в одном челлендже получают мгновенный ответ.

v1.4.0

  • Подтверждающие ЛС от ChallengeBot — автоматическое ЛС после каждой успешной отметки с информацией о серии и кликабельной ссылкой на тему челленджа
  • Напоминания в ЛС — для ежедневных челленджей напоминание после 2+ пропущенных дней; для еженедельных — напоминание в последний день недели, если отметка ещё не сделана. Включает текущее количество отметок и цель. Переключатель для каждого челленджа, по умолчанию включено.
  • Команды через @упоминание — участники упоминают бота в темах челленджей, чтобы получить статистику в ЛС. Никогда не публикует посты в теме. Команды: status, leaderboard, streak, checkins, progress, help. Ограничение скорости: 10 на пользователя в час.
  • Публикации таблицы лидеров и итогов — теперь публикуются ChallengeBot, если настроено, иначе используется системная учётная запись
  • Новая настройка сайтаdaily_challenge_bot_username
  • Новое поле челленджа — переключатель напоминаний в ЛС (по умолчанию включено)

v1.3.0

  • Доступ модераторов категорий — модераторы категорий могут создавать, редактировать, удалять и управлять отметками для челленджей в их назначенных категориях через /challenges/dashboard и /challenges/challenges — доступ администратора не требуется
  • Автозаполнение названия значка — поле названия значка автоматически заполняется из заголовка темы при вводе ID темы
  • Валидация названия значка — название значка обязательно, если включено «Наградить значком за завершение»; возвращает корректную ошибку вместо 500
  • Отдельные переключатели для модераторов и модераторов категорийdaily_challenge_mod_access_enabled и daily_challenge_category_mod_access_enabled можно включать/выключать независимо

v1.2.0

  • Настраиваемый интервал отметок — запуск ежедневных или еженедельных челленджей
  • Настройка начала недели — для еженедельных челленджей выбор дня начала недели (воскресенье, понедельник или суббота)
  • Учёт интервала в сериях — метки серий и расчёты теперь отражают интервал челленджа
  • Доступ модераторов — полноправные модераторы сайта могут управлять челленджами через специальный раздел в боковой панели
  • Переименование в «Discourse Challenges» в интерфейсе администратора

v1.1.1

  • Панель управления несколькими челленджами, отображающая все активные челленджи одновременно
  • Архивированные челленджи в виде аккордеона с историческими результатами

v1.1.0

  • Поддержка часовых поясов для каждого челленджа
  • Расписание еженедельных публикаций теперь настраивается для каждого челленджа (день, час, переключатель включения/отключения)

v1.0.0

  • Первоначальный релиз

Отзывы и вклад

Этот плагин был создан для решения реальной потребности нашего сообщества, и я делюсь им на случай, если он поможет и вашему. Предложения по исправлению ошибок, пул-реквесты и запросы новых функций приветствуются на GitLab.

Если вы управляете сообществом, где важны ответственность и последовательность — фитнес, изучение языков, писательство, творческие привычки — ежедневные челленджи могут стать действительно мощным инструментом вовлечения. Надеюсь, этот плагин упростит внедрение такой системы в ваше сообщество Discourse.

: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 версия f2781e1455274ea2c011fd1d161ac2ad9fde72bd

# version: 1.2.0
# required_version: 2.7.0
Запущен POST "/drafts.json" для 2804:1b0:f442:e48c:3056:bd27:b4ae:52b3 в 2026-03-26 20:49:05 +0000
Обработка запроса DraftsController#create в формате JSON
  Параметры: {"draft_key" => "topic_17746", "sequence" => "2", "data" => "{\"reply\":\"@Discipulo на мой взгляд я не буду нервничать\",\"action\":\"reply\",\"categoryId\":14,\"tags\":[],\"archetypeId\":\"regular\",\"metaData\":null,\"composerTime\":25298,\"typingTime\":3900,\"locale\":\"\"}", "owner" => "fee91ce037e64ec297a500af13091165", "force_save" => "false"}
Завершено 200 OK за 11 мс (Views: 0.1 мс | ActiveRecord: 0.0 мс (0 запросов, 0 кэшировано) | GC: 0.1 мс)
Запущен GET "/t/os-melhores-blogs-de-games-no-brasil/15399?__cf_chl_rt_tk=5M6_rd_fq46BL9PZ6VvZRAVdIsJ84aL9XIfa1Re_paQ-1773238724-1.0.1.1-g20DH5dkOVXOIHhKYVpNwYRCQNnUboE4.po6L1TFk1E" для 164.52.120.12 в 2026-03-26 20:49:06 +0000
Обработка запроса TopicsController#show в формате */*
  Параметры: {"__cf_chl_rt_tk" => "5M6_rd_fq46BL9PZ6VvZRAVdIsJ84aL9XIfa1Re_paQ-1773238724-1.0.1.1-g20DH5dkOVXOIHhKYVpNwYRCQNnUboE4.po6L1TFk1E", "slug" => "os-melhores-blogs-de-games-no-brasil", "topic_id" => "15399"}
  Отрендерен макет layouts/application.html.erb (Длительность: 107.3 мс | GC: 1.4 мс)
Завершено 200 OK за 192 мс (Views: 109.0 мс | ActiveRecord: 0.0 мс (0 запросов, 0 кэшировано) | GC: 2.4 мс)
Запущен POST "/drafts.json" для 2804:1b0:f442:e48c:3056:bd27:b4ae:52b3 в 2026-03-26 20:49:11 +0000
Обработка запроса DraftsController#create в формате JSON
  Параметры: {"draft_key" => "topic_17746", "sequence" => "3", "data" => "{\"reply\":\"@Discipulo на мой взгляд я не буду нервничать из-за поведения\",\"action\":\"reply\",\"categoryId\":14,\"tags\":[],\"archetypeId\":\"regular\",\"metaData\":null,\"composerTime\":31344,\"typingTime\":4600,\"locale\":\"\"}", "owner" => "fee91ce037e64ec297a500af13091165", "force_save" => "false"}
Завершено 200 OK за 11 мс (Views: 0.1 мс | ActiveRecord: 0.0 мс (0 запросов, 0 кэшировано) | GC: 0.0 мс)
Запущен GET "/leaderboard" для 2804:1e68:c201:632a:1161:4504:ea4d:9983 в 2026-03-26 20:49:15 +0000
Обработка запроса DiscourseGamification::GamificationLeaderboardController#respond в формате JSON
Завершено 200 OK за 30 мс (Views: 0.1 мс | ActiveRecord: 0.0 мс (0 запросов, 0 кэшировано) | GC: 0.0 мс)
Запущен POST "/drafts.json" для 2804:1b0:f442:e48c:3056:bd27:b4ae:52b3 в 2026-03-26 20:49:16 +0000
Обработка запроса DraftsController#create в формате JSON
  Параметры: {"draft_key" => "topic_17746", "sequence" => "4", "data" => "{\"reply\":\"@Discipulo на мой взгляд я не буду нервничать из-за поведения других людей\",\"action\":\"reply\",\"categoryId\":14,\"tags\":[],\"archetypeId\":\"regular\",\"metaData\":null,\"composerTime\":36481,\"typingTime\":5100,\"locale\":\"\"}", "owner" => "fee91ce037e64ec297a500af13091165", "force_save" => "false"}
Завершено 200 OK за 11 мс (Views: 0.1 мс | ActiveRecord: 0.0 мс (0 запросов, 0 кэшировано) | GC: 0.0 мс)
Запущен GET "/leaderboard/6?period=daily" для 2804:1e68:c201:632a:1161:4504:ea4d:9983 в 2026-03-26 20:49:19 +0000
Обработка запроса DiscourseGamification::GamificationLeaderboardController#respond в формате JSON
  Параметры: {"period" => "daily", "id" => "6"}
Завершено 200 OK за 20 мс (Views: 0.1 мс | ActiveRecord: 0.0 мс (0 запросов, 0 кэшировано) | GC: 0.0 мс)
Обработка запроса UserAvatarsController#show в формате PNG
  Параметры: {"hostname" => "segredin.com", "username" => "mary", "size" => "288", "version" => "8962_2"}
Завершено 418 за 8 мс (Views: 0.2 мс | ActiveRecord: 0.0 мс (0 запросов, 0 кэшировано) | GC: 0.0 мс)
Отправлен файл /var/www/discourse/public/uploads/default/optimized/2X/8/86ba5981dfff76df7de0f2141a1a87ad805e2c5c_2_288x288.jpeg (0.2 мс)
Запущен GET "/latest.json" для 2804:79d4:f008:68f:fd8c:855b:db16:bbee в 2026-03-26 20:49:23 +0000
Обработка запроса ListController#latest в формате JSON
Завершено 200 OK за 143 мс (Views: 0.1 мс | ActiveRecord: 0.0 мс (0 запросов, 0 кэшировано) | GC: 6.8 мс)
Запущен GET "/t/17746/1.json?track_visit=true&forceLoad=true" для 2804:79d4:f008:68f:fd8c:855b:db16:bbee в 2026-03-26 20:49:31 +0000
Обработка запроса TopicsController#show в формате JSON
  Параметры: {"track_visit" => "true", "forceLoad" => "true", "topic_id" => "17746", "post_number" => "1"}
Завершено 200 OK за 114 мс (Views: 0.1 мс | ActiveRecord: 0.0 мс (0 запросов, 0 кэшировано) | GC: 1.8 мс)
Запущен POST "/drafts.json" для 2804:1b0:f442:e48c:3056:bd27:b4ae:52b3 в 2026-03-26 20:49:32 +0000
Обработка запроса DraftsController#create в формате JSON
  Параметры: {"draft_key" => "topic_17746", "sequence" => "5", "data" => "{\"reply\":\"@Discipulo на мой взгляд я не могу к\",\"action\":\"reply\",\"categoryId\":14,\"tags\":[],\"archetypeId\":\"regular\",\"metaData\":null,\"composerTime\":46059,\"typingTime\":8500,\"locale\":\"\"}", "owner" => "fee91ce037e64ec297a500af13091165", "force_save" => "false"}
Завершено 200 OK за 13 мс (Views: 0.1 мс | ActiveRecord: 0.0 мс (0 запросов, 0 кэшировано) | GC: 0.0 мс)
Запущен POST "/drafts.json" для 2804:1b0:f442:e48c:3056:bd27:b4ae:52b3 в 2026-03-26 20:49:36 +0000
Обработка запроса DraftsController#create в формате JSON
  Параметры: {"draft_key" => "topic_17746", "sequence" => "6", "data" => "{\"reply\":\"@Discipulo на мой взгляд я не могу судить\",\"action\":\"reply\",\"categoryId\":14,\"tags\":[],\"archetypeId\":\"regular\",\"metaData\":null,\"composerTime\":50400,\"typingTime\":9100,\"locale\":\"\"}", "owner" => "fee91ce037e64ec297a500af13091165", "force_save" => "false"}
Завершено 200 OK за 10 мс (Views: 0.1 мс | ActiveRecord: 0.0 мс (0 запросов, 0 кэшировано) | GC: 0.0 мс)
Запущен POST "/drafts.json" для 2804:1b0:f442:e48c:3056:bd27:b4ae:52b3 в 2026-03-26 20:49:37 +0000
Обработка запроса DraftsController#create в формате JSON
  Параметры: {"draft_key" => "topic_17746", "sequence" => "7", "data" => "{\"reply\":\"@Discipulo на мой взгляд я не могу судить\",\"action\":\"reply\",\"categoryId\":14,\"tags\":[],\"archetypeId\":\"regular\",\"metaData\":null,\"composerTime\":51596,\"typingTime\":9100,\"locale\":\"\"}", "owner" => "fee91ce037e64ec297a500af13091165", "force_save" => "false"}
Завершено 200 OK за 10 мс (Views: 0.1 мс | ActiveRecord: 0.0 мс (0 запросов, 0 кэшировано) | GC: 0.0 мс)
Обработка запроса TopicsController#timings в формате */*
  Параметры: {"timings" => {"1" => "59036"}, "topic_time" => "59036", "topic_id" => "17746"}
Завершено 418 за 8 мс (Views: 0.2 мс | ActiveRecord: 0.0 мс (0 запросов, 0 кэшировано) | GC: 0.0 мс)

Хм. В этом логе не отображается ошибка 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'

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

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