Package emma :: Package interface :: Package irc
[hide private]
[frames] | no frames]

Source Code for Package emma.interface.irc

 1  """ 
 2  irc interface 
 3   
 4  @copyright: (c) 2011 hackmeeting U{http://sindominio.net/hackmeeting} 
 5  @author: Ruben Pollan 
 6  @organization: hackmeeting U{http://sindominio.net/hackmeeting} 
 7  @contact: meskio@sindominio.net 
 8  @license: 
 9    This program is free software; you can redistribute it and/or 
10    modify it under the terms of the Do What The Fuck You Want To 
11    Public License, Version 2, as published by Sam Hocevar. See 
12    U{http://sam.zoy.org/projects/COPYING.WTFPL} for more details. 
13  """ 
14   
15  import logging 
16  import irclib 
17  from time import sleep 
18   
19  from emma.interface import Interface 
20  from emma.events import Event, subscribe, trigger 
21   
22  from ircclient import IrcClient 
23   
24   
25 -class irc(Interface):
26 - def run(self):
27 event_send = Event(event='send', interface='irc', 28 identifier=self.identifier) 29 subscribe(event_send, self.send_handler) 30 event_history = Event(event='history', interface='irc', 31 identifier=self.identifier) 32 subscribe(event_history, self.history_handler) 33 event_rcv = Event(event='receive', interface='irc', 34 identifier=self.identifier) 35 subscribe(event_rcv, self.rcv_handler) 36 37 self.store = '' 38 self.update_db() 39 server = self.conf['server'] 40 port = int(self.conf['port']) 41 nick = self.conf['nick'] 42 channels = [i.strip() for i in self.conf['channels'].split(',')] 43 self.log(_("Connect to %(server)s:%(port)s nick:%(nick)s " \ 44 "channels:%(channels)s") % self.conf) 45 46 try: 47 self.irc = IrcClient(self.identifier, channels, nick, server, port) 48 self.irc.start() 49 except irclib.ServerConnectionError, x: 50 self.log(_("error conecting to server: %s") % x)
51
52 - def send_handler(self, event, data):
53 time = 0.2 54 for line in data['Body'].split('\n'): 55 self.irc.send(data['To'], line, data['Type']) 56 sleep(time) 57 if time < 1: # to prevent flooding the sleep time increases 58 time += 0.05
59
60 - def history_handler(self, event, data):
61 if data[0] == 'start': 62 self.store = data[1] 63 elif data[0] == 'stop': 64 self.store = '' 65 elif data[0] == 'get': 66 name = data[1] 67 try: 68 res = self.db.find({'session': name}) 69 except Exception: 70 self.log(_("db request error.")) 71 res = [] 72 return [i for i in res] 73 else: 74 self.log(_("Not valid command for history: ") + data[0], 75 logging.ERROR)
76
77 - def rcv_handler(self, event, data):
78 if not self.store: 79 return 80 81 dmsg = dict(data) 82 dmsg['session'] = self.store 83 self.db.insert(dmsg)
84