타임스탬프와 같은 기준에 따라 주제를 이동하는 시스템 만들기

AI Bot 통합에 대한 참고 사항: Discourse AI - AI bot - Documentation / Site Management - Discourse Meta

추가 노트/수정: 저는 셀프 호스팅을 사용 중입니다.

장문을 읽기 귀찮으시면 간단 버전: 저는 AI Bot을 사용하여 게시물의 타임스탬프를 확인하고 "만료일"에 기반하여 주제를 이동시키고 싶습니다.

저는 제가 Discourse를 사용하는 용도에 맞게 관리 방식을 개선하는 방법에 대해 고민해 왔습니다. 저는 Roblox 게임 커뮤니티를 운영 중이며, Moderation 팀이 게임 내 Moderation 조치 및 Discord에서의 조치에 대한 기록(log) 업무를 수행하기 위해 Discourse를 활용하고 있습니다.

우리는 임시 BAN(접속 금지)을 포함하여 여러 카테고리를 가지고 있습니다. 로그 기록은 게시글 형식으로 이루어지며, Moderation 담당자가 지정된 양식을 채우고, 조치와 관련된 타임스탬프를 삽입합니다. 예를 들어 7일 BAN의 경우, 기간: 2026-03-01T05:00:00Z2026-03-08T05:00:00Z (여기에 타임스탬프가 있습니다) 와 같이 기록합니다.

관리 측면에서, BAN이 해제되면 ‘Archived Bans(아카이브된 BAN)’ 카테고리로 옮기도록 설정했습니다. 이전에는… 아시다시피, 매주 수동으로 BAN 상태를 확인하여 처리했습니다.

작년 가을, 저는 로컬에서 Discourse API와 함께 실행되는 Python 유틸리티 [아래 참조]를 만들었습니다. 이 유틸리티는 메뉴를 열며, 아카이브하고 싶은 BAN 섹션을 선택하면 각 게시글의 유효한 타임스탬프를 확인하고 해당 시간이 지났는지에 따라 해당 BAN을 처리합니다. 잘 작동하지만, 더 개선하고 싶었습니다…

자, 여기까지 왔습니다. 여러분이 아직 여기 계실지 모르겠지만, 이 내용을 훨씬 더 요약할 수도 있었겠지만, 어쨌든 Discourse는 대화에 관한 것이잖아요?

저는 특히 가장 높은 직급의 Moderation 팀원들이 VS(Visual Studio)를 사용하거나 컴퓨터에 무언가를 다운로드할 필요 없이 이 작업을 수행할 수 있도록 하고 싶습니다. 그래서 플러그인 버전을 만들어 보려 했는데, 이를 시도하는 과정에서 AI를 사용했다는 점은 인정합니다. 어디서 잘못되었는지 모르겠고, 문서를 살펴보고 프로세스를 따르도록 지시해 보았지만, 성공하지 못했습니다.

플러그인을 통한 통합에서 제 문제는 인터페이스에 시각적 기반의 인터페이스를 통합하는 방법(파이썬 버전만큼 화려하지는 않지만, 이해할 수 있는 방식으로)을 이해하지 못했기 때문이었습니다(AI도 이해하지 못했습니다). 예를 들어 'Run Archive process(아카이브 프로세스 실행)'라고 적힌 큰 버튼이 있고, Moderation API(?)를 활용하여 유효한 날짜가 없거나 오류가 있는 항목을 플래그 처리하는 방식 등이요.

자… 긴 버전의 끝까지 왔습니다. 저는 다른 사람, 즉 또 다른 인간에게서만 얻을 수 있는 조언이 필요하기 때문에 여기에 있습니다.

  • AI Bot에 이런 기능이 있나요?
  • 없다면, 어떤 합리적인 솔루션을 시도해 볼 수 있을까요?
  • 플러그인 경로에서 무엇이 잘못되어서 단순히 작동하지 않거나/고통스러웠을까요(이 커뮤니티에 처음 시작했을 때 여러분이 범했던 일반적인 실수 같은)?

