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.
- {xync_client-0.0.43.dev32/xync_client.egg-info → xync_client-0.0.43.dev41}/PKG-INFO +1 -1
- {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/Abc/InAgent.py +3 -3
- {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/Bybit/InAgent.py +10 -10
- {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/Bybit/agent.py +34 -21
- xync_client-0.0.43.dev41/xync_client/Pms/Alfa/__init__.py +102 -0
- xync_client-0.0.43.dev41/xync_client/Pms/Alfa/state.json +1 -0
- xync_client-0.0.43.dev41/xync_client/Pms/Sber/__init__.py +79 -0
- xync_client-0.0.43.dev41/xync_client/Pms/Tinkoff/__init__.py +88 -0
- xync_client-0.0.43.dev41/xync_client/Pms/Tinkoff/state.json +1 -0
- {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/loader.py +2 -1
- {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41/xync_client.egg-info}/PKG-INFO +1 -1
- {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client.egg-info/SOURCES.txt +3 -2
- xync_client-0.0.43.dev32/xync_client/Pms/Tinkoff/__init__.py +0 -89
- xync_client-0.0.43.dev32/xync_client/Pms/Tinkoff/state.json +0 -1
- xync_client-0.0.43.dev32/xync_client/Pms/Tinkoff/storage.json +0 -0
- xync_client-0.0.43.dev32/xync_client/pyro.py +0 -121
- {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/.env.sample +0 -0
- {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/.gitignore +0 -0
- {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/.pre-commit-config.yaml +0 -0
- {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/README.md +0 -0
- {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/makefile +0 -0
- {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/pyproject.toml +0 -0
- {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/setup.cfg +0 -0
- {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/tests/TestAgent.py +0 -0
- {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/tests/TestAsset.py +0 -0
- {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/tests/TestEx.py +0 -0
- {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/tests/TestOrder.py +0 -0
- {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/tests/_todo_refact/Binance/test_binance.py +0 -0
- {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/tests/_todo_refact/Bybit/test_bybit.py +0 -0
- {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/tests/_todo_refact/Bybit/test_bybit_p2p.py +0 -0
- {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/tests/_todo_refact/Gate/test_gate.py +0 -0
- {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/tests/_todo_refact/Htx/test_htx_p2p.py +0 -0
- {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/tests/_todo_refact/Wallet/test_agent.py +0 -0
- {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/tests/_todo_refact/Wallet/test_ex.py +0 -0
- {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/tests/_todo_refact/__init__.py +0 -0
- {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/tests/_todo_refact/_test_ex.py +0 -0
- {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/Abc/Agent.py +0 -0
- {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/Abc/Asset.py +0 -0
- {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/Abc/AuthTrait.py +0 -0
- {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/Abc/Base.py +0 -0
- {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/Abc/BaseTest.py +0 -0
- {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/Abc/Ex.py +0 -0
- {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/Abc/Order.py +0 -0
- {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/Abc/types.py +0 -0
- {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/Binance/__init__.py +0 -0
- {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/Binance/binance_async.py +0 -0
- {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/Binance/earn_api.py +0 -0
- {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/Binance/etype/ad.py +0 -0
- {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/Binance/etype/pm.py +0 -0
- {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/Binance/ex.py +0 -0
- {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/Binance/exceptions.py +0 -0
- {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/Binance/sapi.py +0 -0
- {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/Binance/web_c2c.py +0 -0
- {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/BingX/__init__.py +0 -0
- {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/BingX/agent.py +0 -0
- {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/BingX/base.py +0 -0
- {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/BingX/etype/ad.py +0 -0
- {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/BingX/etype/pm.py +0 -0
- {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/BingX/ex.py +0 -0
- {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/BingX/req.mjs +0 -0
- {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/BingX/sign.js +0 -0
- {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/BitGet/__init__.py +0 -0
- {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/BitGet/agent.py +0 -0
- {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/BitGet/etype/ad.py +0 -0
- {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/BitGet/ex.py +0 -0
- {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/BitGet/req.mjs +0 -0
- {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/BitPapa/ex.py +0 -0
- {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/Bybit/etype/ad.py +0 -0
- {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/Bybit/etype/cred.py +0 -0
- {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/Bybit/etype/order.py +0 -0
- {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/Bybit/ex.py +0 -0
- {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/Bybit/web_earn.py +0 -0
- {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/Bybit/web_p2p.py +0 -0
- {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/Bybit/ws.py +0 -0
- {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/Gate/etype/ad.py +0 -0
- {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/Gate/ex.py +0 -0
- {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/Gate/premarket.py +0 -0
- {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/Htx/agent.py +0 -0
- {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/Htx/earn.py +0 -0
- {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/Htx/etype/__init__.py +0 -0
- {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/Htx/etype/ad.py +0 -0
- {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/Htx/etype/cred.py +0 -0
- {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/Htx/etype/pm.py +0 -0
- {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/Htx/etype/test.py +0 -0
- {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/Htx/ex.py +0 -0
- {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/KuCoin/etype/ad.py +0 -0
- {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/KuCoin/etype/pm.py +0 -0
- {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/KuCoin/ex.py +0 -0
- {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/KuCoin/web.py +0 -0
- {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/Mexc/etype/ad.py +0 -0
- {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/Mexc/etype/pm.py +0 -0
- {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/Mexc/ex.py +0 -0
- {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/Okx/etype/ad.py +0 -0
- {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/Okx/etype/pm.py +0 -0
- {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/Okx/ex.py +0 -0
- {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/Pms/Volet/__init__.py +0 -0
- {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/Pms/Volet/_todo_req/req.mjs +0 -0
- {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/Pms/Volet/_todo_req/req.py +0 -0
- {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/Pms/Volet/api.py +0 -0
- {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/TgWallet/agent.py +0 -0
- {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/TgWallet/asset.py +0 -0
- {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/TgWallet/auth.py +0 -0
- {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/TgWallet/ex.py +0 -0
- {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/TgWallet/inAgent.py +0 -0
- {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/TgWallet/order.py +0 -0
- {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/TgWallet/pyd.py +0 -0
- {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/TgWallet/pyro.py +0 -0
- {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/TgWallet/web.py +0 -0
- {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/__init__.py +0 -0
- {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client/pm_unifier.py +0 -0
- {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client.egg-info/dependency_links.txt +0 -0
- {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client.egg-info/requires.txt +0 -0
- {xync_client-0.0.43.dev32 → xync_client-0.0.43.dev41}/xync_client.egg-info/top_level.txt +0 -0
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
from abc import abstractmethod
|
|
2
2
|
|
|
3
|
-
from xync_schema.models import
|
|
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,
|
|
10
|
-
self.agent_client: BaseAgentClient =
|
|
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.
|
|
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
|
-
|
|
37
|
-
cl: InAgentClient =
|
|
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(
|
|
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(
|
|
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(
|
|
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
|
-
|
|
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.
|
|
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.
|
|
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")
|
|
@@ -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
|