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):
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
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:
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
78 if not self.store:
79 return
80
81 dmsg = dict(data)
82 dmsg['session'] = self.store
83 self.db.insert(dmsg)
84