From 6bb1d238aa19b273b3fb03990e43dec825101a6f Mon Sep 17 00:00:00 2001 From: Roman Vrubel Date: Sun, 14 Jun 2026 21:08:04 +0000 Subject: [PATCH] =?UTF-8?q?=D0=A2=D0=B0=D0=B1=D0=BB=D0=B8=D1=86=D0=B0:=20?= =?UTF-8?q?=D1=88=D0=B8=D1=80=D0=B8=D0=BD=D0=B0=20=D0=BA=D0=BE=D0=BB=D0=BE?= =?UTF-8?q?=D0=BD=D0=BA=D0=B8=20=E2=80=94=20=D0=BF=D0=BE=20=D1=81=D0=B0?= =?UTF-8?q?=D0=BC=D0=BE=D0=B9=20=D0=B4=D0=BB=D0=B8=D0=BD=D0=BD=D0=BE=D0=B9?= =?UTF-8?q?=20=D1=84=D0=B0=D0=BC=D0=B8=D0=BB=D0=B8=D0=B8=20+3=20=D0=BF?= =?UTF-8?q?=D1=80=D0=BE=D0=B1=D0=B5=D0=BB=D0=B0,=20=D1=80=D0=B0=D0=B7?= =?UTF-8?q?=D0=B4=D0=B5=D0=BB=D0=B8=D1=82=D0=B5=D0=BB=D0=B8=20=D0=BC=D0=B5?= =?UTF-8?q?=D0=B6=D0=B4=D1=83=20=D0=BF=D0=B0=D1=80=D0=B0=D0=BC=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - w_name вычисляется динамически (max + 3, до 42) - Горизонтальная линия (───┼───┼───) между каждой парой --- bots/client_bot.py | 38 ++++++++++++++++++++++++++++++-------- 1 file changed, 30 insertions(+), 8 deletions(-) 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')