2012-05-18 2 views
0

저는 IRC 봇을 사용 했었는데, 나는 "shakybot"이라고 애정을 가졌습니다. 처음에는 매우 불안정했기 때문입니다.파이썬 : IRC 봇이 작동을 멈췄습니다.

지금, 나는 그것을 기록하고있다. 그러나 언제든지 실행할 때마다 문제가 발생합니다. 이것은 IRC 채널에서 감지 된 출력입니다 :

NOTICE AUTH :*** Please wait while we scan your connection for open proxies... 
:Tigh.GeekShed.net NOTICE AUTH :*** Looking up your hostname... 
:Tigh.GeekShed.net NOTICE AUTH :*** Found your hostname (cached) 
:Tigh.GeekShed.net NOTICE AUTH :*** Checking ident... 

그리고 나서 그것은 단지 주 루프로 들어갑니다. 연결되지 않거나 아무 것도 없기 때문에 그냥 인쇄합니다. 이전 버전과 동일한 코드를 사용하고 있습니다.

irc=socket.socket(socket.AF_INET,socket.SOCK_STREAM) 
irc.connect((network, port)) 
a=irc.recv (4096) #Setting up the Buffer 
print a 
irc.send('NICK ' + nick + '\r\n') 
irc.send('USER shakybot shakybot bla :shakybot\r\n') 
irc.send('JOIN :' + chan + '\r\n') 
irc.send('PRIVMSG ' + chan + ' :Hello.\r\n') 

어떻게 연결할 수 있습니까?

편집는 : Mibbit와 함께이 프로그램에 IRC에 연결하는 디버깅 메시지를 비교 한 후, 나는 점점되어야합니다 :

Tigh.GeekShed.net *** Looking up your hostname... 
Tigh.GeekShed.net *** Checking ident... 
Tigh.GeekShed.net *** Found your hostname 
Tigh.GeekShed.net *** Received identd response 
+1

적어도 꼬인 또는 비동기를 사용해야합니다. – jordanm

+1

왜 뭔가 더 복잡하게 만들어야합니까? 소켓으로 만 할 수 있다면 Twisted를 사용해야하는 이유는 무엇입니까? – beary605

+0

당신은 당신이 재발견 할 필요가없는 바퀴를 광장으로 재발 명하게 될 것입니다. – jordanm

답변

1

무엇을 Greg라고합니다. 이 코드 (http://code.activestate.com/recipes/299411-connect-to-an-irc-server-and-store-messages-into-a/)를 친절하게 살펴보고 RFC1459에 따르면 PING을 확인해야합니다.

일부 파이썬 IRC 라이브러리를 살펴볼 수도 있습니다.
http://pypi.python.org/pypi/lalita/0.1.1
http://pypi.python.org/pypi/irc/1.1

이 pypi에서 검색하는 것을 잊지 마세요 나는 IRC를 서버에 연결하기위한 솔루션으로 다음 (http://pypi.python.org/pypi?%3Aaction=search&term=irc&submit=search)

+0

PING/PONG이 아니라면 IRC 서버가 내 별명과 사용자 정보를받지 못할 것입니다. – beary605

+0

IRC 서버가 준비되지 않은 경우 어떻게받을 수 있습니까? – Kracekumar

+0

나는 time.sleep (3), 3.5, 4, 2, 2.5, 많은 arbritrary 값을 기다렸다가 시도했지만 여전히 작동하지 않습니다. – beary605

2

irc.recv(4096) 반환, 당신은 적어도 하나의 바이트를받은 의미 원격 서버에서. 원격 서버가 아직 NICK 명령을 보낼 준비가되지 않았을 수 있습니다. 서버에서 로그인 정보를받을 준비가되었음을 알리는 적절한 메시지가 나타날 때까지 기다려야합니다 (죄송합니다. 지금은 그 메시지가 무엇인지 기억하지 못합니다).

0

을 발견했다.

irc.send('NICK %s\r\n' % nick) 
    irc.send('USER %i 8 * :%s\r\n' % (ident, nick)) 
    irc.send('JOIN %s\r\n' % channel) 
관련 문제