xync-client 0.0.80.dev11__tar.gz → 0.0.80.dev13__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.80.dev11/xync_client.egg-info → xync_client-0.0.80.dev13}/PKG-INFO +1 -1
- {xync_client-0.0.80.dev11 → xync_client-0.0.80.dev13}/xync_client/Abc/InAgent.py +3 -2
- xync_client-0.0.80.dev13/xync_client/Bybit/InAgent.py +109 -0
- {xync_client-0.0.80.dev11 → xync_client-0.0.80.dev13}/xync_client/Bybit/agent.py +5 -5
- {xync_client-0.0.80.dev11 → xync_client-0.0.80.dev13}/xync_client/Bybit/etype/order.py +57 -1
- xync_client-0.0.80.dev13/xync_client/Bybit/ws.py +34 -0
- {xync_client-0.0.80.dev11 → xync_client-0.0.80.dev13/xync_client.egg-info}/PKG-INFO +1 -1
- {xync_client-0.0.80.dev11 → xync_client-0.0.80.dev13}/xync_client.egg-info/SOURCES.txt +0 -2
- xync_client-0.0.80.dev11/videos/70a566eb-e9da-47d6-b9fa-1569b5eee48e.webm +0 -0
- xync_client-0.0.80.dev11/videos/e49ef853-97a0-4882-99de-9c5ce9795471.webm +0 -0
- xync_client-0.0.80.dev11/xync_client/Bybit/InAgent.py +0 -44
- xync_client-0.0.80.dev11/xync_client/Bybit/ws.py +0 -68
- {xync_client-0.0.80.dev11 → xync_client-0.0.80.dev13}/.env.sample +0 -0
- {xync_client-0.0.80.dev11 → xync_client-0.0.80.dev13}/.gitignore +0 -0
- {xync_client-0.0.80.dev11 → xync_client-0.0.80.dev13}/.pre-commit-config.yaml +0 -0
- {xync_client-0.0.80.dev11 → xync_client-0.0.80.dev13}/README.md +0 -0
- {xync_client-0.0.80.dev11 → xync_client-0.0.80.dev13}/__init__.py +0 -0
- {xync_client-0.0.80.dev11 → xync_client-0.0.80.dev13}/makefile +0 -0
- {xync_client-0.0.80.dev11 → xync_client-0.0.80.dev13}/pyproject.toml +0 -0
- {xync_client-0.0.80.dev11 → xync_client-0.0.80.dev13}/setup.cfg +0 -0
- {xync_client-0.0.80.dev11 → xync_client-0.0.80.dev13}/tests/TestAgent.py +0 -0
- {xync_client-0.0.80.dev11 → xync_client-0.0.80.dev13}/tests/TestAsset.py +0 -0
- {xync_client-0.0.80.dev11 → xync_client-0.0.80.dev13}/tests/TestEx.py +0 -0
- {xync_client-0.0.80.dev11 → xync_client-0.0.80.dev13}/tests/TestOrder.py +0 -0
- {xync_client-0.0.80.dev11 → xync_client-0.0.80.dev13}/tests/_todo_refact/Binance/test_binance.py +0 -0
- {xync_client-0.0.80.dev11 → xync_client-0.0.80.dev13}/tests/_todo_refact/Bybit/test_bybit.py +0 -0
- {xync_client-0.0.80.dev11 → xync_client-0.0.80.dev13}/tests/_todo_refact/Bybit/test_bybit_p2p.py +0 -0
- {xync_client-0.0.80.dev11 → xync_client-0.0.80.dev13}/tests/_todo_refact/Gate/test_gate.py +0 -0
- {xync_client-0.0.80.dev11 → xync_client-0.0.80.dev13}/tests/_todo_refact/Wallet/test_agent.py +0 -0
- {xync_client-0.0.80.dev11 → xync_client-0.0.80.dev13}/tests/_todo_refact/Wallet/test_ex.py +0 -0
- {xync_client-0.0.80.dev11 → xync_client-0.0.80.dev13}/tests/_todo_refact/__init__.py +0 -0
- {xync_client-0.0.80.dev11 → xync_client-0.0.80.dev13}/tests/_todo_refact/_test_ex.py +0 -0
- {xync_client-0.0.80.dev11 → xync_client-0.0.80.dev13}/xync_client/Abc/Agent.py +0 -0
- {xync_client-0.0.80.dev11 → xync_client-0.0.80.dev13}/xync_client/Abc/Asset.py +0 -0
- {xync_client-0.0.80.dev11 → xync_client-0.0.80.dev13}/xync_client/Abc/Auth.py +0 -0
- {xync_client-0.0.80.dev11 → xync_client-0.0.80.dev13}/xync_client/Abc/BaseTest.py +0 -0
- {xync_client-0.0.80.dev11 → xync_client-0.0.80.dev13}/xync_client/Abc/Ex.py +0 -0
- {xync_client-0.0.80.dev11 → xync_client-0.0.80.dev13}/xync_client/Abc/Exception.py +0 -0
- {xync_client-0.0.80.dev11 → xync_client-0.0.80.dev13}/xync_client/Abc/Order.py +0 -0
- {xync_client-0.0.80.dev11 → xync_client-0.0.80.dev13}/xync_client/Abc/PmAgent.py +0 -0
- {xync_client-0.0.80.dev11 → xync_client-0.0.80.dev13}/xync_client/Abc/xtype.py +0 -0
- {xync_client-0.0.80.dev11 → xync_client-0.0.80.dev13}/xync_client/Binance/__init__.py +0 -0
- {xync_client-0.0.80.dev11 → xync_client-0.0.80.dev13}/xync_client/Binance/binance_async.py +0 -0
- {xync_client-0.0.80.dev11 → xync_client-0.0.80.dev13}/xync_client/Binance/earn_api.py +0 -0
- {xync_client-0.0.80.dev11 → xync_client-0.0.80.dev13}/xync_client/Binance/etype/ad.py +0 -0
- {xync_client-0.0.80.dev11 → xync_client-0.0.80.dev13}/xync_client/Binance/etype/pm.py +0 -0
- {xync_client-0.0.80.dev11 → xync_client-0.0.80.dev13}/xync_client/Binance/ex.py +0 -0
- {xync_client-0.0.80.dev11 → xync_client-0.0.80.dev13}/xync_client/Binance/exceptions.py +0 -0
- {xync_client-0.0.80.dev11 → xync_client-0.0.80.dev13}/xync_client/Binance/sapi.py +0 -0
- {xync_client-0.0.80.dev11 → xync_client-0.0.80.dev13}/xync_client/Binance/web_c2c.py +0 -0
- {xync_client-0.0.80.dev11 → xync_client-0.0.80.dev13}/xync_client/BingX/__init__.py +0 -0
- {xync_client-0.0.80.dev11 → xync_client-0.0.80.dev13}/xync_client/BingX/agent.py +0 -0
- {xync_client-0.0.80.dev11 → xync_client-0.0.80.dev13}/xync_client/BingX/base.py +0 -0
- {xync_client-0.0.80.dev11 → xync_client-0.0.80.dev13}/xync_client/BingX/etype/ad.py +0 -0
- {xync_client-0.0.80.dev11 → xync_client-0.0.80.dev13}/xync_client/BingX/etype/pm.py +0 -0
- {xync_client-0.0.80.dev11 → xync_client-0.0.80.dev13}/xync_client/BingX/ex.py +0 -0
- {xync_client-0.0.80.dev11 → xync_client-0.0.80.dev13}/xync_client/BingX/req.mjs +0 -0
- {xync_client-0.0.80.dev11 → xync_client-0.0.80.dev13}/xync_client/BingX/sign.js +0 -0
- {xync_client-0.0.80.dev11 → xync_client-0.0.80.dev13}/xync_client/BitGet/__init__.py +0 -0
- {xync_client-0.0.80.dev11 → xync_client-0.0.80.dev13}/xync_client/BitGet/agent.py +0 -0
- {xync_client-0.0.80.dev11 → xync_client-0.0.80.dev13}/xync_client/BitGet/etype/ad.py +0 -0
- {xync_client-0.0.80.dev11 → xync_client-0.0.80.dev13}/xync_client/BitGet/ex.py +0 -0
- {xync_client-0.0.80.dev11 → xync_client-0.0.80.dev13}/xync_client/BitPapa/ex.py +0 -0
- {xync_client-0.0.80.dev11 → xync_client-0.0.80.dev13}/xync_client/Bybit/etype/ad.py +0 -0
- {xync_client-0.0.80.dev11 → xync_client-0.0.80.dev13}/xync_client/Bybit/etype/cred.py +0 -0
- {xync_client-0.0.80.dev11 → xync_client-0.0.80.dev13}/xync_client/Bybit/ex.py +0 -0
- {xync_client-0.0.80.dev11 → xync_client-0.0.80.dev13}/xync_client/Bybit/order.py +0 -0
- {xync_client-0.0.80.dev11 → xync_client-0.0.80.dev13}/xync_client/Bybit/web_earn.py +0 -0
- {xync_client-0.0.80.dev11 → xync_client-0.0.80.dev13}/xync_client/Bybit/web_p2p.py +0 -0
- {xync_client-0.0.80.dev11 → xync_client-0.0.80.dev13}/xync_client/Gate/etype/ad.py +0 -0
- {xync_client-0.0.80.dev11 → xync_client-0.0.80.dev13}/xync_client/Gate/ex.py +0 -0
- {xync_client-0.0.80.dev11 → xync_client-0.0.80.dev13}/xync_client/Gate/premarket.py +0 -0
- {xync_client-0.0.80.dev11 → xync_client-0.0.80.dev13}/xync_client/Gmail/__init__.py +0 -0
- {xync_client-0.0.80.dev11 → xync_client-0.0.80.dev13}/xync_client/Htx/agent.py +0 -0
- {xync_client-0.0.80.dev11 → xync_client-0.0.80.dev13}/xync_client/Htx/earn.py +0 -0
- {xync_client-0.0.80.dev11 → xync_client-0.0.80.dev13}/xync_client/Htx/etype/__init__.py +0 -0
- {xync_client-0.0.80.dev11 → xync_client-0.0.80.dev13}/xync_client/Htx/etype/ad.py +0 -0
- {xync_client-0.0.80.dev11 → xync_client-0.0.80.dev13}/xync_client/Htx/etype/cred.py +0 -0
- {xync_client-0.0.80.dev11 → xync_client-0.0.80.dev13}/xync_client/Htx/etype/pm.py +0 -0
- {xync_client-0.0.80.dev11 → xync_client-0.0.80.dev13}/xync_client/Htx/etype/test.py +0 -0
- {xync_client-0.0.80.dev11 → xync_client-0.0.80.dev13}/xync_client/Htx/ex.py +0 -0
- {xync_client-0.0.80.dev11 → xync_client-0.0.80.dev13}/xync_client/KuCoin/etype/ad.py +0 -0
- {xync_client-0.0.80.dev11 → xync_client-0.0.80.dev13}/xync_client/KuCoin/etype/pm.py +0 -0
- {xync_client-0.0.80.dev11 → xync_client-0.0.80.dev13}/xync_client/KuCoin/ex.py +0 -0
- {xync_client-0.0.80.dev11 → xync_client-0.0.80.dev13}/xync_client/KuCoin/web.py +0 -0
- {xync_client-0.0.80.dev11 → xync_client-0.0.80.dev13}/xync_client/Mexc/etype/ad.py +0 -0
- {xync_client-0.0.80.dev11 → xync_client-0.0.80.dev13}/xync_client/Mexc/etype/pm.py +0 -0
- {xync_client-0.0.80.dev11 → xync_client-0.0.80.dev13}/xync_client/Mexc/ex.py +0 -0
- {xync_client-0.0.80.dev11 → xync_client-0.0.80.dev13}/xync_client/Okx/etype/ad.py +0 -0
- {xync_client-0.0.80.dev11 → xync_client-0.0.80.dev13}/xync_client/Okx/etype/pm.py +0 -0
- {xync_client-0.0.80.dev11 → xync_client-0.0.80.dev13}/xync_client/Okx/ex.py +0 -0
- {xync_client-0.0.80.dev11 → xync_client-0.0.80.dev13}/xync_client/Pms/.gitignore +0 -0
- {xync_client-0.0.80.dev11 → xync_client-0.0.80.dev13}/xync_client/Pms/Alfa/__init__.py +0 -0
- {xync_client-0.0.80.dev11 → xync_client-0.0.80.dev13}/xync_client/Pms/Alfa/state.json +0 -0
- {xync_client-0.0.80.dev11 → xync_client-0.0.80.dev13}/xync_client/Pms/MTS/__init__.py +0 -0
- {xync_client-0.0.80.dev11 → xync_client-0.0.80.dev13}/xync_client/Pms/Ozon/__init__.py +0 -0
- {xync_client-0.0.80.dev11 → xync_client-0.0.80.dev13}/xync_client/Pms/Payeer/.gitignore +0 -0
- {xync_client-0.0.80.dev11 → xync_client-0.0.80.dev13}/xync_client/Pms/Payeer/__init__.py +0 -0
- {xync_client-0.0.80.dev11 → xync_client-0.0.80.dev13}/xync_client/Pms/Payeer/login.py +0 -0
- {xync_client-0.0.80.dev11 → xync_client-0.0.80.dev13}/xync_client/Pms/Sber/__init__.py +0 -0
- {xync_client-0.0.80.dev11 → xync_client-0.0.80.dev13}/xync_client/Pms/Tinkoff/__init__.py +0 -0
- {xync_client-0.0.80.dev11 → xync_client-0.0.80.dev13}/xync_client/Pms/Volet/__init__.py +0 -0
- {xync_client-0.0.80.dev11 → xync_client-0.0.80.dev13}/xync_client/Pms/Volet/_todo_req/req.mjs +0 -0
- {xync_client-0.0.80.dev11 → xync_client-0.0.80.dev13}/xync_client/Pms/Volet/_todo_req/req.py +0 -0
- {xync_client-0.0.80.dev11 → xync_client-0.0.80.dev13}/xync_client/Pms/Volet/api.py +0 -0
- {xync_client-0.0.80.dev11 → xync_client-0.0.80.dev13}/xync_client/Pms/Volet/pl.py +0 -0
- {xync_client-0.0.80.dev11 → xync_client-0.0.80.dev13}/xync_client/Pms/Yandex/__init__.py +0 -0
- {xync_client-0.0.80.dev11 → xync_client-0.0.80.dev13}/xync_client/TgWallet/agent.py +0 -0
- {xync_client-0.0.80.dev11 → xync_client-0.0.80.dev13}/xync_client/TgWallet/asset.py +0 -0
- {xync_client-0.0.80.dev11 → xync_client-0.0.80.dev13}/xync_client/TgWallet/auth.py +0 -0
- {xync_client-0.0.80.dev11 → xync_client-0.0.80.dev13}/xync_client/TgWallet/ex.py +0 -0
- {xync_client-0.0.80.dev11 → xync_client-0.0.80.dev13}/xync_client/TgWallet/inAgent.py +0 -0
- {xync_client-0.0.80.dev11 → xync_client-0.0.80.dev13}/xync_client/TgWallet/order.py +0 -0
- {xync_client-0.0.80.dev11 → xync_client-0.0.80.dev13}/xync_client/TgWallet/pyd.py +0 -0
- {xync_client-0.0.80.dev11 → xync_client-0.0.80.dev13}/xync_client/TgWallet/pyro.py +0 -0
- {xync_client-0.0.80.dev11 → xync_client-0.0.80.dev13}/xync_client/TgWallet/web.py +0 -0
- {xync_client-0.0.80.dev11 → xync_client-0.0.80.dev13}/xync_client/__init__.py +0 -0
- {xync_client-0.0.80.dev11 → xync_client-0.0.80.dev13}/xync_client/loader.py +0 -0
- {xync_client-0.0.80.dev11 → xync_client-0.0.80.dev13}/xync_client/pm_unifier.py +0 -0
- {xync_client-0.0.80.dev11 → xync_client-0.0.80.dev13}/xync_client.egg-info/dependency_links.txt +0 -0
- {xync_client-0.0.80.dev11 → xync_client-0.0.80.dev13}/xync_client.egg-info/requires.txt +0 -0
- {xync_client-0.0.80.dev11 → xync_client-0.0.80.dev13}/xync_client.egg-info/top_level.txt +0 -0
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
from abc import abstractmethod
|
|
2
2
|
|
|
3
|
+
from pyro_client.client.file import FileClient
|
|
3
4
|
from xync_schema.models import Actor
|
|
4
5
|
|
|
5
6
|
from xync_client.Abc.Agent import BaseAgentClient
|
|
6
7
|
|
|
7
8
|
|
|
8
9
|
class BaseInAgentClient:
|
|
9
|
-
def __init__(self, actor: Actor):
|
|
10
|
-
self.agent_client: BaseAgentClient = actor.client()
|
|
10
|
+
def __init__(self, actor: Actor, bot: FileClient):
|
|
11
|
+
self.agent_client: BaseAgentClient = actor.client(bot)
|
|
11
12
|
|
|
12
13
|
@abstractmethod
|
|
13
14
|
async def start_listen(self) -> bool: ...
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import json
|
|
2
|
+
from asyncio import run
|
|
3
|
+
|
|
4
|
+
import websockets
|
|
5
|
+
from pyro_client.client.file import FileClient
|
|
6
|
+
from xync_client.Bybit.etype.order import StatusChange, CountDown, SellerCancelChange, Read, Receive
|
|
7
|
+
|
|
8
|
+
from xync_client.loader import TOKEN
|
|
9
|
+
from xync_schema import models
|
|
10
|
+
|
|
11
|
+
from xync_client.Abc.InAgent import BaseInAgentClient
|
|
12
|
+
from xync_client.Bybit.agent import AgentClient
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class InAgentClient(BaseInAgentClient):
|
|
16
|
+
agent_client: AgentClient
|
|
17
|
+
|
|
18
|
+
async def start_listen(self):
|
|
19
|
+
t = await self.agent_client.ott()
|
|
20
|
+
ts = int(float(t["time_now"]) * 1000)
|
|
21
|
+
await self.ws_prv(self.agent_client.actor.agent.auth["deviceId"], t["result"], ts)
|
|
22
|
+
|
|
23
|
+
# 3N: [T] - Уведомление об одобрении запроса на сделку
|
|
24
|
+
async def request_accepted_notify(self) -> int: ... # id
|
|
25
|
+
|
|
26
|
+
async def ws_prv(self, did: str, tok: str, ts: int):
|
|
27
|
+
u = f"wss://ws2.bybit.com/private?appid=bybit&os=web&deviceid={did}×tamp={ts}"
|
|
28
|
+
async with websockets.connect(u) as websocket:
|
|
29
|
+
auth_msg = json.dumps({"req_id": did, "op": "login", "args": [tok]})
|
|
30
|
+
await websocket.send(auth_msg)
|
|
31
|
+
|
|
32
|
+
sub_msg = json.dumps({"op": "subscribe", "args": ["FIAT_OTC_TOPIC", "FIAT_OTC_ONLINE_TOPIC"]})
|
|
33
|
+
await websocket.send(sub_msg)
|
|
34
|
+
sub_msg = json.dumps({"op": "input", "args": ["FIAT_OTC_TOPIC", '{"topic":"SUPER_DEAL"}']})
|
|
35
|
+
await websocket.send(sub_msg)
|
|
36
|
+
sub_msg = json.dumps({"op": "input", "args": ["FIAT_OTC_TOPIC", '{"topic":"OTC_ORDER_STATUS"}']})
|
|
37
|
+
await websocket.send(sub_msg)
|
|
38
|
+
sub_msg = json.dumps({"op": "input", "args": ["FIAT_OTC_TOPIC", '{"topic":"WEB_THREE_SELL"}']})
|
|
39
|
+
await websocket.send(sub_msg)
|
|
40
|
+
sub_msg = json.dumps({"op": "input", "args": ["FIAT_OTC_TOPIC", '{"topic":"APPEALED_CHANGE"}']})
|
|
41
|
+
await websocket.send(sub_msg)
|
|
42
|
+
|
|
43
|
+
sub_msg = json.dumps({"op": "subscribe", "args": ["fiat.cashier.order"]})
|
|
44
|
+
await websocket.send(sub_msg)
|
|
45
|
+
sub_msg = json.dumps({"op": "subscribe", "args": ["fiat.cashier.order-eftd-complete-privilege-event"]})
|
|
46
|
+
await websocket.send(sub_msg)
|
|
47
|
+
sub_msg = json.dumps({"op": "subscribe", "args": ["fiat.cashier.order-savings-product-event"]})
|
|
48
|
+
await websocket.send(sub_msg)
|
|
49
|
+
sub_msg = json.dumps({"op": "subscribe", "args": ["fiat.deal-core.order-savings-complete-event"]})
|
|
50
|
+
await websocket.send(sub_msg)
|
|
51
|
+
|
|
52
|
+
sub_msg = json.dumps({"op": "subscribe", "args": ["FIAT_OTC_TOPIC", "FIAT_OTC_ONLINE_TOPIC"]})
|
|
53
|
+
await websocket.send(sub_msg)
|
|
54
|
+
|
|
55
|
+
while resp := await websocket.recv():
|
|
56
|
+
if data := json.loads(resp):
|
|
57
|
+
match data.get("topic"):
|
|
58
|
+
case "OTC_ORDER_STATUS":
|
|
59
|
+
match data["type"]:
|
|
60
|
+
case "STATUS_CHANGE":
|
|
61
|
+
StatusChange.model_validate(data["data"])
|
|
62
|
+
case "COUNT_DOWN":
|
|
63
|
+
CountDown.model_validate(data["data"])
|
|
64
|
+
case _:
|
|
65
|
+
self.listen(data)
|
|
66
|
+
case "OTC_USER_CHAT_MSG":
|
|
67
|
+
match data["type"]:
|
|
68
|
+
case "RECEIVE":
|
|
69
|
+
Receive.model_validate(data["data"])
|
|
70
|
+
case "READ":
|
|
71
|
+
Read.model_validate(data["data"])
|
|
72
|
+
case "CLEAR":
|
|
73
|
+
pass
|
|
74
|
+
case _:
|
|
75
|
+
self.listen(data)
|
|
76
|
+
case "OTC_USER_CHAT_MSG_V2":
|
|
77
|
+
pass
|
|
78
|
+
case "SELLER_CANCEL_CHANGE":
|
|
79
|
+
SellerCancelChange.model_validate(data["data"])
|
|
80
|
+
case None:
|
|
81
|
+
if not data.get("success"):
|
|
82
|
+
self.listen(data)
|
|
83
|
+
case _:
|
|
84
|
+
self.listen(data)
|
|
85
|
+
|
|
86
|
+
@staticmethod
|
|
87
|
+
def listen(data: dict):
|
|
88
|
+
print(data)
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
async def main():
|
|
92
|
+
from x_model import init_db
|
|
93
|
+
from xync_client.loader import TORM
|
|
94
|
+
|
|
95
|
+
_ = await init_db(TORM, True)
|
|
96
|
+
# pbot = PyroClient(bot)
|
|
97
|
+
# await pbot.app.start()
|
|
98
|
+
# await pbot.app.create_channel("tc")
|
|
99
|
+
# await pbot.app.stop()
|
|
100
|
+
|
|
101
|
+
actor = await models.Actor.filter(ex_id=9, agent__auth__isnull=False).prefetch_related("ex", "agent").first()
|
|
102
|
+
async with FileClient(TOKEN) as b:
|
|
103
|
+
cl: InAgentClient = actor.in_client(b)
|
|
104
|
+
_ = await cl.start_listen()
|
|
105
|
+
await cl.agent_client.close()
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
if __name__ == "__main__":
|
|
109
|
+
run(main())
|
|
@@ -35,7 +35,7 @@ from xync_client.Bybit.etype.order import (
|
|
|
35
35
|
OrderItem,
|
|
36
36
|
OrderFull,
|
|
37
37
|
Message,
|
|
38
|
-
|
|
38
|
+
Status,
|
|
39
39
|
)
|
|
40
40
|
from xync_client.loader import TORM, TOKEN
|
|
41
41
|
|
|
@@ -479,10 +479,10 @@ class AgentClient(BaseAgentClient): # Bybit client
|
|
|
479
479
|
order_db, _ = await models.Order.update_or_create(
|
|
480
480
|
{
|
|
481
481
|
"amount": o.amount,
|
|
482
|
-
"status": OrderStatus[
|
|
482
|
+
"status": OrderStatus[Status(o.status).name],
|
|
483
483
|
"created_at": int(o.createDate[:-3]),
|
|
484
484
|
"payed_at": order.transferDate != "0" and int(order.transferDate[:-3]) or None,
|
|
485
|
-
"confirmed_at":
|
|
485
|
+
"confirmed_at": Status(o.status) == Status.completed and int(order.updateDate[:-3]) or None,
|
|
486
486
|
"appealed_at": o.status == 30 and int(order.updateDate[:-3]) or None,
|
|
487
487
|
"cred_id": ecredex.paymentType and credex.cred_id or None,
|
|
488
488
|
"taker": taker,
|
|
@@ -1023,8 +1023,8 @@ async def main():
|
|
|
1023
1023
|
# cl.get_api_orders(), # 10, 1738357200000, 1742504399999
|
|
1024
1024
|
cl.battle(usdt, rub, False, ["volet"], 80.88), # гонка в стакане покупки - мы продаем
|
|
1025
1025
|
cl.battle(usdt, rub, True, ["volet"], 80.47), # гонка в стакане продажи - мы покупаем
|
|
1026
|
-
cl.battle(usdt, rub, False, ["payeer"], 81.
|
|
1027
|
-
cl.battle(usdt, rub, True, ["payeer"], 80.
|
|
1026
|
+
cl.battle(usdt, rub, False, ["payeer"], 81.61), # гонка в стакане покупки - мы продаем
|
|
1027
|
+
cl.battle(usdt, rub, True, ["payeer"], 80.77), # гонка в стакане продажи - мы покупаем
|
|
1028
1028
|
cl.battle(eth, rub, False, ["volet"], 300_000),
|
|
1029
1029
|
cl.battle(eth, rub, True, ["volet"], 296_000),
|
|
1030
1030
|
cl.battle(eth, rub, False, ["payeer"], 300_000),
|
|
@@ -7,7 +7,14 @@ from pydantic import BaseModel
|
|
|
7
7
|
from xync_client.Bybit.etype.cred import CredEpyd
|
|
8
8
|
|
|
9
9
|
|
|
10
|
-
class
|
|
10
|
+
class Topic(IntEnum):
|
|
11
|
+
OTC_USER_CHAT_MSG = 1
|
|
12
|
+
OTC_ORDER_STATUS_V2 = 2
|
|
13
|
+
OTC_ORDER_STATUS = 3
|
|
14
|
+
SELLER_CANCEL_CHANGE = 4
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class Status(IntEnum):
|
|
11
18
|
deleted = 40 # order canceled
|
|
12
19
|
created = 10 # waiting for buyer to pay
|
|
13
20
|
appealable = 20 # waiting for seller to release
|
|
@@ -273,3 +280,52 @@ class Message(BaseModel):
|
|
|
273
280
|
read: Literal[0, 1]
|
|
274
281
|
fileName: str
|
|
275
282
|
onlyForCustomer: int
|
|
283
|
+
|
|
284
|
+
|
|
285
|
+
class _BaseChange(BaseModel):
|
|
286
|
+
userId: int
|
|
287
|
+
makerUserId: int
|
|
288
|
+
id: str
|
|
289
|
+
status: Status
|
|
290
|
+
createDate: int
|
|
291
|
+
side: int
|
|
292
|
+
appealedTimes: int
|
|
293
|
+
totalAppealedTimes: int
|
|
294
|
+
|
|
295
|
+
|
|
296
|
+
class StatusChange(_BaseChange):
|
|
297
|
+
appealVersion: int
|
|
298
|
+
|
|
299
|
+
|
|
300
|
+
class CountDown(_BaseChange):
|
|
301
|
+
cancelType: Literal["ACTIVE", "TIMEOUT"]
|
|
302
|
+
|
|
303
|
+
|
|
304
|
+
class _BaseMsg(BaseModel):
|
|
305
|
+
userId: int
|
|
306
|
+
orderId: str
|
|
307
|
+
message: str
|
|
308
|
+
msgUuid: str
|
|
309
|
+
msgUuId: str
|
|
310
|
+
createDate: str
|
|
311
|
+
contentType: str
|
|
312
|
+
roleType: Literal["user", "admin"]
|
|
313
|
+
|
|
314
|
+
|
|
315
|
+
class Receive(_BaseMsg):
|
|
316
|
+
id: int
|
|
317
|
+
msgCode: int
|
|
318
|
+
onlyForCustomer: int
|
|
319
|
+
|
|
320
|
+
|
|
321
|
+
class Read(_BaseMsg):
|
|
322
|
+
readAmount: int
|
|
323
|
+
read: Literal["111"]
|
|
324
|
+
orderStatus: Status
|
|
325
|
+
|
|
326
|
+
|
|
327
|
+
class SellerCancelChange(BaseModel):
|
|
328
|
+
userId: int
|
|
329
|
+
makerUserId: int
|
|
330
|
+
id: str
|
|
331
|
+
createDate: str
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import hmac
|
|
2
|
+
import json
|
|
3
|
+
import websockets
|
|
4
|
+
from time import time
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
async def pub():
|
|
8
|
+
async with websockets.connect("wss://stream.bybit.com/v5/public/spot") as websocket:
|
|
9
|
+
sub_msg = json.dumps(
|
|
10
|
+
{"op": "subscribe", "req_id": "1", "args": ["tickers.BTCUSDT", "tickers.ETHUSDT", "tickers.TONUSDT"]}
|
|
11
|
+
)
|
|
12
|
+
await websocket.send(sub_msg)
|
|
13
|
+
p = {}
|
|
14
|
+
while resp := await websocket.recv():
|
|
15
|
+
if data := json.loads(resp).get("data"):
|
|
16
|
+
p[data["symbol"]] = data["lastPrice"]
|
|
17
|
+
print(f"BTC: {p.get('BTCUSDT')}\nETH: {p.get('ETHUSDT')}\nTON: {p.get('TONUSDT')}", end="\033[F\033[F")
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
async def priv(key: str, sec: str):
|
|
21
|
+
async with websockets.connect("wss://stream.bybit.com/v5/private") as websocket:
|
|
22
|
+
expires = int((time() + 5) * 1000)
|
|
23
|
+
# Generate signature.
|
|
24
|
+
signature = str(
|
|
25
|
+
hmac.new(bytes(sec, "utf-8"), bytes(f"GET/realtime{expires}", "utf-8"), digestmod="sha256").hexdigest()
|
|
26
|
+
)
|
|
27
|
+
auth_msg = json.dumps({"op": "auth", "args": [key, expires, signature]})
|
|
28
|
+
await websocket.send(auth_msg)
|
|
29
|
+
await websocket.send(json.dumps({"req_id": "100001", "op": "ping"}))
|
|
30
|
+
sub_msg = json.dumps({"op": "subscribe", "args": ["wallet"]})
|
|
31
|
+
await websocket.send(sub_msg)
|
|
32
|
+
while resp := await websocket.recv():
|
|
33
|
+
if data := json.loads(resp).get("data"):
|
|
34
|
+
print(data)
|
|
@@ -17,8 +17,6 @@ tests/_todo_refact/Bybit/test_bybit_p2p.py
|
|
|
17
17
|
tests/_todo_refact/Gate/test_gate.py
|
|
18
18
|
tests/_todo_refact/Wallet/test_agent.py
|
|
19
19
|
tests/_todo_refact/Wallet/test_ex.py
|
|
20
|
-
videos/70a566eb-e9da-47d6-b9fa-1569b5eee48e.webm
|
|
21
|
-
videos/e49ef853-97a0-4882-99de-9c5ce9795471.webm
|
|
22
20
|
xync_client/__init__.py
|
|
23
21
|
xync_client/loader.py
|
|
24
22
|
xync_client/pm_unifier.py
|
|
Binary file
|
|
Binary file
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
from asyncio import run
|
|
2
|
-
|
|
3
|
-
from x_model import init_db
|
|
4
|
-
from xync_schema import models
|
|
5
|
-
|
|
6
|
-
from xync_client.Abc.InAgent import BaseInAgentClient
|
|
7
|
-
from xync_client.Bybit.agent import AgentClient
|
|
8
|
-
from xync_client.Bybit.ws import prv
|
|
9
|
-
from xync_client.loader import PG_DSN
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
class InAgentClient(BaseInAgentClient):
|
|
13
|
-
agent_client: AgentClient
|
|
14
|
-
|
|
15
|
-
async def start_listen(self):
|
|
16
|
-
t = await self.agent_client.ott()
|
|
17
|
-
ts = int(float(t["time_now"]) * 1000)
|
|
18
|
-
await prv(self.agent_client.actor.agent.auth["deviceId"], t["result"], ts, listen)
|
|
19
|
-
|
|
20
|
-
# 3N: [T] - Уведомление об одобрении запроса на сделку
|
|
21
|
-
async def request_accepted_notify(self) -> int: ... # id
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
def listen(data: dict):
|
|
25
|
-
print(data)
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
async def main():
|
|
29
|
-
from xync_schema import TORM
|
|
30
|
-
|
|
31
|
-
_ = await init_db(TORM, True)
|
|
32
|
-
# pbot = PyroClient(bot)
|
|
33
|
-
# await pbot.app.start()
|
|
34
|
-
# await pbot.app.create_channel("tc")
|
|
35
|
-
# await pbot.app.stop()
|
|
36
|
-
|
|
37
|
-
actor = await models.Actor.filter(ex_id=9, agent__auth__isnull=False).prefetch_related("ex", "agent").first()
|
|
38
|
-
cl: InAgentClient = actor.in_client()
|
|
39
|
-
_ = await cl.start_listen()
|
|
40
|
-
await cl.agent_client.close()
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
if __name__ == "__main__":
|
|
44
|
-
run(main())
|
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
import hmac
|
|
2
|
-
import json
|
|
3
|
-
import websockets
|
|
4
|
-
from time import time
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
async def pub():
|
|
8
|
-
async with websockets.connect("wss://stream.bybit.com/v5/public/spot") as websocket:
|
|
9
|
-
sub_msg = json.dumps(
|
|
10
|
-
{"op": "subscribe", "req_id": "1", "args": ["tickers.BTCUSDT", "tickers.ETHUSDT", "tickers.TONUSDT"]}
|
|
11
|
-
)
|
|
12
|
-
await websocket.send(sub_msg)
|
|
13
|
-
p = {}
|
|
14
|
-
while resp := await websocket.recv():
|
|
15
|
-
if data := json.loads(resp).get("data"):
|
|
16
|
-
p[data["symbol"]] = data["lastPrice"]
|
|
17
|
-
print(f"BTC: {p.get('BTCUSDT')}\nETH: {p.get('ETHUSDT')}\nTON: {p.get('TONUSDT')}", end="\033[F\033[F")
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
async def priv(key: str, sec: str):
|
|
21
|
-
async with websockets.connect("wss://stream.bybit.com/v5/private") as websocket:
|
|
22
|
-
expires = int((time() + 5) * 1000)
|
|
23
|
-
# Generate signature.
|
|
24
|
-
signature = str(
|
|
25
|
-
hmac.new(bytes(sec, "utf-8"), bytes(f"GET/realtime{expires}", "utf-8"), digestmod="sha256").hexdigest()
|
|
26
|
-
)
|
|
27
|
-
auth_msg = json.dumps({"op": "auth", "args": [key, expires, signature]})
|
|
28
|
-
await websocket.send(auth_msg)
|
|
29
|
-
await websocket.send(json.dumps({"req_id": "100001", "op": "ping"}))
|
|
30
|
-
sub_msg = json.dumps({"op": "subscribe", "args": ["wallet"]})
|
|
31
|
-
await websocket.send(sub_msg)
|
|
32
|
-
while resp := await websocket.recv():
|
|
33
|
-
if data := json.loads(resp).get("data"):
|
|
34
|
-
print(data)
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
async def prv(did: str, tok: str, ts: int, cb: callable):
|
|
38
|
-
u = f"wss://ws2.bybit.com/private?appid=bybit&os=web&deviceid={did}×tamp={ts}"
|
|
39
|
-
async with websockets.connect(u) as websocket:
|
|
40
|
-
auth_msg = json.dumps({"req_id": did, "op": "login", "args": [tok]})
|
|
41
|
-
await websocket.send(auth_msg)
|
|
42
|
-
|
|
43
|
-
sub_msg = json.dumps({"op": "subscribe", "args": ["FIAT_OTC_TOPIC", "FIAT_OTC_ONLINE_TOPIC"]})
|
|
44
|
-
await websocket.send(sub_msg)
|
|
45
|
-
sub_msg = json.dumps({"op": "input", "args": ["FIAT_OTC_TOPIC", '{"topic":"SUPER_DEAL"}']})
|
|
46
|
-
await websocket.send(sub_msg)
|
|
47
|
-
sub_msg = json.dumps({"op": "input", "args": ["FIAT_OTC_TOPIC", '{"topic":"OTC_ORDER_STATUS"}']})
|
|
48
|
-
await websocket.send(sub_msg)
|
|
49
|
-
sub_msg = json.dumps({"op": "input", "args": ["FIAT_OTC_TOPIC", '{"topic":"WEB_THREE_SELL"}']})
|
|
50
|
-
await websocket.send(sub_msg)
|
|
51
|
-
sub_msg = json.dumps({"op": "input", "args": ["FIAT_OTC_TOPIC", '{"topic":"APPEALED_CHANGE"}']})
|
|
52
|
-
await websocket.send(sub_msg)
|
|
53
|
-
|
|
54
|
-
sub_msg = json.dumps({"op": "subscribe", "args": ["fiat.cashier.order"]})
|
|
55
|
-
await websocket.send(sub_msg)
|
|
56
|
-
sub_msg = json.dumps({"op": "subscribe", "args": ["fiat.cashier.order-eftd-complete-privilege-event"]})
|
|
57
|
-
await websocket.send(sub_msg)
|
|
58
|
-
sub_msg = json.dumps({"op": "subscribe", "args": ["fiat.cashier.order-savings-product-event"]})
|
|
59
|
-
await websocket.send(sub_msg)
|
|
60
|
-
sub_msg = json.dumps({"op": "subscribe", "args": ["fiat.deal-core.order-savings-complete-event"]})
|
|
61
|
-
await websocket.send(sub_msg)
|
|
62
|
-
|
|
63
|
-
sub_msg = json.dumps({"op": "subscribe", "args": ["FIAT_OTC_TOPIC", "FIAT_OTC_ONLINE_TOPIC"]})
|
|
64
|
-
await websocket.send(sub_msg)
|
|
65
|
-
|
|
66
|
-
while resp := await websocket.recv():
|
|
67
|
-
if data := json.loads(resp).get("data"):
|
|
68
|
-
cb(data)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{xync_client-0.0.80.dev11 → xync_client-0.0.80.dev13}/tests/_todo_refact/Binance/test_binance.py
RENAMED
|
File without changes
|
{xync_client-0.0.80.dev11 → xync_client-0.0.80.dev13}/tests/_todo_refact/Bybit/test_bybit.py
RENAMED
|
File without changes
|
{xync_client-0.0.80.dev11 → xync_client-0.0.80.dev13}/tests/_todo_refact/Bybit/test_bybit_p2p.py
RENAMED
|
File without changes
|
|
File without changes
|
{xync_client-0.0.80.dev11 → xync_client-0.0.80.dev13}/tests/_todo_refact/Wallet/test_agent.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{xync_client-0.0.80.dev11 → xync_client-0.0.80.dev13}/xync_client/Pms/Volet/_todo_req/req.mjs
RENAMED
|
File without changes
|
{xync_client-0.0.80.dev11 → xync_client-0.0.80.dev13}/xync_client/Pms/Volet/_todo_req/req.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{xync_client-0.0.80.dev11 → xync_client-0.0.80.dev13}/xync_client.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|