| 요약 | JTech Forums의 모든 기능은 단일 플러그인인 Discourse 위에서 구동됩니다: moderator 도구, 지정된 사용자에게 보내는 속삭임(whisper), REQ-PM, Dumbcourse, Telegram 브리지, 판매 스레드 목록, 스마트 검색, 팝업, 그리고 전체 테마. 각 기능은 자체적인 토글 스위치를 가지고 있습니다. | |
| 저장소 | GitHub - TripleU613/JtechTools: The plugin behind JTech Forums: moderator tools and whispers, REQ-PM, Dumbcourse for flip phones, a Telegram bridge, sale-thread listings, smart search, pop-ups and the JTech theme. Every module has its own switch. · GitHub | |
| 설치 가이드 | Discourse에 플러그인 설치 방법 |
여러분 안녕하세요,
이 중 일부는 이미 Meta에서 조각 단위로 공유된 바 있습니다. Dumbcourse는 2월에 자체 주제를 얻었고, @ars18은 4월에 Mini-mod를 게시했으며, 8월에는 Dumbcourse 스레드에서 우리가 하나의 플러그인에 집어넣은 나머지 모든 것을 나열하는 긴 답변을 남겼습니다. 그것은 38번째 게시물에 묻혀 있는 것보다 더 나은 대우를 받아야 했기에, 여기 적절히 정리된 버전을 올립니다. 이번에는 사진이 많이 첨부되어 있습니다.
JTech는 기술 포럼으로, 주로 휴대폰, 폴더형 폰, 필터 및 ROM에 관한 내용이며, 회원 중 상당수가 의도적으로 키패드 휴대폰을 사용합니다. 여기서의 모든 도구는 우리 포럼이 실제로 필요해서 존재합니다.
“왜 하나의 플러그인인가요?”
merefield가 Dumbcourse 스레드에서 이 질문을 했고, 정당한 질문이므로 먼저 답변을 드리겠습니다.
- 모든 모듈은 자체적인 켜기/끄기 스위치를 가집니다. 일부는 기본으로 켜져 있습니다(Dumbcourse, REQ-PM, moderator 도구)가, 다른 일부는 사용자가 활성화할 때까지 대기합니다(Mini-mod, 스마트 검색, Disteleplus, Another SMTP). 그리고 “켜짐” 상태인 것 중 일부는 카테고리나 주제를 지정하기 전까지는 아무것도 하지 않습니다. 설치 후 탭을 확인하여 원하지 않는 기능을 끄세요.
jtech_enabled는 모든 것을 한 번에 중지합니다. 권한 변경 및 백그라운드 작업도 포함됩니다. @satonotdead, 당신은 Mini-mod 주제에서 번들 스위치를 껐는데도 Mini-mod가 계속 실행된 이유를 질문하셨습니다. 맞습니다, 실제로 그랬습니다: 코어에 패치된 코드와 예약 작업은 자체 스위치만 확인했기 때문입니다. 9월 24일부터 이 문제가 수정되었습니다. 이제 모든 모듈이 마스터 스위치도 확인합니다.- 기능을 끄는 것은 아무것도 누출시키지 않습니다. 예를 들어, 속삭임을 끄는 것은 기존 속삭임을 공개하지 않습니다.
- 각 모듈은 내부적으로 분리되어 유지됩니다:
sub_plugins/의 자체 파일, 자체 설정 탭, 자체 문서 페이지. 만약 한 가지 기능만 원한다면, 포크를 만들어 분리해 내는 것도 좋습니다. 기존 독립형 Mini-mod 저장소는 아카이브 처리되었으며, 이제 여기서 유지 관리됩니다.
내부 구성 요소
각 항목은 접혀 있으므로, 관심 있는 것을 펼쳐 보세요. 모든 사진은 명시된 경우를 제외하고 우리 포럼의 실제 화면입니다. 개인 정보(스태프 채팅, 연락처 정보, moderator 노트)는 흐리게 처리되어 있습니다.
Dumbcourse: 폴더형 폰의 전체 포럼
/dumb 경로에서 제공되며, 폴더형 폰, KaiOS, 그리고 일반 사이트를 실행할 수 없는 구형 Android 브라우저를 위해 설계되었습니다. 휴대폰 자체의 앱처럼 D-pad와 키패드로 제어되며, 터치와 마우스로도 작동합니다.
- 읽기: 최신, 새 글, 읽지 않음, 인기, 핫, 카테고리 및 태그. ↑↓로 읽기(긴 게시물은 포커스가 이동하기 전에 스크롤됨), ←→로 탭 전환, 읽지 않은 주제는 첫 번째 읽지 않은 게시물에서 열리며, Back은 정확히 있던 위치로 돌아갑니다.
- 작업: 게시물에서 OK를 누르면 좋아요, 반응, 답변, 인용, 북마크, 편집, 신고, 링크 복사, 게시물 내 모든 링크, 스포일러 및 이미지를 열 수 있습니다. 멘션, 이모지, 업로드, 미리보기 및 선택적 맞춤법 검사(LanguageTool)가 있는 전체 화면 작성기가 있습니다.
- 키:
*메뉴,#검색,0도움말,3답변,5좋아요,2/8페이지 위/아래로 이동. 소프트 키 이름을 이상하게 지정하는 휴대폰은 설정에서 배울 수 있습니다. - 키패드에서 비밀번호를 입력하지 않고 로그인: 이미 로그인된 기기에서 해당 휴대폰을 승인하거나, 이메일로 받은 링크 또는 코드를 사용하세요. 소셜 로그인과 2FA도 작동합니다.
- 구형 브라우저는 자동으로 찾습니다. 전체 포럼을 실행할 수 없는 브라우저는 이메일 링크를 포함하여 해당 Dumbcourse 페이지로 리다이렉트됩니다. 검색 엔진은 리다이렉트되지 않습니다.
- 순수 ES5이며, CI가 Chrome 30, Firefox 30 및 Android 4.4에서 계속 작동하는지 확인합니다.
지난번에 이름이 언급되었으므로: 경로는 설정(dumbcourse_base_path)이므로 /simple 또는 /lite로 변경하는 것은 한 번의 수정으로 가능합니다.
키패드 휴대폰용 Dumbcourse를 래핑하고 푸시 알림을 제공하는 Android 앱도 있습니다. 우리 포럼용으로 설정되어 있지만, 원하시면 자신의 포럼용으로 빌드할 수 있는 코드가 있습니다. 회원들은 앱 스레드(450개 이상의 답변)와 마지막 대규모 업데이트에서 이를 열심히 사용해 왔습니다.
Moderator 도구: 지정된 사용자에게 속삭임, 개인 노트, 스태프 알림
중간 행의 속삭임과 노트는 문서에서 가져온 것으로, 가상의 사용자를 사용합니다. 나머지는 실제 UI입니다.
특정 사람에게 속삭임. 사람들은 Meta에서 수년 동안 이 기능을 요청해 왔습니다(게시물 작성자가 속삭임을 볼 수 있도록 하기, 스태프 외 그룹에 대한 속삭임). 주제 내에서 몇몇 사용자, 그룹, 또는 특정 배지를 가진 모든 사람에게만 답변할 수 있습니다. 스태프, 작성자 및 해당 사람만 볼 수 있습니다. 다른 어디에도 표시되지 않습니다: 검색, 활동, 이메일, 알림, 링크 미리보기, RSS, Dumbcourse 또는 Telegram 브리지에도. 속삭임에 대한 답변은 자동으로 동일한 사람들만 볼 수 있으며, 속삭임은 다른 사람에게 주제를 올리지 않습니다. 스태프는 기존 게시물을 속삭임으로 전환하거나 되돌릴 수 있으며, 모든 변경 사항은 스태프 로그에 기록됩니다.
개인 노트. 주제에 대한 스태프 전용 노트로, 답변 스레드와 “확인한 사람” 행이 있습니다. 새 노트는 해당 주제를 실제로 볼 수 있는 스태프에게만 벨 아이콘과 사용자 메뉴의 방패 탭에 표시됩니다.
스태프 알림. 다른 스태프 멤버가 게시물을 삭제하거나, 대기 중인 게시물을 승인/거부하거나, 사용자 또는 신고에 노트를 추가할 때 알려줍니다. 각 유형은 자체 스위치를 가집니다.
체크리스트 및 주제 도구. 첫 게시물 전에 새 회원이 확인해야 하는 체크리스트(누가 어떤 버전을 승인했는지 로그 포함), 특정 사용자나 하나의 주제에 연결된 체크리스트, 주제 아래 푸터 메시지, 하단에 복사된 고정 게시물, 단일 주제에 대한 답변 승인, 카테고리별 “게시 전” 노트, 그리고 배지를 가진 모든 사람을 PM에 추가하기 위한 배지 선택기.
모든 것에 대한 규칙: moderator는 모든 것을 보지 않습니다. 도구는 코어가 표시하지 않는 PM이나 제한된 카테고리를 moderator에게 표시하지 않으며, 알림은 해당 대상에 접근할 수 있는 스태프에게만 전송됩니다.
REQ-PM: 개인 메시지 대신 연락처 정보
우리 포럼에는 의도적으로 개인 메시지가 없습니다. 그렇다면 두 회원은 어떻게 연락을 취할까요? 서로 연락처 정보를 요청합니다. (회원들의 반응을 보려면 출시 스레드를 참고하세요.)
- 누군가의 사용자 카드에서 REQ-PM을 누르고, 원하는 항목(전화, WhatsApp, 이메일, Telegram, Signal…)을 선택하여 전송합니다. 텍스트 상자가 없으므로 메시지의 뒷문으로 변질될 수 없습니다.
- 상대방은 정확히 어떤 정보를 받을지 선택합니다. 어느 쪽이든 언제든지 조용히 공유한 정보를 취소할 수 있습니다. 거절도 조용합니다: 요청한 사람은 "대기 중"과 "만료"만 볼 수 있습니다.
/reqpm에는 요청, 연락처(통화/문자/채팅 버튼 포함), 내 카드 및 공유한 대상이 있습니다.- 프라이버시: 값은 저장 시 암호화(AES-256-GCM)되며, 소유자와 소유자가 선택한 사람들에게만 반환됩니다. 관리 화면이 없으며, 엔드포인트는 API 키와 위장을 거부합니다.
목록 형식: 깔끔하게 유지되는 판매 스레드
우리 휴대폰 및 컴퓨터 판매 스레드의 실제 목록.
우리는 하나의 큰 “휴대폰 및 컴퓨터 판매” 스레드를 가지고 있으며, 예전에는 "여전히 판매 중?"과 "DM 주세요"로 혼란스러웠습니다. 이제, 선택한 주제에서 모든 게시물은 스레드 형식의 목록이어야 하며, 그렇지 않으면 저장 전에 (이유와 함께) 거부됩니다.
- 회원은 답변 대신 목록 생성 버튼을 받습니다. 각 섹션(상품, 수량, 상태, 사양, 픽업 또는 배송)을 위한 상자가 있는 폼이 열리며, 상태 선택 옵션과 사진 및 노트를 위한 일반 편집기가 있습니다.
- 목록은 위와 같은 카드로 표시됩니다. 판매자(또는 스태프)는 판매 완료로 표시할 수 있으며, 그러면 흐려지고 취소선이 그려집니다.
- 다른 사이트로의 링크는 허용되지 않습니다. 전화번호와 이메일은 괜찮으며, 구매자는 답변 대신 판매자의 REQ-PM 버튼을 사용합니다.
- 스태프는 예외이며, 기존 게시물은 그대로 두어집니다.
Disteleplus: 양방향으로 Telegram과 브리지된 스태프 채팅
이것은 꽤 큰 것으로 성장했습니다. 우리 스태프 중 일부는 (원하지 않았거나) WhatsApp이 없었고, Telegram이 있는 사람도 없었습니다. 그래서: Discourse 내부의 한 방 채팅이 Telegram 그룹과 양방향으로 미러링됩니다.
- Discourse 내: 답변, 편집, 반응, 음성 메모, 투표, 파일, 멘션, 검색, 링크 미리보기 및 입력 표시기가 있는 드로어 또는 전체 페이지. 메시지 텍스트는 데이터베이스에서 암호화됩니다. 공식 Chat 플러그인이 필요하지 않습니다.
- Telegram 내: 연결한 사람들은 포럼 계정으로 게시하고, 다른 사람들은 Telegram 이름으로 표시됩니다. 선택적으로 새 포럼 게시물을 그룹에 알리고, 검토 대기열을 Telegram에서 바로 스태프가 작동할 수 있는 승인/거부 버튼이 있는 Reports 주제로 미러링할 수 있습니다.
- 설정은 약 5분이 소요됩니다:
@BotFather로 봇을 만들고, 그룹에 관리자로 추가하고, 토큰을 붙여넣고, 웹훅 등록을 누르세요.
Discourse Chat 채널을 Telegram으로 브리지하기를 원한다면, Discourse-Telegram chat bridge 또는 Discourse Chat Bridge (Telegram)를 대신 확인하세요. 우리의 것은 Chat 없이 하나의 스태프 룸입니다.
JTech 테마 (플러그인과 함께 제공)
우리 포럼의 자체 테마가 이제 플러그인과 함께 제공됩니다. 재빌드 시 설치되고 최신 상태로 유지되지만, 기본값으로 설정되지 않습니다. 사용자 지정 → 테마에서 직접 활성화해야 합니다.
검정색과 흰색, 가느다란 테두리, 둥근 모서리 및 Geist 폰트를 사용합니다. 라이트와 다크는 정확한 반대이며, OLED의 검은색이 너무 강하다고 느끼는 사람들을 위한 더 부드러운 JTech Dim이 있습니다.
- 표 행 대신 주제 카드, 제목 옆에 첫 번째 사진과 목록에서 벗어나지 않고 주제를 읽을 수 있는 빠른 보기.
- 페이지, 카테고리, 주제 및 사람으로 이동하는 ⌘K / Ctrl+K 명령 메뉴, 각 명령 옆에 키보드 단축키가 나열됩니다.
- 점으로 이루어진 행성이 회전하고, 마우스를 따라다니며, 감소된 모션을 요청하는 사용자에게는 정지된 앞 페이지 배너. 또한 재설계된 헤더, 사이드바, 프로필, 사용자 카드, 로그인 페이지 및 정보 페이지.
- 우리가 사용하던 약 12개의 테마 컴포넌트를 대체합니다. 이제 각각 설정입니다: 리더 모드, 가이드를 위한 목차, 인쇄/PDF 버튼, 공유의 QR 코드, 작성기에서 음성 메시지, 게시물 배지, Markdown으로 복사 버튼, 답변 필터, 선택된 텍스트로 검색, 닫힌 주제 답변 경고 등. 우리 포럼은 이제 테마 컴포넌트 없이 구동됩니다.
- 접근성에 상당한 시간을 들였습니다: 세 가지 팔레트 모두에서 회색 텍스트의 WCAG AA 대비, 모든 컨트롤에서 실제로 볼 수 있는 포커스 링, 휴대폰의 더 큰 탭 타깃, Windows 고대비 모드, 오른쪽에서 왼쪽으로 읽는 언어, 그리고 320px 폭의 휴대폰 지원.
작은 것들: Mini-mod, Dislike, 스마트 검색, 팝업, Another SMTP, 번역기
데스크톱 팝업 (문서에서 가져온 것으로, 가상의 사용자).
- Mini-mod. 그룹을 통해 하나의 카테고리를 moderating하는 사람들을 위한 몇 가지 추가 권한: 카테고리 생성 및 편집, 주제 이동, 태그. 각 권한은 자체 스위치를 가지며, 어느 것도 해당 사용자가 이미 볼 수 있는 범위를 넘지 않습니다. 또한 권한을 제거할 수도 있습니다. 예를 들어, 닫힌 주제 다시 열기. @ars18의 원본 주제에는 더 많은 정보가 있으며, 이것이 답변하는 요청의 유형입니다.
- Dislike. 선택한 카테고리에서 좋아요가 카운트되지 않습니다: 알림 없음, “받은 좋아요” 이력 없음, 리더보드에 카운트되지 않음. 버튼을 완전히 숨기거나, 일부 그룹만 좋아요를 허용할 수도 있습니다.
- 스마트 검색. 검색 결과가 거의 없을 때, 동의어로 조용히 다시 시도하여 "k8s"가 "kubernetes"를, "js"가 "javascript"를 찾습니다. WordNet과 작은 기술 용어 목록을 사용하며, API 키 없이 프로세스 내에서 실행되고, 모든 필터와 권한을 유지하며, 문제가 발생하면 일반 검색으로 폴백합니다.
- 데스크톱 팝업. 알림이 올 때 구석에 작은 카드가 표시됩니다. 각 회원이 옵트인하며, 방해 금지 모드 동안은 조용하고, 키보드와 스크린 리더와 호환됩니다.
- Another SMTP.
app.yml의 메일 서버 대신 다른 메일 서버를 통해 포럼 이메일을 보내며, 관리자에서 설정합니다. - 번역기 조정. Google을 사용하는 구형 discourse-translator 플러그인을 사용하는 사이트를 위해, 요청을 자체 프록시로 지정합니다.
설치
hooks:
after_code:
- exec:
cd: $home/plugins
cmd:
- git clone https://github.com/TripleU613/JtechTools.git jtech-tools
폴더 이름 jtech-tools를 소문자로 유지하세요. Discourse는 여기서 스타일시트 URL을 생성합니다.
그런 다음 재빌드하고 관리자 → 플러그인 → Jtech Tools로 이동하세요. 모듈마다 하나의 탭이 있으며, 각 모듈의 문서 페이지에서 먼저 설정해야 할 내용이 설명되어 있습니다.
Discourse 2026.8 이상에서 main을 추적하고, .discourse-compatibility는 이전 버전을 고정합니다. CHANGELOG에는 변경 사항과 업데이트 후 확인해야 할 사항이 기록되어 있습니다.
솔직하게 말씀드리면
우리는 포럼의 관리자 팀이지, Discourse 상점이 아닙니다. 상당 부분이 AI의 도움으로 구축되었습니다. 이를 공유하는 데 문제없다고 느끼는 이유는 가드레일 때문입니다: 모든 변경 사항이 따라야 하는 저장소 규칙(권한 우선, 코어가 허용하는 범위를 넘지 않기, 코어가 이미 수행하는 것은 하지 않기), 모든 PR에서 실행되는 119개 스펙 파일에 걸친 약 1,700개의 테스트, 그리고 대부분이 매일 우리 포럼에서 실행된다는 점입니다. 여전히 버그와 특이한 엣지 케이스가 있을 것입니다. 발견하시면 알려주세요.
GitHub에서 이슈와 PR을 매우 환영합니다. 보안 문제는 SECURITY.md를 통해 비공개로 전달해 주세요.
저와 함께 이 프로젝트의 상당 부분을 구축한 @ars18과 Shalom Karr, 버그를 보고하고 완성되지 않은 것을 시도해 준 JTech의 모든 분, 그리고 질문을 통해 더 나은 결과로 이어지게 한 Dumbcourse와 Mini-mod 스레드의 사람들에게 감사드립니다.
즐기세요 ![]()









