From 70ff9bfc4bd7355766ea48021f44a2b3ac4e4432 Mon Sep 17 00:00:00 2001 From: Roman Vrubel Date: Sun, 14 Jun 2026 21:03:59 +0000 Subject: [PATCH] =?UTF-8?q?=D0=A2=D0=B0=D0=B1=D0=BB=D0=B8=D1=86=D0=B0=20?= =?UTF-8?q?=D0=B2=20code-=D0=B1=D0=BB=D0=BE=D0=BA=D0=B5:=203=20=D0=BA?= =?UTF-8?q?=D0=BE=D0=BB=D0=BE=D0=BD=D0=BA=D0=B8,=202=20=D1=81=D1=82=D1=80?= =?UTF-8?q?=D0=BE=D0=BA=D0=B8=20=D0=BD=D0=B0=20=D0=BF=D0=B0=D1=80=D1=83,?= =?UTF-8?q?=20=D0=B2=D0=BB=D0=B5=D0=B7=D0=B0=D0=B5=D1=82=20=D0=BD=D0=B0=20?= =?UTF-8?q?=D1=82=D0=B5=D0=BB=D0=B5=D1=84=D0=BE=D0=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Формат: # │ Игрок │ О ───┼────────────────────────┼──── 1 │ Мармылев Александр Д. │ 4.0 │ Нестеров Мирон А. │ 4.0 Внутри code-блока MarkdownV2 не нужен (literal text). --- bots/client_bot.py | 44 +++++++++++++++++++++++++++++++++++++++----- 1 file changed, 39 insertions(+), 5 deletions(-) diff --git a/bots/client_bot.py b/bots/client_bot.py index c9e1f8d..9c3da0c 100644 --- a/bots/client_bot.py +++ b/bots/client_bot.py @@ -44,14 +44,39 @@ def _md_escape(text: str) -> str: return ''.join(result) +def _display_width(s: str) -> int: + w = 0 + for ch in s: + cp = ord(ch) + if (0x0400 <= cp <= 0x04FF or 0x0500 <= cp <= 0x052F or + 0x2E80 <= cp <= 0x9FFF or 0xF900 <= cp <= 0xFAFF or + 0xFE30 <= cp <= 0xFE4F): + w += 2 + else: + w += 1 + return w + + +def _pad_col(s: str, width: int) -> str: + cur = _display_width(s) + if cur >= width: + return s + return s + ' ' * (width - cur) + + 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]) lines = [ f'*{_md_escape(tournament_name)}*', f'📋 *Тур {rnd}* — пары', '', + '```', + f'{_pad_col("#", 4)} │ {_pad_col("Игрок", w_name)} │ {_pad_col("О", w_pts)}', + border, ] board = 1 @@ -61,7 +86,14 @@ def format_pairings(pairings_data: dict, tournament_name: str) -> str: p1, p2, color = pairing if color == 'bye': - lines.append(f'{board}\\. {_md_escape(p1.name)} — BYE') + lines.append( + f'{_pad_col(str(board), 4)} │ {_pad_col(p1.name, w_name)} │ ' + f'{_pad_col(str(p1.points), w_pts)}' + ) + lines.append( + f'{_pad_col("", 4)} │ {_pad_col("— BYE —", w_name)} │ ' + f'{_pad_col("", w_pts)}' + ) board += 1 continue @@ -71,15 +103,17 @@ def format_pairings(pairings_data: dict, tournament_name: str) -> str: white, black = p2, p1 lines.append( - f'{board}\\. {_md_escape(white.name)} ' - f'\\({_md_escape(f"{white.points:.1f}")}\\)' + f'{_pad_col(str(board), 4)} │ {_pad_col(white.name, w_name)} │ ' + f'{_pad_col(f"{white.points:.1f}", w_pts)}' ) lines.append( - f' {_md_escape(black.name)} ' - f'\\({_md_escape(f"{black.points:.1f}")}\\)' + f'{_pad_col("", 4)} │ {_pad_col(black.name, w_name)} │ ' + f'{_pad_col(f"{black.points:.1f}", w_pts)}' ) board += 1 + lines.append('```') + source = pairings_data.get('source', 'algorithm') if source == 'bbp_pairings_fide_2025': lines.append('\n_FIDE 2025 \(bbpPairings\)_')