From e3493d9a953d4dbfd5877e4bbd9558f7f8f21f03 Mon Sep 17 00:00:00 2001 From: Izwzyzx <184772711+Izwzyzx@users.noreply.github.com> Date: Fri, 15 Oct 2021 23:18:03 -0500 Subject: [PATCH] Initial commit --- pybot.py | 93 ++++++++++++++++++++ pybot1.0.py | 169 ++++++++++++++++++++++++++++++++++++ pybot1.2.py | 235 ++++++++++++++++++++++++++++++++++++++++++++++++++ pybot_old.py | 108 +++++++++++++++++++++++ rawbot.py | 55 ++++++++++++ temp_pybot.py | 169 ++++++++++++++++++++++++++++++++++++ 6 files changed, 829 insertions(+) create mode 100755 pybot.py create mode 100755 pybot1.0.py create mode 100755 pybot1.2.py create mode 100755 pybot_old.py create mode 100755 rawbot.py create mode 100755 temp_pybot.py diff --git a/pybot.py b/pybot.py new file mode 100755 index 0000000..0a9c428 --- /dev/null +++ b/pybot.py @@ -0,0 +1,93 @@ +# Anedepami (PyBot v2.0) - by Ikewise, with help from Adrian Malacoda +# Based on code by chevloschelios: +# http://ubuntuforums.org/showthread.php?t=1493702 + +import socket +import datetime + +botversion = '2.0' + +server = '127.0.0.1' +port = 6667 +channel = '#lobby' +botnick = 'Anedepami' + + + +# Functions +def timestamp(): + time = datetime.datetime.now().strftime('[%H:%M:%S]') + return time + +def join(chan): + irc.send(bytes('JOIN :'+ chan +'\r\n', 'UTF-8')) + #say(chan, 'Hello '+ chan +'!') + +def part(chan): + irc.send(bytes('PART '+ chan +'\r\n', 'UTF-8')) + +def logoff(sendmsg): + irc.send(bytes('QUIT :'+ sendmsg +'\r\n', 'UTF-8')) + +def outputText(): + if currentMessage[1] == 'QUIT': + if len(currentMessage) > 3: + print('GLOBAL: ' + timestamp() + ' * Quits: ' + currentMessage[0][1:currentMessage[0].find('!')] + ' (' + currentMessage[0][currentMessage[0].find('!') + 1:] + ') (Quit: ' + currentMessage[3] + ')') + else: + print('GLOBAL: ' + timestamp() + ' * Quits: ' + currentMessage[0][1:currentMessage[0].find('!')] + ' (' + currentMessage[0][currentMessage[0].find('!') + 1:] + ')') + if currentMessage[1] == 'JOIN': + if botnick in currentMessage[0]: + print(currentMessage[2][1:] + ': ' + timestamp() + ' * Joins: ' + currentMessage[0][0:currentMessage[0].find('!')] + ' (' + currentMessage[0][currentMessage[0].find('!') + 1:] + ')') + else: + print(currentMessage[2][1:] + ': ' + timestamp() + ' * Joins: ' + currentMessage[0][1:currentMessage[0].find('!')] + ' (' + currentMessage[0][currentMessage[0].find('!') + 1:] + ')') + if currentMessage[1] == 'PART': + if len(currentMessage) > 3: + print(currentMessage[2] + ': ' + timestamp() + ' * Parts: ' + currentMessage[0][1:currentMessage[0].find('!')] + ' (' + currentMessage[0][currentMessage[0].find('!') + 1:] + ') (' + currentMessage[3] + ')') + else: + print(currentMessage[2] + ': ' + timestamp() + ' * Parts: ' + currentMessage[0][1:currentMessage[0].find('!')] + ' (' + currentMessage[0][currentMessage[0].find('!') + 1:] + ')') + + + if currentMessage[1] == 'PRIVMSG': + print(currentMessage[2] + ': ' + timestamp() + ' <' + currentMessage[0][1:currentMessage[0].find('!')] + '> ' + currentMessage[3][1:]) + + + +# 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: + currentMessage = '' + + serverData = str(irc.recv(4096)) + + if serverData == "b''": # Detect connection loss + break + + serverData = serverData[2:len(serverData) - 5].split('\\r\\n:') + + for i in serverData: + if i.startswith('PING'): # Respond to server pings + irc.send(bytes('PONG ' + i.split()[1] + '\r\n', 'UTF-8')) + + if i.lower().find('!quit') != -1: # Shutdown command + logoff('Shutdown') + + currentMessage = i.split(' ', 3) + #print(timestamp() + ' ' + str(currentMessage)) + + if len(currentMessage) >= 2: + outputText() + +# End of program +print() +print('Connection terminated.') diff --git a/pybot1.0.py b/pybot1.0.py new file mode 100755 index 0000000..34dc0bb --- /dev/null +++ b/pybot1.0.py @@ -0,0 +1,169 @@ +# 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(sendtarget, sendmsg): + irc.send(bytes('PRIVMSG '+ sendtarget +' :'+ sendmsg +'\r\n', 'UTF-8')) + + # Differentiate between channel and private messages + if sendtarget[0] != '#': + print('DIRECT (' + sendtarget + '): <' + botnick + '> ' + sendmsg) + else: + print(sendtarget + ': <' + botnick + '> ' + sendmsg) + +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(sendmsg): + irc.send(bytes('QUIT :'+ sendmsg +'\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] + + + 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')) + + + + + # break it down, q-dog + sender = data[0:data.find(' ')] + data = data[data.find(' ') + 1:] + + datatype = data[0:data.find(' ')] + data = data[data.find(' ') + 1:] + + if datatype == 'QUIT' or 'NICK': + target = '' + data = data.lstrip(":") + elif datatype == 'JOIN' or 'PART': + target = data + data = '' + elif datatype == 'KICK': + target = data[0:data.find(' ')] + data = data[data.find(' ') + 1:] + kicktarget = data[0:data.find(' ')] + data = data[data.find(' ') + 1:] + else: + target = data[0:data.find(' ')] + data = data[data.find(' ') + 1:] + + + if sender.find('!') != -1 and datatype != 'QUIT' or 'JOIN' or 'PART' or 'INVITE': + sender = sender[0:sender.find('!')] # Strip names of extra data + target = target.lstrip(':') + data = data.lstrip(':') + + msg = data.lower() # Case-sensitivity is an asshole + + + # Print formatted data to console + if datatype == 'QUIT': + print('* Quits: ' + sender[0:sender.find('!')] + ' (' + sender[sender.find('!') + 1:] + ') (' + data + ')') + if datatype == 'JOIN': + print(target + ': * Joins: ' + sender[0:sender.find('!')] + ' (' + sender[sender.find('!') + 1:] + ')') + if datatype == 'PART': + print(target + ': * Parts: ' + sender[0:sender.find('!')] + ' (' + sender[sender.find('!') + 1:] + ')') + if datatype == 'KICK': + print(target + ': * ' + kicktarget + ' was kicked by ' + sender + ' (' + data + ')') + if kicktarget == botnick: # Auto-Rejoin when kicked + join(target) + if datatype == 'MODE': + print(target + ': * ' + sender + ' sets mode: ' + data) + if datatype == 'TOPIC': + print(target + ': * ' + sender + ' changes topic to \'' + data + '\'') + if datatype == 'INVITE': + print('* ' + sender[0:sender.find('!')] + ' (' + sender[sender.find('!') + 1:] + ' invites you to join ' + data + '\'') + if datatype == 'NICK': + print('* ' + sender + ' is now known as ' + data) + if datatype == 'NOTICE': + if target[0] != '#': + target = sender + print('NOTICE: -' + sender + '- ' + data) + else: + print(target + ': NOTICE -' + sender + '- ' + data) + if datatype == 'PRIVMSG': + # If not a channel + if target[0] != '#': + target = sender + if data.find('\\x01') == 0: + data = data.strip('\\x01') + if data.find('ACTION') == 4: + print('DIRECT (' + sender + '): * ' + sender + ' ' + data) + else: + print('CTCP: -> [' + sender + '] ' + data) + else: + print('DIRECT (' + sender + '): <' + sender + '> ' + data) + # If a channel + else: + if data.find('\\x01') == 0: + data = data.strip('\\x01') + if data.find('ACTION') == 4: + print(target + ': * ' + sender + ' ' + data) + else: + print(target + ': CTCP -> [' + sender + ':' + target + ' ' + data + '] ') + else: + print(target + ': <' + sender + '> ' + data) + + + if datatype == 'PRIVMSG': + + # PyBot main commands begin here + # Use "== 0:" for line start, "!= -1:" for anywhere + if msg.find('!quit') == 0: + logoff('Shutdown command from ' + sender) + + if msg.find('chk') == 0: + say(target, sender + ': ack') + + if msg.find('hi '+ botnick.lower()) == 0: + say(target, 'Hello, ' + sender + '!') + + if msg.find('hello '+ botnick.lower()) == 0: + say(target, 'Greetings, ' + sender + '!') + + if msg.find('slaps '+ botnick.lower()) != -1: + say(target, '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.') diff --git a/pybot1.2.py b/pybot1.2.py new file mode 100755 index 0000000..2d65690 --- /dev/null +++ b/pybot1.2.py @@ -0,0 +1,235 @@ +# PyBot v1.2 - by Ikewise, with help from Adrian Malacoda +# Based on code by chevloschelios: +# http://ubuntuforums.org/showthread.php?t=1493702 + +import socket +import datetime + +botversion = '1.2' + +server = '127.0.0.1' +port = 6667 +channel = '#lobby' +botnick = 'PyBot' + +def say(sendtarget, sendmsg): + time = datetime.datetime.now().strftime('[%H:%M:%S]') + irc.send(bytes('PRIVMSG ' + sendtarget +' :'+ sendmsg +'\r\n', 'UTF-8')) + if sendtarget.startswith('#'): + print(sendtarget + ': ' + time + ' <' + botnick + '> ' + sendmsg) + else: + print('DIRECT (' + sendtarget + '): ' + time + ' <' + botnick + '> ' + sendmsg) + +def notice(sendtarget, sendmsg): + time = datetime.datetime.now().strftime('[%H:%M:%S]') + irc.send(bytes('NOTICE ' + sendtarget +' :'+ sendmsg +'\r\n', 'UTF-8')) + if sendtarget.startswith('#'): + print(sendtarget + ': ' + time + ' * NOTICE: -' + botnick + '- ' + sendmsg) + else: + print('DIRECT (' + sendtarget + '): ' + time + ' * NOTICE: -' + botnick + '- ' + sendmsg) + +def ctcp(sendtype, sendtarget, sendmsg): + time = datetime.datetime.now().strftime('[%H:%M:%S]') + irc.send(bytes(sendtype + ' ' + sendtarget +' :\x01'+ sendmsg +'\x01\r\n', 'UTF-8')) + if sendtarget.startswith('#'): + if sendtype == 'PRIVMSG': + if sendmsg.startswith('ACTION'): + print(sendtarget + ': ' + time + ' * ' + botnick + ' ' + sendmsg[7:]) + else: + print(sendtarget + ': ' + time + ' * CTCP SEND: [' + botnick + ' -> ' + sendtarget + '] ' + sendmsg) + if sendtype == 'NOTICE': + print(sendtarget + ': ' + time + ' * CTCP RESPOND: [' + botnick + ' -> ' + sendtarget + '] ' + sendmsg) + else: + if sendtype == 'PRIVMSG': + if sendmsg.startswith('ACTION'): + print('DIRECT (' +sendtarget + '): ' + time + ' * ' + botnick + ' ' + sendmsg[7:]) + else: + print('DIRECT (' + sendtarget + '): ' + time + ' * CTCP SEND: [' + botnick + ' -> ' + sendtarget + '] ' + sendmsg) + if sendtype == 'NOTICE': + print('DIRECT (' + sendtarget + '): ' + time + ' * CTCP RESPOND: [' + botnick + ' -> ' + sendtarget + '] ' + sendmsg) + +def join(chan): + irc.send(bytes('JOIN :'+ chan +'\r\n', 'UTF-8')) + #say(chan, 'Hello '+ chan +'!') + +def part(chan): + irc.send(bytes('PART '+ chan +'\r\n', 'UTF-8')) + +def logoff(sendmsg): + irc.send(bytes('QUIT :'+ sendmsg +'\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')) + + +while True: + sender, hostmask, datatype, target, data, kicktarget = ['','','','','',''] + + rawdata = str(irc.recv(4096)) + + if rawdata == "b''": # Detect connection loss + break + + rawdata = rawdata[2:len(rawdata) - 5].split('\\r\\n:') + + for i in rawdata: + timestamp = datetime.datetime.now().strftime('[%H:%M:%S]') + + if i.startswith('PING'): # Respond to server pings + irc.send(bytes('PONG ' + i.split()[1] + '\r\n', 'UTF-8')) + + if 'End of /MOTD command' in i: + join(channel) + + if i.startswith(':'): + # Break the raw data down into something usable + data = i.lstrip(':') + + sender = data[0:data.find('!')] + hostmask = data[data.find('!') + 1:data.find(' ')] + data = data[data.find(' ') + 1:] + + datatype = data[0:data.find(' ')] + data = data[data.find(' ') + 1:] + + if not datatype in ['QUIT', 'NICK', 'JOIN', 'PART', 'KICK']: + target = data[0:data.find(' ')] + data = data[data.find(' ') + 1:] + if datatype in ['QUIT', 'NICK']: + target = '' + if datatype == 'JOIN': + target = data + data = '' + if datatype == 'PART': + if ' ' in data: + target = data[0:data.find(' ')] + data = data[data.find(' ') + 2:] + else: + target = data + data = '' + if datatype == 'KICK': + target = data[0:data.find(' ')] + data = data[data.find(' ') + 1:] + kicktarget = data[0:data.find(' ')] + data = data[data.find(' ') + 1:] + + target = target.lstrip(':') + if datatype in ['PRIVMSG', 'NOTICE', 'NICK', 'INVITE', 'TOPIC', 'KICK', 'JOIN', 'QUIT']: + data = data[1:] + msg = data.lower() + + + # Print formatted data to console + if datatype == 'QUIT': + if len(data) > 0: + print('GLOBAL: ' + timestamp + ' * Quits: ' + sender + ' (' + hostmask + ') (' + data + ')') + else: + print('GLOBAL: ' + timestamp + ' * Quits: ' + sender + ' (' + hostmask + ')') + if datatype == 'JOIN': + print(target + ': ' + timestamp + ' * Joins: ' + sender + ' (' + hostmask + ')') + if datatype == 'PART': + if len(data) > 0: + print(target + ': ' + timestamp + ' * Parts: ' + sender + ' (' + hostmask + ') (' + data + ')') + else: + print(target + ': ' + timestamp + ' * Parts: ' + sender + ' (' + hostmask + ')') + if datatype == 'KICK': + print(target + ': ' + timestamp + ' * ' + kicktarget + ' was kicked by ' + sender + ' (' + data + ')') + if kicktarget == botnick: # Auto-Rejoin when kicked + join(target) + if datatype == 'MODE': + print(target + ': ' + timestamp + ' * ' + sender + ' sets mode: ' + data) + if datatype == 'TOPIC': + print(target + ': ' + timestamp + ' * ' + sender + ' changes topic to \'' + data + '\'') + if datatype == 'INVITE': + print('DIRECT (' + sender + '): ' + timestamp + ' * INVITE to join ' + data + ' from ' + sender + ' (' + hostmask + ')') + join(data) + if datatype == 'NICK': + print('GLOBAL: ' + timestamp + ' * ' + sender + ' is now known as ' + data) + if datatype == 'NOTICE': + if not target.startswith('#'): + target = sender + print('DIRECT (' + sender + '): ' + timestamp + ' * NOTICE: -' + sender + '- ' + data) + else: + print(target + ': ' + timestamp + ' * NOTICE: -' + sender + '- ' + data) + if datatype == 'PRIVMSG': + # If a channel + if target.startswith('#'): + if data.startswith('\\x01'): + if data.startswith('\\x01ACTION'): + print(target + ': ' + timestamp + ' * ' + sender + ' ' + data[11:len(data) - 4]) + else: + if ' ' in data: + print(target + ': ' + timestamp + ' * CTCP: [' + sender + ':' + target + ' ' + data[4:data.find(' ')] + '] ' + data[data.find(' ') + 1:len(data) - 4]) + if data.startswith('\\x01PING'): + ctcp('NOTICE', sender, data[4:len(data) - 4]) + else: + print(target + ': ' + timestamp + ' * CTCP: [' + sender + ':' + target + ' ' + data[4:len(data) - 4] + ']') + if data.startswith('\\x01TIME'): + ctcp('NOTICE', sender, datetime.datetime.now().strftime('TIME %a %b %d %H:%M:%S %Y')) + if data.startswith('\\x01VERSION'): + ctcp('NOTICE', sender, 'VERSION PyBot v' + botversion + ' by Ikewise') + else: + print(target + ': ' + timestamp + ' <' + sender + '> ' + data) + # If not a channel + else: + target = sender + if data.startswith('\\x01'): + if data.startswith('\\x01ACTION'): + print('DIRECT (' + sender + '): ' + timestamp + ' * ' + sender + ' ' + data[11:len(data) - 4]) + else: + if ' ' in data: + print('DIRECT (' + sender + '): ' + timestamp + ' * CTCP: [' + sender + ' ' + data[4:data.find(' ')] + '] ' + data[data.find(' ') + 1:len(data) - 4]) + if data.startswith('\\x01PING'): + ctcp('NOTICE', sender, data[4:len(data) - 4]) + else: + print('DIRECT (' + sender + '): ' + timestamp + ' * CTCP: [' + sender + ' ' + data[4:len(data) - 4] + ']') + if data.startswith('\\x01TIME'): + ctcp('NOTICE', sender, datetime.datetime.now().strftime('TIME %a %b %d %H:%M:%S %Y')) + if data.startswith('\\x01VERSION'): + ctcp('NOTICE', sender, 'VERSION PyBot v' + botversion + ' by Ikewise') + else: + print('DIRECT (' + sender + '): ' + timestamp + ' <' + sender + '> ' + data) + + + + if datatype == 'PRIVMSG': + # PyBot main commands begin here + + if (msg == '!quit') and (sender == 'Ikewise'): + logoff('Shutdown command from ' + sender) + + if msg == '!part': + part(target) + + if msg.startswith('!slap'): + ctcp('PRIVMSG', target, 'ACTION slaps ' + sender + ' around a bit with a large trout') + + if msg == 'chk': + say(target, sender + ': ack') + + if msg == '.': + say(target, 'omg a meteor') + + if msg.startswith('hi '+ botnick.lower()): + say(target, 'Hello, ' + sender + '!') + + if msg.startswith('hello '+ botnick.lower()): + say(target, 'Greetings, ' + sender + '!') + + if ('slaps '+ botnick.lower()) in msg: + say(target, '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.') diff --git a/pybot_old.py b/pybot_old.py new file mode 100755 index 0000000..45a3066 --- /dev/null +++ b/pybot_old.py @@ -0,0 +1,108 @@ +# 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.') diff --git a/rawbot.py b/rawbot.py new file mode 100755 index 0000000..3716dea --- /dev/null +++ b/rawbot.py @@ -0,0 +1,55 @@ +import socket + +server = '127.0.0.1' +port = 6667 +channel = '#lobby' +botnick = 'RawBot' + +def join(chan): + irc.send(bytes('JOIN :'+ 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)) + + if data == "b''": # Detect connection loss + break + + data = data[2:len(data) - 5].split('\\r\\n:') + + for i in data: + print(i) + + if i.startswith('PING'): # Respond to server pings + irc.send(bytes('PONG ' + i.split() [ 1 ] + '\r\n', 'UTF-8')) + + # Auto-Rejoin when kicked + if i.find('KICK #') == i.find(' ') + 1: + source = i[i.find('#'):len(i)] + source = source[0:source.find(' ')] + irc.send(bytes('JOIN '+ source +'\r\n', 'UTF-8')) + + # Shutdown command + if i.lower().find('!quit') != -1: + logoff('Shutdown') + + +# End of program +print() +print('Connection terminated.') diff --git a/temp_pybot.py b/temp_pybot.py new file mode 100755 index 0000000..ea4787a --- /dev/null +++ b/temp_pybot.py @@ -0,0 +1,169 @@ +# 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(sendtarget, sendmsg): + irc.send(bytes('PRIVMSG '+ sendtarget +' :'+ sendmsg +'\r\n', 'UTF-8')) + + # Differentiate between channel and private messages + if sendtarget[0] != '#': + print('DIRECT (' + sendtarget + '): <' + botnick + '> ' + sendmsg) + else: + print(sendtarget + ': <' + botnick + '> ' + sendmsg) + +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(sendmsg): + irc.send(bytes('QUIT :'+ sendmsg +'\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] + + + 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')) + + + + + # break it down, q-dog + sender = data[0:data.find(' ')] + data = data[data.find(' ') + 1:] + + datatype = data[0:data.find(' ')] + data = data[data.find(' ') + 1:] + + if datatype == 'QUIT' or 'NICK': + target = '' + data = data.lstrip(":") + elif datatype == 'JOIN' or 'PART': + target = data + data = '' + elif datatype == 'KICK': + target = data[0:data.find(' ')] + data = data[data.find(' ') + 1:] + kicktarget = data[0:data.find(' ')] + data = data[data.find(' ') + 1:] + else: + target = data[0:data.find(' ')] + data = data[data.find(' ') + 1:] + + + if sender.find('!') != -1 and datatype != 'QUIT' or 'JOIN' or 'PART' or 'INVITE': + sender = sender[0:sender.find('!')] # Strip names of extra data + target = target.lstrip(':') + data = data.lstrip(':') + + msg = data.lower() # Case-sensitivity is an asshole + + + # Print formatted data to console + if datatype == 'QUIT': + print('* Quits: ' + sender[0:sender.find('!')] + ' (' + sender[sender.find('!') + 1:] + ') (' + data + ')') + if datatype == 'JOIN': + print(target + ': * Joins: ' + sender[0:sender.find('!')] + ' (' + sender[sender.find('!') + 1:] + ')) + if datatype == 'PART': + print(target + ': * Parts: ' + sender[0:sender.find('!')] + ' (' + sender[sender.find('!') + 1:] + ')) + if datatype == 'KICK': + print(target + ': * ' + kicktarget + ' was kicked by ' + sender + ' (' + data + ')') + if kicktarget == botnick: # Auto-Rejoin when kicked + join(target) + if datatype == 'MODE': + print(target + ': * ' + sender + ' sets mode: ' + data) + if datatype == 'TOPIC': + print(target + ': * ' + sender + ' changes topic to \'' + data + '\'') + if datatype == 'INVITE': + print('* ' + sender[0:sender.find('!')] + ' (' + sender[sender.find('!') + 1:] + ' invites you to join ' + data + '\'') + if datatype == 'NICK': + print('* ' + sender + ' is now known as ' + data) + if datatype == 'NOTICE': + if target[0] != '#': + target = sender + print('NOTICE: -' + sender + '- ' + data) + else: + print(target + ': NOTICE -' + sender + '- ' + data) + if datatype == 'PRIVMSG': + # If not a channel + if target[0] != '#': + target = sender + if data.find('\\x01') == 0: + data = data.strip('\\x01') + if data.find('ACTION') == 4: + print('DIRECT (' + sender + '): * ' + sender + ' ' + data) + else: + print('CTCP: -> [' + sender + '] ' + data) + else: + print('DIRECT (' + sender + '): <' + sender + '> ' + data) + # If a channel + else: + if data.find('\\x01') == 0: + data = data.strip('\\x01') + if data.find('ACTION') == 4: + print(target + ': * ' + sender + ' ' + data) + else: + print(target + ': CTCP -> [' + sender + ':' + target + ' ' + data + '] ') + else: + print(target + ': <' + sender + '> ' + data) + + + if datatype == 'PRIVMSG': + + # PyBot main commands begin here + # Use "== 0:" for line start, "!= -1:" for anywhere + if msg.find('!quit') == 0: + logoff('Shutdown command from ' + sender) + + if msg.find('chk') == 0: + say(target, sender + ': ack') + + if msg.find('hi '+ botnick.lower()) == 0: + say(target, 'Hello, ' + sender + '!') + + if msg.find('hello '+ botnick.lower()) == 0: + say(target, 'Greetings, ' + sender + '!') + + if msg.find('slaps '+ botnick.lower()) != -1: + say(target, '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.')