Skip to content
This repository was archived by the owner on Feb 11, 2026. It is now read-only.

Commit 3296226

Browse files
Merge pull request #37 from BoryaGames/dev/1.2.6
Критические исправления сокета/входа
2 parents dac1959 + 34ab6c1 commit 3296226

4 files changed

Lines changed: 48 additions & 13 deletions

File tree

src/pymax/mixins/auth.py

Lines changed: 45 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,48 @@
2929
class AuthMixin(ClientProtocol):
3030
def _check_phone(self) -> bool:
3131
return bool(re.match(PHONE_REGEX, self.phone))
32-
33-
async def request_code(self, phone: str, language: str = "ru") -> str:
32+
33+
def _split_phone(self, phone: str) -> str:
34+
placeholder = ""
35+
result = ""
36+
digit_index = 0
37+
if phone.startswith("+7"):
38+
result = "+7 "
39+
placeholder = "000 000 00 00"
40+
if phone.startswith("+375"):
41+
result = "+375 "
42+
placeholder = "00 000 00 00"
43+
if phone.startswith("+994"):
44+
result = "+994 "
45+
placeholder = "00 000 00 00"
46+
if phone.startswith("+374"):
47+
result = "+374 "
48+
placeholder = "00 000 000"
49+
if phone.startswith("+995"):
50+
result = "+995 "
51+
placeholder = "000 00 00 00"
52+
if phone.startswith("+996"):
53+
result = "+996 "
54+
placeholder = "000 000 000"
55+
if phone.startswith("+373"):
56+
result = "+373 "
57+
placeholder = "0000 0000"
58+
if phone.startswith("+992"):
59+
result = "+992 "
60+
placeholder = "00 000 0000"
61+
if phone.startswith("+998"):
62+
result = "+998 "
63+
placeholder = "00 000 00 00"
64+
phone = phone[len(result)-1:]
65+
for char in placeholder:
66+
if char == "0" and digit_index < len(phone):
67+
result += phone[digit_index]
68+
digit_index += 1
69+
elif char == " ":
70+
result += " "
71+
return result
72+
73+
async def request_code(self, phone: str) -> str:
3474
"""
3575
Запрашивает код аутентификации для указанного номера телефона и возвращает временный токен.
3676
@@ -39,8 +79,6 @@ async def request_code(self, phone: str, language: str = "ru") -> str:
3979
4080
:param phone: Номер телефона в международном формате.
4181
:type phone: str
42-
:param language: Язык для сообщения с кодом. По умолчанию "ru".
43-
:type language: str
4482
:return: Временный токен для дальнейшей аутентификации.
4583
:rtype: str
4684
:raises ValueError: Если полученные данные имеют неверный формат.
@@ -52,7 +90,7 @@ async def request_code(self, phone: str, language: str = "ru") -> str:
5290
self.logger.info("Requesting auth code")
5391

5492
payload = RequestCodePayload(
55-
phone=phone, type=AuthType.START_AUTH, language=language
93+
phone=self._split_phone(phone), type=AuthType.START_AUTH
5694
).model_dump(by_alias=True)
5795

5896
data = await self._send_and_wait(opcode=Opcode.AUTH_REQUEST, payload=payload)
@@ -72,14 +110,12 @@ async def request_code(self, phone: str, language: str = "ru") -> str:
72110
self.logger.error("Invalid payload data received")
73111
raise ValueError("Invalid payload data received")
74112

75-
async def resend_code(self, phone: str, language: str = "ru") -> str:
113+
async def resend_code(self, phone: str) -> str:
76114
"""
77115
Повторно запрашивает код аутентификации для указанного номера телефона и возвращает временный токен.
78116
79117
:param phone: Номер телефона в международном формате.
80118
:type phone: str
81-
:param language: Язык для сообщения с кодом. По умолчанию "ru".
82-
:type language: str
83119
:return: Временный токен для дальнейшей аутентификации.
84120
:rtype: str
85121
:raises ValueError: Если полученные данные имеют неверный формат.
@@ -88,7 +124,7 @@ async def resend_code(self, phone: str, language: str = "ru") -> str:
88124
self.logger.info("Resending auth code")
89125

90126
payload = RequestCodePayload(
91-
phone=phone, type=AuthType.RESEND, language=language
127+
phone=self._split_phone(phone), type=AuthType.RESEND
92128
).model_dump(by_alias=True)
93129

94130
data = await self._send_and_wait(opcode=Opcode.AUTH_REQUEST, payload=payload)

src/pymax/mixins/socket.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -212,7 +212,7 @@ def _perform_ssl_handshake(self, raw_sock: socket.socket) -> socket.socket:
212212
suppress_ragged_eofs=True,
213213
)
214214
wrapped.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1)
215-
wrapped.setblocking(False)
215+
wrapped.setblocking(True)
216216
return wrapped
217217
except ssl.SSLError as e:
218218
self.logger.error("SSL handshake failed: %s", e)

src/pymax/payloads.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,6 @@ class UserAgentPayload(CamelModel):
5656
class RequestCodePayload(CamelModel):
5757
phone: str
5858
type: AuthType = AuthType.START_AUTH
59-
language: str = "ru"
6059

6160

6261
class SendCodePayload(CamelModel):

src/pymax/static/constant.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,11 +76,11 @@
7676
DEFAULT_LOCALE: Final[str] = "ru"
7777
DEFAULT_DEVICE_LOCALE: Final[str] = "ru"
7878
DEFAULT_DEVICE_NAME: Final[str] = choice(DEVICE_NAMES)
79-
DEFAULT_APP_VERSION: Final[str] = "25.12.14"
79+
DEFAULT_APP_VERSION: Final[str] = "25.21.0"
8080
DEFAULT_SCREEN: Final[str] = choice(SCREEN_SIZES)
8181
DEFAULT_OS_VERSION: Final[str] = choice(OS_VERSIONS)
8282
DEFAULT_USER_AGENT: Final[str] = ua_generator.generate().text
83-
DEFAULT_BUILD_NUMBER: Final[int] = 0x97CB
83+
DEFAULT_BUILD_NUMBER: Final[int] = 0x9E2A
8484
DEFAULT_CLIENT_SESSION_ID: Final[int] = randint(1, 15)
8585
DEFAULT_TIMEZONE: Final[str] = choice(TIMEZONES)
8686
DEFAULT_CHAT_MEMBERS_LIMIT: Final[int] = 50

0 commit comments

Comments
 (0)