여러분의 조언을 소중히 생각합니다. 감사합니다.

이 모든 일들을 위해 AI까지 동원할 필요는 없다고 생각합니다.

활성 BAN 주제를 생성할 때, 일정 시간이 지난 후 해당 주제를 올바른 카테고리로 이동시키는 타이머를 함께 설정하면 자동으로 처리되지 않을까요?

그리고 … 왜 여기서 Discourse 코어에서 벗어나고 있는지 궁금합니다. 이미 BAN된 사용자의 로그가 존재하는데, 신뢰할 수 있는 사용자에게 데이터 탐색기 쿼리에 대한 접근 권한을 부여하여 이력을 확인하게 하면 되지 않나요?

이 디스코urs는 밴(접속 금지)을 기록하는 데 사용됩니다…. 이것이 유일한 목적입니다. 포럼에는 플레이어가 없습니다…. 게임/디스코드의 모더레이터만 있습니다. 밴 기간이 다양하기 때문에 토픽 타이머가 작동하지 않을 것 같습니다. 저는 디스코urs 코어에서 벗어나는 것이 아니라, 특정 사용 사례를 위해 활용하는 것입니다. (이미지 참조)

흥미로운 사용 사례네요!

몇 가지 변경 사항을 적용하시면 더 나은 결과를 얻을 수 있을 것 같습니다:

BAN 만료일을 전용 커스텀 토픽 필드로 이동하기

이렇게 하면 새로운 토픽이 생성될 때 모든 BAN에 만료일이 설정되어 있는지 검증할 수 있고, 만료된 BAN을 조회하는 작업도 훨씬 쉬워집니다.

또한 특정 토픽의 데이터에 대한 프로그래매틱 접근을 가능하게 해주는 실험적 폼 템플릿 도입을 활용할 수도 있습니다.

/filter 커스텀 필터 추가하기

커스텀 필드나 폼 템플릿을 사용하면 만료된 BAN, 아카이브된 BAN 등 새로운 /filter 필터를 추가하는 것이 쉬워집니다. 이러한 필터가 이제 관리자 여러분의 주요 작업 목록이 될 것이며, 사용 편의성을 위해 사이드바에 추가할 수도 있습니다.

BAN 전체를 자동화할까요?

마지막 단계는 토픽이 생성될 때마다 Discourse가 Roblox와 Discord에서 자동으로 BAN을 생성하고, 만료 시 자동으로 해제하도록 하는 것입니다.

정기 작업(recurring job)과 API 접근을 사용하면 이를 비교적 쉽게 구현할 수 있습니다.


로컬 Discourse 개발 환경 설정을 갖추고 계신다면, 이 포스트를 Claude Code에 스펙으로 전달하여 몇 분 만에 구현해 보실 수도 있습니다.

정말 흥미로운 관점이네요! 한번 살펴보겠습니다! 특히 커스텀 필드와 템플릿 부분에 주목하고 있습니다. 의견을 주셔서 감사합니다!

여러분이 제 사용 사례에 흥미를 느끼시는 것 같아, 배경 설명을 조금 더 드리겠습니다…. 그리고 저는 몇 년 후 다른 게이밍 커뮤니티가 참고할 수 있는 아이디어를 기여하는 것을 좋아합니다…

실제로 제 사용 사례는 꽤 독특합니다. 우리는 몇 년 동안 Trello를 사용해 왔지만, 그들이 점차 도입하기 시작한 제한 사항들 때문에 관리가 너무 엉망이 되어가고 있었습니다. 팀 전체를 수용하기 위해 10개의 워크스페이스를 사용해야 했으니까요. (게다가 접근 권한 수준도 유료 기능으로 제한하기 시작했습니다.)

따라서 비즈니스 모델 변경에 대한 지속적인 문제 때문에 셀프 호스팅 솔루션으로 전환하는 것이 훨씬 쉬웠습니다. 다른 카나반 스타일 소프트웨어도 시도해 보았지만, 이전에 Discourse를 사용해 본 경험과 오픈소스라는 점, 그리고 백엔드에서 더 현대적인 관행들을 사용한다는 사실 때문에 사용해보지 않을 수 없었습니다. 이 플랫폼 전체가 계속 이루어내는 성과와 성장에 항상 놀라고 있습니다. 전환 후 9월이 2주년인데, 우리는 6,000개 이상의 토픽을 만들었습니다!

