2 версии все работает ок Code: socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5,host,pport) socket.socket = socks.socksocket sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.connect((target, port)) sock.send(Msg) print("Bot start join to server") sock.send("USER B irc.freenode.org blqq :Dorx\r\n") sock.send("JOIN {0}\r\n".format(chanel)) ток же код в верc 3 Питона уже проблема Code: sock.send(b"JOIN {0}\r\n".format(chanel)) проблема что 3 верс b"sample string" идет байт строка как мне туда вставить название канала.
^NSA^ элегантного решения для двух байт-строк с помощью формата - увы не существует. В качестве возможных альтернатив, 1) добавление к сокету метода отправляющего строковые данные. Минусы - нужно следить кодировкой, не получится отправлять бинарные данные Code: def send_string(self, data, flags=None): return self.send(data.encode('utf-8', flags)) socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5,host ,pport) socket.socket = socks.socksocket socket.socket.send_string = send_string sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.connect((target, port)) sock.send(Msg) print("Bot start join to server") sock.send_string("USER B irc.freenode.org blqq :Dorx\r\n") sock.send_string("JOIN {0}\r\n".format(chanel)) 2) Использование оператора конкатенации и кодирование str строк вручную. Универсально, но некрасиво и неудобно. 3) Кодировать по месту. Неуниверсально, только что полученные данные надо декодировать предварительно, не нужно делать monkey-patching, проблемы с кодировкой Code: channel = 'blabla' sock.send("JOIN {0}\r\n".format(chanel).encode('utf-8')) 4) Написать собственную реализацию format для byte-строк