Advertisement
MolSno

Untitled

Feb 12th, 2013
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 6.65 KB | None | 0 0
  1. import time, os, re
  2. import threading
  3. from datetime import datetime, timedelta
  4.  
  5. log_period = 60 # in seconds
  6. url_logfolder='http://molsno.tk/logs/'
  7. path_logfolder='/var/www/logs/'
  8. path_datafolder='/var/www/data/'
  9. path_logpage=path_datafolder+'logpage.html'
  10. path_links=path_datafolder+'links.html'
  11.  
  12. messages = []
  13.  
  14. annoy = True
  15.  
  16. class LogMessage(object):
  17.         def __init__(self, nick, message, time, kind, args=[]):
  18.                 self.nick = nick
  19.                 self.message = message
  20.                 self.time = time
  21.                 self.kind = kind
  22.                 self.args = args
  23.  
  24. def dictreplace(text, dic):
  25.         for i, j in dic.items():
  26.                 text = text.replace(i, j)
  27.         return text
  28.  
  29. def logwrite(phenny, startTimer):
  30.         now = time.localtime(time.time())
  31.         date = time.strftime("%Y-%m-%d", now)
  32.         date_yesterday = (datetime.now() - timedelta(days=1)).strftime('%Y-%m-%d')
  33.         date_tomorrow = (datetime.now() + timedelta(days=1)).strftime('%Y-%m-%d')
  34.         links_html = open(path_links,'r').read()
  35.        
  36.         outpath = path_logfolder+date+'.html'
  37.         if os.path.exists(outpath):
  38.                 outpage = open(outpath,'r+')
  39.                 basepage_html = outpage.read()
  40.                 outpage.seek(0)
  41.                 outhtml = basepage_html
  42.         else:
  43.                 outpage = open(outpath,'w+')
  44.                 basepage_html = open(path_logpage).read()
  45.                 linkreplace = {\
  46.                         '<!--PREVIOUS-->': url_logfolder + date_yesterday + '.html',\
  47.                         '<!--NEXT-->': url_logfolder + date_tomorrow + '.html'}
  48.                 links = dictreplace(links_html, linkreplace)
  49.                 outhtml = basepage_html.replace('<!--LINKS-->',links)
  50.                 outhtml = outhtml.replace('<!--DATE-->',date)
  51.        
  52.         # messages don't end up in time order for some reason, fix that
  53.         sortedmessages = sorted(messages, cmp=lambda x,y: cmp(x.time, y.time))
  54.         for m in sortedmessages:
  55.                 msg_html = open(path_datafolder+'messages/'+m.kind+'.html','r').read().encode('utf8')
  56.                 print path_datafolder+'messages/'+m.kind+'.html'
  57.                 # do the html cleaning thing
  58.                 parsedmsg = dictreplace(m.message, {'<':'&lt;', '>':'&gt;', '&':'&amp;'})
  59.                
  60.                 # general formatting
  61.                 bold = False
  62.                 uline = False
  63.                 link = False
  64.                 ital = False
  65.                 fgcolor = '65535'       # "default" value... yeah
  66.                 bgcolor = '65535'
  67.                 outs = '<span class="fg_65535"><span class="bg_65535">'
  68.                 i = 0
  69.                 while i < len(parsedmsg):
  70.                         if parsedmsg[i] == '\x02':
  71.                                 bold = not bold
  72.                                 if bold: outs+= '<b>'
  73.                                 if not bold: outs+= '</b>'
  74.                         elif parsedmsg[i] == '\x1f':
  75.                                 uline = not uline
  76.                                 if uline: outs+= '<u>'
  77.                                 if not uline: outs+= '</u>'
  78.                         elif parsedmsg[i] == '\x16':
  79.                                 ital = not ital
  80.                                 if ital: outs+= '<i>'
  81.                                 if not ital: outs+= '</i>'
  82.                         elif parsedmsg[i] == '\x03':
  83.                                 j = i+1;
  84.                                 tmpfg = ''
  85.                                 tmpbg = ''
  86.                                 did = False
  87.                                 if re.match('[0-9]',parsedmsg[j]):
  88.                                         while re.match('[0-9]',parsedmsg[j]):
  89.                                                 tmpfg+= parsedmsg[j]
  90.                                                 j+=1
  91.                                         fgcolor=str(int(tmpfg))
  92.                                         did = True
  93.                                 if parsedmsg[j] == ',':
  94.                                         if re.match('[0-9]',parsedmsg[j+1]):
  95.                                                 j+=1
  96.                                                 while re.match('[0-9]',parsedmsg[j]):
  97.                                                         tmpbg+= parsedmsg[j]
  98.                                                         j+=1
  99.                                                 bgcolor=str(int(tmpbg))
  100.                                                 did = True
  101.                                 if did == False:
  102.                                         fgcolor = '65535'
  103.                                         bgcolor = '65535'
  104.                                 outs+='</span></span><span class="fg_'+fgcolor+'"><span class="bg_'+bgcolor+'">'
  105.                                 i = j - 1;
  106.                         elif parsedmsg[i] == '\x0f':
  107.                                 outs+='</span></span><span class="fg_65535"><span class="bg_65535">'
  108.                                 if bold:
  109.                                         outs+='</b>'
  110.                                 if uline:
  111.                                         outs+='</u>'
  112.                                 if ital:
  113.                                         outs+='</i>'
  114.                         elif ord(parsedmsg[i]) > 127:
  115.                                 outs+='&#'+str(ord(parsedmsg[i]))
  116.                         else:
  117.                                 outs+= parsedmsg[i]
  118.                         i+=1
  119.                 if bold:
  120.                         outs+='</b>'
  121.                 if uline:
  122.                         outs+='</u>'
  123.                 outs+='</span></span>'
  124.                 parsedmsg = outs
  125.  
  126.                 args = list(m.args) if len(m.args) > 0 else []
  127.                 while(len(args) < 3): args.append('err: invalid field')
  128.                 msgreplace = {\
  129.                 '<!--NICK-->': m.nick,\
  130.                 '<!--MESSAGE-->': parsedmsg,\
  131.                 '<!--TIME-->': time.strftime("%a %b %d, %I:%M:%S %p", m.time),\
  132.                 '<!--TARGET-->': args[1],\
  133.                                 '<!--MODE-->': args[2]}
  134.                 outhtml = outhtml.replace('<!--NEXT_MESSAGE-->', dictreplace(msg_html, msgreplace)+'\r\n<!--NEXT_MESSAGE-->')
  135.                 messages.remove(m)
  136.                
  137.         outpage.write(outhtml.encode('utf8'))
  138.        
  139.         print 'logging: logs written'
  140.         t = threading.Timer(log_period, logwrite, [phenny, True])
  141.         t.start()
  142.  
  143. def logs(phenny, input):
  144.         now = time.localtime(time.time())
  145.         date = time.strftime("%Y-%m-%d", now)
  146.         phenny.say(url_logfolder+date+'.html')
  147.         logwrite(phenny, False)
  148. logs.commands = ['logs']
  149. logs.priority = 'high'
  150. logs.thread = False
  151.  
  152. def memlogPRIVMSG(phenny, input):
  153.         if input.sender == '#radbusiness':
  154.                 if input.group(0).startswith('\x01ACTION') and input.group(0).endswith('\x01'):
  155.                         messages.append(LogMessage(input.nick, input.group(0)[len('\x01ACTION'):], time.localtime(time.time()), 'PRIVMSG_ACTION'))
  156.                 else:
  157.                         messages.append(LogMessage(input.nick, input.group(0), time.localtime(time.time()), 'PRIVMSG'))
  158. memlogPRIVMSG.event = 'PRIVMSG'
  159. memlogPRIVMSG.rule = r'.*'
  160. def memlogQUIT(phenny, input):
  161.         messages.append(LogMessage(input.nick, input.group(0), time.localtime(time.time()), 'QUIT'))
  162. memlogQUIT.event = 'QUIT'
  163. memlogQUIT.rule = r'.*'
  164. def memlogJOIN(phenny, input):
  165.         messages.append(LogMessage(input.nick, input.group(0), time.localtime(time.time()), 'JOIN'))
  166. memlogJOIN.event = 'JOIN'
  167. memlogJOIN.rule = r'.*'
  168. def memlogPART(phenny, input):
  169.         messages.append(LogMessage(input.nick, input.group(0), time.localtime(time.time()), 'PART'))
  170. memlogPART.event = 'PART'
  171. memlogPART.rule = r'.*'
  172. def memlogNICK(phenny, input):
  173.         messages.append(LogMessage(input.nick, input.group(0), time.localtime(time.time()), 'NICK'))
  174. memlogNICK.event = 'NICK'
  175. memlogNICK.rule = r'.*'
  176. def memlogKICK(phenny, input):
  177.         messages.append(LogMessage(input.nick, input.group(0), time.localtime(time.time()), 'KICK', input.args))
  178. memlogKICK.event = 'KICK'
  179. memlogKICK.rule = r'.*'
  180. def memlogMODE(phenny, input):
  181.     if len(input.args) > 2:
  182.         messages.append(LogMessage(input.nick, input.group(0), time.localtime(time.time()), 'MODE', input.args))
  183.     else:
  184.         tmpargs = list(input.args)
  185.         tmpargs.append(tmpargs[0])
  186.         messages.append(LogMessage(input.nick, input.group(0), time.localtime(time.time()), 'MODE', tmpargs))
  187. memlogMODE.event = 'MODE'
  188. memlogMODE.rule = r'.*'
  189. def memlogTOPIC(phenny, input):
  190.         messages.append(LogMessage(input.nick, input.group(0), time.localtime(time.time()), 'TOPIC'))
  191. memlogTOPIC.event = 'TOPIC'
  192. memlogTOPIC.rule = r'.*'
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement