| 요약 | 리더보드, 자동 게시글, 배지 수여 기능을 갖춘 시간 제한 도전을 실행하세요. | |
| 리포지토리 링크 | R23DPrinting-group / discourse-daily-challenge · GitLab | |
| 설치 가이드 | Discourse에 플러그인 설치하는 방법 |
현재 버전: 1.5.0 (2026년 4월 2일 업데이트)
라이선스: MIT
이야기
저는 최근에 Discord에서 Discourse로 이전한 건강 및 웰니스 커뮤니티를 운영하고 있습니다. Discord에서는 월간 피트니스 챌린지를 진행하기 위해 커스텀 봇을 구축했습니다. 회원들은 매일 운동 기록을 게시했고, 봇은 체크인 현황을 추적하며 주간 리더보드를 게시하고 매월 말에 우승자를 발표했습니다. 이는 커뮤니티에서 가장 인기 있는 기능 중 하나였습니다.
Discourse로 이동한 후, 회원들은 챌린지 부활을 요청하기 시작했습니다. 기존 플러그인을 찾아보았지만 아무것도 나오지 않았습니다. 그래서 직접 하나 만들었습니다.
간단한 해결책으로 시작했던 것이 결국 오리지널 Discord 봇보다 훨씬 잘 작동하는 풀-피처 챌린지 시스템으로 발전했습니다. 다른 커뮤니티에도 유용할 수 있을 것 같아 여기 공유합니다.
기능
discourse-daily-challenge 플러그인은 Discourse 내에서 구조화된 시간 제한 챌린지를 직접 실행할 수 있게 해줍니다. 회원들은 지정된 주제(topic)에 해시태그나 사진과 함께 게시글을 작성하여 체크인합니다. 플러그인이 모든 것을 자동으로 추적합니다.
핵심 기능
유연한 체크인
회원들은 챌린지 주제에 설정된 해시태그나 사진 첨부 파일과 함께 게시글을 작성하여 체크인합니다. 챌린지는 일일 또는 주간 체크인으로 설정할 수 있습니다. 체크인 창(window)은 챌린지에 설정된 시간대를 기준으로 평가되므로 글로벌 커뮤니티에서도 올바르게 작동합니다.
실시간 리더보드 & 스트릭
관리자 대시보드는 모든 참가자의 총 체크인 수, 현재 스트릭, 완료 비율을 포함한 실시간 순위를 표시합니다. 스트릭 라벨은 챌린지 간격(“일 스트릭” 또는 “주 스트릭”)을 자동으로 반영합니다.
자동 리더보드 게시글
챌린지 주제에 주간 자동 리더보드 게시글을 게시할 요일과 시간을 설정할 수 있습니다. 챌린지가 종료된 다음 날 최종 결과 게시글도 자동으로 생성됩니다.
커스텀 배지
챌린지를 “완료”하는 데 필요한 최소 체크인 수를 정의합니다. 대상 참가자는 챌린지가 종료될 때 자동으로 커스텀 Discourse 배지를 받습니다. 배지 이름은 주제 제목에서 자동으로 채워집니다.
동시 다중 챌린지
원하는 만큼의 챌린지를 동시에 실행할 수 있습니다. 각 챌린지는 자체 주제, 일정, 시간대, 배지, 리더보드를 가집니다.
아카이브된 챌린지
완료된 챌린지는 대시보드의 아카이브 아코디언 뷰에 보존되므로 과거 결과를 다시 확인할 수 있습니다.
관리자 체크인 관리
관리자는 수동으로 체크인을 추가하거나 제거할 수 있습니다 — 놓친 게시글을 보완하거나 분쟁을 해결하는 데 유용합니다.
수동 리더보드 트리거
“지금 리더보드 게시” 버튼을 통해 관리자는 예정된 시간대 외에 언제든지 리더보드 업데이트를 게시할 수 있습니다.
모더레이터 접근 권한
전체 사이트 모더레이터는 전용 사이드바 섹션을 통해 챌린지를 생성, 편집, 관리할 수 있습니다. 사이트 설정을 통해 활성화 또는 비활성화할 수 있습니다.
카테고리 모더레이터 접근 권한
카테고리 모더레이터는 전용 /challenges 라우트를 통해 자신에게 할당된 카테고리에 범위가 한정된 챌린지를 관리할 수 있습니다 — 관리자 권한이 필요하지 않습니다. 사이트 설정을 통해 독립적으로 활성화 또는 비활성화할 수 있습니다.
ChallengeBot DM
봇 계정이 설정된 경우, ChallengeBot은 각 체크인 후 회원에게 확인 DM(스트릭 정보 및 주제 링크 포함)을 자동으로 보내고, 며칠 동안 체크인하지 않았을 때 알림 DM을 보내며, 챌린지 주제 내의 @멘션이나 Discourse 메시지를 통해 전송된 명령에 응답합니다 — 모든 응답은 DM으로 제공됩니다. 또한 회원이 게시글을 편집하여 해시태그나 사진을 추가한 경우를 감지하며, 허용된 시간 창 내라면 체크인으로 집계합니다. 리더보드 및 최종 결과 게시글도 시스템 계정 대신 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, 챌린지 시간대 기준) |
| 완료 배지 수여 | 챌린지 종료 시 자동 배지 수여 토글 |
| 배지 이름 | 생성 및 수여할 배지의 이름 — 주제 제목에서 자동으로 채워짐 |
| 알림 DM 활성화 | 최근 체크인하지 않은 참가자에게 알림 DM 전송 (봇 사용자명 설정 필요). 기본적으로 활성화되어 있습니다. |
사이트 설정
| 설정 | 기본값 | 설명 |
|---|---|---|
daily_challenge_enabled |
true |
플러그인을 전역적으로 활성화 또는 비활성화 |
daily_challenge_mod_access_enabled |
true |
전체 사이트 모더레이터가 챌린지를 관리하도록 허용 |
daily_challenge_category_mod_access_enabled |
true |
카테고리 모더레이터가 할당된 카테고리에서 챌린지를 관리하도록 허용 |
daily_challenge_bot_username |
"" |
DM을 보내고 리더보드를 게시하는 봇 계정의 사용자명 |
체크인 작동 방식
- 회원이 챌린지 주제에 답글을 게시합니다
- 게시글에는 설정된 해시태그나 사진 첨부 파일이 포함되어야 합니다
- 플러그인은 회원이 현재 기간(챌린지 간격에 따라 일 또는 주) 동안 이미 체크인했는지 확인합니다
- 아직 체크인이 없으면 체크인이 기록되고 리더보드가 업데이트됩니다
- 회원당 기간당 1회 체크인만 허용됩니다
관리자는 관리자 대시보드에서 모든 체크인을 확인하고 관리할 수 있습니다.
모더레이터 및 카테고리 모더레이터 접근 권한
전체 사이트 모더레이터는 daily_challenge_mod_access_enabled이 켜져 있는 경우 메인 사이드바의 CHALLENGES 섹션을 통해 챌린지 관리에 접근할 수 있습니다.
카테고리 모더레이터는 /challenges/dashboard 및 /challenges/challenges에서 범위가 한정된 버전에 접근할 수 있으며, 자신에게 할당된 카테고리의 주제와 연결된 챌린지만 보고 관리할 수 있습니다. 이를 위해서는 daily_challenge_category_mod_access_enabled이 켜져 있어야 하고, 사용자가 관리자 → 카테고리 → [카테고리] → 모더레이션을 통해 카테고리 모더레이터로 지정되어 있어야 합니다.
ChallengeBot 설정
ChallengeBot은 선택 사항이지만 DM 기능과 출처가 명시된 리더보드 게시글을 활성화합니다. DM 기능이 필요하지 않다면 이 섹션을 건너뛰세요.
- 서버에 SSH로 로그인하고 다음을 실행하세요:
cd /var/discourse
./launcher enter app
rake admin:create
프롬프트가 표시되면 봇의 이메일과 강력한 비밀번호를 입력하세요. 관리자 권한에 대해서는 n을 입력하세요.
-
관리자 → 사용자에서 새로 생성된 계정을 찾아 다음을 수행하세요:
- 승인 클릭
- **신뢰 수준(Trust Level)**을 1로 설정
- 사용자명을
ChallengeBot(또는 선호하는 이름)으로 업데이트
-
선택적으로 봇 계정의 프로필 사진을 설정하세요.
-
관리자 → 플러그인 → 챌린지 → 설정으로 이동하여 정확한 사용자명을 봇 사용자명 필드에 입력하세요. 참고: 이 필드는 대소문자를 구분합니다.
ChallengeBot 명령어
회원들은 활성 챌린지 주제에서 봇을 @멘션하거나 프로필을 통해 ChallengeBot에게 직접 메시지를 보내 명령어를 트리거할 수 있습니다. 봇은 항상 DM으로 응답하며 주제에 게시글을 남기지 않습니다.
여러 활성 챌린지에 참여하고 있는 경우, ChallengeBot은 하나를 선택하도록 요청합니다(또는 모두를 위해 A라고 답할 수 있음).
| 명령어 | 설명 |
|---|---|
status |
모든 활성 챌린지에 대한 통계 |
leaderboard |
해당 챌린지의 현재 순위 |
streak |
현재 스트릭 |
checkins |
모든 체크인 날짜 목록 |
progress |
완료한 체크인 수 vs 필요 수, 남은 일수 |
help |
사용 가능한 모든 명령어 목록 |
시간당 사용자당 10회로 속도 제한됩니다.
참고:
status와 같은 짧은 DM 명령어를 허용하려면 사이트 설정에서min_personal_message_post_length를1로 설정하세요.
자동 게시글
주간 리더보드
플러그인은 주간 리더보드를 게시할 시간인지 확인하는 시간 단위 백그라운드 작업을 실행합니다. 설정된 요일 + 시간이 도달하면(챌린지 시간대 기준), 현재 순위를 보여주는 형식화된 게시글이 챌린지 주제에 생성됩니다.
최종 결과 게시글
챌린지가 종료된 다음 날, 최종 결과 게시글이 자동으로 게시됩니다. 모든 참가자, 그들의 총 체크인 수, 완료 상태, 그리고 배지 획득자를 축하하는 내용이 나열됩니다.
데이터베이스 테이블
daily_challenges— 챌린지 정의daily_check_ins— 챌린지별, 기간별 사용자별 개별 체크인 기록
호환성
- Discourse 3.x+
- 셀프호스티드 설치 환경에서 테스트됨
- Ruby 3.x, Rails 7.x+
로드맵 (v1.6.0)
아직 구체적인 기능이 계획되어 있지 않습니다. 제안 사항이 있다면 GitLab에서 이슈를 열거나 이 주제에 답글을 달아주세요.
변경 로그
변경 로그 보기
v1.5.0
- 편집 감지 — 회원이 게시글을 편집하여 챌린지 해시태그나 사진을 추가하면, 플러그인은 이제 이를 체크인으로 집계합니다. 일일 챌린지는 원래 게시글로부터 24시간 이내의 편집을 허용하며, 주간 챌린지는 같은 챌린지 주 내의 편집을 허용합니다. 체크인은 원래 게시글의 날짜로 기록됩니다.
- DM 명령어 — 회원들은 이제 Discourse 메시지를 통해 ChallengeBot에게 직접 명령어를 보내거나, 기존 ChallengeBot DM 스레드에 답글을 달 수 있습니다. 챌린지 주제에서 @멘션을 할 필요가 없습니다.
- 챌린지 선택기 — 회원이 여러 활성 챌린지에 참여하고 있을 때, ChallengeBot은 쿼리할 챌린지를 선택하도록 번호가 매겨진 목록을 표시합니다. 챌린지가 하나만 있는 회원은 즉시 응답을 받습니다.
v1.4.0
- ChallengeBot 체크인 확인 DM — 각 성공적인 체크인 후 스트릭 정보와 챌린지 주제로의 클릭 가능한 링크가 포함된 자동 DM
- 알림 DM — 일일 챌린지는 2일 이상 누락 시 알림을 보내며, 주간 챌린지는 아직 체크인하지 않은 경우 주 마지막 날에 알림을 보냅니다. 현재 체크인 수와 목표를 포함합니다. 챌린지별 토글, 기본적으로 활성화되어 있습니다.
- @멘션 명령어 — 회원들이 챌린지 주제에서 봇을 멘션하여 DM으로 통계를 받을 수 있습니다. 주제에 게시글을 남기지 않습니다. 명령어:
status,leaderboard,streak,checkins,progress,help. 사용자당 시간당 10회로 속도 제한됩니다. - 리더보드 및 최종 결과 게시글 — 설정된 경우 ChallengeBot에서 게시하며, 그렇지 않으면 시스템 계정으로 폴백됩니다
- 새 사이트 설정 —
daily_challenge_bot_username - 새 챌린지 필드 — 알림 DM 토글 (기본값 활성화)
v1.3.0
- 카테고리 모더레이터 접근 권한 — 카테고리 모더레이터는
/challenges/dashboard및/challenges/challenges를 통해 할당된 카테고리의 챌린지를 생성, 편집, 삭제 및 체크인을 관리할 수 있습니다 — 관리자 권한이 필요하지 않습니다 - 배지 이름 자동 입력 — 주제 ID가 입력되면 배지 이름 필드가 주제 제목에서 자동으로 채워집니다
- 배지 이름 검증 — “완료 배지 수여”가 활성화되어 있을 때 배지 이름은 필수이며, 500 오류 대신 적절한 오류를 반환합니다
- 모더레이터/카테고리 모더레이터 토글 분리 —
daily_challenge_mod_access_enabled및daily_challenge_category_mod_access_enabled를 독립적으로 토글할 수 있습니다
v1.2.0
- 설정 가능한 체크인 간격 — 일일 또는 주간 챌린지 실행
- 주 시작일 설정 — 주간 챌린지의 경우, 주의 시작 요일을 일요일, 월요일 또는 토요일 중 선택
- 간격 인식 스트릭 — 스트릭 라벨 및 계산이 이제 챌린지 간격을 반영합니다
- 모더레이터 접근 권한 — 전체 사이트 모더레이터가 전용 사이드바 섹션을 통해 챌린지를 관리할 수 있습니다
- 관리자 UI에서 "Discourse Challenges"로 이름 변경
v1.1.1
- 모든 활성 챌린지를 동시에 표시하는 다중 챌린지 대시보드
- 과거 결과를 표시하는 아카이브 챌린지 아코디언
v1.1.0
- 챌린지별 시간대 지원
- 주간 게시 일정이 이제 챌린지별(요일, 시간, 활성화/이슈 토글)로 설정됩니다
v1.0.0
- 초기 릴리스
피드백 및 기여
이 플러그인은 우리 커뮤니티의 실제 필요를 해결하기 위해 구축되었으며, 여러분의 커뮤니티에도 도움이 될 수 있기를 바라며 공유합니다. GitLab에서 이슈, PR, 기능 요청을 환영합니다.
책임감과 일관성이 중요한 커뮤니티(피트니스, 언어 학습, 글쓰기, 창의적 습관 등)를 운영하고 있다면, 일일 챌린지는 진정한 의미에서 강력한 참여 도구가 될 수 있습니다. 이 플러그인이 여러분의 Discourse 커뮤니티에 이를 가져오는 것을 더 쉽게 만들기를 바랍니다.




