c.pmh.codes
the chatsolution.shutupandtakemy.codes
client
이게 뭐죠?
c.pmh.codes
는 F12에서 채팅을 할 수 있는 플러그인 기반의 스크립트 모음입니다.
어떻게 쓰나요?
아무 사이트나 상관 없습니다. F12 콘솔을 키고 다음을 입력하세요:
import('//c.pmh.codes')
수 초 이내에 채팅창에 연결되며 메시지를 보내거나 받을 수 있습니다!
자동으로 로딩된 core.js
와 basic.js
플러그인 덕분에 다음 함수로 쉽게 채팅을 보낼 수 있습니다:
chat`보내고 싶은 메시지`
플러그인?
c.pmh.codes
의 채팅 서버는 단 14줄로 메시지를 전송하는 매우 간단한 기능만 존재합니다.
그럼에도 플러그인 기능을 통해 서버를 짧게 유지하면서도 이미지 보내기, 암호화된 채팅 보내기, 메시지 알림 받기 등 많은 것을 할 수 있습니다.
플러그인 리스트를 보려면 loader.js
플러그인이 작동하고 있을때 (맨 처음 import
문을 작동시키면 자동으로 불러와집니다!) 다음과 같이 입력해보세요:
plist``
플러그인을 GUI로 관리할 수 있는 pgui
플러그인을 불러와보세요 (pgui
는 Kanghyun Kim
의 dialogutils
플러그인을 통해 Taehyun Lim
이 제작하였습니다!):
pload`pgui`
다음 함수를 통해 GUI를 실행시킬 수 있습니다:
pgui``
모든 플러그인을 불러오려면 다음과 같이 입력하세요:
pload`*`
나도 플러그인 만들래요
플러그인을 만드는 법에는 규칙이 없습니다! 이미 만들어져있는 플러그인들을 보고 아무렇게나 만든 후 다음과 같이 불러와보세요:
import('//정적.호스팅한.도메인/플러그인명.js')
plist
, pload
에 등록하고 싶다면 여기를 수정하고 Pull request를 보내주세요!
원리를 자세히 알려주세요
c.pmh.codes
는 다음과 같이 동작합니다.
import('//c.pmh.codes')
를 실행하면loader.js
가 실행됩니다.loader.js
는 플러그인 목록을 관리하고,core.js
와basic.js
를 실행합니다.core.js
는wss://chatsolution.shutupandtakemy.codes
에 웹 소켓 연결을 진행합니다. 또한 통신을 수신 받는 함수와 송신하는 함수를window.__core
객체를 통해 다른 플러그인에게 공개합니다.basic.js
는core.js
에서 받은window.__core
객체를 받아chat`내용`
함수와author`닉네임`
등 기본적인 함수를 사용자에게 제공하고 들어온 메시지를 출력합니다.- 여러분이
alias
플러그인을 사용하기 위해pload`alias`
를 실행했다고 가정합시다. loader.js
는 사용자의 플러그인 사용 명령을 받으면plugins.json
을 보고alias.js
가 필요로 하는 다른 플러그인이 무엇인지 알아본 후alias.js
를 실행시킵니다.alias.js
는basic.js
가 가지고 있는 함수chat
,author
등을c
,a
등으로 재할당합니다.- 플러그인 중
*utils
로 끝나는 플러그인은 다른 플러그인에서 자주 쓰이는 함수를 모아둔 것입니다. (예를 들어dialogutils
는 F12 콘솔이 아닌 HTML에 메시지를 띄울때 자주 사용되는 함수 모음입니다.)
이 프로젝트의 목표 1순위는 확장성입니다. 서버를 최대한 건들지 않은 상태로 플러그인들이 잘 결합할 수 있도록 하고자 합니다.
자주 물어보는 질문
-
Q. 왜 만들었어요?
A. 갑자기 아이디어가 번뜩여서?
-
Q.
함수``
문법은 뭐에요?? 이게 언어??A.
Tagged templates
라는 문법을 활용했어요. 안되는 언어가 있어요?? -
Q. 헉 아무곳에서나 된다면서요.. 어떤 사이트는 안되는데요?
A. 스크립트 삽입을 막는
Content Security Policy
헤더가 걸린 사이트인 경우가 많아요. 해결법을 연구중에 있어요. -
Q. 이거 웰케 불편해요?
A. 개발자 감성 내려고 만든거라 쪼끔 불편할 수 있어요.
alias
플러그인이나dialog
플러그인을 활용해보세요.아니면 디스코드 쓰ㅅ... -
Q.
import
문법은 뭐에요?A. 차세대 JavaScript 모듈 시스템인 ESM의
Dynamic import
문법이에요
마지막으로...
이 프로젝트는 Minhyeok Park
이 시작했으며 지금까지 3명의 기여자가 있습니다.
그냥 사용하는것 보다 플러그인을 만들며 기여하는 것이 더 재미있을껍니다. 기여의 힘을 보여주세요.