Я строю IRC-бот на Python для удовольствия. Предполагается принимать команды с префиксом «!» и действовать на них. Приведенная ниже функция используется для анализа команд, полученных в сообщении IRC.
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 в качестве команды, которая также устанавливается ранее. Следующий код используется для установки USER, 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.