-
Notifications
You must be signed in to change notification settings - Fork 1
Receiver
봇 계정으로 오는 메세지를 받기위해서는 마이피플 봇 관리 페이지에서 콜백서버를 등록해야합니다. 이 모듈로 아래와 같은 방법으로 띄울 수 있습니다.
var Receiver = require('mypeople').Receiver;
var receiver = new Receiver('KEY');
receiver.addListener('message', function(m) {
console.log(m);
});
receiver.start();
FAQ로 문서를 정리합니다.
NodeJS에서는 EventEmitter라는 특별한 기능을 제공합니다. 이를 이용해서 event를 emit하고 addListener를 통해 특정 이벤트만을 수신할 수 있는 구조를 가집니다.
위에서 언급했듯이 그룹내에서 발생한 메세지 또는 봇과 개인간에서 발생한 메세지는 모든 message 라는 이벤트를 통해서 받을 수 있습니다.
var Receiver = require('mypeople').Receiver;
var receiver = new Receiver('KEY');
receiver.addListener('message', function(m) {
console.log("메세지가 도착했습니다.");
console.log(m);
});
receiver.start();
addListener에서 첫 번째 인자인 message는 node-mypeople에서 관리하는 이벤트명 중 하나입니다. message는 메세지가 도착했음을 의미하는 이벤트입니다. 그룹 내에서 개인간에 발생한 혹은 1:1 대화에서 발생한 메세지를 수신했을 때 발생하는 event 입니다.
음. 그건 개인적인 취향으로 인해 발생한 문제입니다. 전 그 액션명이 싫어요. (퍽퍽) 죄송합니다. 여러분의 취향을 존중하겠습니다. (이미 늦었..)
알겠습니다. 대응하도록 하겠습니다. 다음 방법으로 만족해주시죠? (뭐? 덜 맞았... 퍽퍽) 0.3.0 부터 됩니다.
var Receiver = require('mypeople').Receiver;
var receiver = new Receiver('KEY');
receiver.addListener('sendFromMessage', function(m) {
console.log("1:1 대화 메세지가 도착했습니다.");
console.log(m);
});
receiver.addListener('sendFromGroup', function(m) {
console.log("대화그룹에서 발생한 메세지가 도착했습니다.");
console.log(m);
});
receiver.addListener('addBuddy', function(m) {
console.log("누군가 친구를 추가했습니다.");
console.log(m);
});
receiver.addListener('[email protected]', function(m) { // @whdvl 님이 컨트리뷰션한 버전 입니다.
console.log("누군가 친구를 추가했습니다.");
console.log(m);
});
receiver.start();
메세지 형태는 다음에서 보낸 알림콜백 형태를 그대로 유지했습니다.
제가 클라이언트 만드는데 이유가 있어야 하나요? (퍽퍽.) 일단 내가 만들고 싶은데로 만들겠다는데.. (퍽퍽.) 헛소리 고만하고 이유를 들면,
- message (sendFromMessage, sendFromGroup), new invite (createGroup, inviteToGroup), need help (helpFromMessage, helpFromGroup) 처럼 비슷한 용도의 액션이 두개씩 나뉠 필요가 없다고 생각
- 다음 마이피플의 알림콜백의 형태는 제가 원하는 구조가 아닙니다.
- isBot 값이 Y|N 처럼 보내거나
- createGroup/inviteToGroup 중 content 값이 string 이어서 (array값이 json형태로 또 담았다거나.)
- 제가 좋아하는 네이밍이 아니라서
이벤트의 종류는 크게 6가지 입니다. 대응하는 액션명은 우측에 기록합니다.
- message : sendFromMessage / sendFromGroup
- new invite : createGroup / inviteToGroup
- left user : exitFromGroup
- need help : helpFromMessage / helpFromGroup
- kick : exitGroup
- new friend : addBuddy
기본적인 event에 담아서 보내는 값은 다음 형태를 가집니다. 아래 표현식은 대충 감이 오실꺼예요.
object {
object {
string id;
} user; // 0.3.1 부터 friend 에서 user로 바뀝니다. 물론 0.3.x 버전에서는 호환성을 위해 friend 값도 같이 채워서 보냅니다.
object {
string id;
} group;
}
설명하면, 형태는 object 형태이고 nested objects 가 두개 있는데 각각 id 값을 가지는 user와 group 이 있다는 의미입니다. 이제부터 이 표기법으로 설명합니다. JSON형태로 표기하면 위 표현식을 아래 형태를 띕니다.
{
"user": {
"id": "BU_"
},
"group": {
"id": "XX"
}
}
object {
object {
string id; // BU_xxxx
} user; // 0.3.1 부터 friend 에서 user로 바뀝니다. 물론 0.3.x 버전에서는 호환성을 위해 friend 값도 같이 채워서 보냅니다.
object {
string id?;
} group?;
string message;
}
물음표(?)는 optional 의미를 담습니다. message event가 왔을 때 위의 값을 emit 합니다. group이 있다면 그룹대화를 의미합니다.
새롭게 초대되었을 때 받는 알림콜백입니다.
object {
object {
string id;
} user; // 0.3.1 부터 friend 에서 user로 바뀝니다. 물론 0.3.x 버전에서는 호환성을 위해 friend 값도 같이 채워서 보냅니다.
object {
string id?;
array {
object {
string id;
string name;
string photoId;
boolean isBot;
}
} members?;
} group;
}
array라는 표기법이 추가되었지만 이해하기 어렵지 않을 듯 합니다. 일단 초대시에는 group 값 안에 members가 추가됩니다. 그룹대화 참여자 정보입니다. 각 사용자별로 id, name, photoId, isBot 값을 가집니다.
도움말 요청할 때 받는 이벤트입니다.
object {
object {
string id;
} user; // 0.3.1 부터 friend 에서 user로 바뀝니다. 물론 0.3.x 버전에서는 호환성을 위해 friend 값도 같이 채워서 보냅니다.
object {
string id?;
} group?;
그룹대화 중 사용자가 나갔을 경우 발생하는 이벤트입니다.
object {
object {
string id;
} user; // 0.3.1 부터 friend 에서 user로 바뀝니다. 물론 0.3.x 버전에서는 호환성을 위해 friend 값도 같이 채워서 보냅니다.
object {
string id;
} group;
}
별반 다르지 않습니다.
본인 봇 계정이 그룹대화에서 쫒겨났을 때 받는 이벤트입니다.
object {
object {
string id; // 누가 했을까?
} user; // 0.3.1 부터 friend 에서 user로 바뀝니다. 물론 0.3.x 버전에서는 호환성을 위해 friend 값도 같이 채워서 보냅니다.
object {
string id; // 어디서 그런거니?
} group;
}
별반 다르지 않습니다.
누군가 친구를 추가했을 때 발생하는 이벤트입니다.
object {
object {
string id;
string name;
string photoId;
boolean isBot;
} user; // 0.3.1 부터 friend 에서 user로 바뀝니다. 물론 0.3.x 버전에서는 호환성을 위해 friend 값도 같이 채워서 보냅니다.
}
누가 추가했는지 내용을 채워서 줍니다.
Receiver 내부에도 client가 존재합니다. 그래서 굳이 이중으로 선언해서 사용할 필요 없이 이용할 수 있도록 하는 기능입니다. 예제 코드는 아래와 같습니다. 추가로 Receiver에는 sendMessage와 sendGroupMessage 함수가 존재합니다. 기존에는 이 두 함수 말고는 호출할 수 없는 구조였는데 이 기능을 추가했기때문에 이 버전부터는 사용이 가능합니다.
receiver.addListener('message', function(m) {
receiver.execute(function(client) {
client.sendMessage(m.user.id, "Echo: " + m.message);
// 그 외에 client 함수들 호출 가능
});
});