From c9bc2307fd5362cf24af91f4fa05723a8768d886 Mon Sep 17 00:00:00 2001
From: zayac <stupidxqw@gmail.com>
Date: Thu, 9 Jan 2025 03:41:01 +0800
Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=BA=86=E4=B8=80=E4=BA=9Bbu?=
 =?UTF-8?q?g?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/app.py                 |  2 +-
 src/config.ini             |  4 +--
 src/core/Dockerfile        |  2 +-
 src/core/message_server.py | 73 +++++++++++++++++++++++---------------
 src/entity/account.py      |  1 +
 src/entity/member.py       | 17 +++++----
 src/entity/pay_record.py   |  6 ++--
 7 files changed, 63 insertions(+), 42 deletions(-)

diff --git a/src/app.py b/src/app.py
index a9dc898..2c70d67 100644
--- a/src/app.py
+++ b/src/app.py
@@ -9,4 +9,4 @@ if __name__ == '__main__':
     app.setStyleSheet(qdarkstyle.load_stylesheet(qt_api='pyqt6'))
     main_win = Application()
     main_win.show()
-    sys.exit(app.exec())
+    sys.exit(app.exec())
\ No newline at end of file
diff --git a/src/config.ini b/src/config.ini
index 4697356..e24f716 100644
--- a/src/config.ini
+++ b/src/config.ini
@@ -2,8 +2,8 @@
 ;username = zayac
 ;password = 123456
 [Credentials]
-username = luffy
-password = luffy230505
+username = zayac_remote
+password = 123456
 
 [Minimum]
 minimum = True
\ No newline at end of file
diff --git a/src/core/Dockerfile b/src/core/Dockerfile
index bcdec25..10f8926 100644
--- a/src/core/Dockerfile
+++ b/src/core/Dockerfile
@@ -20,7 +20,7 @@ COPY ./health_check.sh .
 # 确保健康检查脚本有执行权限
 RUN chmod +x /app/health_check.sh
 
-sed -i 's/\r$//' health_check.sh
+RUN sed -i 's/\r$//' health_check.sh
 
 # 设置环境变量
 ENV RABBITMQ_USER=bot
diff --git a/src/core/message_server.py b/src/core/message_server.py
index 92761a2..e80ab02 100644
--- a/src/core/message_server.py
+++ b/src/core/message_server.py
@@ -17,7 +17,7 @@ logger.remove()
 
 # 添加新的日志处理器,设置日志级别为 DEBUG
 logger.add(sys.stderr, level="INFO")
-
+MAX_MESSAGE_LENGTH = 4096  # Telegram 消息的最大长度
 
 class RateLimiter:
     def __init__(self, rate, per):
@@ -39,39 +39,56 @@ class RateLimiter:
         else:
             self.allowance -= 1.0
             return True
-
+def split_message(message, max_length=MAX_MESSAGE_LENGTH):
+    """
+    将超长消息分割成小段。
+    """
+    parts = []
+    while len(message) > max_length:
+        # 找到最后一个换行符,尽量避免在单词中间截断
+        split_index = message[:max_length].rfind('\n')
+        if split_index == -1:  # 如果没有换行符,直接截断
+            split_index = max_length
+        parts.append(message[:split_index])
+        message = message[split_index:]
+    parts.append(message)
+    return parts
 
 async def _send_message_to_user(bot_token, target_id, message, rate_limiter, session):
-    if not rate_limiter.can_send():
-        await asyncio.sleep(1)
-        return await _send_message_to_user(bot_token, target_id, message, rate_limiter, session)
+    # 分割超长消息
+    message_parts = split_message(message)
 
-    parse_mode = determine_parse_mode(message)
+    for part in message_parts:
+        if not rate_limiter.can_send():
+            await asyncio.sleep(1)
+            continue
 
-    base_url = f"https://api.telegram.org/bot{bot_token}/sendMessage"
-    params = {
-        "chat_id": target_id,
-        "text": message,
-        "parse_mode": parse_mode
-    }
+        parse_mode = determine_parse_mode(part)
+        base_url = f"https://api.telegram.org/bot{bot_token}/sendMessage"
+        params = {
+            "chat_id": target_id,
+            "text": part,
+            "parse_mode": parse_mode
+        }
 
