Discourse에서 신뢰 수준에 따라 자동으로 직함을 지정하는 방법

안녕하세요 여러분,

커스텀 타이틀을 갖춘 랭킹 시스템을 설정했습니다. 하지만 아시다시피, Discourse에는 모든 신규 사용자에게 기본 타이틀을 할당하는 내장 기능이 없습니다. 그래서 다음과 같은 우회 방법을 만들었습니다:

  • 신규 멤버는 그룹 1에 속합니다.
  • 활성 멤버는 그룹 2에 속합니다.
  • 그리고 이어서…

사용한 방법은 다음과 같습니다:

cd /var/discourse
./launcher enter app
rails c

User.where(trust_level: 0).update_all(title: "عضو جديد")
User.where(trust_level: 1).update_all(title: "عضو جديد")
User.where(trust_level: 2).update_all(title: "عضو مشارك")
User.where(trust_level: 3).update_all(title: "عضو مبدع")

문제점

새로운 사용자가 가입할 때마다 이 명령어를 수동으로 실행해야 합니다. 오늘 스크립트를 실행해도 내일 새로운 멤버가 게시물을 올리면 타이틀이 자동으로 부여되지 않으므로, 서버에 로그인하여 명령어를 다시 실행해야 합니다.

Ruby 스크립트로 자동화하고 crontab을 통해 호출하려고 했지만, 오류가 발생합니다.

ChatGPT에게 질문했는데, 다음과 같이 답변을 받았습니다:

“Discourse 환경 밖에서 Ruby로 스크립트를 직접 실행할 때 User 모델이 로드되지 않습니다.”

문제는 Discourse 파일 안에 적절한 config/environment 설정이 없다는 것입니다.

추가했지만 작동하지 않았습니다.

제 질문

crontab을 사용하지 않고 이를 자동화할 방법이 있을까요? 아니면 매번 수동으로 Rails 콘솔에 진입하지 않고 사용자 타이틀을 업데이트하는 스크립트를 올바르게 실행하는 방법은 무엇일까요?

미리 감사합니다!

도움받을 수 있을까요?

Discourse Automation 과 Create custom Automations 참고하여 커스텀 자동화를 만들어서 가능할 수도 있지만, 어떻게 작동하는지 잘 모르겠습니다.

User Event와 User Promoted Event 트리거를 사용하는 사용자 정의 자동화 스크립트로 이 작업을 수행할 수 있습니다. 새 사용자가 생성되면(User Event) 또는 신뢰 수준이 변경되면(User Promoted Event) 스크립트를 트리거하여 해당 사용자의 신뢰 수준에 따라 직함을 자동으로 할당할 수 있습니다.

고마워요 @jahan_gagan ! 이 스크립트를 만드는 데 도움이 될 수 있을까요?

와! 멋진 해킹이네요! :clap:

신뢰 수준 같은 자동화 그룹의 일부 그룹 설정을 사용할 수 없다는 점은 좀 아쉬운 것 같습니다. 사용자가 속한 신뢰 수준 그룹에 따라 사용자 제목을 설정할 수 있어야 하지만, 현재는 그렇게 할 수 없습니다.

배지 시스템을 활용해서 이 작업을 수행해 볼 수 있습니다. 원하는 신뢰 수준에 도달했을 때 지급되는 배지를 만들고, 그런 다음 "배지를 제목으로 사용하도록 허용"을 설정하세요.

이후 매일 실행되어 사용자의 제목과 플레어를 업데이트하는 “배지를 통한 사용자 그룹 멤버십” 스크립트를 사용하여 자동화를 만들 수 있습니다.

이 정보를 게시물/사용자 카드에 추가하는 테마 컴포넌트를 사용하는 것이 더 유연하지 않을까요? 이렇게 하면 사용자는 여전히 제목 필드를 의도된 용도(배지, 그룹 식별자, 추가하고 싶은 맞춤형 항목 등)로 활용할 수 있으며, 테마 컴포넌트를 통해 추가되는 정보는 사용자가 수정하거나 제거할 수 없게 됩니다.

안녕하세요,

