Advertisement
MolSno

Untitled

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