-    max_retry = 3
-    retry_count = 0
-    while retry_count < max_retry:
-        try:
-            async with session.post(base_url, params=params) as response:
-                if response.status == 200:
-                    logger.debug(f'消息发送成功: {message}')
-                    return
-                else:
-                    logger.debug('消息发送失败,重试中...')
-                    logger.error(f'{params},发送失败,返回值:{await response.text()}')
-        except aiohttp.ClientError as e:
-            logger.error(f'网络异常,重试中... 错误详情: {e}')
-        await asyncio.sleep(10)
-        retry_count += 1
+        max_retry = 3
+        retry_count = 0
+        while retry_count < max_retry:
+            try:
+                async with session.post(base_url, params=params) as response:
+                    if response.status == 200:
+                        logger.debug(f'消息发送成功: {part}')
+                        break
+                    else:
+                        logger.debug('消息发送失败,重试中...')
+                        logger.error(f'{params},发送失败,返回值:{await response.text()}')
+            except aiohttp.ClientError as e:
+                logger.error(f'网络异常,重试中... 错误详情: {e}')
+            await asyncio.sleep(10)
+            retry_count += 1
 
-    logger.debug('消息发送失败')
+        if retry_count == max_retry:
+            logger.debug(f'消息发送失败,已跳过: {part}')
 
 
 def determine_parse_mode(message_text):
diff --git a/src/entity/account.py b/src/entity/account.py
index b0dea4f..28dd7c7 100644
--- a/src/entity/account.py
+++ b/src/entity/account.py
@@ -15,6 +15,7 @@ class AccountType(Enum):
     hth = 1
     jy = 2
     aty = 3 #爱体育
+    ly = 4
 
 
 @dataclass
diff --git a/src/entity/member.py b/src/entity/member.py
index 44456cb..c1507ce 100644
--- a/src/entity/member.py
+++ b/src/entity/member.py
@@ -25,28 +25,31 @@ class BaseMember:
     netAmount: str
     betAmount: str
     changeLog: str
+    venueNetAmountList: list
     venueProfitList: list
     isChange: int
     vipGrade: int
     vipGradeStr: str
-    firstPayAt: str
-    remark: str
+    firstPayAt:str
+    # tagsIds:list
+    # tagsInfo:str
+    remark:str
+    status:str
 
 
 @dataclass
 class MemberList(BaseMember):
-    venueNetAmountList: str
-    tagsIds: str
+    tagsIds: list
     tagsInfo: str
-    status: Optional[int] = field(default=None)
+
 
 
 @dataclass
 class MemberDetail(BaseMember):
-    venueNetAmountList: list
+    lotteryOddsCommission: str
+    lotteryOddsCommison:str
     tags: str
     lastBetTime: str
-    status: Optional[int] = field(default=None)
 
     def get_first_pay_datetime(self) -> datetime:
         return datetime.strptime(self.firstPayAt, "%Y-%m-%d %H:%M:%S")
diff --git a/src/entity/pay_record.py b/src/entity/pay_record.py
index 4ef658d..1b8ab55 100644
--- a/src/entity/pay_record.py
+++ b/src/entity/pay_record.py
@@ -61,7 +61,7 @@ def get_latest_deposit_user(account: Account, count: int):
     # 提取所有用户名,并确保在指定时间内
     now = datetime.now()
     unique_names_within_time = {
-        item.name for item in pay_record_list if util.get_difference(item.createdAt, now) < 7200
+        item.name for item in pay_record_list if util.get_difference(item.createdAt, now) < 720000
     }
 
     logger.debug(f"获取到{len(unique_names_within_time)}个成功存款人数")
@@ -298,6 +298,6 @@ def get_pay_failed_by_telegram_id(telegram_id: int) -> Optional[str]:
 
 if __name__ == '__main__':
     deposit_results = '\n'.join(
-        [f"用户: `{member.name}`, 首存金额: *{member.deposit}*" for member in
-         get_pay_record_list(get_user_by_username_and_password('zayac', '123456').accounts[2], "2024-04-23")])
+        [f"首存金额: *{member.deposit}*" for member in
+         get_latest_deposit_user(get_user_by_username_and_password('zayac_remote', '123456').accounts[3], 1)])
     print(deposit_results)