def handle_kick(self, activity: Activity): kicker_id = activity.actor.id if kicker_id == '0': kicker_name = 'admin' else: try: kicker_name = activity.actor.display_name or utils.get_user_name_for( kicker_id) except NoSuchUserException: # if kicking from rest api the user might not exist logger.error('no such user when kicking: %s' % kicker_id) return kicked_id = activity.object.id kicked_name = activity.object.display_name or utils.get_user_name_for( kicked_id) kicked_sids = utils.get_sids_for_user_id(kicked_id) room_id = activity.target.id if room_id is not None: room_name = utils.get_room_name(room_id) else: room_name = activity.target.display_name namespace = activity.target.url if kicked_sids is None or len(kicked_sids) == 0 or kicked_sids == [ None ] or kicked_sids[0] == '': logger.warning('no sid(s) found for user id %s' % kicked_id) return reason = None if hasattr(activity.object, 'content'): reason = activity.object.content activity_json = utils.activity_for_user_kicked(kicker_id, kicker_name, kicked_id, kicked_name, room_id, room_name, reason) try: # user just got banned globally, kick from all rooms if room_id is None or room_id == '': room_keys = self.env.db.rooms_for_user(kicked_id).copy().keys() for room_key in room_keys: self.kick(activity_json, activity, room_key, kicked_id, kicked_sids, namespace) else: self.kick(activity_json, activity, room_id, kicked_id, kicked_sids, namespace) except KeyError as e: logger.error('could not kick user %s: %s' % (kicked_id, str(e))) self.env.capture_exception(sys.exc_info())
def test_activity_for_user_kicked(self): self.assertIsNotNone(utils.activity_for_user_kicked('1', '2', '3', '4', '5', '6'))