제가 재현하려고 했던 기능은 그 시절의 것과 유사한 것이었는데, 특정 트리거(우리 경우에는 종료일)가 발생하면 한 목록에서 다른 목록으로 항목을 이동시키는 자동화였습니다. 불행히도 이것은 더 이상 시연조차 할 수 없는 프리미엄 기능입니다.

image

탐색을 마친 후 다시 이곳에 와서 진행 상황이나, 특히 다른 사람들이 유사한 사용 사례를 위한 아이디어를 볼 수 있도록 제가 무엇을 했는지 알려드리겠습니다.

플러그인이 정상적으로 작동하기 시작하면, Kanban Board 덕분에 이전처럼 시각화할 수도 있습니다.

드디어 돌아왔습니다… 꽤 많은 진전이 있었어요. 이 작업에 약 6시간 30분을 보냈습니다.

처음에는 여러분의 제안에 기반한 몇 가지 개념으로 시작했는데, 몇 가지 단점이 있어 결국 다른 방향으로 향하게 되었습니다. 그래도 hopefully 개념적으로는 여전히 훌륭한 방향이라고 생각합니다!

원래는 템플릿 양식을 사용하려고 했ましたが, 각 인라인 답변 사이의 패딩에 대해 매우 만족스럽지 않았습니다. 현재 제 설정과 더 유사한 포맷을 찾고 있었거든요. 또한 코드로 전부 수동으로 작성해야 한다는 점도 마음에 들지 않아서 이 방식을 포기하게 되었습니다.

제 Python 스크립트를 Discourse 플러그인으로 이식했습니다(참고: 이식 작업의 대부분에 AI를 사용했습니다). 시작할 때 몇 가지 문제가 있었고, 이제 작동은 하지만 여전히 세밀한 조정이 필요합니다. 디자인이 다소 어색하고, 그 외에도 여기저기 작은 문제들이 몇 가지 있는 것 같습니다. Ruby에는 그렇게 능숙하지 않아서 해당 부분의 검토는 최선을 다한 수준입니다.

자, 플러그인에 대해 말씀드리면…

개념/목적: 특정 트리거를 통해 주제를 한 카테고리에서 다른 카테고리로 더 빠르게 이동할 수 있는 기능입니다.

수동 모드와 자동(예약) 모드라는 두 가지 운영 모드를 제공합니다.
트리거를 구성할 때 이동할/이동원본 카테고리를 선택한 후, 태그와 같은 추가 조건으로 범위를 좁힐 수 있습니다. 좁히는 필터를 제외하고, 실제 트리거를 호출하는 최종 조건은 현재 설정된 트리거 세트 기준으로 종료 시간/날짜 스탬프(또는 시작), 닫힘(Closed), 해결(Solved), 아카이브(Archived)입니다.

이동되는 주제에 대한 로그 기능도 포함되어 있으며, 로그를 얼마나 오래 유지할지 결정할 수도 있습니다.

이 답변 시점까지 닫힘, 해결, 아카이브 트리거를 완전히 테스트하지는 않았습니다.
조금 더 다듬고, 모든 것이 제대로 작동하는지 확실히 하기 위해 더 테스트한 후에는 기꺼이 플러그인 카테고리에 공개하여 다른 분들이 사용할 수 있게 하겠습니다. 하지만 지금은 GitHub에만 올려두겠습니다. 또한 누구나 실행할 수 있도록 되어 있지 않도록 권한을 다시 확인해야 할 것 같습니다. 또는 해당 기능을 토글로 설정할 수 있도록 해야겠죠.

생각을 말씀해 주시거나, 제가 이걸 하는 게 완전히 미친 짓인지 알려주세요.

소스: https://github.com/jdc20181/DiscourseTopicMigrationTool