저는 재미있게 Python으로 IRC 봇을 만들고 있습니다. '!'접두어가 붙은 명령을 받아 들여야합니다. 그들에게 행동하십시오. 아래 함수는 IRC 메시지에서받은 명령을 구문 분석하는 데 사용됩니다.소켓이 닫힐 때까지 Python socket.send()가 전송되지 않습니다.
def parse_cmd(self, sender):
#Admin Commands
if sender == self.owner:
if self.command == 'quit':
send_bufr = "QUIT %s\r\n" %(self.channel)
self.sock.send(bytearray(send_bufr, "utf-8"))
self.sock.close()
sys.exit(1)
if self.command == 'hi':
print("Run: Hi")
send_bufr = "PRIVMSG %s :Hello %s" %(self.channel, sender)
print(send_bufr)
self.sock.send(bytearray(send_bufr, "utf-8"))
return
else:
return
else:
return
느낌표는 이전에 구문 분석되었으며 self.command는 이전에 설정된 명령으로 사용됩니다. 다음 코드는 사용자, 닉을 설정하고, 채널을 결합하는 데 사용되며 self.sock.send 잘 여기에 작동합니다
#Send NICK self.nick to set NICK
send_bufr = ("NICK %s \r\n") %(self.nick)
self.sock.send(bytearray(send_bufr, "utf-8"))
print("Set Nick to %s" %(self.nick))
#Send USER to set USER
send_bufr = ("USER %s 8 * :S0lder \r\n") %(self.nick)
self.sock.send(bytearray(send_bufr, "utf-8"))
print("Set USER to %s 8 :S0lder" %(self.nick))
#JOIN self.channel
send_bufr = ("JOIN %s \r\n") %(self.channel)
self.sock.send(bytearray(send_bufr, "utf-8"))
print("Joined %s" %(self.channel))
time.sleep(5)
을하지만 기능 이전과 self.sock.send의 인스턴스() '! quit'명령이 제공 될 때까지 초기 연결이 전송 된 후에는 의 모든 메시지가 전송됩니다. 왜 이런거야? 소켓을 사용하는 적절한 방법을 오해하고 있습니까?
편집 : IRC 클라이언트가있는 동일한 채널에 연결되어 있으며! quit 명령을 입력 한 후에야 채널에 메시지가 나타납니다.
수신 코드는 어떻게 생겼습니까? 여기에 문제가있을 수 있습니다. 여기서는 전송 코드가 아닙니다. – payne
IRC를 모르지만 hi 명령에 대한 응답이 문제가있는 것 같습니다. \ r \ n과 같은 터미네이터를 포함하면 안됩니까? –
내 수신 코드는 socket.send() 인쇄 전에 추가 된 디버깅 print() 함수로 제대로 작동합니다. –