Torom / BotLi

Lichess Bot
GNU Affero General Public License v3.0
44 stars 82 forks source link

Dockerized version !printeval error #152

Closed FatFritz2 closed 9 months ago

FatFritz2 commented 9 months ago

Describe the bug When run in a dockerized version

C:\Users\Amazon\Downloads\BotLi-main>docker run -it local:latest
Traceback (most recent call last):
  File "//user_interface.py", line 325, in <module>
    ui = UserInterface(args.config, args.matchmaking, args.upgrade)
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "//user_interface.py", line 43, in __init__
    self.config = load_config(config_path)
                  ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/config.py", line 29, in load_config
    _check_messages(config['messages'])
  File "/config.py", line 211, in _check_messages
    if message.strip() == '!printeval':
       ^^^^^^^^^^^^^
AttributeError: 'list' object has no attribute 'strip'

Information:

Torom commented 9 months ago

sigh

Please post your config after removing your token.

Torom commented 9 months ago

2ab3ab2 gives clearer information on how you messed up your config

FatFritz2 commented 8 months ago

sigh

Please post your config after removing your token.

token: "token" # Lichess OAuth2 Token.

engines: standard: # Engine used for standard chess and when no suitable special engine is configured. dir: "./engines" # Directory containing the engine. name: "INCOGNITO 5 PRO-bmi2.exe" # Binary name of the engine to use. ponder: true # Think on opponent's time. use_syzygy: true # Whether the engine should be configured to use syzygy. silence_stderr: true # Suppresses stderr output. uci_options: # Arbitrary UCI options passed to the engine. (Commenting allowed) Threads: 4 # Max CPU threads the engine can use. Hash: 1024 # Max memory (in megabytes) the engine can allocate. Move Overhead: 2000 # Increase if your bot flags games too often. Ponder: true MultiPV: 1 Slow Mover: 105 Materialistic Evaluation Strategy : -50 Positional Evaluation Strategy: 96 Random Op. MultiPV: 2

variants: # Engine used for variants when no suitable special engine is configured.

dir: "./engines" # Directory containing the engine.

name: "fairy-stockfish" # Binary name of the engine to use.

ponder: true # Think on opponent's time.

use_syzygy: false # Whether the engine should be configured to use syzygy.

silence_stderr: false # Suppresses stderr output.

uci_options: # Arbitrary UCI options passed to the engine. (Commenting allowed)

Threads: 4 # Max CPU threads the engine can use.

Hash: 256 # Max memory (in megabytes) the engine can allocate.

Move Overhead: 100 # Increase if your bot flags games too often.

Use the same pattern for 'bullet', 'blitz', 'rapid', 'classical',

'antichess', 'atomic', 'chess960', 'crazyhouse', 'horde', 'kingofthehill', 'racingkings' and '3check' as well.

Append '_white' or '_black' to use the engine only as the specific color.

syzygy: enabled: false # Activate local syzygy endgame tablebases. paths: # Paths to local syzygy endgame tablebases.

gaviota: enabled: false # Activate local gaviota endgame tablebases. paths: # Paths to local gaviota endgame tablebases.

opening_books: enabled: true # Activate opening books. priority: 400 # Priority with which this move source is used. Higher priority is used first. books:

bullet:

selection: weighted_random # Move selection is one of "weighted_random", "uniform_random" or "best_move".

names: # List of names of books to use in bullet.

- BulletBook

- DefaultBook

standard_black:

selection: best_move # Move selection is one of "weighted_random", "uniform_random" or "best_move".

names: # List of names of books to use as black.

- BlackBook

standard:
  selection: best_move                # Move selection is one of "weighted_random", "uniform_random" or "best_move".
  max_depth: 130                      # Half move max depth. (Comment this line for max depth)
  names:                              # List of names of books to use if there is no specific book for the time control, white, black or chess960.
    - "Book3.bin"
    - "Book4.bin"
    - "Book2.bin"
    - "Book1.bin"

Use the same pattern for 'bullet', 'blitz', 'rapid', 'classical',

'antichess', 'atomic', 'chess960', 'crazyhouse', 'horde', 'kingofthehill', 'racingkings' and '3check' as well.

