forked from nyctef/sweetiebot
-
Notifications
You must be signed in to change notification settings - Fork 0
/
sweetiewatch.py
90 lines (69 loc) · 2.37 KB
/
sweetiewatch.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
from datetime import datetime
from modules import SweetieMQ
import json
import random
import logging
from time import sleep
from sleekxmpp.clientxmpp import ClientXMPP
from sleekxmpp.jid import JID
import traceback
import sys
class RestartException(Exception):
pass
log = logging.getLogger(__name__)
class SweetieWatch():
PING_FREQUENCY = 60
def randomstr(self):
return ('%08x' % random.randrange(16**8))
def __init__(self, jid, password, room, nick, mq):
self.nick = nick
self.room = room
self.jid = JID(jid)
bot = ClientXMPP(jid, password)
# disable ipv6 for now since we're getting errors using it
bot.use_ipv6 = False
bot.add_event_handler('session_start', self.on_start)
bot.add_event_handler('message', self.on_message)
bot.register_plugin('xep_0045')
self._muc = bot.plugin['xep_0045']
bot.register_plugin('xep_0199')
bot.plugin['xep_0199'].enable_keepalive(30, 30)
resource = 'sweetiewatch' + self.randomstr()
self.mq = mq
if not bot.connect(): raise 'could not connect'
bot.process()
self._bot = bot
def on_start(self, event):
print('sb on_start')
self._bot.get_roster()
self._bot.send_presence(ppriority=0)
print('sb join {} as {}'.format(self.room, self.nick))
self._muc.joinMUC(self.room, self.nick, wait=True)
def on_message(self, message_stanza):
type = message_stanza['type']
if (type not in ['groupchat', 'chat']):
return
message = message_stanza['body']
speaker = message_stanza['from']
timestamp = datetime.utcnow()
jsonstr = json.dumps({
'message': message,
'room': speaker.node,
'server': speaker.domain,
'speaker': speaker.resource,
'timestamp': timestamp.isoformat(' ')
})
print('sending '+str(jsonstr))
self.mq.send(jsonstr.encode('utf-8'))
if __name__ == '__main__':
import config
logging.getLogger().setLevel(logging.DEBUG)
try:
watch = SweetieWatch(config.username, config.password, config.chatroom,
config.nickname, SweetieMQ(config))
while True: sleep(1)
except KeyboardInterrupt:
sys.exit(0)
except Exception:
traceback.print_exc()
sys.exit(1)