The bot doesn’t do much but tell fortunes, give a pong response to a ping, and log the chatroom. Will probably add to is as I get bored. The fortunes text file can be found here if interested.
import socket
import random
from config import *
def processChat(sock, buff):
buff = buff.strip() # strip for processing
buff = buff.split(':') # split on colon delimitation
e = buff[1]
msg = buff[2]
if(msg == 'ping'):
sock.send('PRIVMSG ' + channel + ' :pong\n')
if(msg == 'fortune'):
readFortune(sock)
def pingRespond(sock, buff):
buff = buff.strip()
buff = buff.split(':')
sock.send('PONG :' + buff[1] + "\n")
def openConnection():
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect((server, port))
sock.send('PASS ' + password + '\n')
sock.send('NICK ' + nick + '\n')
sock.send('USER ' + nick + ' ' + ident + ' ' + server + ' :' + realname + '\n')
return sock
def readFortune(sock):
f = random.choice(fortunes)
sock.send('PRIVMSG ' + channel + ' :' + f + '\n')
def main():
sock = openConnection()
sock.send('JOIN ' + channel + '\n')
if(log):
logFile = open((channel + "log.txt"), "w")
while True:
buff = sock.recv(512)
logFile.write(buff + '\n')
if(buff.find('PRIVMSG') != -1):
processChat(sock, buff)
if(buff.find('PING') != -1):
pingRespond(sock, buff)
else:
while True:
buff = sock.recv(512)
if(buff.find('PRIVMSG') != -1):
processChat(sock, buff)
if(buff.find('PING') != -1):
pingRespond(sock, buff)
if __name__ == "__main__":
main()
#The bots nick
nick = 'defaultNick';
#The bots identifier
ident = 'defaultID';
#The server the bot is connecting to
server = 'irc.freenode.net';
#The TCP port used
port = 6667;
#Channel to connect to
channel = '#botwar'
#"Realname" for the bot
realname = 'Frank'
#The password sent to IRC client
password = ''
#The fortunes used
fortunes = open('fortune.txt').read().splitlines()
#Logging status
log = True