Append '_white' or '_black' to use the books only as the specific color.

online_moves: opening_explorer: enabled: true # Activate online moves from Lichess opening explorer. The move that has performed best for this bot is played. priority: 300 # Priority with which this move source is used. Higher priority is used first. use_for_variants: false # Whether the Lichess opening explorer should be used for other variants than standard and chess960. min_time: 20 # Time the bot must have at least to use the online move. timeout: 5 # Time the server has to respond. min_games: 5 # Minimum number of games in which the position must have occurred. only_with_wins: false # Whether to play only moves that have won before. selection: "performance" # Move selection is "performance" or "win_rate". anti: false # Whether to play the moves in which the opponent performs the worst.

max_depth: 16 # Half move max depth. (Comment this line for max depth)

max_moves: 1 # Max number of moves played from Lichess opening explorer. (Comment this line for max moves)

lichess_cloud: enabled: false # Activate online moves from Lichess cloud eval. priority: 200 # Priority with which this move source is used. Higher priority is used first. only_without_book: false # Whether the cloud should only be used if there is no matching book. min_eval_depth: 10 # Minimum evaluation depth. min_time: 20 # Time the bot must have at least to use the online move. timeout: 5 # Time the server has to respond.

max_depth: 16 # Half move max depth. (Comment this line for max depth)

max_moves: 1 # Max number of moves played from Lichess cloud eval. (Comment this line for max moves)

chessdb: enabled: true # Activate online moves from https://chessdb.cn/queryc_en/ priority: 300 # Priority with which this move source is used. Higher priority is used first. min_eval_depth: 10 # Minimum evaluation depth. min_time: 20 # Time the bot must have at least to use the online move. timeout: 5 # Time the server has to respond.

max_depth: 16 # Half move max depth. (Comment this line for max depth)

max_moves: 1 # Max number of moves played from chessdb. (Comment this line for max moves)

online_egtb: enabled: true # Activate online endgame tablebases from Lichess. min_time: 10 # Time the bot must have at least to use the online move. timeout: 3 # Time the server has to respond.

offer_draw: enabled: true # Activate whether the bot should offer draw. score: 10 # If the absolute value of the score is less than or equal to this value, the bot offers/accepts draw (in cp) consecutive_moves: 10 # How many moves in a row the absolute value of the score has to be below the draw value min_game_length: 35 # Earliest move in which draw is offered.

resign: enabled: true # Activate whether the bot should resign games. score: -1000 # If the score is less than or equal to this value, the bot resigns (in cp). consecutive_moves: 10 # How many moves in a row the score has to be below the resign value.

move_overhead_multiplier: 1.4 # Increase if your bot flags games too often. Default move overhead is 1 second per 1 minute initital time.

challenge: # Incoming challenges. (Commenting allowed) concurrency: 1 # Number of games to play simultaneously. bullet_with_increment_only: true # Whether bullet games against BOTs should only be accepted with increment. min_increment: 1 # Minimum amount of increment to accept a challenge.

max_increment: 5 # Maximum amount of increment to accept a challenge.

min_initial: 0 # Minimum amount of initial time to accept a challenge.

max_initial: 1800 # Maximum amount of initial time to accept a challenge.

variants: # Chess variants to accept (https://lichess.org/variant).

