Initial commit
This commit is contained in:
commit
e3493d9a95
93
pybot.py
Executable file
93
pybot.py
Executable file
@ -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.')
|
169
pybot1.0.py
Executable file
169
pybot1.0.py
Executable file
@ -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.')
|
235
pybot1.2.py
Executable file
235
pybot1.2.py
Executable file
@ -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.')
|
108
pybot_old.py
Executable file
108
pybot_old.py
Executable file
@ -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.')
|
55
rawbot.py
Executable file
55
rawbot.py
Executable file
@ -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.')
|
169
temp_pybot.py
Executable file
169
temp_pybot.py
Executable file
@ -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.')
|
Loading…
x
Reference in New Issue
Block a user