From 57da952b806e296fcf75cfb04bad24ab74539d38 Mon Sep 17 00:00:00 2001 From: "Andrew K. Choi" Date: Mon, 17 Nov 2025 10:55:52 +0900 Subject: [PATCH] =?UTF-8?q?fix:=20=D0=BF=D0=B0=D1=80=D1=81=D0=B8=D0=BD?= =?UTF-8?q?=D0=B3=20=D0=BA=D0=BB=D1=83=D0=B1=D0=BD=D0=BE=D0=B9=20=D0=BA?= =?UTF-8?q?=D0=B0=D1=80=D1=82=D1=8B=20=D0=B8=D0=B7=20=D1=81=D0=BB=D0=B5?= =?UTF-8?q?=D0=B4=D1=83=D1=8E=D1=89=D0=B5=D0=B9=20=D1=81=D1=82=D1=80=D0=BE?= =?UTF-8?q?=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Поддержка многострочного формата из кабинета - Строка 1: название кабинета, дата, время - Строка 2: номер счета - Строка 3: сумма и клубная карта (последнее 4-значное число) - Если карта не найдена в текущей строке, проверяется следующая --- .bot.pid | 2 +- src/utils/account_utils.py | 25 +++++++++++++++++-------- 2 files changed, 18 insertions(+), 9 deletions(-) diff --git a/.bot.pid b/.bot.pid index 8c121d5..9c4707a 100644 --- a/.bot.pid +++ b/.bot.pid @@ -1 +1 @@ -960923 +966528 diff --git a/src/utils/account_utils.py b/src/utils/account_utils.py index 19f933a..b429c7d 100644 --- a/src/utils/account_utils.py +++ b/src/utils/account_utils.py @@ -103,9 +103,11 @@ def parse_accounts_from_message(text: str) -> List[str]: Поддерживает формат: "КАРТА СЧЕТ" (например "2521 11-22-33-44-55-66-77") или просто "СЧЕТ" (например "11-22-33-44-55-66-77") - Также обрабатывает текст из кабинета с мусором: - "Viposnova 16-11-2025 22:19:36 17-24-66-42-38-31-53 0.00 2918" - Формат: кабинет дата время СЧЕТ сумма КЛУБНАЯ_КАРТА + Также обрабатывает многострочный текст из кабинета: + Строка 1: "Viposnova 16-11-2025 22:19:36" + Строка 2: "17-24-66-42-38-31-53" + Строка 3: "0.00 2918" + Формат: строка со счетом, следующая строка с суммой и клубной картой Args: text: Текст сообщения @@ -118,10 +120,10 @@ def parse_accounts_from_message(text: str) -> List[str]: accounts = [] - # Обработка построчно - для текста из кабинета с мусорными данными + # Обработка построчно - для текста из кабинета lines = text.strip().split('\n') - for line in lines: + for line_idx, line in enumerate(lines): # Разбиваем строку по пробелам parts = line.strip().split() @@ -131,10 +133,9 @@ def parse_accounts_from_message(text: str) -> List[str]: if re.match(r'^\d{2}-\d{2}-\d{2}-\d{2}-\d{2}-\d{2}-\d{2}$', part): formatted = format_account_number(part) if formatted and formatted not in accounts: - # Проверяем СЛЕДУЮЩУЮ часть после сумм на номер карты (4 цифры) - # Формат: ... СЧЕТ СУММА КАРТА - # Пропускаем части с суммами (содержат точку или начинаются с 0.) card = None + + # Сначала проверяем текущую строку на карту после счета for j in range(i + 1, len(parts)): if re.match(r'^\d{4}$', parts[j]): card = parts[j] @@ -143,6 +144,14 @@ def parse_accounts_from_message(text: str) -> List[str]: if not re.match(r'^\d+\.\d+$', parts[j]): break + # Если карты нет в текущей строке, проверяем следующую строку + if not card and line_idx + 1 < len(lines): + next_line_parts = lines[line_idx + 1].strip().split() + # Ищем 4-значное число в следующей строке (обычно последнее) + for next_part in next_line_parts: + if re.match(r'^\d{4}$', next_part): + card = next_part + if card: full_account = f"{card} {formatted}" if full_account not in accounts: