~ubuntu-branches/ubuntu/utopic/gozerbot/utopic

« back to all changes in this revision

Viewing changes to build/lib/gplugs/eventnet.py

  • Committer: Package Import Robot
  • Author(s): Jeremy Malcolm
  • Date: 2012-04-03 21:58:28 UTC
  • mfrom: (3.1.11 sid)
  • Revision ID: package-import@ubuntu.com-20120403215828-6mik0tzug5na93la
Tags: 0.99.1-2
* Removes logfiles on purge (Closes: #668767)
* Reverted location of installed files back to /usr/lib/gozerbot.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
# gozerplugs/eventnet.py
 
2
#
 
3
#
 
4
 
 
5
## gozerbot imports
 
6
 
 
7
from gozerbot.callbacks import callbacks, jcallbacks
 
8
from gozerbot.utils.url import posturl, getpostdata
 
9
from gozerbot.persist.persist import PlugPersist
 
10
from gozerbot.commands import cmnds
 
11
from gozerbot.irc.monitor import outmonitor
 
12
from gozerbot.persist.persistconfig import PersistConfig
 
13
from gozerbot.rest.server import RestServer, RestRequestHandler
 
14
from gozerbot.eventbase import EventBase
 
15
from gozerbot.utils.exception import handle_exception
 
16
from gozerbot.utils.log import rlog
 
17
from gozerbot.utils.textutils import html_unescape
 
18
 
 
19
## simplejson imports
 
20
 
 
21
from simplejson import dumps
 
22
 
 
23
## basic imports
 
24
 
 
25
import socket
 
26
import re
 
27
 
 
28
## VARS
 
29
 
 
30
outurl = "http://cmndtest.appspot.com/eventnet/"
 
31
 
 
32
state = PlugPersist('eventnet')
 
33
 
 
34
if not state.data:
 
35
    state.data = {}
 
36
if not state.data.has_key('relay'):
 
37
    state.data['relay'] = []
 
38
 
 
39
cfg = PersistConfig()
 
40
cfg.define('enable', 0)
 
41
cfg.define('host' , socket.gethostbyname(socket.getfqdn()))
 
42
cfg.define('name' , socket.getfqdn())
 
43
cfg.define('port' , 10102)
 
44
cfg.define('disable', [])
 
45
 
 
46
waitre = re.compile(' wait (\d+)', re.I)
 
47
hp = "%s:%s" % (cfg.get('host'), cfg.get('port'))
 
48
url = "http://%s" % hp
 
49
 
 
50
## callbacks
 
51
 
 
52
def preremote(bot, event):
 
53
 
 
54
    if event.channel in state.data['relay']:
 
55
        return True
 
56
 
 
57
def handle_doremote(bot, event):
 
58
 
 
59
    if event.isremote:
 
60
        return
 
61
 
 
62
    posturl(outurl, {}, {'event': event.tojson() })
 
63
 
 
64
callbacks.add('PRIVMSG', handle_doremote, preremote, threaded=True)
 
65
outmonitor.add('eventnet', handle_doremote, preremote, threaded=True)
 
66
 
 
67
def handle_jabberin(bot, event):
 
68
 
 
69
    if event.isremote or not event.txt:
 
70
        return
 
71
 
 
72
    try:
 
73
        if event.txt.startswith('{'):
 
74
            e = EventBase()
 
75
            e.fromjsonstring(event.txt)
 
76
            e.isremote = True
 
77
            rlog(10, bot.name, 'got event on jabberin: %s - %s ' % (e.userhost, str(e)))
 
78
            callbacks.check(bot, e)
 
79
    except Exception, ex:
 
80
        handle_exception()
 
81
        print event.txt
 
82
        return
 
83
    
 
84
jcallbacks.add('Message', handle_jabberin)
 
85
 
 
86
## server part
 
87
 
 
88
server = None
 
89
 
 
90
def eventnet_POST(server, request):
 
91
 
 
92
    try:
 
93
        input = getpostdata(request)
 
94
        eventin = input['event']
 
95
    except KeyError, AttributeError:
 
96
        rlog(10, 'eventnet', "can't determine eventin")
 
97
        return dumps(["can't determine eventin"])
 
98
 
 
99
    event = EventBase()
 
100
    event.fromjsonstring(eventin)
 
101
    callbacks.check(event)
 
102
    return dumps(['ok',])
 
103
 
 
104
def eventnet_GET(server, request):
 
105
    try:
 
106
        path, eventin = request.path.split('#', 1)
 
107
    except ValueError:
 
108
        rlog(10, 'eventnet', "can't determine eventin")
 
109
        return dumps(["can't determine eventin", ])
 
110
 
 
111
    try:
 
112
        event = EventBase()
 
113
        event.fromjsonstring(eventin)
 
114
        callbacks.check(event)
 
115
    except Exception, ex:
 
116
        handle_exception()
 
117
    return dumps(['ok', ])
 
118
 
 
119
def startserver():
 
120
 
 
121
    global server 
 
122
 
 
123
    try:
 
124
        rlog(10, 'eventnet', 'starting server at %s:%s' % (cfg.get('host'), cfg.get('port')))
 
125
        server = RestServer((cfg.get('host'), cfg.get('port')), RestRequestHandler)
 
126
 
 
127
        if server:
 
128
            server.start()
 
129
            rlog(10, 'eventnet', 'running at %s:%s' % (cfg.get('host'), cfg.get('port')))
 
130
            server.addhandler('/eventnet/', 'POST', eventnet_POST)
 
131
            server.addhandler('/eventnet/', 'GET', eventnet_GET)
 
132
 
 
133
            for mount in cfg.get('disable'):
 
134
                server.disable(mount)
 
135
 
 
136
        else:
 
137
            rlog(10, 'eventnet', 'failed to start server at %s:%s' % (cfg.get('host'), cfg.get('port')))
 
138
 
 
139
    except socket.error, ex:
 
140
        rlog(10, 'eventnet - server', str(ex))
 
141
 
 
142
    except Exception, ex:
 
143
        handle_exception()
 
144
 
 
145
def stopserver():
 
146
 
 
147
    try:
 
148
        if not server:
 
149
            rlog(10, 'eventnet', 'server is already stopped')
 
150
            return
 
151
 
 
152
        server.shutdown()
 
153
 
 
154
    except Exception, ex:
 
155
        handle_exception()
 
156
        pass
 
157
 
 
158
## plugin init
 
159
 
 
160
def init():
 
161
 
 
162
    if cfg['enable']:
 
163
        startserver()
 
164
 
 
165
def shutdown():
 
166
 
 
167
    if cfg['enable']:
 
168
        stopserver()
 
169
 
 
170
def handle_eventnet_on(bot, event):
 
171
 
 
172
    if not event.rest:
 
173
        target = event.channel
 
174
    else:
 
175
        target = event.rest
 
176
 
 
177
    if not target in state.data['relay']:
 
178
        state.data['relay'].append(target)
 
179
        state.save()
 
180
 
 
181
    event.done()
 
182
 
 
183
cmnds.add('eventnet-on', handle_eventnet_on, 'OPER')
 
184
 
 
185
def handle_eventnet_off(bot, event):
 
186
 
 
187
    if not event.rest:
 
188
        target = event.channel
 
189
    else:
 
190
        target = event.rest
 
191
 
 
192
    if target in state.data['relay']:
 
193
        state.data['relay'].remove(target)
 
194
        state.save()
 
195
    event.done()
 
196
 
 
197
cmnds.add('eventnet-off', handle_eventnet_off, 'OPER')
 
198
 
 
199
def handle_eventnet_startserver(bot, event):
 
200
    cfg['enable'] = 1
 
201
    cfg.save()
 
202
    startserver()
 
203
    event.done()
 
204
 
 
205
cmnds.add('eventnet-startserver', handle_eventnet_startserver, 'OPER')
 
206
 
 
207
def handle_eventnet_stopserver(bot, event):
 
208
    cfg['enable'] = 0
 
209
    cfg.save()
 
210
    stopserver()
 
211
    event.done()
 
212
 
 
213
cmnds.add('eventnet-stopserver', handle_eventnet_stopserver, 'OPER')