Lichess API - я получаю HTTPError 400 при попытке потоковой передачи состояния игры - PullRequest
0 голосов
/ 23 мая 2019

Я пишу приложение, которое взаимодействует с Lichess.Однако, когда я использую API для получения состояния игры, я должен использовать

for event in client.bots.stream_game_state(game_id):

, как указано в документации.Фактически, это именно тот код, который они используют в своем примере.Однако я получаю следующую ошибку:

runfile('C:/Users/David/.spyder-py3/robot.py', wdir='C:/Users/David/.spyder-py3')
The game has started!
Traceback (most recent call last):

  File "<ipython-input-31-24ee75ee6f26>", line 1, in <module>
    runfile('C:/Users/David/.spyder-py3/robot.py', wdir='C:/Users/David/.spyder-py3')

  File "C:\Users\David\Anaconda3\lib\site-packages\spyder_kernels\customize\spydercustomize.py", line 786, in runfile
    execfile(filename, namespace)

  File "C:\Users\David\Anaconda3\lib\site-packages\spyder_kernels\customize\spydercustomize.py", line 110, in execfile
    exec(compile(f.read(), filename, 'exec'), namespace)

  File "C:/Users/David/.spyder-py3/robot.py", line 42, in <module>
    for event in client.bots.stream_game_state(game_id):

  File "C:\Users\David\Anaconda3\lib\site-packages\berserk\clients.py", line 423, in stream_game_state
    converter=models.GameState.convert)

  File "C:\Users\David\Anaconda3\lib\site-packages\berserk\session.py", line 49, in get
    return self.request('GET', *args, **kwargs)

  File "C:\Users\David\Anaconda3\lib\site-packages\berserk\session.py", line 42, in request
    response.raise_for_status()

  File "C:\Users\David\Anaconda3\lib\site-packages\requests\models.py", line 940, in raise_for_status
    raise HTTPError(http_error_msg, response=self)

HTTPError: 400 Client Error: Bad Request for url: https://lichess.org/api/bot/game/stream/8Kjolz4k

Вот мой код:

# Type "!pip install berserk" in Console to get berserk module
import berserk
import time
import threading

# Initiate a session with my personal API token
token = "***************"
session = berserk.TokenSession(token)
client = berserk.Client(session)

# Stream whats happening and continue when we are challenged
in_game = False
while(not in_game):
    time.sleep(0.5)
    for event in client.bots.stream_incoming_events():
        if event['type'] == 'gameStart':
            game_id = event['game']['id']
            in_game = True
            break
        elif event['type'] == 'challenge':
            game_id = event['challenge']['id']
            client.bots.accept_challenge(game_id)
            in_game = True
print("The game has started!")

# Stream the events of the game and respond accordingly
playing = True
while(playing):
    for event in client.bots.stream_game_state(game_id):
        if event['type'] == 'gameFull':
            if client.account.get()['username'] == event['white']['id']:
                client.bots.post_message(game_id, "I got first, nerd!")
            else:
                client.bots.post_message(game_id, "You got first, nerd!")
...