2014-09-17 8 views
3

저는 현재 POE::Component::IRC으로 로봇을 개발 중입니다. 그 중에서도 특히 일주일 동안 스케줄에 따라 채널 목록에 알림을 게시하는 것이 좋습니다.POE :: Component :: IRC를 가져 와서 자신의 PRIVMSG에 대한 이벤트를받을 수 있습니까?

메시지가 채널로 성공적으로 전송되었는지 확인하는 방법을 찾지 못하는 것 같습니다. 예전의 Net::IRC 패키지는 채널로 보낸 모든 메시지 (자신이 보낸 메시지 포함)에 대해 메시지 수신 이벤트를 발생시킵니다. POE는이 작업을 수행하지 않는 것으로 보입니다. 적어도 irc_public 이벤트는 봇의 메시지가 채널에 게시 될 때 발생하지 않습니다.

이벤트 처리기에 전달할 수있는 플래그가 있습니다. "모든 메시지를 받겠습니다. 내 메시지도 보내주십시오." 아니면 일종의 RAW 이벤트 처리기로이를 수행하는 방법이 있습니까?

답변

1

IRC 프로토콜은 이 아니며은 PRIVMSGs를 다시 표시하므로 서버가 메시지를 수신하고이를 처리해야한다는 것을 믿어야합니다.

보내는 메시지에 대한 POE 이벤트를 받고 싶다면 POE::Component::IRC::Plugin::BotTraffic의 플러그인이 있습니다. 실제로 메시지가 서버에 도달했는지 확인하기 위해 실제로 아무 것도하지 않습니다.

다행히도 IRC는 TCP 상단에서 실행되므로 보장 된 순서대로 배달됩니다. 따라서 연결이 끊어 지거나 무기한 멈추지 않으면 명령 이 서버에 도달한다고 가정 할 수 있습니다.

확실하게 알고 싶으면 서버가 응답 할 것임을 알리는 TIME 또는 PING과 같은 명령을 사용하여 PRIVMSG를 따라갈 수 있습니다. 만약 그렇다면, 당신도 PRIVMSG를 받았다는 것을 알게 될 것입니다. 물론, 심지어 서버가 의도 된 수신자에게 실제로 메시지를 전달했다는 보장은 없습니다. netsplits와 같은 것들은 수시로 발생하며 메시지가 삭제 될 수 있습니다.

+0

흥미 롭다 - 나는 어느 시점에서 실제로 IRC RFC를 읽어야한다고 생각한다 - 나는 이미 그것을 깨달았 음에 틀림 없다. Net :: IRC가 동료로부터 상속받은 일부 코드에서이 작업을 수행했다는 가정을 근거로 삼았고 그의 펄은 그가받은 메시지가 자신이 보낸 메시지인지 확인했습니다. 호머. 당신이 말하고 TCP를 신뢰해야 할 것 같네요. – GodEater

+0

RFC는 실제로 이것을 분명하게 설명하지 않습니다. 사실, 서버는 PRIVMSG를 되풀이하는 것을 금지하지 않습니다. 어느 쪽이든 그것을 요구하지 않는다. 내가 찾을 수있는 가장 가까운 것은 [RFC 2810, 섹션 5.2.1]의 예제 4 (http://tools.ietf.org/html/rfc2810#section-5.2.1)로, 다른 사용자는 "서버로 이동 한 다음 다른 곳으로 가십시오." 그러나 당신이 할 수있는 일은 실제 IRC 서버에 telnet/netcat 명령을 보내고 IRC 명령을 입력하고 어떤 일이 일어나는지 확인하는 것입니다. (실제로, 코너 케이스로서, 당신이 직접 자신의 별명을 PRIVMSG한다면, 당신은 에코를 얻는 것처럼 보입니다.) –