4
4
5
5
from . import config
6
6
from . import model
7
+ from . import utils
7
8
8
9
import json
9
10
@@ -25,26 +26,34 @@ def event_name_valid(eventname):
25
26
return eventname .lower () in EVENTS
26
27
27
28
28
- def _handle_subscribe_request (msg ):
29
- """ handle a request to subscribe to events as a bot"""
30
- parts = msg .dataviews ()
31
- name = None
32
- if len (parts ) == 1 :
33
- name = parts [0 ].decode ('ascii' ).lower ()
34
- if name is None :
35
- raise Exception ('no event name provided' )
36
- if event_name_valid (name ):
29
+ def _sub_conn_to_event (name , conn ):
30
+ """ subscribe a connection to an event type """
31
+ if not event_name_valid (name ):
37
32
raise Exception ('invalid event name: {}' .format (name ))
38
33
pool = _pools .get (name )
39
34
if msg .conn in pool :
40
35
raise Exception ('already subscribed to {}' .format (name ))
41
- pool .append (msg .conn )
36
+ pool .append (conn )
37
+
38
+
39
+ def _handle_subscribe_request (msg ):
40
+ """ handle a request to subscribe to events as a bot"""
41
+ for name in msg .dataviews ():
42
+ name = utils .bytes_to_lower_str (name )
43
+ if name in ('all' , '*' ):
44
+ # subscribe to all events
45
+ for ev in EVENTS :
46
+ _sub_conn_to_event (ev , msg .conn )
47
+ return
48
+ _sub_conn_to_event (name , msg .conn )
49
+ else :
50
+ raise Exception ("no events selected" )
42
51
43
52
44
53
def _handle_find_room (metric , query , encode = json .dumps ):
45
54
""" find a room """
46
55
if metric == 'id' :
47
- room = model .Room (id = query )
56
+ room = model .Room (id = int ( query ) )
48
57
elif metric == 'token' :
49
58
room = model .Room (token = query )
50
59
else :
@@ -60,7 +69,7 @@ def _handle_find_room(metric, query, encode=json.dumps):
60
69
def _handle_find_user (metric , query , encode = json .dumps ):
61
70
""" find a user """
62
71
if metric == 'id' :
63
- user = model .User (id = query )
72
+ user = model .User (id = int ( query ) )
64
73
elif metric == 'pubkey' :
65
74
user = model .User (session_id = query )
66
75
else :
@@ -71,20 +80,15 @@ def _handle_find_user(metric, query, encode=json.dumps):
71
80
return encode (reply )
72
81
73
82
74
- def _decode_str (data ):
75
- """ decode bytes to lowercase string """
76
- return data .decode ('utf-8' ).lower ()
77
-
78
-
79
83
def _handle_find_request (msg ):
80
84
""" finds a user / room by id / token / pubkey """
81
85
parts = msg .dataviews ()
82
86
if len (parts ) != 3 :
83
87
raise Exception ('3 arguments required: entity-kind, query-metric, query-value' )
84
88
85
- kind = _decode_str (parts [0 ])
86
- metric = _decode_str (parts [1 ])
87
- query = _decode_str (parts [2 ])
89
+ kind = utils . bytes_to_lower_str (parts [0 ])
90
+ metric = utils . bytes_to_lower_str (parts [1 ])
91
+ query = utils . bytes_to_lower_str (parts [2 ])
88
92
89
93
_kinds = {'room' : _handle_find_room , 'user' : _handle_find_user }
90
94
@@ -98,8 +102,8 @@ def _handle_mod_ban(msg):
98
102
parts = msg .dataviews ()
99
103
if len (parts ) < 2 :
100
104
raise Exception ("Not enough arguments, need 2 arguments: user_id, room_id" )
101
- room_id = int (_decode_str (parts [1 ]))
102
- user_id = int (_decode_str (parts [0 ]))
105
+ room_id = int (utils . bytes_to_lower_str (parts [1 ]))
106
+ user_id = int (utils . bytes_to_lower_str (parts [0 ]))
103
107
room = model .Room (id = room_id )
104
108
user = model .User (id = user_id )
105
109
if not model .ban_user (None , room , user ):
0 commit comments