1
# gozerplugs/eventnet.py
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
21
from simplejson import dumps
30
outurl = "http://cmndtest.appspot.com/eventnet/"
32
state = PlugPersist('eventnet')
36
if not state.data.has_key('relay'):
37
state.data['relay'] = []
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', [])
46
waitre = re.compile(' wait (\d+)', re.I)
47
hp = "%s:%s" % (cfg.get('host'), cfg.get('port'))
48
url = "http://%s" % hp
52
def preremote(bot, event):
54
if event.channel in state.data['relay']:
57
def handle_doremote(bot, event):
62
posturl(outurl, {}, {'event': event.tojson() })
64
callbacks.add('PRIVMSG', handle_doremote, preremote, threaded=True)
65
outmonitor.add('eventnet', handle_doremote, preremote, threaded=True)
67
def handle_jabberin(bot, event):
69
if event.isremote or not event.txt:
73
if event.txt.startswith('{'):
75
e.fromjsonstring(event.txt)
77
rlog(10, bot.name, 'got event on jabberin: %s - %s ' % (e.userhost, str(e)))
78
callbacks.check(bot, e)
84
jcallbacks.add('Message', handle_jabberin)
90
def eventnet_POST(server, request):
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"])
100
event.fromjsonstring(eventin)
101
callbacks.check(event)
102
return dumps(['ok',])
104
def eventnet_GET(server, request):
106
path, eventin = request.path.split('#', 1)
108
rlog(10, 'eventnet', "can't determine eventin")
109
return dumps(["can't determine eventin", ])
113
event.fromjsonstring(eventin)
114
callbacks.check(event)
115
except Exception, ex:
117
return dumps(['ok', ])
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)
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)
133
for mount in cfg.get('disable'):
134
server.disable(mount)
137
rlog(10, 'eventnet', 'failed to start server at %s:%s' % (cfg.get('host'), cfg.get('port')))
139
except socket.error, ex:
140
rlog(10, 'eventnet - server', str(ex))
142
except Exception, ex:
149
rlog(10, 'eventnet', 'server is already stopped')
154
except Exception, ex:
170
def handle_eventnet_on(bot, event):
173
target = event.channel
177
if not target in state.data['relay']:
178
state.data['relay'].append(target)
183
cmnds.add('eventnet-on', handle_eventnet_on, 'OPER')
185
def handle_eventnet_off(bot, event):
188
target = event.channel
192
if target in state.data['relay']:
193
state.data['relay'].remove(target)
197
cmnds.add('eventnet-off', handle_eventnet_off, 'OPER')
199
def handle_eventnet_startserver(bot, event):
205
cmnds.add('eventnet-startserver', handle_eventnet_startserver, 'OPER')
207
def handle_eventnet_stopserver(bot, event):
213
cmnds.add('eventnet-stopserver', handle_eventnet_stopserver, 'OPER')