| Краткое описание | Проводите ограниченные по времени челленджи с таблицами лидеров, автоматическими публикациями и наградами в виде значков. | |
| Ссылка на репозиторий | R23DPrinting-group / discourse-daily-challenge · GitLab | |
| Руководство по установке | Как установить плагины в Discourse |
Текущая версия: 1.5.0 (обновлено 02.04.2026)
Лицензия: MIT
История создания
Я управляю сообществом, посвящённым здоровью и благополучию, которое недавно переехало с Discord на Discourse. В Discord я создал кастомного бота для проведения ежемесячных фитнес-челленджей: участники публиковали свои ежедневные тренировки, бот отслеживал отметки о выполнении, публиковал еженедельные таблицы лидеров и объявлял победителей в конце каждого месяца. Это была одна из наших самых популярных функций.
После перехода на Discourse участники начали просить вернуть челленджи. Я искал существующий плагин, но ничего не нашёл. Тогда я создал свой собственный.
То, что началось как быстрое решение, превратилось в полноценную систему челленджей, которая, честно говоря, работает даже лучше оригинального бота для Discord. Поскольку это может быть полезно и другим сообществам, я делюсь этим здесь.
Что это делает
discourse-daily-challenge позволяет проводить структурированные, ограниченные по времени челленджи прямо в Discourse. Участники отмечают выполнение задания, публикуя посты в специальной теме с хештегом или фото. Плагин отслеживает всё автоматически.
Основные возможности
Гибкая система отметок
Участники отмечают выполнение задания, публикуя посты в теме челленджа с настроенным хештегом или вложением фото. Челленджи можно настроить на ежедневные или еженедельные отметки. Окно для отметок оценивается в настроенном часовом поясе челленджа, что обеспечивает корректную работу для глобальных сообществ.
Таблица лидеров и серии в реальном времени
Панель администратора отображает текущее положение участников, включая общее количество отметок, текущие серии (стрики) и процент выполнения для каждого участника. Метки серий автоматически отражают интервал челленджа («Серия дней» или «Серия недель»).
Автоматические публикации таблицы лидеров
Настройте день и время для еженедельной автоматической публикации таблицы лидеров прямо в теме челленджа. Публикация с итогами также генерируется автоматически на следующий день после окончания челленджа.
Кастомные значки
Определите минимальное количество отметок, необходимое для «завершения» челленджа. Участники, выполнившие это условие, автоматически получают кастомный значок Discourse по окончании челленджа. Название значка автоматически заполняется на основе заголовка темы.
Несколько одновременных челленджей
Запускайте столько челленджей одновременно, сколько захотите. У каждого челленджа есть своя тема, расписание, часовой пояс, значок и таблица лидеров.
Архивированные челленджи
Завершённые челленджи сохраняются в архивированном виде (аккордеон) в панели управления, чтобы вы могли просмотреть исторические результаты.
Управление отметками администраторами
Администраторы могут вручную добавлять или удалять отметки — это полезно для исправления пропущенных постов или разрешения споров.
Ручной запуск таблицы лидеров
Кнопка «Опубликовать таблицу лидеров сейчас» позволяет администраторам публиковать обновление таблицы лидеров по требованию вне запланированного окна.
Доступ модераторов
Полноправные модераторы сайта могут создавать, редактировать и управлять челленджами через специальный раздел в боковой панели. Можно включить или отключить через настройки сайта.
Доступ модераторов категорий
Модераторы категорий могут управлять челленджами, ограниченными их назначенными категориями, через специальный маршрут /challenges — доступ администратора не требуется. Можно включить или отключить независимо через настройки сайта.
Личные сообщения от 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 |
"" |
Имя пользователя учётной записи бота, отправляющего ЛС и публикующего таблицы лидеров |
Как работают отметки
- Участник публикует ответ в теме челленджа.
- Пост должен содержать настроенный хештег или вложение фото.
- Плагин проверяет, не отмечался ли уже этот участник в текущем периоде (день или неделя, в зависимости от интервала челленджа).
- Если нет, отметка фиксируется, и таблица лидеров обновляется.
- Разрешена только одна отметка от одного участника за период.
Администраторы могут просматривать и управлять всеми отметками из панели администратора.
Доступ модераторов и модераторов категорий
Полноправные модераторы сайта могут получить доступ к управлению челленджами через раздел ЧЕЛЛЕНДЖИ в главной боковой панели (если включена настройка daily_challenge_mod_access_enabled).
Модераторы категорий могут получить доступ к ограниченной версии по адресу /challenges/dashboard и /challenges/challenges — они могут видеть и управлять только теми челленджами, которые связаны с темами в их назначенных категориях. Для этого должна быть включена настройка daily_challenge_category_mod_access_enabled, а пользователь должен быть назначен модератором категории через Администрирование → Категории → [Категория] → Модерация.
Настройка ChallengeBot
ChallengeBot является опциональным, но включает функции ЛС и публикации таблицы лидеров с указанием автора. Пропустите этот раздел, если вам не нужна функциональность ЛС.
- Подключитесь к серверу по SSH и выполните:
cd /var/discourse
./launcher enter app
rake admin:create
При запросе введите email бота и надёжный пароль. На вопрос о правах администратора ответьте n.
-
В разделе Администрирование → Пользователи найдите недавно созданную учётную запись и:
- Нажмите Одобрить
- Установите Уровень доверия на 1
- Обновите имя пользователя на
ChallengeBot(или ваше предпочтительное имя)
-
При желании установите изображение профиля для учётной записи бота.
-
Перейдите в Администрирование → Плагины → Челленджи → Настройки и введите точное имя пользователя в поле Имя пользователя бота. Примечание: это поле чувствительно к регистру.
Команды 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.




