@@ -71,17 +71,20 @@ def _handle_find_user(metric, query, encode=json.dumps):
71
71
return encode (reply )
72
72
73
73
74
+ def _decode_str (data ):
75
+ """ decode bytes to lowercase string """
76
+ return data .decode ('utf-8' ).lower ()
77
+
78
+
74
79
def _handle_find_request (msg ):
75
80
""" finds a user / room by id / token / pubkey """
76
81
parts = msg .dataviews ()
77
82
if len (parts ) != 3 :
78
83
raise Exception ('3 arguments required: entity-kind, query-metric, query-value' )
79
84
80
- decode = lambda x : x .decode ('utf-8' ).lower ()
81
-
82
- kind = decode (parts [0 ])
83
- metric = decode (parts [1 ])
84
- query = decode (parts [2 ])
85
+ kind = _decode_str (parts [0 ])
86
+ metric = _decode_str (parts [1 ])
87
+ query = _decode_str (parts [2 ])
85
88
86
89
_kinds = {'room' : _handle_find_room , 'user' : _handle_find_user }
87
90
@@ -90,6 +93,19 @@ def _handle_find_request(msg):
90
93
raise Exception ("cannot find a '{}' we dont have those" .format (kind ))
91
94
92
95
96
+ def _handle_mod_ban (msg ):
97
+ """ handle a ban user from room rqeuest """
98
+ parts = msg .dataviews ()
99
+ if len (parts ) < 2 :
100
+ 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 ]))
103
+ room = model .Room (id = room_id )
104
+ user = model .User (id = user_id )
105
+ if not model .ban_user (None , room , user ):
106
+ raise Exception ("user not banned" )
107
+
108
+
93
109
def _propagate_event (eventname , * args ):
94
110
""" propagate an event to everyone who cares about it """
95
111
assert event_name_valid (eventname )
@@ -122,6 +138,7 @@ def start():
122
138
_bot_category .add_request_handler (
123
139
'find' , lambda msg : _handle_request (_handle_find_request , msg )
124
140
)
141
+ _bot_category .add_request_handler ('ban' , lambda msg : _handle_request (_handle_mod_ban , msg ))
125
142
126
143
for addr in config .API_ADDRS :
127
144
# TODO: implement curve?
0 commit comments