askcompu

Untitled

Mar 15th, 2016
181
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 5.76 KB | None | 0 0
  1. #!/usr/bin/env python
  2. """
  3. seen.py - Phenny seen module
  4. """
  5. import sqlite3 as lite
  6. import os
  7. import datetime
  8. import time
  9. import re
  10.  
  11. def db_connect(db):
  12.     return lite.connect(db, check_same_thread = False, detect_types=lite.PARSE_DECLTYPES)
  13.  
  14. def setup(phenny):
  15.     seen_db = os.path.join(os.path.expanduser('~/.phenny'), 'seen.db')
  16.     seen_conn = db_connect(seen_db)
  17.     c = seen_conn.cursor()
  18.     c.execute('''create table if not exists seen(
  19.        nick    varchar(31) NOT NULL PRIMARY KEY,
  20.        channel varchar(31) NOT NULL,
  21.        message text,
  22.        event   varchar(10) NOT NULL,
  23.        time    TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL
  24.        );''')
  25.     c.close()
  26.     seen_conn.commit()
  27.     seen_conn.close()
  28. setup.thread = False
  29.  
  30. def smart_truncate(content):
  31.     suffix='...'
  32.     length=int(150)
  33.     if len(content) <= length:
  34.         return content
  35.     else:
  36.         return content[:length].rsplit(' ', 1)[0]+suffix
  37.  
  38. def seen(phenny, input):
  39.     """Gives when a user was last seen."""
  40.     inputnick = input.group(2)
  41.     if inputnick:
  42.         regex = re.compile("\x03(?:\d{1,2}(?:,\d{1,2})?)?", re.UNICODE)
  43.         inputnick = regex.sub("", inputnick)
  44.         inputnick = inputnick.replace('\x0f','')
  45.         inputnick = inputnick.replace('\002','')
  46.         inputnick = inputnick.replace('\010','')
  47.         inputnick = inputnick.replace('\037','')
  48.         inputnick = inputnick.replace('\017','')
  49.         inputnick = inputnick.replace('\026','')
  50.         inputnick = inputnick.replace('\007','')
  51.         inputnick = inputnick.replace('\035','')
  52.         inputnick = inputnick.rstrip()
  53.        
  54.         seen_db = os.path.join(os.path.expanduser('~/.phenny'), 'seen.db')
  55.         seen_conn = db_connect(seen_db)
  56.         conn = db_connect(seen_db)
  57.         c = conn.cursor()
  58.         query = (inputnick,)
  59.         c.execute("SELECT * FROM seen WHERE nick LIKE ?;", query)
  60.         resultsun = c.fetchall()
  61.         gotresults = True
  62.     else:
  63.         gotresults = False
  64.     try:
  65.         results = resultsun[0]
  66.     except:
  67.         nick = None
  68.    
  69.     try:
  70.         nick = results[0]
  71.         channel = results[1]
  72.         message = results[2]
  73.         event = results[3]
  74.         seentimeun = results[4]
  75.     except:
  76.         nick = None
  77.     if not inputnick:
  78.         phenny.say ("\x01ACTION pokes " + input.nick + "\x01")
  79.         phenny.say("Are you broken?")
  80.         phenny.say("I need a nick for that command")
  81.     elif input.nick == inputnick:
  82.         phenny.say("Silly, that's you!")
  83.     elif inputnick == phenny.nick:
  84.         phenny.say("Silly, that's me!")
  85.     elif not nick:
  86.         phenny.say("Sorry I haven't seen " + inputnick)
  87.     else:
  88.        
  89.         seentime = seentimeun.strftime('%A %B %d, %Y at %I:%M:%S %p GMT')
  90.         message = message.replace('\x01ACTION','/me')
  91.         message = message.replace('\x01','')
  92.         message = smart_truncate(message)
  93.         message = message + '\017'
  94.         if event == "PRIVMSG":
  95.             phenny.say(nick + " was last seen in " + channel + ' saying "' + message + '" on ' + seentime)
  96.         elif event == "JOIN":
  97.             phenny.say(nick + " was last seen joining " + channel + " on " + seentime)
  98.         elif event == "PART":
  99.             phenny.say(nick + " was last seen leaving " + channel + ' with message "' + message + '" on ' + seentime)
  100.         elif event == "QUIT":
  101.             phenny.say(nick + ' was last seen quitting with message "' + message + '" on ' + seentime)
  102.         elif event == "NICK":
  103.             phenny.say(nick + ' was last seen switching to the nick ' + channel + ' on ' + seentime)
  104.         elif event == "KICK":
  105.             messagekick = message.split("----------")
  106.             phenny.say(nick + ' was last seen being kicked by ' + messagekick[1] + ' in ' + channel + ' with message "' + messagekick[0] + '" on ' + seentime)
  107.     if gotresults == True:
  108.         c.close()
  109. seen.commands = ['seen']
  110. seen.example = ".seen somenick"
  111.  
  112. def seenstore(phenny, input, event):
  113.     nick = input.nick
  114.     if event == "QUIT" or event == "NICK":
  115.         channel = "None"
  116.     else:
  117.         channel = input.sender
  118.     if event == "JOIN" or event == "NICK":
  119.         message = "None"
  120.     else:
  121.         message = input.group()
  122.     if event == "NICK":
  123.         channel = input.group()
  124.     if event == "KICK":
  125.         args = input.args
  126.         kicker = input.nick
  127.         nick = args[1]
  128.         message = message + "----------" + kicker
  129.        
  130.        
  131.     seen_db = os.path.join(os.path.expanduser('~/.phenny'), 'seen.db')
  132.     seen_conn = db_connect(seen_db)
  133.     conn = db_connect(seen_db)
  134.     c = conn.cursor()
  135.     entry = (nick, channel, message, event)
  136.     c.execute("INSERT OR REPLACE INTO seen(nick, channel, message, event) VALUES(?, ?, ?, ?)", entry)
  137.     conn.commit()
  138.     c.close()
  139.     conn.close()
  140.  
  141. def seenmsg(phenny, input):
  142.     event = "PRIVMSG"
  143.     seenstore(phenny, input, event)
  144. seenmsg.rule = r'(.*)'
  145. seenmsg.priority = 'low'
  146.  
  147. #def seenjoin(phenny, input):
  148. #    event = "JOIN"
  149. #    seenstore(phenny, input, event)
  150. #seenjoin.event = 'JOIN'
  151. #seenjoin.rule = r'(.*)'
  152. #seenjoin.priority = 'low'
  153.  
  154. def seennick(phenny, input):
  155.     event = "NICK"
  156.     seenstore(phenny, input, event)
  157. seennick.event = "NICK"
  158. seennick.rule = r'(.*)'
  159. seennick.priority = 'low'
  160.  
  161. def seenkick(phenny, input):
  162.     event = "KICK"
  163.     seenstore(phenny, input, event)
  164. seenkick.event = "KICK"
  165. seenkick.rule = r'(.*)'
  166. seenkick.priority = 'low'
  167.  
  168. def seenquit(phenny, input):
  169.     event = "QUIT"
  170.     seenstore(phenny, input, event)
  171. seenquit.event = 'QUIT'
  172. seenquit.rule = r'(.*)'
  173. seenquit.priority = 'low'
  174.  
  175. def seenpart(phenny, input):
  176.     event = "PART"
  177.     seenstore(phenny, input, event)
  178. seenpart.event = 'PART'
  179. seenpart.rule = r'(.*)'
  180. seenpart.priority = 'low'
Advertisement
Add Comment
Please, Sign In to add comment