Discord 동기화: Discourse 포럼과 Discord 서버를 동기화합니다

:warning: 이 플러그인은 자동화되어 있으며, 별도 명령어가 없습니다. 범용 디스코드 봇 프레임워크를 찾고 계신다면, 이 플러그인의 기반이 된 @merefield님의 봇 구성 키트를 확인해 주세요.

Discord Sync Discourse 포럼과 디스코드 서버 동기화 :discourse:

이 플러그인은 Discourse 포럼 인스턴스와 디스코드 서버 간의 특정 사용자 관련 정보를 동기화할 수 있게 해줍니다. 모든 권한을 처리하고 서버 내 특정 작업을 트리거하기 위해 디스코드 봇을 생성합니다.

기능

  • Discourse 그룹을 디스코드 역할로 동기화
    사용자가 Discourse에서 접근 가능한 그룹에 따라 디스코드 서버의 역할을 자동으로 관리합니다.

    • 인증된 역할(Verified Role)
      디스코드 계정을 연결한 모든 디스코드 사용자에게 부여할 "인증된 역할"을 추가할 수 있습니다.

    • 안전한 역할(Safe Roles)
      이 플러그인은 디스코드의 역할이 Discourse의 그룹과 동일하도록 강제하므로, 봇이 무시하고 디스코드 서버에서 수동으로 관리할 역할 목록을 설정할 수 있습니다.

  • Discourse 사용자 이름을 디스코드 닉네임으로 동기화
    포럼 사용자 이름으로 사용자를 식별하려면, 사용자가 Discourse에서 가진 사용자 이름과 동일한 디스코드 서버 닉네임을 사용하도록 강제할 수 있습니다.

트리거

다음과 같은 경우 플러그인은 완전한 Discourse-디스코드 동기화(닉네임 및 역할)를 실행합니다:

  • Discourse
    • 사용자가 그룹에 추가됨
    • 사용자가 그룹에서 제거됨
    • 사용자 프로필이 업데이트됨
      사용자 이름-닉네임 동기화를 위한 것
    • 사용자가 인증됨
      첫 동기화가 계정 연결 직후 바로 실행되도록 보장하기 위해, 인증 제공자가 디스코드일 경우에만 실행됩니다.
  • Discord
    • 사용자가 디스코드 서버에 참여함
      주어진 디스코드 ID를 가진 사용자를 데이터베이스에서 검색한 후 동기화 작업을 실행합니다.

설치

:exclamation: 이 플러그인은 디스코드 OAuth2에 의존하여 Discourse-디스코드 계정을 식별하고 연결합니다. 디스코드로 로그인하는 것을 허용하지 않으면서도 계정 연결은 유지하길 원하신다면, 이 주제에 대한 해결책을 확인해 주세요.

사전 요구 사항

이 플러그인은 libsodium(디스코드 Ruby 게姆이 필요로 함)이 필요합니다. 설치하려면 .yml 파일을 수정하고 다음 코드를 추가하세요:

hooks:
    before_code:
       - exec:
              cmd:
                - apt-get update
                - apt-get install -y libsodium-dev

설치 단계

  1. 이 저장소 URL: https://github.com/barreeeiroo/discourse-discord-sync.git를 사용하여 플러그인 설치 방법 표준 가이드를 따르세요.
  2. 이 가이드를 따라 Discourse 인스턴스에서 디스코드로 로그인 설정을 하세요.
  3. 디스코드 개발자 포털에서 Bot으로 이동하여 서버에 추가하세요. 봇에게 가능한 가장 높은 역할을 부여했는지 확인하세요.
  4. Discourse에서 플러그인 설정(Plugin Settings)으로 이동하여 discord sync token에 이전 단계에서 표시된 봇 토큰을 설정하세요.

설정 옵션

  • discord sync enabled: 통합을 활성화할지 여부
  • discord sync token: 디스코드 봇 토큰
  • discord sync prefix: 명령어 접두사 (현재 !ping만 지원)
  • discord sync admin channel id: 로깅 메시지(닉네임 변경, 역할 변경)를 게시할 채널
  • discord sync username: true인 경우, 모든 디스코드 서버 닉네임을 해당 Discourse 사용자 이름으로 동기화합니다
  • discord sync verified role: Discourse 계정이 있는 모든 사용자에게 추가할 역할
  • discord sync safe roles: 봇이 무시하고 디스코드에서 수동으로 부여된 것으로 표시할 역할 목록

