# -*- coding: utf-8 -*- ## Imports import re from config.irc_config import * from config.secure_config import * from irc import triggers from irc.connection import Connection from irc.data import Data connection = None def get_connection(): connection = Connection(HOST, PORT, NICK, IDENT, REALNAME) return connection def startup(conn): global connection connection = conn triggers.init_commands(connection) connection.connect() def main(): read_buffer = str() while 1: try: read_buffer = read_buffer + connection.get() except RuntimeError: # socket broke print "socket has broken on front-end; restarting bot..." return lines = read_buffer.split("\n") read_buffer = lines.pop() for line in lines: line = line.strip().split() data = Data() if line[1] == "JOIN": data.nick, data.ident, data.host = re.findall(":(.*?)!(.*?)@(.*?)\Z", line[0])[0] data.chan = line[2][1:] triggers.check("join", data) # check if there's anything we can respond to, and if so, respond if line[1] == "PRIVMSG": data.nick, data.ident, data.host = re.findall(":(.*?)!(.*?)@(.*?)\Z", line[0])[0] data.msg = ' '.join(line[3:])[1:] data.chan = line[2] if data.chan == NICK: # this is a privmsg to us, so set 'chan' as the nick of the sender data.chan = data.nick triggers.check("msg_private", data) # only respond if it's a private message else: triggers.check("msg_public", data) # only respond if it's a public (channel) message triggers.check("msg", data) # check for general messages if data.msg.startswith("!restart"): # hardcode the !restart command (we can't restart from within an ordinary command) if data.host in OWNERS: print "restarting bot per owner request..." return if line[0] == "PING": # If we are pinged, pong back to the server connection.send("PONG %s" % line[1]) if line[1] == "376": if NS_AUTH: # if we're supposed to auth to nickserv, do that connection.say("NickServ", "IDENTIFY %s %s" % (NS_USER, NS_PASS)) for chan in CHANS: # join all of our startup channels connection.join(chan)