diff --git a/bots/client_bot.py b/bots/client_bot.py index 9c3da0c..066eec2 100644 --- a/bots/client_bot.py +++ b/bots/client_bot.py @@ -67,31 +67,45 @@ def _pad_col(s: str, width: int) -> str: def format_pairings(pairings_data: dict, tournament_name: str) -> str: pairings = pairings_data['pairings'] rnd = pairings_data['round'] - w_name, w_pts = 28, 5 - border = '─┼─'.join('─' * w for w in [4, w_name, w_pts]) + + # Find the longest player name + 3 spaces padding + max_name_w = 20 + for pairing in pairings: + if len(pairing) == 3: + for p in (pairing[0], pairing[1]): + w = _display_width(p.name) + if w > max_name_w: + max_name_w = w + max_name_w = min(max_name_w + 3, 42) + + w_board, w_pts = 4, 5 + border = '─┼─'.join('─' * w for w in [w_board, max_name_w, w_pts]) lines = [ f'*{_md_escape(tournament_name)}*', f'📋 *Тур {rnd}* — пары', '', '```', - f'{_pad_col("#", 4)} │ {_pad_col("Игрок", w_name)} │ {_pad_col("О", w_pts)}', + f'{_pad_col("#", w_board)} │ {_pad_col("Игрок", max_name_w)} │ ' + f'{_pad_col("О", w_pts)}', border, ] board = 1 - for pairing in pairings: + for pi, pairing in enumerate(pairings): if len(pairing) != 3: continue p1, p2, color = pairing if color == 'bye': lines.append( - f'{_pad_col(str(board), 4)} │ {_pad_col(p1.name, w_name)} │ ' + f'{_pad_col(str(board), w_board)} │ ' + f'{_pad_col(p1.name, max_name_w)} │ ' f'{_pad_col(str(p1.points), w_pts)}' ) lines.append( - f'{_pad_col("", 4)} │ {_pad_col("— BYE —", w_name)} │ ' + f'{_pad_col("", w_board)} │ ' + f'{_pad_col("— BYE —", max_name_w)} │ ' f'{_pad_col("", w_pts)}' ) board += 1 @@ -103,15 +117,23 @@ def format_pairings(pairings_data: dict, tournament_name: str) -> str: white, black = p2, p1 lines.append( - f'{_pad_col(str(board), 4)} │ {_pad_col(white.name, w_name)} │ ' + f'{_pad_col(str(board), w_board)} │ ' + f'{_pad_col(white.name, max_name_w)} │ ' f'{_pad_col(f"{white.points:.1f}", w_pts)}' ) lines.append( - f'{_pad_col("", 4)} │ {_pad_col(black.name, w_name)} │ ' + f'{_pad_col("", w_board)} │ ' + f'{_pad_col(black.name, max_name_w)} │ ' f'{_pad_col(f"{black.points:.1f}", w_pts)}' ) board += 1 + # Separator between pairs + if pi < len(pairings) - 1: + next_p = pairings[pi + 1] + if len(next_p) == 3 and next_p[2] != 'bye': + lines.append(border) + lines.append('```') source = pairings_data.get('source', 'algorithm')