로컬 서버에 IRC Bot을 구현하려고합니다. 내가 사용중인 봇은 Eric Florenzano's Blog에있는 봇과 동일합니다. 호스트 : 이것은 내가 그것을 도달하고 적절한 주소를 인쇄하는 클라이언트 공장에서 startedConnection 방법을 추가 (실행해야합니다) 단순화 된 코드Twisted IRC Bot 연결이 로컬 호스트에 반복적으로 손실되었습니다.
import sys
import re
from twisted.internet import reactor
from twisted.words.protocols import irc
from twisted.internet import protocol
class MomBot(irc.IRCClient):
def _get_nickname(self):
return self.factory.nickname
nickname = property(_get_nickname)
def signedOn(self):
print "attempting to sign on"
self.join(self.factory.channel)
print "Signed on as %s." % (self.nickname,)
def joined(self, channel):
print "attempting to join"
print "Joined %s." % (channel,)
def privmsg(self, user, channel, msg):
if not user:
return
if self.nickname in msg:
msg = re.compile(self.nickname + "[:,]* ?", re.I).sub('', msg)
prefix = "%s: " % (user.split('!', 1)[0],)
else:
prefix = ''
self.msg(self.factory.channel, prefix + "hello there")
class MomBotFactory(protocol.ClientFactory):
protocol = MomBot
def __init__(self, channel, nickname='YourMomDotCom', chain_length=3,
chattiness=1.0, max_words=10000):
self.channel = channel
self.nickname = nickname
self.chain_length = chain_length
self.chattiness = chattiness
self.max_words = max_words
def startedConnecting(self, connector):
print "started connecting on {0}:{1}"
.format(str(connector.host),str(connector.port))
def clientConnectionLost(self, connector, reason):
print "Lost connection (%s), reconnecting." % (reason,)
connector.connect()
def clientConnectionFailed(self, connector, reason):
print "Could not connect: %s" % (reason,)
if __name__ == "__main__":
chan = sys.argv[1]
reactor.connectTCP("localhost", 6667, MomBotFactory('#' + chan,
'YourMomDotCom', 2, chattiness=0.05))
reactor.run()
입니다. 그런 다음 연결이 끊어지고 clientConnectionLost를 입력하고 오류를 인쇄합니다
Lost connection ([Failure instance: Traceback (failure with no frames):
<class 'twisted.internet.error.ConnectionDone'>: Connection was closed cleanly.
]), reconnecting.
제대로 작동 그것은 (명령의 첫 번째 인수로 지정된 해당 채널에 로그인해야하는 경우 예를 들어 파이썬 module2.py botwar 채널 번호가 될 것입니다. botwar.). 채널에있는 사람이 아무 것도 보내면 "hello there"로 응답해야합니다.
나는 NGIRC을 서버에서 실행 중이며 mIRC 또는 다른 IRC 클라이언트에서 연결하면 작동합니다.
지속적으로 연결을 끊는 이유에 대한 해결책을 찾을 수 없습니다. 왜 도움을 많이 크게 감사하겠습니다. 고맙습니다!
실행중인 IRC 서버는 무엇입니까? 오픈 소스입니까? – fmoo
연결이 끊기는 이유가 * 있습니다. 그렇지 않으면 연결이 끊어지지 않습니다. 그러나 누군가가 그 이유를 추측 할 수있는 정보가 거의 없습니다. http://sscce.org/ 및 http://www.catb.org/esr/faqs/smart-questions.html –
@ Jean-PaulCalderone을 참조하십시오. 해당 웹 사이트에 감사드립니다. 나는 더 많은 정보를 더했다. 그것은 "짧은"요구 사항에 속하지 않지만, 나는 다른 방법으로 그것을하는 방법을 모른다. 다행히도, 이것은 더 나은 단어 질문입니다. – RyGuy