xync-client 0.0.43.dev32__tar.gz → 0.0.43.dev41__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (113) hide show
  1. {xync_client-0.0.43.dev32/xync_client.egg-info → xync_client-0.0.43.dev41}/PKG-INFO +1 -1
  2. {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/Abc/InAgent.py +3 -3
  3. {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/Bybit/InAgent.py +10 -10
  4. {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/Bybit/agent.py +34 -21
  5. xync_client-0.0.43.dev41/xync_client/Pms/Alfa/__init__.py +102 -0
  6. xync_client-0.0.43.dev41/xync_client/Pms/Alfa/state.json +1 -0
  7. xync_client-0.0.43.dev41/xync_client/Pms/Sber/__init__.py +79 -0
  8. xync_client-0.0.43.dev41/xync_client/Pms/Tinkoff/__init__.py +88 -0
  9. xync_client-0.0.43.dev41/xync_client/Pms/Tinkoff/state.json +1 -0
  10. {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/loader.py +2 -1
  11. {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41/xync_client.egg-info}/PKG-INFO +1 -1
  12. {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client.egg-info/SOURCES.txt +3 -2
  13. xync_client-0.0.43.dev32/xync_client/Pms/Tinkoff/__init__.py +0 -89
  14. xync_client-0.0.43.dev32/xync_client/Pms/Tinkoff/state.json +0 -1
  15. xync_client-0.0.43.dev32/xync_client/Pms/Tinkoff/storage.json +0 -0
  16. xync_client-0.0.43.dev32/xync_client/pyro.py +0 -121
  17. {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/.env.sample +0 -0
  18. {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/.gitignore +0 -0
  19. {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/.pre-commit-config.yaml +0 -0
  20. {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/README.md +0 -0
  21. {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/makefile +0 -0
  22. {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/pyproject.toml +0 -0
  23. {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/setup.cfg +0 -0
  24. {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/tests/TestAgent.py +0 -0
  25. {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/tests/TestAsset.py +0 -0
  26. {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/tests/TestEx.py +0 -0
  27. {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/tests/TestOrder.py +0 -0
  28. {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/tests/_todo_refact/Binance/test_binance.py +0 -0
  29. {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/tests/_todo_refact/Bybit/test_bybit.py +0 -0
  30. {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/tests/_todo_refact/Bybit/test_bybit_p2p.py +0 -0
  31. {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/tests/_todo_refact/Gate/test_gate.py +0 -0
  32. {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/tests/_todo_refact/Htx/test_htx_p2p.py +0 -0
  33. {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/tests/_todo_refact/Wallet/test_agent.py +0 -0
  34. {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/tests/_todo_refact/Wallet/test_ex.py +0 -0
  35. {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/tests/_todo_refact/__init__.py +0 -0
  36. {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/tests/_todo_refact/_test_ex.py +0 -0
  37. {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/Abc/Agent.py +0 -0
  38. {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/Abc/Asset.py +0 -0
  39. {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/Abc/AuthTrait.py +0 -0
  40. {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/Abc/Base.py +0 -0
  41. {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/Abc/BaseTest.py +0 -0
  42. {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/Abc/Ex.py +0 -0
  43. {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/Abc/Order.py +0 -0
  44. {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/Abc/types.py +0 -0
  45. {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/Binance/__init__.py +0 -0
  46. {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/Binance/binance_async.py +0 -0
  47. {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/Binance/earn_api.py +0 -0
  48. {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/Binance/etype/ad.py +0 -0
  49. {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/Binance/etype/pm.py +0 -0
  50. {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/Binance/ex.py +0 -0
  51. {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/Binance/exceptions.py +0 -0
  52. {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/Binance/sapi.py +0 -0
  53. {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/Binance/web_c2c.py +0 -0
  54. {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/BingX/__init__.py +0 -0
  55. {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/BingX/agent.py +0 -0
  56. {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/BingX/base.py +0 -0
  57. {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/BingX/etype/ad.py +0 -0
  58. {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/BingX/etype/pm.py +0 -0
  59. {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/BingX/ex.py +0 -0
  60. {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/BingX/req.mjs +0 -0
  61. {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/BingX/sign.js +0 -0
  62. {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/BitGet/__init__.py +0 -0
  63. {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/BitGet/agent.py +0 -0
  64. {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/BitGet/etype/ad.py +0 -0
  65. {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/BitGet/ex.py +0 -0
  66. {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/BitGet/req.mjs +0 -0
  67. {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/BitPapa/ex.py +0 -0
  68. {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/Bybit/etype/ad.py +0 -0
  69. {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/Bybit/etype/cred.py +0 -0
  70. {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/Bybit/etype/order.py +0 -0
  71. {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/Bybit/ex.py +0 -0
  72. {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/Bybit/web_earn.py +0 -0
  73. {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/Bybit/web_p2p.py +0 -0
  74. {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/Bybit/ws.py +0 -0
  75. {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/Gate/etype/ad.py +0 -0
  76. {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/Gate/ex.py +0 -0
  77. {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/Gate/premarket.py +0 -0
  78. {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/Htx/agent.py +0 -0
  79. {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/Htx/earn.py +0 -0
  80. {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/Htx/etype/__init__.py +0 -0
  81. {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/Htx/etype/ad.py +0 -0
  82. {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/Htx/etype/cred.py +0 -0
  83. {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/Htx/etype/pm.py +0 -0
  84. {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/Htx/etype/test.py +0 -0
  85. {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/Htx/ex.py +0 -0
  86. {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/KuCoin/etype/ad.py +0 -0
  87. {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/KuCoin/etype/pm.py +0 -0
  88. {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/KuCoin/ex.py +0 -0
  89. {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/KuCoin/web.py +0 -0
  90. {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/Mexc/etype/ad.py +0 -0
  91. {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/Mexc/etype/pm.py +0 -0
  92. {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/Mexc/ex.py +0 -0
  93. {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/Okx/etype/ad.py +0 -0
  94. {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/Okx/etype/pm.py +0 -0
  95. {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/Okx/ex.py +0 -0
  96. {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/Pms/Volet/__init__.py +0 -0
  97. {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/Pms/Volet/_todo_req/req.mjs +0 -0
  98. {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/Pms/Volet/_todo_req/req.py +0 -0
  99. {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/Pms/Volet/api.py +0 -0
  100. {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/TgWallet/agent.py +0 -0
  101. {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/TgWallet/asset.py +0 -0
  102. {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/TgWallet/auth.py +0 -0
  103. {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/TgWallet/ex.py +0 -0
  104. {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/TgWallet/inAgent.py +0 -0
  105. {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/TgWallet/order.py +0 -0
  106. {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/TgWallet/pyd.py +0 -0
  107. {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/TgWallet/pyro.py +0 -0
  108. {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/TgWallet/web.py +0 -0
  109. {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/__init__.py +0 -0
  110. {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/pm_unifier.py +0 -0
  111. {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client.egg-info/dependency_links.txt +0 -0
  112. {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client.egg-info/requires.txt +0 -0
  113. {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: xync-client
3
- Version: 0.0.43.dev32
3
+ Version: 0.0.43.dev41
4
4
  Author-email: Mike Artemiev <mixartemev@gmail.com>
5
5
  Project-URL: Homepage, https://gitlab.com/XyncNet/client
6
6
  Project-URL: Repository, https://gitlab.com/XyncNet/client
@@ -1,13 +1,13 @@
1
1
  from abc import abstractmethod
2
2
 
3
- from xync_schema.models import Agent
3
+ from xync_schema.models import Actor
4
4
 
5
5
  from xync_client.Abc.Agent import BaseAgentClient
6
6
 
7
7
 
8
8
  class BaseInAgentClient:
9
- def __init__(self, agent: Agent):
10
- self.agent_client: BaseAgentClient = agent.client()
9
+ def __init__(self, actor: Actor):
10
+ self.agent_client: BaseAgentClient = actor.client()
11
11
 
12
12
  @abstractmethod
13
13
  async def start_listen(self) -> bool: ...
@@ -6,8 +6,7 @@ from xync_schema import models
6
6
  from xync_client.Abc.InAgent import BaseInAgentClient
7
7
  from xync_client.Bybit.agent import AgentClient
8
8
  from xync_client.Bybit.ws import prv
9
- from xync_client.TgWallet.pyro import PyroClient
10
- from xync_client.loader import PG_DSN, bot
9
+ from xync_client.loader import PG_DSN
11
10
 
12
11
 
13
12
  class InAgentClient(BaseInAgentClient):
@@ -16,7 +15,7 @@ class InAgentClient(BaseInAgentClient):
16
15
  async def start_listen(self):
17
16
  t = await self.agent_client.ott()
18
17
  ts = int(float(t["time_now"]) * 1000)
19
- await prv(self.agent_client.agent.auth["deviceId"], t["result"], ts, listen)
18
+ await prv(self.agent_client.actor.agent.auth["deviceId"], t["result"], ts, listen)
20
19
 
21
20
  # 3N: [T] - Уведомление об одобрении запроса на сделку
22
21
  async def request_accepted_notify(self) -> int: ... # id
@@ -28,13 +27,14 @@ def listen(data: dict):
28
27
 
29
28
  async def main():
30
29
  _ = await init_db(PG_DSN, models, True)
31
- pbot = PyroClient(bot)
32
- await pbot.app.start()
33
- await pbot.app.create_channel("tc")
34
- await pbot.app.stop()
35
-
36
- agent = await models.Agent.filter(actor__ex_id=9, auth__isnull=False).prefetch_related("actor__ex").first()
37
- cl: InAgentClient = agent.in_client()
30
+ # pbot = PyroClient(bot)
31
+ # await pbot.app.start()
32
+ # await pbot.app.create_channel("tc")
33
+ # await pbot.app.stop()
34
+
35
+ actor = await models.Actor.filter(ex_id=9, agent__auth__isnull=False).prefetch_related("ex", "agent").first()
36
+ cl: InAgentClient = actor.in_client()
37
+ _ = await cl.start_listen()
38
38
  await cl.agent_client.close()
39
39
 
40
40
 
@@ -381,6 +381,24 @@ class AgentClient(BaseAgentClient): # Bybit client
381
381
  print("-" if mad.side else "+", end=req.price, flush=True)
382
382
  await sleep(60)
383
383
 
384
+ def overprice_filter(self, ads: list[Ad], ceil: float, k: Literal[-1, 1]):
385
+ # вырезаем ads с ценами выше потолка
386
+ if ads and (ceil - float(ads[0].price)) * k > 0:
387
+ if int(ads[0].userId) != self.actor.exid:
388
+ ads.pop(0)
389
+ self.overprice_filter(ads, ceil, k)
390
+
391
+ def get_cad(self, ads: list[Ad], ceil: float, k: Literal[-1, 1], place: int, cur_plc: int) -> Ad:
392
+ # чью цену будем обгонять, предыдущей или слещующей объявы?
393
+ cad: Ad = ads[place] if cur_plc > place else ads[cur_plc]
394
+ # а цена обгоняемой объявы не выше нашего потолка?
395
+ if (float(cad.price) - ceil) * k <= 0:
396
+ # тогда берем следующую
397
+ ads.pop(place)
398
+ cad = self.get_cad(ads, ceil, k, place, cur_plc)
399
+ # todo: добавить фильтр по лимитам min-max
400
+ return cad
401
+
384
402
  async def battle(
385
403
  self,
386
404
  coinex: models.Coinex,
@@ -409,28 +427,27 @@ class AgentClient(BaseAgentClient): # Bybit client
409
427
 
410
428
  while self.actor.person.user.status > 0:
411
429
  ads: list[Ad] = await self.ads(coinex, curex, is_sell, list(creds.keys()))
412
- overprice_filter(ads, ceil, k)
430
+ self.overprice_filter(ads, ceil, k)
431
+ if not ads:
432
+ print(coinex.exid, curex.exid, is_sell, "no ads!")
433
+ await sleep(15)
434
+ continue
413
435
  cur_plc = [i for i, ad in enumerate(ads) if int(ad.userId) == self.actor.exid][0]
414
436
  mad: Ad = ads.pop(cur_plc)
415
437
  if not ads:
416
438
  await sleep(60)
417
439
  continue
418
- # чью цену будем обгонять, предыдущей или слещующей объявы?
419
- cad: Ad = ads[place] if cur_plc > place else ads[cur_plc]
420
- # а цена обгоняемой объявы не выше нашего потолка?
421
- if (float(cad.price) - ceil) * k <= 0:
422
- # тогда берем следующую
423
- cad = ads[cur_plc]
440
+ cad = self.get_cad(ads, ceil, k, place, cur_plc)
424
441
  new_price = f"%.{curex.cur.scale}f" % round(float(cad.price) - k * step(mad, cad), curex.cur.scale)
425
442
  if mad.price == new_price: # Если нужная цена и так уже стоит
426
443
  print(end="v" if is_sell else "^", flush=True)
427
- await sleep(2)
444
+ await sleep(3)
428
445
  continue
429
446
  if cad.priceType: # Если цена конкурента плавающая, то повышаем себе не цену, а %
430
447
  new_premium = str(round(float(cad.premium) - k * step(mad, cad), 2))
431
448
  if mad.premium == new_premium: # Если нужный % и так уже стоит
432
449
  print(end="v" if is_sell else "^", flush=True)
433
- await sleep(2)
450
+ await sleep(3)
434
451
  continue
435
452
  mad.premium = new_premium
436
453
  mad.priceType = cad.priceType
@@ -439,6 +456,7 @@ class AgentClient(BaseAgentClient): # Bybit client
439
456
  req = AdUpdateRequest.model_validate({**mad.model_dump(), "price": new_price, "paymentIds": credex_ids})
440
457
  try:
441
458
  _res = self.ad_upd(req)
459
+ print("-" if is_sell else "+", end=req.price, flush=True)
442
460
  except FailedRequestError as e:
443
461
  if ExcCode(e.status_code) == ExcCode.FixPriceLimit:
444
462
  if limits := re.search(
@@ -455,13 +473,14 @@ class AgentClient(BaseAgentClient): # Bybit client
455
473
  req.quantity = round(asset.free - (asset.freeze or 0) - (asset.lock or 0), coinex.coin.scale)
456
474
  _res = self.ad_upd(req)
457
475
  elif ExcCode(e.status_code) == ExcCode.RareLimit:
458
- await sleep(120)
476
+ await sleep(192)
477
+ elif ExcCode(e.status_code) == ExcCode.Timestamp:
478
+ await sleep(2)
459
479
  else:
460
480
  raise e
461
481
  except (ReadTimeoutError, ConnectionDoesNotExistError):
462
482
  logging.warning("Connection failed. Restarting..")
463
- print("-" if is_sell else "+", end=req.price, flush=True)
464
- await sleep(60)
483
+ await sleep(42)
465
484
 
466
485
 
467
486
  def step(mad, cad) -> float:
@@ -473,13 +492,6 @@ def step(mad, cad) -> float:
473
492
  )
474
493
 
475
494
 
476
- def overprice_filter(ads: list[Ad], ceil: float, k: Literal[-1, 1]):
477
- # вырезаем ads с ценами выше потолка
478
- if ads and (ceil - float(ads[0].price)) * k > 0:
479
- ads.pop(0)
480
- overprice_filter(ads, ceil, k)
481
-
482
-
483
495
  def listen(data: dict):
484
496
  print(data)
485
497
 
@@ -494,11 +506,12 @@ class ExcCode(IntEnum):
494
506
  FixPriceLimit = 912120022
495
507
  RareLimit = 912120050
496
508
  InsufficientAmount = 912120024
509
+ Timestamp = 10002
497
510
 
498
511
 
499
512
  async def main():
500
513
  _ = await init_db(PG_DSN, models, True)
501
- logging.basicConfig(level=logging.DEBUG)
514
+ logging.basicConfig(level=logging.INFO)
502
515
  actor = (
503
516
  await models.Actor.filter(ex_id=9, agent__isnull=False).prefetch_related("ex", "agent", "person__user").first()
504
517
  )
@@ -514,7 +527,7 @@ async def main():
514
527
  # )
515
528
  # await cl.set_creds()
516
529
  await gather(
517
- cl.battle(usdt, rub, False, ["volet"], 83.79), # гонка в стакане покупки - мы продаем
530
+ cl.battle(usdt, rub, False, ["volet"], 83.88), # гонка в стакане покупки - мы продаем
518
531
  cl.battle(usdt, rub, True, ["volet"], 82), # гонка в стакане продажи - мы покупаем
519
532
  cl.battle(eth, rub, False, ["volet"], 160_000),
520
533
  cl.battle(eth, rub, True, ["volet"], 144_000),
@@ -0,0 +1,102 @@
1
+ import asyncio
2
+
3
+ from playwright.async_api import async_playwright
4
+ from playwright._impl._errors import TimeoutError
5
+
6
+
7
+ async def main():
8
+ async with async_playwright() as p:
9
+ browser = await p.chromium.launch(
10
+ channel="chrome",
11
+ headless=False,
12
+ timeout=5000,
13
+ args=[
14
+ "--disable-blink-features=AutomationControlled",
15
+ "--no-sandbox",
16
+ "--disable-web-security",
17
+ "--disable-infobars",
18
+ "--disable-extensions",
19
+ "--start-maximized",
20
+ ],
21
+ )
22
+ context = await browser.new_context(storage_state="state.json")
23
+ page = await context.new_page()
24
+ await page.goto("https://web.alfabank.ru/dashboard")
25
+ await page.wait_for_timeout(1000)
26
+ try:
27
+ await page.wait_for_url("https://web.alfabank.ru/dashboard")
28
+ await page.wait_for_timeout(1000)
29
+ # Новый пользователь
30
+ except TimeoutError:
31
+ await page.locator('[data-test-id="phoneInput-form-control-inner"] [data-test-id="phoneInput"]').fill(
32
+ "79680252000"
33
+ )
34
+ await page.wait_for_timeout(1000)
35
+ await page.locator("span", has_text="Вперёд").click(delay=500)
36
+ await page.locator('[data-test-id="card-account-input"]').fill("2200150913416522")
37
+ await page.locator('[data-test-id="card-account-continue-button"]').click()
38
+ await page.locator(
39
+ '[class*=confirmation__component] [class*=code-input] [autocomplete="one-time-code"]'
40
+ ).fill(input("Введите код"))
41
+ await page.wait_for_timeout(500)
42
+ if await page.locator('[data-test-id="trust-device-page-submit-btn"]').is_visible():
43
+ await page.locator('[data-test-id="trust-device-page-submit-btn"]').click()
44
+ await page.locator('[data-test-id="new-password"]').click()
45
+ await page.locator('[data-test-id="new-password"]').fill("0909")
46
+ await page.locator('[data-test-id="new-password-again"]').click()
47
+ await page.locator('[data-test-id="new-password-again"]').fill("0909")
48
+ await page.locator('[data-test-id="submit-button"]').click()
49
+ await page.context.storage_state(path="state.json")
50
+
51
+ # Переходим на сбп и вводим данные получателя
52
+ # await page.locator(
53
+ # '[data-qa-type="desktop-ib-pay-buttons"] [data-qa-type="atomPanel pay-card-0"]',
54
+ # has_text="Перевести по телефону",
55
+ # ).click()
56
+ # await page.locator('[data-qa-type="recipient-input.value.placeholder"]').click()
57
+ # await page.wait_for_timeout(300)
58
+ # await page.locator('[data-qa-type="recipient-input.value.input"]').fill("9992259898")
59
+ # await page.locator('[data-qa-type="amount-from.placeholder"]').click()
60
+ # await page.locator('[data-qa-type="amount-from.input"]').fill("100")
61
+ # await page.wait_for_timeout(300)
62
+ # await page.locator('[data-qa-type="bank-plate-other-bank click-area"]').click()
63
+ # await page.locator('[data-qa-type*="inputAutocomplete.value.input"]').click()
64
+ # await page.locator('[data-qa-type*="inputAutocomplete.value.input"]').fill("Озон")
65
+ # await page.wait_for_timeout(300)
66
+ # await page.locator('[data-qa-type="banks-popup-list"]').click()
67
+ # await page.locator('[data-qa-type="transfer-button"]').click()
68
+
69
+ # Проверка последнего платежа
70
+ # try:
71
+ # await page.goto("https://www.tbank.ru/events/feed")
72
+ # except Error:
73
+ # await page.wait_for_timeout(1000)
74
+ # await page.goto("https://www.tbank.ru/events/feed")
75
+ # await page.wait_for_timeout(2000)
76
+ # await page.locator('[data-qa-type = "timeline-operations-list"]:last-child').scroll_into_view_if_needed()
77
+ # transactions = await page.locator(
78
+ # '[data-qa-type="timeline-operations-list"] [data-qa-type="operation-money"]'
79
+ # ).all_text_contents()
80
+ # result = recursion_payments(100, transactions)
81
+ # if result == 100:
82
+ # print("Платеж", result, "получен")
83
+ # else:
84
+ # print("Ничегошеньки нет")
85
+ # await page.wait_for_timeout(3000)
86
+ await context.close()
87
+ # await page.video.path()
88
+ # BufferedInputFile(pth, 'tbank')
89
+ # await bot.send_video('mixartemev')
90
+ ...
91
+ await browser.close()
92
+
93
+
94
+ def recursion_payments(amount: int, transactions: list):
95
+ tran = transactions.pop(0)
96
+ normalized_tran = tran.replace("−", "-").replace(",", ".")
97
+ if 0 > int(float(normalized_tran)) != amount:
98
+ return recursion_payments(amount, transactions)
99
+ return int(float(tran.replace("−", "-").replace(",", ".")))
100
+
101
+
102
+ asyncio.run(main())
@@ -0,0 +1 @@
1
+ {"cookies": [{"name": "capsLockPushed", "value": "false", "domain": "private.auth.alfabank.ru", "path": "/passport/cerberus-mini-blue/dashboard-blue", "expires": 1778487847, "httpOnly": false, "secure": false, "sameSite": "Lax"}, {"name": "access_token", "value": "eyJhbGciOiJIUzI1NiJ9.eyJzZXNzaW9uX3Rva2VuIjoiYWMxYjAyYzctYThmNC0zZWI0LTg1MzUtMjM3YzBmNjU4YmRmIiwiaXNzIjoiY2VyYmVydXMtbWluaSIsInNlc3Npb25fY2xpZW50IjoibmV3Y2xpY2std2ViIiwic3ViIjoiYWMxYjAyYzctYThmNC0zZWI0LTg1MzUtMjM3YzBmNjU4YmRmIiwianRpIjoiNmM5ZDc4ZTllNmZkNDBkNThjYjUwNTAxNDVkYTQ5YWQifQ.zFmw9TGaq4-tFNyRude0fycVHHqjgygEBkQkNjdi4Hs", "domain": "private.auth.alfabank.ru", "path": "/passport", "expires": 1767687997.168728, "httpOnly": true, "secure": true, "sameSite": "None"}, {"name": "cross_auth_token", "value": "eyJhbGciOiJIUzI1NiJ9.eyJzZXNzaW9uX3Rva2VuIjoiYWMxYjAyYzctYThmNC0zZWI0LTg1MzUtMjM3YzBmNjU4YmRmIiwiaXNzIjoiY2VyYmVydXMtbWluaSIsInNlc3Npb25fY2xpZW50IjoibmV3Y2xpY2std2ViIiwic3ViIjoiYWMxYjAyYzctYThmNC0zZWI0LTg1MzUtMjM3YzBmNjU4YmRmIiwianRpIjoiNmM5ZDc4ZTllNmZkNDBkNThjYjUwNTAxNDVkYTQ5YWQifQ.zFmw9TGaq4-tFNyRude0fycVHHqjgygEBkQkNjdi4Hs", "domain": ".auth.alfabank.ru", "path": "/passport", "expires": 1767687997.168805, "httpOnly": true, "secure": true, "sameSite": "None"}, {"name": "XSRF-TOKEN", "value": "dd7ce66e-0b13-4bdb-9e10-67c70520e4ef", "domain": "web.alfabank.ru", "path": "/", "expires": -1, "httpOnly": false, "secure": false, "sameSite": "Lax"}, {"name": "__zzatw-alfabank-retail", "value": "MDA0dBA=Fz2+aQ==", "domain": ".private.auth.alfabank.ru", "path": "/", "expires": 1778487995, "httpOnly": false, "secure": false, "sameSite": "Lax"}, {"name": "__zzatw-alfabank-retail", "value": "MDA0dBA=Fz2+aQ==", "domain": ".auth.alfabank.ru", "path": "/", "expires": 1778487995, "httpOnly": false, "secure": false, "sameSite": "Lax"}, {"name": "_sp_ses.3c2b", "value": "*", "domain": ".alfabank.ru", "path": "/", "expires": 1746953842, "httpOnly": false, "secure": false, "sameSite": "Lax"}, {"name": "__alfa_uid", "value": "215a0cbd-166f-4b34-889d-cfb41432459c", "domain": "metrics.alfabank.ru", "path": "/", "expires": 1778488042.869225, "httpOnly": false, "secure": false, "sameSite": "Lax"}, {"name": "passport_session_id", "value": "a6a13b54-78fe-4146-b0c0-9033f4efc269", "domain": ".alfabank.ru", "path": "/", "expires": -1, "httpOnly": false, "secure": true, "sameSite": "Lax"}, {"name": "cfidsw-alfabank-retail", "value": "gByg8Td5MgEvwzJDwItXuU78OzWRBFa1CPNKrHpfFEsp5jsJ4ecdrYV46AboZL+kj7bv7sKMciLs6KT/j7Mq10XF680HdwuYXe4t0MPloEUa5wFlVvTyX8uM3QoRgN6pNUh2mV4AFaZMfOjRqVXFSxzJkfcUaNVnNlYzuw==", "domain": ".private.auth.alfabank.ru", "path": "/", "expires": 1778487995, "httpOnly": false, "secure": false, "sameSite": "Lax"}, {"name": "cfidsw-alfabank-retail", "value": "gByg8Td5MgEvwzJDwItXuU78OzWRBFa1CPNKrHpfFEsp5jsJ4ecdrYV46AboZL+kj7bv7sKMciLs6KT/j7Mq10XF680HdwuYXe4t0MPloEUa5wFlVvTyX8uM3QoRgN6pNUh2mV4AFaZMfOjRqVXFSxzJkfcUaNVnNlYzuw==", "domain": ".auth.alfabank.ru", "path": "/", "expires": 1778487995, "httpOnly": false, "secure": false, "sameSite": "Lax"}, {"name": "gsscw-alfabank-retail", "value": "hnGFKIFZ7D1OvofAoh5gpWzMgC2N9UK/amM1Mq/otZ9clk1l88cZPwNdQQgBTAUDjgxr/NV9SEh8i2zR/Jrs5oxzXEvjKM12rMQp4TL5qUSO/njPC8gnOc2QI4Yj1L1ktLuVNc7ockAd05brO2aeBpRN8WCXyoh2AYZONHvLNAkU593acMGrtNvLuF3VJPQKlNcwrSCfiNre5fM5IQOUPPTk6icKyhKxMQUjUgQZNa9k/ROVt1dnEbIGlaqgP00Z22+REFkO", "domain": ".private.auth.alfabank.ru", "path": "/", "expires": 1778487997, "httpOnly": false, "secure": false, "sameSite": "Lax"}, {"name": "gsscw-alfabank-retail", "value": "hnGFKIFZ7D1OvofAoh5gpWzMgC2N9UK/amM1Mq/otZ9clk1l88cZPwNdQQgBTAUDjgxr/NV9SEh8i2zR/Jrs5oxzXEvjKM12rMQp4TL5qUSO/njPC8gnOc2QI4Yj1L1ktLuVNc7ockAd05brO2aeBpRN8WCXyoh2AYZONHvLNAkU593acMGrtNvLuF3VJPQKlNcwrSCfiNre5fM5IQOUPPTk6icKyhKxMQUjUgQZNa9k/ROVt1dnEbIGlaqgP00Z22+REFkO", "domain": ".auth.alfabank.ru", "path": "/", "expires": 1778487997, "httpOnly": false, "secure": false, "sameSite": "Lax"}, {"name": "browserId", "value": "68205f3adc69f01d00012ee4", "domain": "private.auth.alfabank.ru", "path": "/", "expires": 1778487995.512104, "httpOnly": false, "secure": true, "sameSite": "Strict"}, {"name": "passport-session", "value": "true", "domain": ".alfabank.ru", "path": "/", "expires": 1746952897.168841, "httpOnly": true, "secure": true, "sameSite": "None"}, {"name": "SUCHASH", "value": "E6DE996481A14BCB59887DEF111E195A", "domain": ".alfabank.ru", "path": "/", "expires": -1, "httpOnly": false, "secure": false, "sameSite": "Lax"}, {"name": "GW_SESSION_NEWCLICK", "value": "72b4dc05-cc93-4be8-bad4-f23ce09d1faa", "domain": ".alfabank.ru", "path": "/", "expires": -1, "httpOnly": true, "secure": true, "sameSite": "Lax"}, {"name": "DEVICE_APP_ID", "value": "3082d7e4-b8fc-4feb-9aa3-71c5d1748d9e", "domain": ".alfabank.ru", "path": "/", "expires": 1781511997.04382, "httpOnly": false, "secure": false, "sameSite": "Lax"}, {"name": "DEVICE_SECRET", "value": "1f1d6529-2e74-4102-b25f-09bf87063d07daf99c91-8e21-453b-85ff-23471dcb799c", "domain": "web.alfabank.ru", "path": "/", "expires": 1781511997.043926, "httpOnly": false, "secure": false, "sameSite": "Lax"}, {"name": "DEVICE_PUBLIC_KEY_ID", "value": "1324b1de-39df-4b08-b852-eac65192fb44", "domain": "web.alfabank.ru", "path": "/", "expires": 1781511997.04396, "httpOnly": false, "secure": false, "sameSite": "Lax"}, {"name": "STARTED_PASS_CODE_LOGIC_TIME", "value": "1746951996673", "domain": "web.alfabank.ru", "path": "/", "expires": 1781511997.043985, "httpOnly": false, "secure": false, "sameSite": "Lax"}, {"name": "auth_type_pincode", "value": "true", "domain": ".alfabank.ru", "path": "/", "expires": 1781511997.044055, "httpOnly": false, "secure": false, "sameSite": "Lax"}, {"name": "f36b39c34hj", "value": "8e99fba30096bdfcdfde6187d1fb2edc8c1bbc24eb53bf064b7bea1f0a33ad274939d9367bed4deb794147ea2708f306SSz3uoOrR0dcrfrZf40iFw%3D%3D", "domain": ".alfabank.ru", "path": "/", "expires": 1781511997.044074, "httpOnly": false, "secure": true, "sameSite": "Lax"}, {"name": "5c24xow7n6w", "value": "0", "domain": ".alfabank.ru", "path": "/", "expires": 1781511997.044098, "httpOnly": false, "secure": true, "sameSite": "Lax"}, {"name": "newclick-sticky-cookie", "value": "\"7ac27a834001e010\"", "domain": "web.alfabank.ru", "path": "/", "expires": -1, "httpOnly": true, "secure": false, "sameSite": "Lax"}, {"name": "fgsscw-alfabank-retail", "value": "xNH5563df983ef073795951fdfdc4d8d41c19cc2", "domain": ".private.auth.alfabank.ru", "path": "/", "expires": 1778487997, "httpOnly": false, "secure": false, "sameSite": "Lax"}, {"name": "fgsscw-alfabank-retail", "value": "xNH5563df983ef073795951fdfdc4d8d41c19cc2", "domain": ".auth.alfabank.ru", "path": "/", "expires": 1778487997, "httpOnly": false, "secure": false, "sameSite": "Lax"}, {"name": "__zzatw-alfabank-retail", "value": "MDA0dC0cTHtmcDhhDHEWTT17CT4VHThHKHIzd2U6VGs7CmhLGzUdCkNoUlRDXS1BSk8if3IsMBs3V2EgDBYRTVZUfSsiFnh0LFYLD1s5MzlEaXBXJ1EPHVB8Gxk2bV17TGcVfjYucGBkDhpHan4xUVEsEREOEUZaCxtpJCkICA4VQkVqejFxIhpjSF0lQA9NNCUWGnduJg0LQBlwQ3N8GzdXXRwRJFgOIT8LF1xVPjVUDjx1Vy8NLjheLW8eZktfKEhWVgosHRV3ZxUbUEsYL0tfO2VsJlsrfCljNSoi9Ku4jw==", "domain": ".web.alfabank.ru", "path": "/", "expires": 1778487997, "httpOnly": false, "secure": false, "sameSite": "Lax"}, {"name": "__zzatw-alfabank-retail", "value": "MDA0dC0cTHtmcDhhDHEWTT17CT4VHThHKHIzd2U6VGs7CmhLGzUdCkNoUlRDXS1BSk8if3IsMBs3V2EgDBYRTVZUfSsiFnh0LFYLD1s5MzlEaXBXJ1EPHVB8Gxk2bV17TGcVfjYucGBkDhpHan4xUVEsEREOEUZaCxtpJCkICA4VQkVqejFxIhpjSF0lQA9NNCUWGnduJg0LQBlwQ3N8GzdXXRwRJFgOIT8LF1xVPjVUDjx1Vy8NLjheLW8eZktfKEhWVgosHRV3ZxUbUEsYL0tfO2VsJlsrfCljNSoi9Ku4jw==", "domain": ".alfabank.ru", "path": "/", "expires": 1778487997, "httpOnly": false, "secure": false, "sameSite": "Lax"}, {"name": "mpid", "value": "NjgyMDVmM2QwMTFmNTMzZQ==", "domain": "sync.otm-r.ru", "path": "/", "expires": 1749630397.66852, "httpOnly": true, "secure": true, "sameSite": "None"}, {"name": "gsscw-alfabank-retail", "value": "8Dkk6uzysnsnxoExz0WaH/74J0a5GKKxYCrScmcW5I7FZvs1Y2dqutsTzQMfP/OYnI9vknBlu/6OCbGFK9gdqw6Z5bmLQC6EBIHLHm//ReH77I0/R0/oUqf8fP/AsqEWlC1wNXUb509RHQwqkGopEwT7ZYV4ELnusN421HIw0s/J5Bs5g1jvTZIv9ViJv0ESzRZZgc8NHAzU9C+fPPZpADxuhiH0EdFH62RtHdk/hM1EBFQhge2MMhiMDgkP3gbxNdChAPKvHDAEGTxlkSTqB00V9T8ywuaiXXjE+j8=", "domain": "groupib-ac.alfabank.ru", "path": "/", "expires": 1778488030.688616, "httpOnly": false, "secure": true, "sameSite": "None"}, {"name": "cfidsw-alfabank-retail", "value": "VzxbLNDV5NBTFTMgCqaAepzKZSg2AuI87mh7OY+aH+d0zV12npNKzhdZthsdf70GHeiIjbaKzPlAI1n89AXzkzoDkh2/iTHLNFfAJIF1zG6Np2/XsWZW59m3yW/G3fPUJyrx7k4W32CwtW5owKudkDIkyCwWJpIELvar4A==", "domain": "groupib-ac.alfabank.ru", "path": "/", "expires": 1778488030.688772, "httpOnly": false, "secure": true, "sameSite": "None"}, {"name": "cfidsw-alfabank-retail", "value": "VzxbLNDV5NBTFTMgCqaAepzKZSg2AuI87mh7OY+aH+d0zV12npNKzhdZthsdf70GHeiIjbaKzPlAI1n89AXzkzoDkh2/iTHLNFfAJIF1zG6Np2/XsWZW59m3yW/G3fPUJyrx7k4W32CwtW5owKudkDIkyCwWJpIELvar4A==", "domain": ".web.alfabank.ru", "path": "/", "expires": 1778488030, "httpOnly": false, "secure": false, "sameSite": "Lax"}, {"name": "cfidsw-alfabank-retail", "value": "VzxbLNDV5NBTFTMgCqaAepzKZSg2AuI87mh7OY+aH+d0zV12npNKzhdZthsdf70GHeiIjbaKzPlAI1n89AXzkzoDkh2/iTHLNFfAJIF1zG6Np2/XsWZW59m3yW/G3fPUJyrx7k4W32CwtW5owKudkDIkyCwWJpIELvar4A==", "domain": ".alfabank.ru", "path": "/", "expires": 1778488030, "httpOnly": false, "secure": false, "sameSite": "Lax"}, {"name": "gsscw-alfabank-retail", "value": "8Dkk6uzysnsnxoExz0WaH/74J0a5GKKxYCrScmcW5I7FZvs1Y2dqutsTzQMfP/OYnI9vknBlu/6OCbGFK9gdqw6Z5bmLQC6EBIHLHm//ReH77I0/R0/oUqf8fP/AsqEWlC1wNXUb509RHQwqkGopEwT7ZYV4ELnusN421HIw0s/J5Bs5g1jvTZIv9ViJv0ESzRZZgc8NHAzU9C+fPPZpADxuhiH0EdFH62RtHdk/hM1EBFQhge2MMhiMDgkP3gbxNdChAPKvHDAEGTxlkSTqB00V9T8ywuaiXXjE+j8=", "domain": ".web.alfabank.ru", "path": "/", "expires": 1778488042, "httpOnly": false, "secure": false, "sameSite": "Lax"}, {"name": "gsscw-alfabank-retail", "value": "8Dkk6uzysnsnxoExz0WaH/74J0a5GKKxYCrScmcW5I7FZvs1Y2dqutsTzQMfP/OYnI9vknBlu/6OCbGFK9gdqw6Z5bmLQC6EBIHLHm//ReH77I0/R0/oUqf8fP/AsqEWlC1wNXUb509RHQwqkGopEwT7ZYV4ELnusN421HIw0s/J5Bs5g1jvTZIv9ViJv0ESzRZZgc8NHAzU9C+fPPZpADxuhiH0EdFH62RtHdk/hM1EBFQhge2MMhiMDgkP3gbxNdChAPKvHDAEGTxlkSTqB00V9T8ywuaiXXjE+j8=", "domain": ".alfabank.ru", "path": "/", "expires": 1778488042, "httpOnly": false, "secure": false, "sameSite": "Lax"}, {"name": "lipcookeid", "value": "!YZ/d4aBTxoAHVkuJIm0005mk4pPY5HqlSSHRy/VkDVs+4/8LothKya7gJUOnLr7q9jzUl/X242NyZ3YUhuTgsLp3fjUWhS6qx9bjUEQ=", "domain": "online.alfabank.ru", "path": "/", "expires": -1, "httpOnly": true, "secure": true, "sameSite": "Lax"}, {"name": "_sp_id.3c2b", "value": "aa98c4ba-a78c-4359-a368-143a639e7331.1746951746.1.1746952042.1746951746.2b2ae3d8-acf8-4069-97eb-a88c70e28187", "domain": ".alfabank.ru", "path": "/", "expires": 1781512042.460605, "httpOnly": false, "secure": false, "sameSite": "Lax"}, {"name": "fgsscw-alfabank-retail", "value": "62yx8d793b86d100949677fb86684909bf1070a3", "domain": ".web.alfabank.ru", "path": "/", "expires": 1778488042, "httpOnly": false, "secure": false, "sameSite": "Lax"}, {"name": "fgsscw-alfabank-retail", "value": "62yx8d793b86d100949677fb86684909bf1070a3", "domain": ".alfabank.ru", "path": "/", "expires": 1778488042, "httpOnly": false, "secure": false, "sameSite": "Lax"}], "origins": [{"origin": "https://web.alfabank.ru", "localStorage": [{"name": "snowplowOutQueue_sp_newclick-host-ui_get", "value": "[]"}, {"name": "DEVICE_APP_ID", "value": "3082d7e4-b8fc-4feb-9aa3-71c5d1748d9e"}, {"name": "user-last-activity-date", "value": "1746952038742"}, {"name": "snowplowOutQueue_sp_newclick-dashboard-ui_get", "value": "[\"?e=se&se_ca=Carousel%20for%20you&se_ac=View&se_la=Banner&tv=js-2.8.2&tna=newclick-dashboard-ui&aid=newclick_dashboard_ui&p=web&tz=Europe%2FMinsk&lang=ru-RU&cs=UTF-8&f_pdf=1&f_qt=0&f_realp=0&f_wma=0&f_dir=0&f_fla=0&f_java=0&f_gears=0&f_ag=0&res=1280x720&cd=30&cookie=1&eid=4b5328ee-efa7-4dd5-a2bb-8e3cc576558a&dtm=1746952042460&vp=1280x720&ds=1280x3549&vid=1&sid=2b2ae3d8-acf8-4069-97eb-a88c70e28187&duid=aa98c4ba-a78c-4359-a368-143a639e7331&fp=477354862&uid=AI6NSQ&refr=https%3A%2F%2Fprivate.auth.alfabank.ru%2F&url=https%3A%2F%2Fweb.alfabank.ru%2Fdashboard&cx=eyJzY2hlbWEiOiJpZ2x1OmNvbS5zbm93cGxvd2FuYWx5dGljcy5zbm93cGxvdy9jb250ZXh0cy9qc29uc2NoZW1hLzEtMC0wIiwiZGF0YSI6W3sic2NoZW1hIjoiaWdsdTpjb20uYWxmYWJhbmsvY3VzdG9tX2RpbWVuc2lvbi9qc29uc2NoZW1hLzEtMC0wIiwiZGF0YSI6eyIxIjoiU0FTXzE5MjUxNDA5NTIxIiwiMiI6IkRDX0lOU1RfQ09NTU9OX0FPXzAzMjAyNSIsIjMiOiJCSVBEQyIsIjQiOiJkYXNoYm9hcmQiLCI2Ijoi0JTQtdC90YzQs9C4INCywqDRgNCw0YHRgdGA0L7Rh9C60YNcbtCx0LXQtyDQv9GA0L7RhtC10L3RgtC-0LIiLCI3IjoiaHR0cHM6Ly93ZWIuYWxmYWJhbmsucnUvbXVsdGlzdGVwdWk_ZnJvbU1vZHVsZT1GT1JNJmFsaWFzPWRjLWluc3RhbGxtZW50LWxvYW4mc291cmNlPUxFTlRBX0ZPUl9ZT1VfQU9fTkVXIiwiOCI6MiwiNDAiOiI0NTIzOSIsIjQxIjpudWxsLCI0OCI6ImNsaWVudCIsIjQ5IjoiQURVTFQiLCI1MCI6InVuZGVmaW5lZCJ9fV19\"]"}, {"name": "logout-reason", "value": ""}, {"name": "AlfaOnlineOpenedTabs", "value": "1"}, {"name": "__gitd", "value": "MDA0dC0iD2k5IVB2GApFSE5PMyhXQXt1Fy9LICglLS8PaTleJktWU3orHhN4cChYfw5hLxY=69EuPg=="}, {"name": "PRIVATE_KEY_ENC", "value": "eyJpdiI6IkVPOEVtMzBxZWp4Ym9CTC9zaGZvVkE9PSIsInYiOjEsIml0ZXIiOjEwMDAsImtzIjoyNTYsInRzIjoxMjgsIm1vZGUiOiJjY20iLCJhZGF0YSI6IiIsImNpcGhlciI6ImFlcyIsInNhbHQiOiJSb3V1Z05WdnBtbldXRUZRanQreStZSWtEcWZPcGVwYiIsImN0IjoiejhHaERSVGxpQU5JWHJ3SXFKYzRkSkhnWVU4RnZDaU9iNlFDYjQ3dkU1Q2FSQ2hVdWJpVTJqUWpuZWNoOXhjNENEZ0xUbmI5VU1DWDljUzA4NlJvMjRCT3dmNjk4a0tzbE1TNmhDdXdkaUFYWWcvOEtXMHV1M2ZJWE9XQmJ3VCsxVVptR1FMNEZFeGdHSVpjOWYyRnlCNElNS01KcWVoK0ljZmpTcHFKWWR1UmExOGZaZE1aUXVFRXRsQm9sUUVZc2tzMkJ4UTFiaGMwUmNEa28wTFo3cG5UREhWYzQzVGtKdDVjTWZhQWQ3ZW5OVUlsdktQOXhmRTlMdUlRQkErNy9ReFFxc1ZhZWhDbklrZTRCQVRaSVhSc2JhR3ZWQXlzY2dJRDNWQ0xGQzRnYy9vRHBQQVd1T0ZDUmd4cUZVOG9NcWtvNVBOVmh6SnRMSWduNUJSQ043QnpML3BUb3pNN1FZYXZER1I0U1hWL1VQWWVBb0RUN2I0YjRMYUJhR29wSnIrWTlUSUxlZkZnZnZoWnpaVFFUT0poc2JIcDVtV3NuelBlTnZlRDh1SVpESjUzMkhUNFRVaWY4d1oyOGtybGZablFXb2szWFpoam9DMkJsYVRwWmEzaHN5ZzBHY2ZaUUJ2Y05YVzhyRlNjaGRocVRWT3lpOVJZbW5USEhnL2dZZnFhM1dTY00zc1o1dHNsWEEvVElvSU04UlNCSzVOV2luQ1dna25yc0lCQzN0VUFSNEJBbXJuYzA0eGk3aWpPRjBwT0xpN3VnSThGS2ZTQ2RPWWpoeTBRYzZmWUYwWmwzQUZUQVFDZjUrR0U1M0hZTkNoZGR1clp5bHh3L1NVbk5zTkdqQ3hFcFNLTkhoZE9ITVdwOVlmWWJqU2tMVmpUM2t0MVQva0ZzMG13b0dKcGpVYkFmYVhBNFhSbGUrTWpmR3h4NnRiOGNzbkxyNkJEREVDcGlVc3ZTTXlpelNRNHhNMk94QnhFbXNjdkJndzVDeSs1WFRkTWp3d3VOcW12VGJTQiswMU1QWXM5VVpGcUJWTzhtQ3VHOUZadDFGVW1icXlFbFRsa0Z5K3VSSUJsbFh3c3NZME0rOW53bzJ1V1ZxcVo1RlNHaTBZWkV5ZHV4R0pHZ01VNHpIeTE0d3ZyUHBia0QrNzlKLy9HcGtNcFpzUFhzY3d0MHIwTlhIU1VOQmU1OUo4NGo3WjJ6UjM1Q1dTYTNFNlp2WkY3Mk5sMDl5RVJRc1JiMW8wVmpham9WbjRkYXRlajZzbUxMK3VhdTZ1L2RVS1Y2RThFc2hVZFdHZWxwUW9ydnpxNi9paSt5SHJzT2hvSE9KVU9sQXJYZS9sTlg1NWRSRFlyMXpuRnY5VlZTZ1VZNXczK3BYSXBvd0tSYW05dk9VUnVYQ1lWK0RKYjNqUjNYbHVCTEJHcWFsZUwyQlZFcHMwYlZKS2crRldEMk4raUQvczg5anJTWVJtTEF6bmErNy9XbUJvZUxRL0IvWkVzdHFtcHorTDJveVpvMjIya1dBU0NvdXRIUTFCb1U2YXlGNHNFK2FVeHkrRkdiZStldGdTUitnRFptU3BGNWlMSEo5ZFFIWkl6dlltTHZ2TkN0ajUySDkvNXQrVHN1R0RUT3gzWENHZVRSaVFmZVBJUDRFbUJobnZNempkbzBwMDlHTFduTTluTks2QUJDWmp5UGJpSmJ2SjJmZzJqd0w1QWdzdnVad010OVZVckYzR2ZNcmNEQkl1ald4c2pJd0M4M2UyNnRuNitvbVlYVUFhY0VhdW1LTDFrbHViMjdUNStjbFZsNmkxTzJBY3FBZmZxc2tQTWdZTFdBNGFvcVlvTHhWeGo5aHRDK2ZxblI3TW9sSEszSmZXOGFKS0N5NUdYRXZtSjBKQU1tWUlydms2cWcxQU05M0hhZjhhT0pGTDVUdzlZOXBMa0trZExPeGZZK0QyOTJJZlFYcjNUd3RLTUJPYmxWTjducjNMZGpnQnN0Vm82c3RTaTVIaG00WUx5Uzg1SDVER3g0NjlkR05TL3VScmwycVZ1Q0t5dkowdTg1U21zckdaMWUxNTJxZDdTQWNwUDY2OTB0Z21ySiswSWFZSENnOHRPdC9Ld2RnN0x6L3o1eHdZZUxqaWxNMXBGUUtndUtSMXNuY2l0d1VOVHBVL0dCc2lPUTBWZS9aa1cvR2JrK1FHVVZPdDR0UVRYUGIyU2RpLzg5eTZTZFIrbi9QaGJwMU5DT0FGdFhGL1JUN1FqeEdTYVVTZEN5M2FOQzFBTytRZWEwQ0xNSzExN1lTLzNSK0xDWU8rMUFYNjJhK0VWMUcwZStpZUlML3Z1aHliUDNFMnBWZ1lOYllQaGVwVXNvNXl1ekJQZEtUekcrQ0s1T2dqSnhFTW41QU5xb2RDOXZmWTVXNG9taitIeGxhcFdnN3crZEpuOFRhYmcwbm1sWndLb09UN2dhV3RuT1pSR1QwaUJTQmVZV1lXK0Fhc1V1Y2g3RDZpc3gxZEM0ZUlmb2krTVdDOUhiOEYwRXZFT3FmQXdlRCtJWWU3MkhuQlphUnFCb2tzOVZyQ3pObFZPZys1LzMwZmEydTFhQi9pMG9kdWR6dUk3OFdwTnI5WEhvc0haTXppS3JVbFMyY3ZDa040Um5hbHpVMzJOWFdJTUxVYUJlTHBEeFBlR2U4SGsvWDVNTzIrVFl3UTUxYzhzdWZPRllLS3QvZlhDbWpZVUx5YzV5bWlyZ3ErbXh4YnJxeExrakxqQlBaKzJ1TnI2YVVtTmNWaXRHN3V4c1R5WG5oRStEbFpXOUNZTkQyMGY5VStCRkFjVWhPYkJoakF4T2pWWHdKSmxtSmRPMXJxNHBTQTMifQ=="}, {"name": "identificationType", "value": "undefined"}, {"name": "userRole", "value": "client"}, {"name": "snowplowOutQueue_sp_newclick-deeplink-ui_get", "value": "[]"}, {"name": "SECURED_DEVICE_SECRET", "value": "bca6f1e6-ce22-4b06-871e-da2915343883d9f600ee-e463-49f8-b4ea-7c55331ba731"}, {"name": "__zzatw-alfabank-retail", "value": "MDA0dC0cTHtmcDhhDHEWTT17CT4VHThHKHIzd2U6VGs7CmhLGzUdCkNoUlRDXS1BSk8if3IsMBs3V2EgDBYRTVZUfSsiFnh0LFYLD1s5MzlEaXBXJ1EPHVB8Gxk2bV17TGcVfjYucGBkDhpHan4xUVEsEREOEUZaCxtpJCkICA4VQkVqejFxIhpjSF0lQA9NNCUWGnduJg0LQBlwQ3N8GzdXXRwRJFgOIT8LF1xVPjVUDjx1Vy8NLjheLW8eZktfKEhWVgosHRV3ZxUbUEsYL0tfO2VsJlsrfCljNSoi9Ku4jw=="}, {"name": "userAgeRange", "value": "ADULT"}, {"name": "otm_save_flag", "value": "{\"otm_id\":\"7503101694815720254\",\"exp_date\":1747038397670}"}, {"name": "DEVICE_PUBLIC_KEY_ID", "value": "1324b1de-39df-4b08-b852-eac65192fb44"}]}, {"origin": "https://private.auth.alfabank.ru", "localStorage": [{"name": "__gitd", "value": "MDA0dC0iD2k5IVB2GApFSE5PMyhXQXt1Fy9LICglLS8PaTlaJExaVHsmIBd8biVRCQ5hQzNC+4S3OA=="}, {"name": "snowplowOutQueue_sp_ab_get", "value": "[]"}, {"name": "browser_secret_date", "value": "1746951995518"}, {"name": "__zzatw-alfabank-retail", "value": "MDA0dBA=Fz2+aQ=="}, {"name": "x-user-info", "value": "eyJuYW1lIjogItCc0LjRhdCw0LjQuyJ9"}, {"name": "browser_secret", "value": "76698639-09ad-4ea2-b4da-77ab753960363da43dba-6e20-45b4-b336-62b184b22427"}]}]}
@@ -0,0 +1,79 @@
1
+ import asyncio
2
+ import os
3
+ from playwright.async_api import async_playwright
4
+ from playwright._impl._errors import TimeoutError
5
+
6
+
7
+ async def main():
8
+ from x_model import init_db
9
+ from xync_schema import models
10
+ from xync_client.loader import PG_DSN
11
+
12
+ _ = await init_db(PG_DSN, models, True)
13
+ agent = await models.PmAgent.filter(pm__norm="sber", auth__isnull=False).first()
14
+
15
+ async with async_playwright() as p:
16
+ storage_state = "state.json" if os.path.exists("state.json") else None
17
+ browser = await p.chromium.launch(headless=False)
18
+ context = await browser.new_context(storage_state=storage_state, record_video_dir="videos")
19
+ page = await context.new_page()
20
+
21
+ await page.goto("https://online.sberbank.ru/CSAFront/index.do")
22
+ try:
23
+ await page.wait_for_url("https://online.sberbank.ru/CSAFront/index.do", timeout=3000)
24
+ except TimeoutError:
25
+ if card := agent.auth.get("card"):
26
+ await page.locator('button[aria-controls="tabpanel-card"]').is_visible()
27
+ await page.locator('button[aria-controls="tabpanel-card"]').click()
28
+ await page.wait_for_selector('input[placeholder="Введите номер карты"]', timeout=10000)
29
+ await page.locator('input[placeholder="Введите номер карты"]').fill(card)
30
+ await page.locator('button[type="submit"]').click()
31
+
32
+ sms_code = input("Введите код из SMS: ")
33
+ for i in range(5):
34
+ await page.locator(f'input[name="confirmPassword-{i}"]').fill(sms_code[i])
35
+
36
+ password = input("Введите 5-значный код: ")
37
+ await page.wait_for_selector(".FWAhBZHPePsATLTVFeTT", timeout=10000)
38
+ otp_fields = page.locator('[class="BjsSl7Uv2es5tUtwB03r"]')
39
+ for i in range(await otp_fields.count() + 1):
40
+ await page.keyboard.press(password[i])
41
+
42
+ await page.wait_for_timeout(1000)
43
+
44
+ await page.wait_for_selector(".Re_Wg4Drqw9QjVM43vJ_", timeout=10000)
45
+ fields = page.locator('[class="BjsSl7Uv2es5tUtwB03r"]')
46
+ for i in range(await fields.count() + 1):
47
+ await page.keyboard.press(password[i])
48
+ await page.wait_for_timeout(100000)
49
+ elif login := agent.auth.get("login"):
50
+ await page.locator('input[autocomplete="login"]').fill(login)
51
+ password = input("Введите пароль: ")
52
+ await page.locator('input[autocomplete="password"]').fill(password)
53
+ await page.locator('button[data-testid="button-continue"]').click()
54
+ sms_code = input("Введите код из SMS: ")
55
+ for i in range(5):
56
+ await page.locator(f'input[name="confirmPassword-{i}"]').fill(sms_code[i])
57
+
58
+ password = input("Введите 5-значный код: ")
59
+ await page.wait_for_selector(".FWAhBZHPePsATLTVFeTT", timeout=10000)
60
+ otp_fields = page.locator('[class="BjsSl7Uv2es5tUtwB03r"]')
61
+ for i in range(await otp_fields.count() + 1):
62
+ await page.keyboard.press(password[i])
63
+
64
+ await page.wait_for_timeout(1000)
65
+
66
+ await page.wait_for_selector(".Re_Wg4Drqw9QjVM43vJ_", timeout=10000)
67
+ fields = page.locator('[class="BjsSl7Uv2es5tUtwB03r"]')
68
+ for i in range(await fields.count() + 1):
69
+ await page.keyboard.press(password[i])
70
+
71
+ await page.wait_for_timeout(100000)
72
+ await context.storage_state(path="state.json")
73
+
74
+ await context.close()
75
+ await browser.close()
76
+
77
+
78
+ if __name__ == "__main__":
79
+ asyncio.run(main())
@@ -0,0 +1,88 @@
1
+ import asyncio
2
+
3
+ from playwright.async_api import async_playwright
4
+ from playwright._impl._errors import TimeoutError, Error
5
+
6
+
7
+ async def main():
8
+ async with async_playwright() as p:
9
+ browser = await p.chromium.launch(headless=False)
10
+ context = await browser.new_context(storage_state="state.json", record_video_dir="videos")
11
+ page = await context.new_page()
12
+ await page.goto("https://www.tbank.ru/mybank/")
13
+ await page.wait_for_timeout(1000)
14
+ try:
15
+ await page.wait_for_url("https://www.tbank.ru/mybank/", timeout=3000)
16
+ except TimeoutError:
17
+ # Новый пользователь
18
+ if await page.locator('[automation-id="form-title"]', has_text="Вход в Т‑Банк").is_visible():
19
+ await page.wait_for_timeout(200)
20
+ await page.locator('[automation-id="phone-input"]').fill("9992259898")
21
+ await page.locator('[automation-id="button-submit"] svg').click()
22
+ # Известный пользователь
23
+ else:
24
+ await page.locator('[automation-id="button-submit"]').click()
25
+ await page.wait_for_timeout(100)
26
+ await page.locator('[automation-id="otp-input"]').fill(input("Введите код"))
27
+ await page.wait_for_timeout(1000)
28
+ if await page.locator('[automation-id="cancel-button"]').is_visible():
29
+ await page.wait_for_timeout(3000)
30
+ await page.locator('[automation-id="cancel-button"]', has_text="Не сейчас").click(delay=500)
31
+ elif await page.locator('[automation-id="password-input"]').is_visible():
32
+ await page.locator('[automation-id="password-input"]').fill("mixfix98")
33
+ await page.locator('[automation-id="button-submit"] svg').click()
34
+ await page.context.storage_state(path="state.json")
35
+ await page.wait_for_timeout(200)
36
+
37
+ # Переходим на сбп и вводим данные получателя
38
+ # await page.locator(
39
+ # '[data-qa-type="desktop-ib-pay-buttons"] [data-qa-type="atomPanel pay-card-0"]',
40
+ # has_text="Перевести по телефону",
41
+ # ).click()
42
+ # await page.locator('[data-qa-type="recipient-input.value.placeholder"]').click()
43
+ # await page.wait_for_timeout(300)
44
+ # await page.locator('[data-qa-type="recipient-input.value.input"]').fill("9992259898")
45
+ # await page.locator('[data-qa-type="amount-from.placeholder"]').click()
46
+ # await page.locator('[data-qa-type="amount-from.input"]').fill("100")
47
+ # await page.wait_for_timeout(300)
48
+ # await page.locator('[data-qa-type="bank-plate-other-bank click-area"]').click()
49
+ # await page.locator('[data-qa-type*="inputAutocomplete.value.input"]').click()
50
+ # await page.locator('[data-qa-type*="inputAutocomplete.value.input"]').fill("Озон")
51
+ # await page.wait_for_timeout(300)
52
+ # await page.locator('[data-qa-type="banks-popup-list"]').click()
53
+ # await page.locator('[data-qa-type="transfer-button"]').click()
54
+
55
+ # Проверка последнего платежа
56
+ try:
57
+ await page.goto("https://www.tbank.ru/events/feed")
58
+ except Error:
59
+ await page.wait_for_timeout(1000)
60
+ await page.goto("https://www.tbank.ru/events/feed")
61
+ await page.wait_for_timeout(2000)
62
+ await page.locator('[data-qa-type = "timeline-operations-list"]:last-child').scroll_into_view_if_needed()
63
+ transactions = await page.locator(
64
+ '[data-qa-type="timeline-operations-list"] [data-qa-type="operation-money"]'
65
+ ).all_text_contents()
66
+ result = recursion_payments(100, transactions)
67
+ if result == 100:
68
+ print("Платеж", result, "получен")
69
+ else:
70
+ print("Ничегошеньки нет")
71
+ await page.wait_for_timeout(3000)
72
+ await context.close()
73
+ await page.video.path()
74
+ # BufferedInputFile(pth, 'tbank')
75
+ # await bot.send_video('mixartemev')
76
+ ...
77
+ await browser.close()
78
+
79
+
80
+ def recursion_payments(amount: int, transactions: list):
81
+ tran = transactions.pop(0)
82
+ normalized_tran = tran.replace("−", "-").replace(",", ".")
83
+ if 0 > int(float(normalized_tran)) != amount:
84
+ return recursion_payments(amount, transactions)
85
+ return int(float(tran.replace("−", "-").replace(",", ".")))
86
+
87
+
88
+ asyncio.run(main())
@@ -0,0 +1 @@
1
+ {"cookies": [{"name": "SSO_CONVERSATION_CSRF_KHm2f", "value": "yjYGHKshOgHjpG5NeWzWnoQ5sOY.1746868636", "domain": "id.tbank.ru", "path": "/auth", "expires": 1746870436.083603, "httpOnly": true, "secure": true, "sameSite": "None"}, {"name": "SSO_CONVERSATION_CSRF_fKa8U", "value": "CHzL_q5JBzl0eyAd7-Bxm1jaBIc.1746869224", "domain": "id.tbank.ru", "path": "/auth", "expires": 1746871024.185283, "httpOnly": true, "secure": true, "sameSite": "None"}, {"name": "SSO_CONVERSATION_CSRF_csrHb", "value": "wB62INnKtyQ1zEZfTxirzC5yJR0.1746869831", "domain": "id.tbank.ru", "path": "/auth", "expires": 1746871631.718935, "httpOnly": true, "secure": true, "sameSite": "None"}, {"name": "SSO_CONVERSATION_CSRF_wf6u8", "value": "xpeQ6ktey2L_b9siFlaK1fgJQa8.1746869999", "domain": "id.tbank.ru", "path": "/auth", "expires": 1746871799.640428, "httpOnly": true, "secure": true, "sameSite": "None"}, {"name": "isSubscribedToPush", "value": "false", "domain": ".tbank.ru", "path": "/", "expires": 1781428634.642818, "httpOnly": false, "secure": false, "sameSite": "Lax"}, {"name": "__P__wuid", "value": "357e0453744ecb9f0872a3cea1788d63", "domain": ".tbank.ru", "path": "/", "expires": 1778405999.640488, "httpOnly": false, "secure": true, "sameSite": "None"}, {"name": "x-ssoId", "value": "", "domain": "www.tbank.ru", "path": "/", "expires": -1, "httpOnly": true, "secure": true, "sameSite": "Lax"}, {"name": "dco.id", "value": "fe913cd8-7bbb-4a4d-b756-00003b519cd4", "domain": ".tbank.ru", "path": "/", "expires": 1778405998.533392, "httpOnly": false, "secure": false, "sameSite": "Lax"}, {"name": "stDeIdU", "value": "357e0453744ecb9f0872a3cea1788d63", "domain": ".tbank.ru", "path": "/", "expires": 1781428634.934439, "httpOnly": false, "secure": true, "sameSite": "None"}, {"name": "userType", "value": "Visitor", "domain": ".tbank.ru", "path": "/", "expires": 1781429998.908664, "httpOnly": false, "secure": true, "sameSite": "None"}, {"name": "dsp_click_id", "value": "no%20dsp_click_id", "domain": ".tbank.ru", "path": "/", "expires": 1752053998, "httpOnly": false, "secure": true, "sameSite": "None"}, {"name": "pageLanding", "value": "https%3A%2F%2Fwww.tbank.ru%2Fauth%2Flogin%2F", "domain": ".tbank.ru", "path": "/", "expires": -1, "httpOnly": false, "secure": true, "sameSite": "None"}, {"name": "__P__wuid_visit_id", "value": "v1%3A0000001%3A1746868634956%3A357e0453744ecb9f0872a3cea1788d63", "domain": ".tbank.ru", "path": "/", "expires": 1781429998.928833, "httpOnly": false, "secure": true, "sameSite": "None"}, {"name": "__P__wuid_visit_persistence", "value": "1746868634956", "domain": ".tbank.ru", "path": "/", "expires": 1746871798, "httpOnly": false, "secure": true, "sameSite": "None"}, {"name": "vIdUid", "value": "6a491558-3424-4acb-9d5d-5f360c313cf2", "domain": ".tbank.ru", "path": "/", "expires": 1781428635.032442, "httpOnly": false, "secure": true, "sameSite": "None"}, {"name": "stSeStTi", "value": "1746868635032", "domain": ".tbank.ru", "path": "/", "expires": 1781428635.03296, "httpOnly": false, "secure": true, "sameSite": "None"}, {"name": "mediaInfo", "value": "{%22width%22:1280%2C%22height%22:720%2C%22isTouch%22:false%2C%22displayMode%22:%22browser%22%2C%22retina%22:false}", "domain": "www.tbank.ru", "path": "/", "expires": -1, "httpOnly": false, "secure": true, "sameSite": "None"}, {"name": "__P__wuid_last_update_time", "value": "1746868634956", "domain": ".tbank.ru", "path": "/", "expires": 1781428635.036991, "httpOnly": false, "secure": true, "sameSite": "None"}, {"name": "api_prefix_594f33", "value": "w6LDIW5eCSOwIQXEugwFv_lBadPeFnVrvr_wdYP8Qdk.1746868635", "domain": "www.tbank.ru", "path": "/", "expires": 1746870435.120456, "httpOnly": true, "secure": true, "sameSite": "None"}, {"name": "api_prefix_6d17aa", "value": "8wGZVFr_2tViPADH5DIXNnWwJj_MFzi1iRo7FtvpA80.1746868635", "domain": "www.tbank.ru", "path": "/", "expires": 1746870435.58469, "httpOnly": true, "secure": true, "sameSite": "None"}, {"name": "last_getuaid", "value": "1746868635", "domain": "id.tinkoff.ru", "path": "/", "expires": 1778404635.96212, "httpOnly": true, "secure": true, "sameSite": "None"}, {"name": "sso_cookies_migrated", "value": "true", "domain": "id.tbank.ru", "path": "/", "expires": 1762420636.014557, "httpOnly": true, "secure": true, "sameSite": "Lax"}, {"name": "last_setuaid", "value": "1746868636", "domain": "id.tbank.ru", "path": "/", "expires": 1778404636.014685, "httpOnly": true, "secure": true, "sameSite": "None"}, {"name": "sso_uaid", "value": "uaid.ILmm0h260gW89SLgwF8YBTmBI1huv6meZ2VGmaNZSkgbBFWth2Nl3Vsowa30DDm6", "domain": "id.tbank.ru", "path": "/", "expires": 1762421999.640528, "httpOnly": true, "secure": true, "sameSite": "None"}, {"name": "api_prefix_e508ad", "value": "-gn0quC8c9HqnibECdoX9qLjS_PMTl3xB-Er9hpYpvc.1746869223", "domain": "www.tbank.ru", "path": "/", "expires": 1746871023.753302, "httpOnly": true, "secure": true, "sameSite": "None"}, {"name": "api_prefix_c04771", "value": "y1D5N7cu9XjVqlpv-62VqPWwVUANWEgx7g_37ILk4KY.1746869224", "domain": "www.tbank.ru", "path": "/", "expires": 1746871024.115589, "httpOnly": true, "secure": true, "sameSite": "None"}, {"name": "psid", "value": "I0UerouudQw4Q6Zo6RLt5FWos9sAOETt.auth-entity-mgmt-5ffc8797c6-g5xsv", "domain": "www.tbank.ru", "path": "/", "expires": 1746870490, "httpOnly": false, "secure": true, "sameSite": "None"}, {"name": "api_prefix_996320", "value": "G1qeydXpdOBqumqfERB2UMJqIy2e88nHQALMWJKMEFY.1746869831", "domain": "www.tbank.ru", "path": "/", "expires": 1746871630.998858, "httpOnly": true, "secure": true, "sameSite": "None"}, {"name": "api_prefix_ba8a0d", "value": "2QXqGla7a_8wbOqCU9zvR7Ab1YdGAIoT3BN2Ln9pNes.1746869831", "domain": "www.tbank.ru", "path": "/", "expires": 1746871631.602552, "httpOnly": true, "secure": true, "sameSite": "None"}, {"name": "_t_modern", "value": "true", "domain": "www.tbank.ru", "path": "/", "expires": -1, "httpOnly": false, "secure": false, "sameSite": "Lax"}, {"name": "api_prefix_a8e066", "value": "KNAo7FK9ZijwufO-btbU90ItN5G7ZRQ7cMbAEsFNFJM.1746869999", "domain": "www.tbank.ru", "path": "/", "expires": 1746871799.067144, "httpOnly": true, "secure": true, "sameSite": "None"}, {"name": "api_prefix_ecc1af", "value": "JNnt0-Es4RXiK2r-pBtJoPhT6kLH_KTlUFI0O80y9Cs.1746869999", "domain": "www.tbank.ru", "path": "/", "expires": 1746871799.561736, "httpOnly": true, "secure": true, "sameSite": "None"}, {"name": "tid_cid_timestamp", "value": "wf6u8TpJ4E80:1746870020464", "domain": "id.tbank.ru", "path": "/", "expires": 1781430020, "httpOnly": false, "secure": false, "sameSite": "Lax"}, {"name": "stLaEvTi", "value": "1746870024328", "domain": ".tbank.ru", "path": "/", "expires": 1781430024.328793, "httpOnly": false, "secure": true, "sameSite": "None"}], "origins": [{"origin": "https://www.tbank.ru", "localStorage": [{"name": "twt_wuid_visit_storage", "value": "{\"visitId\":\"v1:0000001:1746868634956:357e0453744ecb9f0872a3cea1788d63\",\"items\":{\"pageLanding\":\"https://www.tbank.ru/auth/login/\"}}"}, {"name": "dco_general_ids", "value": ""}]}]}
@@ -1,4 +1,4 @@
1
- from aiogram import Bot
1
+ from aiogram import Bot, Dispatcher
2
2
  from dotenv import load_dotenv
3
3
  from os import getenv as env
4
4
 
@@ -11,6 +11,7 @@ if not (TOKEN := env("TOKEN")):
11
11
  logging.info(TOKEN := env("TOKEN"))
12
12
 
13
13
  bot: Bot = Bot(token=TOKEN)
14
+ dp: Dispatcher = Dispatcher()
14
15
  PG_DSN = f"postgres://{env('POSTGRES_USER')}:{env('POSTGRES_PASSWORD')}@{env('POSTGRES_HOST', 'xyncdbs')}:{env('POSTGRES_PORT', 5432)}/{env('POSTGRES_DB', env('POSTGRES_USER'))}"
15
16
  TG_API_ID = env("TG_API_ID")
16
17
  TG_API_HASH = env("TG_API_HASH")
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: xync-client
3
- Version: 0.0.43.dev32
3
+ Version: 0.0.43.dev41
4
4
  Author-email: Mike Artemiev <mixartemev@gmail.com>
5
5
  Project-URL: Homepage, https://gitlab.com/XyncNet/client
6
6
  Project-URL: Repository, https://gitlab.com/XyncNet/client
@@ -20,7 +20,6 @@ tests/_todo_refact/Wallet/test_ex.py
20
20
  xync_client/__init__.py
21
21
  xync_client/loader.py
22
22
  xync_client/pm_unifier.py
23
- xync_client/pyro.py
24
23
  xync_client.egg-info/PKG-INFO
25
24
  xync_client.egg-info/SOURCES.txt
26
25
  xync_client.egg-info/dependency_links.txt
@@ -88,9 +87,11 @@ xync_client/Mexc/etype/pm.py
88
87
  xync_client/Okx/ex.py
89
88
  xync_client/Okx/etype/ad.py
90
89
  xync_client/Okx/etype/pm.py
90
+ xync_client/Pms/Alfa/__init__.py
91
+ xync_client/Pms/Alfa/state.json
92
+ xync_client/Pms/Sber/__init__.py
91
93
  xync_client/Pms/Tinkoff/__init__.py
92
94
  xync_client/Pms/Tinkoff/state.json
93
- xync_client/Pms/Tinkoff/storage.json
94
95
  xync_client/Pms/Volet/__init__.py
95
96
  xync_client/Pms/Volet/api.py
96
97
  xync_client/Pms/Volet/_todo_req/req.mjs