디스커스 포럼에서 사용자가 특정 링크를 방문할 때 자동으로 배지를 부여하는 방법은 무엇인가요?
topic_link_clicks 테이블을 사용하는 건 어떨까요?
이걸 활용하면 도움이 될 수 있는 수동 배지가 하나 있을 것 같습니다.
한 번 생각해 볼게요.
특정 게시물에서 공유된 특정 링크라면, 이 쿼리가 작동할 것 같습니다:
SELECT DISTINCT tlc.user_id, MIN(tlc.created_at) granted_at
FROM badge_posts p
LEFT JOIN topic_links tl ON tl.post_id = p.id
LEFT JOIN topic_link_clicks tlc ON tlc.topic_link_id = tl.id
WHERE tl.post_id = 1246
AND tl.url = 'https://meta.discourse.org/'
AND tlc.user_id IS NOT NULL
GROUP BY tlc.user_id
해당 게시물의 post_id를 게시물의 json에서 가져와야 합니다(또는 데이터 탐색기를 통해 조회할 수 있습니다)
이 방식이 작동할 것 같습니다.
저는 이 배지를 저희 코스 회원들에게만 부여하고 싶습니다.
일반 대중에게는 특정 주제를 숨기고, 링크를 통해 클릭한 사람들만 볼 수 있게 하는 방법이 있을까요?
두 번째로, Dfata 탐색기 플러그인을 사용하여 이 작업을 수행하는 방법은 무엇인가요?
사용하고 계신 방법을 100% 정확히 이해하고 있는지 확실하지 않습니다. 설정을 너무 복잡하게 만들고 있지는 않은지 확인해 보시는 것이 좋을 수 있습니다.
JSON을 확인하는 것이 취향이 아니라면, post_id 조회 쿼리는 다음과 같은 형태가 될 것입니다:
-- [params]
-- topic_id :topic_id
-- int :post_number
SELECT id
FROM posts
WHERE topic_id = :topic_id
AND post_number = :post_number
그런 다음 게시물의 URL을 사용하여 주제 ID와 게시물 번호를 추출하여 매개변수 상자에 입력하면 됩니다. 예: https://meta.discourse.org/t/grant-badge-when-user-visits-link/276700/4 (주제 링크에 포함되지 않더라도 OP는 항상 post_number 1인 점에 유의하세요)
사실, 데이터 탐색기를 사용하여 post_id를 조회하는 것을 더 쉽게 만들어 줄 마법 같은 매개변수가 있습니다…
-- [params]
-- post_id :url
SELECT id
FROM posts
WHERE id = :url
해당 게시물의 URL을 매개변수 상자에 붙여넣으면, et voila - post_id가 나타납니다 ![]()
빨간 배경을 보면 전체 게시물 URL이 아닌 것 같습니다. 토픽 URL이라면 끝에 /1을 추가해야 합니다:
https://meta.discourse.org/t/grant-badge-when-user-visits-link/276700/1
성공적이었습니다!
여기에 '/1’이 포함된 게시물 URL로 교체해야 하는 것 같습니다.
해당 부분은 게시물 내에서 클릭하는 링크로 대체해야 합니다.
그리고 post_id는 링크가 붙여넣기되거나 공유된 게시물의 ID입니다.
아, 그러니까 게시물 링크를 방문하는 것만으로 배지를 부여하는 방법은 없군요?
있어야 한다고 생각하지만, 그렇다면 다른 쿼리가 될 것입니다.
이 쿼리는 특정 포럼 게시물의 특정 링크를 클릭한 사용자에게 배지를 부여합니다.
특정 주제를 방문한 사용자에게 배지를 부여하려면 다음과 같이 하면 될 것 같습니다:
SELECT DISTINCT tv.user_id, MIN(tv.viewed_at) granted_at
FROM topic_views tv
WHERE tv.topic_id = 728
GROUP BY tv.user_id
('728’을 관련 topic_id로 교체)
Update Daily 트리거가 필요하므로, 일일 배지 부여 작업이 다음에 실행될 때 부여됩니다. 확인을 위해 속도를 높이고 싶다면 /sidekiq/scheduler 페이지에서 Jobs::BadgeGrant를 수동으로 트리거할 수 있습니다.
즉시 업데이트되게 하는 방법은 무엇인가요?
사용 가능한 트리거는 다음과 같습니다:
- 매일 업데이트
- 사용자가 게시물을 편집하거나 생성할 때
- 사용자가 편집되거나 생성될 때
- 사용자가 게시물에 대한 작업을 수행할 때
- 사용자가 편집되거나 생성될 때
- 사용자가 신뢰 수준을 변경할 때
보다 즉각적으로 배지를 부여하려면 해당 작업 범위 내에서 작업을 수행해야 합니다. 자세한 내용은 이 주제에서 확인하실 수 있습니다 - Creating triggered custom badge queries
이렇게 해 봤는데도 아직 배지가 부여되지 않았습니다.
네, 활성화되어 있습니다. 다른 프로필에서 시도해 보겠습니다. 제가 관리자이기 때문일 수도 있겠네요.
두 번째로, 단순히 토픽 링크를 브라우저에 붙여넣고 계신 건가요?
관리자 권한은 이 경우 차이를 만들지 않습니다.
이 배지가 기반을 두고 있는 topic_views 테이블에 기록되려면 해당 주제를 직접 방문해야 합니다.





