TypeError: non concat byte di str, cercando di utilizzare python3

Modo seguente sito spiega come fare un bot irc, usando il socket, ma funziona solo per python2, così ho cercato di renderlo compatibile, ma mi da l’errore citato nel titolo.

Ecco il mio codice:

import socket
# Some basic variables used to configure the bot        
server = "irc.freenode.net" # Server
channel = "#volafile" 
botnick = "Mybot" # Your bots nick
def ping(): # This is our first function! It will respond to server Pings.
ircsock.send(b"PONG :pingis\n")  
def sendmsg(chan , msg): # to the channel.
    ircsock.send(b"PRIVMSG "+ chan +b" :"+ msg +b"\n") 
def joinchan(chan): # This function is used to join channels.
    ircsock.send(b"JOIN "+ chan + b"\n")
def hello(): # This function responds to a user that inputs "Hello Mybot"
    ircsock.send(b"PRIVMSG "+ channel + b" :Hello!\n")

ircsock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
ircsock.connect((server, 6667)) # Here we connect to the server using the port 6667
ircsock.send(b"USER "+ botnick + b" "+ botnick + b" "+ botnick + b" :This bot is a   result of a tutoral covered on http://shellium.org/wiki.\n") # user authentication
ircsock.send(b"NICK "+ botnick + b"\n") # here we actually assign the nick to the bot

joinchan(channel) # Join the channel using the functions we previously defined

while 1: # Be careful with these! it might send you to an infinite loop
    ircmsg = ircsock.recv(2048) # receive data from the server
    ircmsg = ircmsg.strip(b'\n\r') # removing any unnecessary linebreaks.
    print(ircmsg) # Here we print what's coming from the server
    if ircmsg.find(b":Hello "+ botnick) != -1: 
       hello()

    if ircmsg.find(b"PING :") != -1: # if the server pings us then we've got to respond!
        ping()

Il messaggio di errore:

Traceback (most recent call last):
  File "irctest.py", line 23, in <module>
    ircsock.send(b"USER "+ botnick + b" "+ botnick + b" "+ botnick + b" :This botis a  result of a tutoral covered on http://shellium.org/wiki.\n") # user authentication
TypeError: can't concat bytes to str

OriginaleL’autore IThelp | 2014-07-30

One Reply
  1. 9

    botnick non è un byte di valore, ma una stringa:

    botnick = "Mybot"

    Fare che un byte letterale, con l’aggiunta di un b davanti:

    botnick = b"Mybot"
    oh bene, grazie.

    OriginaleL’autore Martijn Pieters

Lascia un commento