def __init__(self, game_name, user_agent='pymetabans'): self._game_name = self._getMetabansGameName(game_name) self._metabans = Metabans(user_agent=user_agent)
class MetabansProxy(object): _reColor = re.compile(r'(\^[0-9])') group_name = None def __init__(self, game_name, user_agent='pymetabans'): self._game_name = self._getMetabansGameName(game_name) self._metabans = Metabans(user_agent=user_agent) @property def username(self): return self._metabans.username @username.setter def username(self, value): self._metabans.username = value @property def apikey(self): return self._metabans.apikey @apikey.setter def apikey(self, value): self._metabans.apikey = value def _getMetabansGameName(self, B3_game_name): if B3_game_name == 'bfbc2': return "BF_BC2" elif B3_game_name == 'moh': return "MOH_2010" elif B3_game_name == 'cod4': return "COD_4" elif B3_game_name == 'cod5': return "COD_5" elif B3_game_name == 'cod6': return "COD_6" elif B3_game_name == 'cod7': return "COD_7" elif B3_game_name == 'homefront': return "HOMEFRONT" elif B3_game_name == 'bf3': return "BF_3" else: raise UnsupportedGameError, "unsupported game %s" % B3_game_name def _stripColors(self, text): return re.sub(self._reColor, '', text).strip() def sight(self, client): if client: metabans_player = Player(client.guid, client.name, client.ip, client.pbid) return self._metabans.mb_sight_player(self._game_name, metabans_player, self.group_name) def check(self, client): if client: return self._metabans.mbo_player_status(self._game_name, client.guid) def clear(self, client, reason=None): """remove any assessment on the client""" if client: return self._metabans.mb_assess_player(game_name=self._game_name, player_uid=client.guid, assessment_type='none', reason=self._stripColors(reason)) def watch(self, client, duration=None, reason=None): """set the 'watch' assessment on the client duration is in second""" if client: return self._metabans.mb_assess_player(game_name=self._game_name, player_uid=client.guid, assessment_type='watch', assessment_length=duration, reason=self._stripColors(reason)) def ban(self, client, duration=None, reason=None): """set the 'black' assessment on the client duration is in second""" if client: return self._metabans.mb_assess_player(game_name=self._game_name, player_uid=client.guid, assessment_type='black', assessment_length=duration, reason=self._stripColors(reason)) def protect(self, client, duration=None, reason=None): """set the 'white' assessment on the client duration is in second""" if client: return self._metabans.mb_assess_player(game_name=self._game_name, player_uid=client.guid, assessment_type='white', assessment_length=duration, reason=self._stripColors(reason)) def send_bulk_queries(self, queries): """send a bunch of queries in one single call to the metabans API""" nb_queries = 0 query_parameters = {} for query in queries: for k, v in query.iteritems(): query_parameters['requests[%d][%s]' % (nb_queries, k)] = v nb_queries += 1 responses = self._metabans._query(query_parameters) errors = [] success = [] fetch_times = {} for r in responses: if 'status' in r and r['status'] == 'OK': success.append(r) key = r['request']['action'] else: errors.append(r) key = r['request']['action'] + '_error_%s' % r['error']['code'] if not key in fetch_times: fetch_times[key] = [] fetch_times[key].append(float(r['fetch_time'].rstrip(' s')) * 1000) return (success, errors, fetch_times)