Added HTML writing

This commit is contained in:
Chris Oliver 2010-02-07 19:23:26 -06:00
parent f7d6cb90d7
commit abcbff0d87
2 changed files with 69 additions and 29 deletions

View file

@ -1,9 +1,10 @@
[irc] [irc]
network = irc.freenode.net network = irc.freenode.net
port = 6667 port = 6667
channels = #test2134 channels = #keryx
nick = Testbot444324 nick = Timber
owners = some,people owners = excid3
[log] [log]
folder = logs folder = logs
stylesheet = conf/stylesheet.css

View file

@ -23,6 +23,7 @@
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
""" """
__author__ = "Chris Oliver <excid3@gmail.com>" __author__ = "Chris Oliver <excid3@gmail.com>"
__version__ = "0.2.1" __version__ = "0.2.1"
__date__ = "08/11/2009" __date__ = "08/11/2009"
@ -46,28 +47,29 @@ html_header = """<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
<head> <head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>%s</title> <title>%s</title>
<link href="/static/css/stylesheet.css" rel="stylesheet" type="text/css" /> <link href="%s" rel="stylesheet" type="text/css" />
</head> </head>
<body onload="init()"> <body>
</body> </body>
</html> </html>
""" """
class LogBot(object): class LogBot(object):
def __init__(self, network, port, channels, owner, nick, folder): def __init__(self, network, port, channels, owner, nick, folder, stylesheet):
self.network = network self.network = network
self.port = port self.port = port
self.channels = channels self.channels = channels
self.owner = owner self.owner = owner
self.nick = nick self.nick = nick
self.folder = folder self.folder = folder
self.stylesheet = "file:///" + os.path.abspath(stylesheet)
def start(self): def start(self):
# Write logs locally, so we need the folder to exist # Write logs locally, so we need the folder to exist
if not os.path.exists(self.folder): if not os.path.exists(self.folder):
os.mkdir(self.folder) os.mkdir(self.folder)
os.chdir(self.folder) #os.chdir(self.folder)
# Create an IRC object # Create an IRC object
self.irc = irclib.IRC() self.irc = irclib.IRC()
@ -106,37 +108,47 @@ class LogBot(object):
# kicker, channel, [person, reason] # kicker, channel, [person, reason]
# event.source(), event.target(), event.arguments() # event.source(), event.target(), event.arguments()
person, reason = event.arguments() person, reason = event.arguments()
write(event.target(), self.write(event.target(),
"%s left the room (Kicked by %s (%s))" % \ "<span class=\"kick\">%s left the room (Kicked by %s (%s))</span>" % \
( (person, event.source().split("!")[0], reason))
def handleMode(self, connection, event): def handleMode(self, connection, event):
"""Handles mode changes """Handles mode changes
Writes messages to log Writes messages to log
""" """
# person giving ops, #channel, [modes, person] # person giving ops, #channel, [modes, person]
print event.source(), event.target(), event.arguments() #print event.source(), event.target(), event.arguments()
modes, person = event.arguments()
self.write(event.target(),
"<strong>Mode %s set on %s by %s</strong>" % \
(modes, person, event.source().split("!")[0]))
def handlePubNotice(self, connection, event): def handlePubNotice(self, connection, event):
"""Handles public notices """Handles public notices
Writes messages to log Writes messages to log
""" """
# user, channel, [msg] # user, channel, [msg]
print event.source(), event.target(), event.arguments() #print event.source(), event.target(), event.arguments()
self.write(event.target(),
"- %s: %s -" % \
(event.source().split("!")[0], event.arguments()[0]))
def handleQuit(self, connection, event): def handleQuit(self, connection, event):
"""Handles quite messages """Handles quite messages
Writes messages to log Writes messages to log
""" """
# user, channel?, [reason] # user, channel?, [reason]
print event.source(), event.target(), event.arguments() #print event.source(), event.target(), event.arguments()
self.write(None,
"<strong>%s has quit (%s)</strong>" % \
(event.source().split("!")[0], event.arguments()[0]))
def handlePrivMessage(self, connection, event): def handlePrivMessage(self, connection, event):
"""Handles private messages """Handles private messages
Used for owners to send instructions to bot Used for owners to send instructions to bot
""" """
# sender, receiver (me), [msg] # sender, receiver (me), [msg]
print event.source(), event.target(), event.arguments() print "PRIVATE MESSGAE", event.source(), event.target(), event.arguments()
def handleJoin(self, connection, event): def handleJoin(self, connection, event):
"""Handles user join messages """Handles user join messages
@ -149,28 +161,27 @@ class LogBot(object):
nickmask = "unknown" nickmask = "unknown"
nick = nick[0] nick = nick[0]
print "%s (%s) has joined %s" % \ self.write(event.target(),
(nick, "<strong>%s (%s) has joined %s</strong>" % \
nickmask, (nick, nickmask, event.target()))
event.target())
def handlePubMessage(self, connection, event): def handlePubMessage(self, connection, event):
"""Handles public messages """Handles public messages
Writes messages to log Writes messages to log
""" """
nick = event.source().split("!")[0] nick = event.source().split("!")[0]
print "%s: %s" % \ self.write(event.target(),
(nick, "<span class=\"person\">%s:</span> %s" % \
event.arguments()[0]) (nick, event.arguments()[0]))
def handlePart(self, connection, event): def handlePart(self, connection, event):
"""Handles part messages """Handles part messages
Writes messages to log Writes messages to log
""" """
nick = event.source().split("!")[0] nick = event.source().split("!")[0]
print '%s has parted %s' % \ self.write(event.target(),
(nick, "<span class=\"person\">%s</span> has parted %s" % \
event.target()) (nick, event.target()))
def handleInvite(self, connection, event): def handleInvite(self, connection, event):
"""Handles invitations from IRC users """Handles invitations from IRC users
@ -186,10 +197,37 @@ class LogBot(object):
for channel in event.arguments(): for channel in event.arguments():
self.server.join(channel) self.server.join(channel)
def write(self): def write(self, channel, message):
pass time = strftime("[%H:%M:%S]")
date = strftime("%d-%m-%Y")
if channel:
print "%s> %s %s" % (channel, time, message)
channels = [channel]
else:
# Quits don't have channels
print "%s %s" % (time, message)
channels = self.channels
for channel in channels:
path = os.path.abspath(os.path.join(self.folder, channel))
if not os.path.exists(path):
# Create the folder if it doesn't exist
os.mkdir(path)
path = os.path.join(path, date+".html")
if not os.path.exists(path):
# Create the html header
f = open(path, "wb")
f.write(html_header % (("%s | Logs for %s" % (channel, date)), self.stylesheet))
f.close()
data = open(path, "rb").readlines()[:-2]
data.append("<span class=\"time\">%s</span> %s<br />\n" % (time, message))
data += [" </body>\n", "</html>\n"]
f = open(path, "wb")
f.writelines(data)
def main(conf): def main(conf):
""" """
Start the bot using a config file. Start the bot using a config file.
@ -205,8 +243,9 @@ def main(conf):
nick = CONFIG.get('irc', 'nick') nick = CONFIG.get('irc', 'nick')
owner = CONFIG.get('irc', 'owners').split(',') owner = CONFIG.get('irc', 'owners').split(',')
logs_folder = CONFIG.get('log', 'folder') logs_folder = CONFIG.get('log', 'folder')
stylesheet = CONFIG.get('log', 'stylesheet')
bot = LogBot(network, port, channels, owner, nick, logs_folder) bot = LogBot(network, port, channels, owner, nick, logs_folder, stylesheet)
try: try:
bot.start() bot.start()
except KeyboardInterrupt: except KeyboardInterrupt: