2012-10-25 2 views
0

나는 (abarnert 덕분에) 작동하는 봇을 가졌으며 버그가 하나 있습니다. 채널에 가입하지 않습니다. 그는 일을 할 수는 있지만 그렇게 할 수는 없습니다. 이것이 내 문제가 될 수도 있다는 것을 알고 있지만, X-Chat에 잘 연결되어 있습니다.IRC 채널 조인 기능이 작동하지 않는 것으로 보입니다.

host = "irc.kbfail.net" 
port = 6667 
nick = "Alice" 
ident = "Alice" 
realname = "Alice" 
channel = "#nb" 
readbuffer = "" 

irc = socket.socket (socket.AF_INET, socket.SOCK_STREAM) 
irc.connect ((host, port)) 
print irc.recv (4096) 
irc.send ("NICK %s\r\n" % nick) 
irc.send ("USER %s %s bla :%s\r\n" % (ident, host, realname)) 
irc.send ("JOIN %s\r\n" % channel) 

이것은 모두 JOIN 명령에 달려 있습니다. 내 봇이 서버에 연결되어 ": Alice MODE Alice : + x"에서 바로 멈 춥니 다.

답변

2

설명했듯이 your other question에서 설명했듯이 실제로 어떤 일이 일어나고 있는지 보려면 로그인과 로그를 기록해야합니다. 그것이 여러분이나 다른 어느 누구도 이것을 디버깅 할 수있는 유일한 방법입니다.

다시 말하지만 이렇게하려면 여러 가지 방법이 있습니다. 봇 소스를 해킹하여 소켓에서 보내고받는 모든 것을 인쇄하고, netcat으로 가짜 서버를 실행하고, netcat을 프록시로 설정하고, 로컬 IRC 서버를 실행합니다. 모든 것을 기록하도록 설정하고 Wireshark를 사용하여 전선에서 메시지를 캡처합니다 ... 어떤 메시지를 선택하든 상관 없지만이 중 하나를 수행해야합니다.

:asgard.kbfail.net 451 JOIN :You have not registered 

한편, 이유 당신의 봇 :

내 자신의 로컬 복사본에이 일에서, 나는 당신이 너무 일찍 가입 보내는, 당신은 서버에서 다시 오류를 얻고있는 것을 볼 수있다 모드 라인에서 바로 멈추는 것은 아무도 그 후에 아무 것도 보내지 않는다는 것입니다. 클라이언트를 가동시키고 /MSG Alice foo 그리고 당신은 여전히 ​​훌륭한 메시지를 받는다.

그래서 언제 JOIN을 보낼 수있는시기가 언제입니까? 내 추측으로는/MOTD가 끝날 때까지 또는 자동 모드 명령이 끝날 때까지 또는 NICK 명령을 승인 한 직후까지 기다려야한다는 것입니다. 하지만 정말로, 당신은 여기서 추측해서는 안됩니다. The IRC protocol is very well documented, 그렇게 복잡하지는 않습니다.

또한 소켓 기반 클라이언트 응용 프로그램을 작성하는 방법을 배우는 연습을하지 않는 한 많은 시간을 낭비하고 있습니다. 수십개의 오픈 소스 Python IRC 봇과 IRC 봇 작성에 도움이되는 모듈이 있으므로 빠른 검색을 통해이 저급 항목을 직접 처리 할 필요가 없습니다.

+1

당신이 NICK와 USER를 성공적으로 보낸 후에 IRC RFC를 읽어야한다면, PONG 에 답장하는 PING 을 받아야합니다. 그러면 환영 메시지가 나옵니다. MOTD – Gunner

+0

Gunner에게 +1 - RFC를 찾는 방법을 모른다면 위의 답에있는 링크를 참조하십시오. 한편, 배우고 자한다면 통신을보고 오류 메시지를 찾아 네트워크 프로토콜을 디버깅하는 법을 배우는 것이 가장 중요한 교훈 중 하나입니다. – abarnert

+0

나는 이것을 배우기 위해 사용하고있다. 나는 내가 기초를 충분히 배웠다고 생각한다. 나는 그 봇 중 하나를 얻고 더 많은 것을 배울 것이다. 도와 줘서 고마워! –

관련 문제