我正在Python中構建一個IRC bot以獲得樂趣。它應該接受以'!'爲前綴的命令並對他們採取行動。以下功能用於解析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作爲之前設置的命令。下面的代碼是用來設置用戶,NICK,並加入一個通道,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 2011-02-01 21:02:54