def clean(self): email = self.cleaned_data.get("email") password = self.cleaned_data.get("password") if email is not None and password: email = email.lower().strip() try: data = { "jsonrpc": "2.0", "method": "authorize", "params": { "email": email, "password": password }, "id": make_random_letters_and_digit_string(), } headers = {"X-Auth-Token": settings.PANTHEON_ADMIN_TOKEN} response = requests.post(settings.PANTHEON_AUTH_API_URL, json=data, headers=headers) if response.json().get("error"): raise self.get_invalid_login_error() pantheon_id, auth_token = response.json()["result"] data = { "jsonrpc": "2.0", "method": "me", "params": { "id": pantheon_id, "clientSideToken": auth_token }, "id": make_random_letters_and_digit_string(), } headers = {"X-Auth-Token": settings.PANTHEON_ADMIN_TOKEN} response = requests.post(settings.PANTHEON_AUTH_API_URL, json=data, headers=headers) if response.json().get("error"): raise self.get_invalid_login_error() assert response.json()["result"]["email"] self.user_data = response.json()["result"] except Exception as e: capture_exception(e) raise self.get_invalid_login_error() from None return self.cleaned_data
def disable_user_in_pantheon(request, record_id): record = TournamentPlayers.objects.get(id=record_id) headers = { 'X-Auth-Token': settings.PANTHEON_ADMIN_TOKEN, } # The first step is update player tenhou nickname data = { 'jsonrpc': '2.0', 'method': 'updatePlayerSeatingFlagCP', 'params': { 'playerId': record.pantheon_id, 'eventId': settings.PANTHEON_EVENT_ID, 'ignoreSeating': 1, }, 'id': make_random_letters_and_digit_string() } response = requests.post(settings.PANTHEON_URL, json=data, headers=headers) if response.status_code == 500: return HttpResponse('Disable player. 500 response') content = response.json() if content.get('error'): return HttpResponse('Disable player. Pantheon error: {}'.format( content.get('error'))) record.enabled_in_pantheon = False record.save() return redirect(request.META.get('HTTP_REFERER'))
def send_team_names_to_pantheon(self): registrations = TournamentPlayers.objects.filter( tournament=self.tournament) team_names = {} for registration in registrations: team_names[registration.pantheon_id] = registration.team_name data = { "jsonrpc": "2.0", "method": "updatePlayersTeams", "params": { "eventId": settings.PANTHEON_TOURNAMENT_EVENT_ID, "teamNameMap": team_names }, "id": make_random_letters_and_digit_string(), } headers = {"X-Auth-Token": settings.PANTHEON_ADMIN_TOKEN} response = requests.post(settings.PANTHEON_OLD_API_URL, json=data, headers=headers) if response.status_code == 500: logger.error("Log add. Pantheon 500.") return "Pantheon 500 error" content = response.json() if content.get("error"): logger.error("Log add. Pantheon error. {}".format( content.get("error"))) return "Pantheon {} error".format(content.get("error")) return "Готово"
def get_pantheon_swiss_sortition(): data = { "jsonrpc": "2.0", "method": "generateSwissSeating", "params": { "eventId": settings.PANTHEON_TOURNAMENT_EVENT_ID }, "id": make_random_letters_and_digit_string(), } headers = {"X-Auth-Token": settings.PANTHEON_ADMIN_TOKEN} response = requests.post(settings.PANTHEON_OLD_API_URL, json=data, headers=headers) if response.status_code == 500: logger.error("Make sortition. Pantheon 500.") return [] content = response.json() if content.get("error"): logger.error("Make sortition. Pantheon error. {}".format( content.get("error"))) return [] return content["result"]
def add_penalty_game(request, game_id): game = TournamentGame.objects.get(id=game_id) headers = {"X-Auth-Token": settings.PANTHEON_ADMIN_TOKEN} data = { "jsonrpc": "2.0", "method": "addPenaltyGame", "params": { "eventId": settings.PANTHEON_EVENT_ID, "players": [x.player.pantheon_id for x in game.game_players.all()], }, "id": make_random_letters_and_digit_string(), } response = requests.post(settings.PANTHEON_URL, json=data, headers=headers) if response.status_code == 500: return HttpResponse("addPenaltyGame. 500 response") content = response.json() if content.get("error"): return HttpResponse("addPenaltyGame. Pantheon error: {}".format( content.get("error"))) handler = TournamentHandler() handler.init(tournament=Tournament.objects.get(id=settings.TOURNAMENT_ID), lobby="", game_type="", destination="") player_names = handler.get_players_message_string( [x.player for x in game.game_players.all()]) handler.create_notification(TournamentNotification.GAME_PENALTY, {"player_names": player_names}) handler.check_round_was_finished() return redirect(request.META.get("HTTP_REFERER"))
def disable_user_in_pantheon(request, record_id): record = TournamentPlayers.objects.get(id=record_id) headers = {"X-Auth-Token": settings.PANTHEON_ADMIN_TOKEN} data = { "jsonrpc": "2.0", "method": "updatePlayerSeatingFlagCP", "params": { "playerId": record.pantheon_id, "eventId": settings.PANTHEON_EVENT_ID, "ignoreSeating": 1 }, "id": make_random_letters_and_digit_string(), } response = requests.post(settings.PANTHEON_URL, json=data, headers=headers) if response.status_code == 500: return HttpResponse("Disable player. 500 response") content = response.json() if content.get("error"): return HttpResponse("Disable player. Pantheon error: {}".format( content.get("error"))) record.enabled_in_pantheon = False record.save() return redirect(request.META.get("HTTP_REFERER"))
def toggle_replacement_flag_in_pantheon(request, record_id): record = TournamentPlayers.objects.get(id=record_id) headers = {"X-Auth-Token": settings.PANTHEON_ADMIN_TOKEN} new_is_replacement = not record.is_replacement data = { "jsonrpc": "2.0", "method": "updatePlayer", "params": { "id": record.pantheon_id, "ident": "", "alias": "", "displayName": "", "tenhouId": record.tenhou_username, "isReplacement": new_is_replacement, }, "id": make_random_letters_and_digit_string(), } response = requests.post(settings.PANTHEON_URL, json=data, headers=headers) if response.status_code == 500: return HttpResponse("updatePlayer. 500 response") content = response.json() if content.get("error"): return HttpResponse("updatePlayer. Pantheon error: {}".format( content.get("error"))) record.is_replacement = new_is_replacement record.save() return redirect(request.META.get("HTTP_REFERER"))
def _pantheon_swiss_sortition(self): data = { 'jsonrpc': '2.0', 'method': 'generateSwissSeating', 'params': { 'eventId': settings.PANTHEON_EVENT_ID, }, 'id': make_random_letters_and_digit_string() } headers = { 'X-Auth-Token': settings.PANTHEON_ADMIN_TOKEN, } response = requests.post(settings.PANTHEON_URL, json=data, headers=headers) if response.status_code == 500: logger.error('Make sortition. Pantheon 500.') return [] content = response.json() if content.get('error'): logger.error('Make sortition. Pantheon error. {}'.format( content.get('error'))) return [] return content['result']
def add_game_log(self, log_link): error_message = 'Это не похоже на лог игры.' log_link = log_link.strip() if not log_link.startswith('http://tenhou.net/'): return error_message attributes = parse_qs(urlparse(log_link).query) if 'log' not in attributes: return error_message log_id = attributes['log'][0] try: parser = TenhouParser() players = parser.get_player_names(log_id) except HTTPError: return 'Не получилось. Возможно тенха не успела сохранить игру или вы скопировали не весь log id.' if TournamentGame.objects.filter(log_id=log_id).exists(): return 'Игра уже была добавлена в систему. Спасибо.' games = (TournamentGame.objects.filter( tournament=self.tournament).filter( game_players__player__tenhou_username__in=players).filter( tournament_round=self.status.current_round).distinct()) if games.count() >= 2: logger.error('Log add. Too much games.') return 'Призошла ошибка при добавлении лога. Обратитесь к администратору.' game = games.first() data = { 'jsonrpc': '2.0', 'method': 'addOnlineReplay', 'params': { 'eventId': settings.PANTHEON_EVENT_ID, 'link': log_link }, 'id': make_random_letters_and_digit_string() } response = requests.post(settings.PANTHEON_URL, json=data) if response.status_code == 500: logger.error('Log add. Pantheon 500.') return 'Призошла ошибка при добавлении лога. Обратитесь к администратору.' content = response.json() if content.get('error'): logger.error('Log add. Pantheon error. {}'.format( content.get('error'))) return 'Призошла ошибка при добавлении лога. Обратитесь к администратору.' game.log_id = log_id game.status = TournamentGame.FINISHED game.save() return 'Игра была добавлена. Спасибо.'
def add_tenhou_game_to_pantheon(log_link: str): data = { "jsonrpc": "2.0", "method": "addOnlineReplay", "params": {"eventId": settings.PANTHEON_EVENT_ID, "link": log_link}, "id": make_random_letters_and_digit_string(), } return requests.post(settings.PANTHEON_URL, json=data)
def __init__(self, bot_config, print_logs, replay_name, game_count): super().__init__(bot_config) self.id = make_random_letters_and_digit_string() self.player.name = bot_config.name if print_logs: settings.LOG_PREFIX = self.player.name logger = set_up_logging( save_to_file=True, print_to_console=False, logger_name=self.player.name + str(game_count) ) logger.info(f"Replay name: {replay_name}") self.player.init_logger(logger)
def create_player(self, country_code=None): if country_code: country, _ = Country.objects.get_or_create(code=country_code, name=country_code) else: country = self.country return Player.objects.create( first_name="test", last_name="test", slug=make_random_letters_and_digit_string(), country=country)
def create_tournament(self, players=1, sessions=1, start_date=None, end_date=None, tournament_type=Tournament.EMA): start_date = start_date or timezone.now().date() end_date = end_date or timezone.now().date() return Tournament.objects.create( name="test", slug=make_random_letters_and_digit_string(), start_date=start_date, end_date=end_date, country=self.country, tournament_type=tournament_type, number_of_players=players, number_of_sessions=sessions, )
def add_user_to_pantheon(self, player_pantheon_id): headers = {"X-Internal-Query-Secret": settings.PANTHEON_ADMIN_TOKEN} data = { "jsonrpc": "2.0", "method": "registerPlayerCP", "params": { "eventId": settings.LEAGUE_PANTHEON_EVENT_ID, "playerId": player_pantheon_id }, "id": make_random_letters_and_digit_string(), } response = requests.post(settings.PANTHEON_NEW_API_URL, json=data, headers=headers) if response.status_code == 500: raise Exception("Register player. 500 response") content = response.json() if content.get("error"): raise Exception("Register player. Pantheon error: {}".format( content.get("error")))
def __init__(self, use_previous_ai_version=False): self.table = Table(use_previous_ai_version) self.statistics = Statistics() self.player = self.table.get_main_player() self.id = make_random_letters_and_digit_string()
def add_user_to_the_pantheon(request, record_id): record = TournamentPlayers.objects.get(id=record_id) headers = { 'X-Auth-Token': settings.PANTHEON_ADMIN_TOKEN, } # The first step is update player tenhou nickname data = { 'jsonrpc': '2.0', 'method': 'updatePlayer', 'params': { 'id': record.pantheon_id, 'ident': '', 'alias': '', 'displayName': '', 'tenhouId': record.tenhou_username }, 'id': make_random_letters_and_digit_string() } response = requests.post(settings.PANTHEON_URL, json=data, headers=headers) if response.status_code == 500: return HttpResponse('Update player. 500 response') content = response.json() if content.get('error'): return HttpResponse('Update player. Pantheon error: {}'.format( content.get('error'))) # The second step is enroll player data = { 'jsonrpc': '2.0', 'method': 'enrollPlayerCP', 'params': { 'eventId': settings.PANTHEON_EVENT_ID, 'playerId': record.pantheon_id, }, 'id': make_random_letters_and_digit_string() } response = requests.post(settings.PANTHEON_URL, json=data, headers=headers) if response.status_code == 500: return HttpResponse('Enroll player. 500 response') content = response.json() if content.get('error'): return HttpResponse('Enroll player. Pantheon error: {}'.format( content.get('error'))) # The third step is register player data = { 'jsonrpc': '2.0', 'method': 'registerPlayerCP', 'params': { 'eventId': settings.PANTHEON_EVENT_ID, 'playerId': record.pantheon_id, }, 'id': make_random_letters_and_digit_string() } response = requests.post(settings.PANTHEON_URL, json=data, headers=headers) if response.status_code == 500: return HttpResponse('Register player. 500 response') content = response.json() if content.get('error'): return HttpResponse('Register player. Pantheon error: {}'.format( content.get('error'))) record.added_to_pantheon = True record.save() return redirect(request.META.get('HTTP_REFERER'))
def add_user_to_pantheon(record: TournamentPlayers): if not record.pantheon_id: return headers = {"X-Auth-Token": settings.PANTHEON_ADMIN_TOKEN} # The first step is update player tenhou nickname data = { "jsonrpc": "2.0", "method": "updatePlayer", "params": { "id": record.pantheon_id, "ident": "", "alias": "", "displayName": "", "tenhouId": record.tenhou_username, }, "id": make_random_letters_and_digit_string(), } response = requests.post(settings.PANTHEON_URL, json=data, headers=headers) if response.status_code == 500: return HttpResponse("Update player. 500 response") content = response.json() if content.get("error"): return HttpResponse("Update player. Pantheon error: {}".format( content.get("error"))) # The second step is enroll player data = { "jsonrpc": "2.0", "method": "enrollPlayerCP", "params": { "eventId": settings.PANTHEON_EVENT_ID, "playerId": record.pantheon_id }, "id": make_random_letters_and_digit_string(), } response = requests.post(settings.PANTHEON_URL, json=data, headers=headers) if response.status_code == 500: return HttpResponse("Enroll player. 500 response") content = response.json() if content.get("error"): return HttpResponse("Enroll player. Pantheon error: {}".format( content.get("error"))) # The third step is register player data = { "jsonrpc": "2.0", "method": "registerPlayerCP", "params": { "eventId": settings.PANTHEON_EVENT_ID, "playerId": record.pantheon_id }, "id": make_random_letters_and_digit_string(), } response = requests.post(settings.PANTHEON_URL, json=data, headers=headers) if response.status_code == 500: return HttpResponse("Register player. 500 response") content = response.json() if content.get("error"): return HttpResponse("Register player. Pantheon error: {}".format( content.get("error"))) record.added_to_pantheon = True record.save()