배지 시스템 자동화를 사용하여 이를 구현하려고 하 tetapi 한 가지 제한 사항에 부딪혔습니다.

user_group_membership_through_badge 스크립트를 실행하려면 그룹을 지정해야 합니다. 하지만 저는 이미 기본 시스템 그룹인 Trust Level 1, 2, 3, 4를 사용하고 있습니다. 이 그룹들은 내장되어 있어 자동화 도구에서 선택할 수 없습니다.

이 자동화를 위해 새로운 그룹을 만들면, 현재 멤버들이 자동으로 이관되지 않을까 걱정됩니다. 그러면 사용자의 신뢰 등급에 대한 정확한 매핑을 잃게 될 것입니다.

그룹 필드를 비워두면 발생하는 오류를 보여주는 스크린샷입니다:

그룹을 지정하지 않고 배지-제목 업데이트를 적용할 방법이 있을까요?
아니면, 이 자동화 내에서 Trust Level 그룹을 직접 대상으로 지정할 수 있는 우회 방법이 있을까요?

@xkhalid 간단한 플러그인(이것도 제 첫 작품입니다!)을 만들어 봤습니다:

  • 새 사용자에게 제목을 부여합니다.
  • 신뢰도 수준(Trust Level)에 따라 제목을 변경합니다. 예: TL1 → TL2: 사용자는 이제 TL1 제목 대신 TL2 제목을 받게 됩니다.
  • 12시간마다 사용자 제목을 업데이트합니다(주기를 설정할 수 있도록 할 계획입니다)

모든 제목은 설정을 통해 구성할 수 있습니다 :slightly_smiling_face:.

감사합니다!

app.yml에 다음 내용을 추가한 후

- git clone https://github.com/NateDhaliwal/add-title-based-on-trust-level.git

다시 빌드했을 때 502 Bad Gateway 오류가 발생했습니다. 해결 방법이 있을까요?
지금은 app.yml에서 해당 내용을 제거했고, 지금은 모든 것이 정상적으로 작동하고 있습니다.

음, 이상하네. 기억이 맞다면 재빌드 후에 그 오류가 가끔 나타날 수 있거든. 그냥 기다리면 해결되거나(또는 재빌드하면) 사라져.

네, 알아요 — 하지만 이 문제는 Git 저장소를 추가하고 다시 빌드한 후에만 발생했어요. 이런 오류가 떴거든요.

그래도 나중에 다시 시도해 볼게요.


이 문제는 어때요? 관련이 있을 수도 있나요?

다시 한번 확인해 보겠습니다. 알려주셔서 감사합니다.

@xkhalid 지금 한번 시도해 볼 수 있을까요? 방금 업데이트했어요.

감사합니다! 이제 작동합니다.

하지만 모든 사용자에게 반영되지는 않습니다. 예를 들어, 이 사용자는 신뢰 수준 1이고 신규 사용자인데, 제목이 할당되지 않았습니다.

시간이 좀 걸리는 건가요?

@xkhalid 수정을 push했습니다. 이제 제대로 동작하는지 알려주세요.
감사합니다!

@NateDhaliwal 님의 플러그인에 감사드립니다!

정말 유용했으며, 제목이 12시간마다 업데이트되었습니다.

안녕하세요, 훌륭한 플러그인을 만들어 주셔서 감사합니다!

조금 더 복잡한 기능이 필요합니다.
그룹 소속(예: 그룹 A 또는 그룹 B)과 신뢰 수준(예: TL2, TL3 등)의 조합을 기반으로 사용자 칭호를 자동으로 설정하고 싶습니다. 예를 들어, 그룹 A에 속해 있고 신뢰 수준이 TL2인 사용자는 "A - TL2"라는 칭호를 받는 식입니다.

플러그인에 이 기능을 추가할 수 있을까요? 아니면 구현 방법에 대한 조언이 있을까요?
저는 코딩 경험이 없어서 제안이나 도움이 정말로 감사하겠습니다.

감사합니다!

@joo 이 그룹들은 사용자의 기본 그룹인가요?

네, 사용자의 기본 그룹을 기반으로 제목을 결정하려고 합니다.