# PyBot v1.0 - Based on code by chevloschelios # (http://ubuntuforums.org/showthread.php?t=1493702) # Modified by Ikewise with help from Adrian Malacoda import socket server = '127.0.0.1' port = 6667 channel = '#lobby' botnick = 'PyBot' def say(target, msg): irc.send(bytes('PRIVMSG '+ target +' :'+ msg +'\r\n', 'UTF-8')) # Differentiate between channel and private messages if target[0] != '#': print('DIRECT (' + target + '): <' + botnick + '> ' + msg) else: print(target + ': <' + botnick + '> ' + msg) def join(chan): irc.send(bytes('JOIN :'+ chan +'\r\n', 'UTF-8')) print('* Now talking in ' + chan) say(channel, 'Hello '+ chan +'!') def part(chan): irc.send(bytes('PART '+ chan +'\r\n', 'UTF-8')) def logoff(msg): irc.send(bytes('QUIT :'+ msg +'\r\n', 'UTF-8')) # Program begins print('Connecting to ' + server + ':' + str(port) + '...') print() irc = socket.socket(socket.AF_INET, socket.SOCK_STREAM) irc.connect((server, port)) irc.send(bytes('NICK '+ botnick +'\n', 'UTF-8')) irc.send(bytes('USER '+ botnick +' '+ botnick +' '+ botnick +' :Python IRC bot\r\n', 'UTF-8')) join(channel) while True: data = str(irc.recv(4096)) data = data.lstrip('b\':') data = data.lstrip('b":') data = data[0:len(data)-5] #print(data) if data == '': # Detect connection loss break if data.find('PING') != -1: # Respond to server pings irc.send(bytes('PONG ' + data.split() [ 1 ] + '\r\n', 'UTF-8')) # Auto-Rejoin when kicked if data.find('KICK #') == data.find(' ') + 1: source = data[data.find('#'):len(data)] source = source[0:source.find(' ')] irc.send(bytes('JOIN '+ source +'\r\n', 'UTF-8')) # Check for standard messages if data.find('PRIVMSG') == data.find(' ') + 1: sender = data[0:(data.find('!'))] # Set name of sender source = data[(data.find('PRIVMSG')+8):(data.find(':')-1)] # The channel the data came from (or you, if PM) msgdata = data[data.find(':') + 1:len(data)] # Set actual message content lowdata = msgdata.lower() # Case-sensitivity is an asshole # Differentiate between channel and private messages if source[0] != '#': source = sender print('DIRECT (' + sender + '): <' + sender + '> ' + msgdata) else: print(source + ': <' + sender + '> ' + msgdata) # PyBot main commands begin here # Use "== 0:" for line start, "!= -1:" for anywhere if lowdata.find('!quit') == 0: logoff('Shutdown command from ' + sender) if lowdata.find('chk') == 0: say(source, sender + ': ack') if lowdata.find('hi '+ botnick.lower()) == 0: say(source, 'Hello, ' + sender + '!') if lowdata.find('hello '+ botnick.lower()) == 0: say(source, 'Greetings, ' + sender + '!') if lowdata.find('slaps '+ botnick.lower()) != -1: say(source, 'This is the Trout Protection Agency. Please put the Trout Down and walk away with your hands in the air.') # End of program print() print('Connection terminated.')