사용 방법

계정을 연결하려면, 사용자가 디스코드로 인증하는 것을 허용하는 경우 해당 제공자를 사용하면 됩니다. 허용하지 않는 경우, 사용자는 **계정 설정(Account Preferences)**으로 이동하여 ***연결된 계정(Associated Accounts)***으로 스크롤 내린 후 디스코드 행의 *연결(Connect)*을 클릭해야 합니다.

라이브 데모

현재 Kodular Community의 Discourse 인스턴스에서 이 플러그인을 사용 중이며, 디스코드 서버는 kodul.ar/discord에 있습니다:

감사의 글

  • Discourse Bot, @merefield 제작
    이 플러그인의 골격을 제공해 주셔서 감사합니다. Robert 님 덕분에 이 플러그인의 기반을 세울 수 있었고, Discourse 인스턴스에서 디스코드 봇을 실행할 수 있었습니다. (libsodium 설치 트릭에도 감사드립니다!)

  • Discourse Discord Sync, @angus 제작
    봇 없이 신뢰 수준(Trust Levels)을 디스코드 역할로 동기화하는 대안입니다.

  • Login with Discord, Discourse 팀 제작
    Discourse와 Discord 계정을 연결하기 위한 디스코드 OAuth2 통합(구 플러그인) 없이는 이 플러그인이 불가능했을 것입니다.

    • Partially enable login option, @Falco와 @Roman 제작
      Falco와 Roman 님께 감사드립니다. 인증 옵션을 실제로 활성화하지 않고 계정만 "연결"하도록 로그인 제공자를 활성화하는 옵션을 제공해 주셨습니다.
  • discordrb
    이 플러그인은 Ruby를 사용하여 Discord API에 연결할 수 있게 해주는 discordrb 게姆에 의존합니다.

29개의 좋아요

정말 멋지네요! 저는 개인적으로 텔레그램을 더 선호하지만, 디스코드도 정말 좋습니다. 텔레그램은 디스코스와 잘 어울릴 것 같은데요, 둘 다 커뮤니케이션에 초점을 맞춘 잘 알려진 오픈소스 프로젝트이기 때문입니다.

만약 이 기능에 크로스포스팅 기능이 있다면 정말 좋겠네요. 누군가가 디스코드 채팅에서 말을 하면, "채팅방 스레드"라고 알려진 특정 디스코드 스레드에 답글이 자동으로 생성되는 방식입니다. 이렇게 하면 채팅 스레드 내의 새로운 콘텐츠 덕분에 디스코스 웹사이트에 SEO 효과가 있을 것입니다.

4개의 좋아요

저도 텔레그램을 정말 좋아하고, 공개 채팅 그룹을 사용했었어요. 하지만 며칠 전에 디스코드로 전환했는데, 회원이 1,000명이 넘어这么大的 그룹을 관리하기가 꽤 힘들었거든요. 디스코드의 역할 시스템 덕분에 전환이 쉬웠습니다.

4개의 좋아요

잘하셨네요 :slight_smile:

@merefield님의 Discord Bot 외에도, 순수 OAuth2(봇 없음) 기반의 Discord 역할과 Discourse 그룹 동기화 플러그인(예: 신뢰 수준 3을 Discord 역할과 동기화)이 여기 있습니다.

5개의 좋아요

이 플러그인은 Discourse에서 Discord로 동기화합니다. 다만, 이해관계자 유형을 식별할 때 Discourse 그룹보다 Discord 역할을 더 많이 활용하고 있으므로, 이 플러그인이 Discord에서 Discourse로도 동기화할 수 있으면 좋겠습니다. 즉, Discord 역할에 따라 Discourse 사용자를 그룹에 추가하고, Discord 역할에 따라 Discourse 사용자에게 배지를 부여하며, Discord 사용자명과 일치하도록 Discourse 사용자명을 변경(반대는 아님)하는 등의 기능이 가능해야 합니다.

1개의 좋아요

역방향 동기화가 가능할까요? 즉, Discord의 역할, 닉네임 등을 Discourse의 그룹으로 동기화하는 방식입니다.

우리는 Discord에서 역할 등을 관리하고 있으므로, Discourse로 푸시하는 방식을 선호합니다.

2개의 좋아요

이런 것을 발견하시면 알려 주세요.