matchmaking: delay: 10 # Time in seconds the bot must be idle before a new challenge is started. timeout: 30 # Time until a challenge is canceled. types: # Matchmaking types of which one is randomly selected before each game. bullet: # Arbitrary name of the matchmaking type. Names must be unique. tc: 2+1 # Time control in initial_minutes+increment_seconds format. rated: true # Whether matchmaking should play rated games. variant: standard # Chess variant (https://lichess.org/variant) to challenge. weight: 30 # Weight with which this type is selected. (Default: 100) multiplier: 30 # Multiplier for calculating timeouts in matchmaking. Higher values lead to a wider range of opponents. blitz: # Arbitrary name of the matchmaking type. Names must be unique. tc: 3+2 # Time control in initial_minutes+increment_seconds format. rated: true # Whether matchmaking should play rated games. variant: standard # Chess variant (https://lichess.org/variant) to challenge. weight: 40 # Weight with which this type is selected. (Default: 100) multiplier: 45 # Multiplier for calculating timeouts in matchmaking. Higher values lead to a wider range of opponents. blitz02: # Arbitrary name of the matchmaking type. Names must be unique. tc: 5+3 # Time control in initial_minutes+increment_seconds format. rated: true # Whether matchmaking should play rated games. variant: standard # Chess variant (https://lichess.org/variant) to challenge. weight: 35 # Weight with which this type is selected. (Default: 100) multiplier: 40 # Multiplier for calculating timeouts in matchmaking. Higher values lead to a wider range of opponents. rapid: # Arbitrary name of the matchmaking type. Names must be unique. tc: 10+2 # Time control in initial_minutes+increment_seconds format. rated: true # Whether matchmaking should play rated games. variant: standard # Chess variant (https://lichess.org/variant) to challenge. weight: 35 # Weight with which this type is selected. (Default: 100) multiplier: 45 # Multiplier for calculating timeouts in matchmaking. Higher values lead to a wider range of opponents.
classical: # Arbitrary name of the matchmaking type. Names must be unique. tc: 25+0 # Time control in initial_minutes+increment_seconds format. rated: true # Whether matchmaking should play rated games. variant: standard # Chess variant (https://lichess.org/variant) to challenge. weight: 30 # Weight with which this type is selected. (Default: 100) multiplier: 45

messages:

Optional substitution keywords (include curly braces):

{opponent} to insert the opponent's name

{me} to insert our name

{engine} to insert engine name

{cpu} to insert CPU information

{ram} to insert RAM size

Any other words in curly braces will be removed.

greeting: "Hey, I'm running {engine}. Good luck! Type !help for a list of commands." # Message sent to the opponent at the beginning of a game. goodbye: "Good game, see you next time." # Message sent to the opponent after the end of a game. greeting_spectators: "Hey, I'm running {engine}. Type !help for a list of commands." # Message sent to the spectators at the beginning of a game. goodbye_spectators: "Thanks for watching." # Message sent to the spectators after the end of a game.

whitelist: # List of users whose challenges are always accepted.

- Username1

- Username2

blacklist: # List of users who are not challenged and whose challenges are declined.

books: # Names of the opening books (to be used above in the opening_books section) and paths to the opening books. Book1.bin: "Book1.bin" Book2.bin: "Book2.bin" Book3.bin: "Book3.bin" Book4.bin: "Book4.bin"

FatFritz2 commented 8 months ago

2ab3ab2 gives clearer information on how you messed up your config

It keeps erroring like this

Traceback (most recent call last):
  File "C:\Users\Amazon\Downloads\BotLi-main\user_interface.py", line 337, in <module>
    ui = UserInterface(args.config, args.matchmaking, args.upgrade)
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\Amazon\Downloads\BotLi-main\user_interface.py", line 43, in __init__
    self.config = load_config(config_path)
                  ^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\Amazon\Downloads\BotLi-main\config.py", line 29, in load_config
    _check_messages(config['messages'])
  File "C:\Users\Amazon\Downloads\BotLi-main\config.py", line 221, in _check_messages
    if message.strip() == '!printeval':
       ^^^^^^^^^^^^^
AttributeError: 'list' object has no attribute 'strip'
Torom commented 8 months ago

The problem is the incorrectly indented blacklist. The entire block is indented two spaces too far. Also, this is not how you define a blacklist. Just write the usernames. Your config should look like this:

# whitelist:                              # List of users whose challenges are always accepted.
#   - Username1
#   - Username2

blacklist:                              # List of users who are not challenged and whose challenges are declined.
  - caissa-ai
  - caissa-x
  - ResoluteBot
  - Africaata
  - M-Z_Bot
  - Findel64
  - compchess60

books:                                    # Names of the opening books (to be used above in the opening_books section) and paths to the opening books.
  Book1.bin: "Book1.bin"
  Book2.bin: "Book2.bin"
  Book3.bin: "Book3.bin"
  Book4.bin: "Book4.bin"