94 lines
3.3 KiB
Python
Executable File
94 lines
3.3 KiB
Python
Executable File
# 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.')
|