정말 멋진 것 같습니다. 다만, Discourse의 그룹이 Discord의 그룹과 어떻게 매칭되는지 궁금합니다. 단순히 이름으로만 매칭되나요? 그렇다면 Discord의 역할 ID를 사용하여 어떤 그룹이 어떤 역할로 매핑되는지 직접 정의할 수 있도록 해 주실 수 있을까요? 만약 그 방식이 어렵다면, 역할 화이트리스트를 추가할 수 있을까요? 저는 Discourse에 그룹이 있는 역할은 몇 개뿐이지만, Discord에서는 많은 역할을 사용하고 있습니다.

1개의 좋아요

이 특정 기능은 저희에게 매우 중요합니다. 저희는 모든 역할을 Discord를 통해 관리하고 있기 때문입니다. Discord의 그룹을 Discourse로 동기화할 수 있는 방법이 있으면 좋겠습니다. 이름만 동기화되고 권한 등은 나중에 설정되더라도 좋습니다.

@barreeeiroo : 이와 유사한 기능에 대한 계획이 있으신가요? 아니면 다음 단계로 나아가기 위한 조언을 주실 수 있을까요? "Safe Roles"를 통한 수동 역할 관리가 거의 충분합니다. 그런데 공백이 포함된 역할들이 있어 Safe Roles 필드에 추가할 수 없습니다. Discord에서 모든 역할을 수동으로 업데이트하고 공백 없이 추가하는 대신, 다른 방법이 있을까요?

가능하다면 Discord의 그룹을 Discourse 그룹으로 "push"하는 방식이 아주 좋겠습니다.

이 플러그인에 대한 개발 수고 많으셨습니다!

수정: 이름을 대신하여 역할 ID를 사용하자는 제안은 제 환경에서 많은 문제를 해결해 줄 것입니다.

1개의 좋아요

아직 이 설정을 하는 데 문제가 있습니다. 디스코드의 역할(Role)의 경우 ID를 찾는 건가요, 아니면 이름을 찾는 건가요? 또한 “보호된 역할” 대신 특정 역할만 동기화할 수 있도록 해 주실 수 있을까요?

루비를 잘 모르기 때문에 도움을 드리지 못하겠습니다. 아마 기초를 배우거나, 아니면 Java로 API를 통해 무언가를 구현하게 될 것 같습니다.

문제를 찾았어요. 관리자 채널의 이름 대신 ID를 사용해야 했거든요. 이제 실제로 아무 일이 일어나지 않는 이유를 확인하기 위해 권한/역할 검사를 좀 해야 해요.

1개의 좋아요

참고로 말씀드리면: 이 플러그인의 역방향 버전을 만들었습니다. 디스코드 역할을 디스코스 그룹으로 동기화하는 플러그인입니다: https://www.youtube.com/watch?v=C5paAvTYty4

5개의 좋아요

Discord 역할을 Discourse와 동기화하는 대신, Discourse 역할을 Discord와 동기화할 수 있는 방법이 있을까요?

이 플러그인의 목적이 그겁니까? 고장 난 건가요? 또한 OP에 링크된 제 봇 플러그인도 확인해 보세요. 이 플러그인은 discourse → discord 방향으로 동작합니다(다만 봇 커맨드를 사용하긴 합니다).

2개의 좋아요

여기 있는 모든 플러그인은 디스코드(Discourse)에서 가진 역할을 디스코드(Discord) 계정에 부여합니다. 디스코드(Discord) 역할을 디스코드(Discourse) 계정에 부여하지는 않습니다.

그건 원래 질문과 정반대 아닌가요?

@spirobel 님의 플러그인이 그렇게 하는 것 같던데요?

2개의 좋아요

아니요, Discourse에서 “Community Moderator” 역할을 가지고 있다면 Discord 역할이 변경됩니다.
하지만 Discord에서 “Community Moderator” 역할을 가지고 있다고 해서 Discourse의 역할이 변경되지는 않습니다.

2개의 좋아요

제가 말씀드린 것을 놓치신 것 같습니다: Discord Sync: sync a Discourse forum with a Discord server - #17 by spirobel

@spirobel 님, 이제 말씀해 주세요.

4개의 좋아요

그걸 놓쳤네요. 그의 플러그인은 400달러에 맞춤 제작된 플러그인입니다.

1개의 좋아요

그 사람이 진짜로 그걸 400달러에 파는 거야? 미쳤어.

1개의 좋아요