xync-client 0.0.25.dev110__tar.gz → 0.0.25.dev112__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.25.dev110/xync_client.egg-info → xync_client-0.0.25.dev112}/PKG-INFO +1 -1
- {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client/Abc/Agent.py +2 -2
- {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client/Abc/Base.py +2 -2
- {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client/Abc/Ex.py +25 -22
- {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client/Binance/ex.py +4 -1
- {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client/BingX/ex.py +2 -2
- {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client/BitGet/ex.py +3 -0
- {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client/Bybit/agent.py +36 -9
- {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client/Bybit/ex.py +2 -0
- xync_client-0.0.25.dev112/xync_client/Bybit/ws.py +37 -0
- {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client/Mexc/ex.py +2 -1
- {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client/Okx/ex.py +5 -1
- {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client/TgWallet/agent.py +1 -0
- {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112/xync_client.egg-info}/PKG-INFO +1 -1
- {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client.egg-info/SOURCES.txt +1 -0
- {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/.env.sample +0 -0
- {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/.gitignore +0 -0
- {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/.pre-commit-config.yaml +0 -0
- {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/README.md +0 -0
- {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/makefile +0 -0
- {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/pyproject.toml +0 -0
- {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/setup.cfg +0 -0
- {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/tests/TestAgent.py +0 -0
- {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/tests/TestAsset.py +0 -0
- {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/tests/TestEx.py +0 -0
- {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/tests/TestOrder.py +0 -0
- {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/tests/_todo_refact/Binance/test_binance.py +0 -0
- {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/tests/_todo_refact/Bybit/test_bybit.py +0 -0
- {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/tests/_todo_refact/Bybit/test_bybit_p2p.py +0 -0
- {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/tests/_todo_refact/Gate/test_gate.py +0 -0
- {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/tests/_todo_refact/Htx/test_htx_p2p.py +0 -0
- {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/tests/_todo_refact/Wallet/test_agent.py +0 -0
- {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/tests/_todo_refact/Wallet/test_ex.py +0 -0
- {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/tests/_todo_refact/__init__.py +0 -0
- {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/tests/_todo_refact/_test_ex.py +0 -0
- {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client/Abc/Asset.py +0 -0
- {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client/Abc/AuthTrait.py +0 -0
- {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client/Abc/BaseTest.py +0 -0
- {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client/Abc/InAgent.py +0 -0
- {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client/Abc/Order.py +0 -0
- {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client/Abc/types.py +0 -0
- {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client/Binance/__init__.py +0 -0
- {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client/Binance/binance_async.py +0 -0
- {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client/Binance/earn_api.py +0 -0
- {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client/Binance/etype/ad.py +0 -0
- {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client/Binance/etype/pm.py +0 -0
- {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client/Binance/exceptions.py +0 -0
- {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client/Binance/sapi.py +0 -0
- {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client/Binance/web_c2c.py +0 -0
- {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client/BingX/__init__.py +0 -0
- {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client/BingX/agent.py +0 -0
- {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client/BingX/base.py +0 -0
- {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client/BingX/etype/ad.py +0 -0
- {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client/BingX/etype/pm.py +0 -0
- {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client/BingX/req.mjs +0 -0
- {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client/BingX/sign.js +0 -0
- {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client/BitGet/__init__.py +0 -0
- {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client/BitGet/agent.py +0 -0
- {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client/BitGet/etype/ad.py +0 -0
- {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client/BitGet/req.mjs +0 -0
- {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client/BitPapa/ex.py +0 -0
- {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client/Bybit/etype/ad.py +0 -0
- {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client/Bybit/web_earn.py +0 -0
- {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client/Bybit/web_p2p.py +0 -0
- {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client/Gate/etype/ad.py +0 -0
- {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client/Gate/ex.py +0 -0
- {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client/Gate/premarket.py +0 -0
- {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client/Htx/agent.py +0 -0
- {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client/Htx/earn.py +0 -0
- {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client/Htx/etype/__init__.py +0 -0
- {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client/Htx/etype/ad.py +0 -0
- {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client/Htx/etype/cred.py +0 -0
- {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client/Htx/etype/pm.py +0 -0
- {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client/Htx/ex.py +0 -0
- {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client/KuCoin/etype/ad.py +0 -0
- {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client/KuCoin/etype/pm.py +0 -0
- {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client/KuCoin/ex.py +0 -0
- {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client/KuCoin/web.py +0 -0
- {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client/Mexc/etype/ad.py +0 -0
- {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client/Mexc/etype/pm.py +0 -0
- {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client/Okx/etype/ad.py +0 -0
- {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client/Okx/etype/pm.py +0 -0
- {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client/TgWallet/asset.py +0 -0
- {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client/TgWallet/auth.py +0 -0
- {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client/TgWallet/ex.py +0 -0
- {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client/TgWallet/inAgent.py +0 -0
- {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client/TgWallet/order.py +0 -0
- {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client/TgWallet/pyd.py +0 -0
- {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client/TgWallet/pyro.py +0 -0
- {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client/TgWallet/web.py +0 -0
- {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client/__init__.py +0 -0
- {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client/loader.py +0 -0
- {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client/pm_unifier.py +0 -0
- {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client.egg-info/dependency_links.txt +0 -0
- {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client.egg-info/requires.txt +0 -0
- {xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client.egg-info/top_level.txt +0 -0
|
@@ -11,9 +11,9 @@ from xync_client.Abc.types import CredExOut
|
|
|
11
11
|
|
|
12
12
|
|
|
13
13
|
class BaseAgentClient(BaseClient):
|
|
14
|
-
def __init__(self, agent: Agent):
|
|
14
|
+
def __init__(self, agent: Agent, headers: dict[str, str] = None, cookies: dict[str, str] = None):
|
|
15
15
|
self.agent: Agent = agent
|
|
16
|
-
super().__init__(self.agent.actor.ex
|
|
16
|
+
super().__init__(self.agent.actor.ex, "host_p2p", headers, cookies)
|
|
17
17
|
self.ex_client: BaseExClient = self.ex.client()
|
|
18
18
|
|
|
19
19
|
# 0: Получшение ордеров в статусе status, по монете coin, в валюте coin, в направлении is_sell: bool
|
|
@@ -10,6 +10,6 @@ MapOfIdsList = dict[int | str, list[int | str]]
|
|
|
10
10
|
class BaseClient(Client):
|
|
11
11
|
ex: Ex
|
|
12
12
|
|
|
13
|
-
def __init__(self, ex: Ex, attr: str = "host_p2p"):
|
|
13
|
+
def __init__(self, ex: Ex, attr: str = "host_p2p", headers: dict[str, str] = None, cookies: dict[str, str] = None):
|
|
14
14
|
self.ex = ex
|
|
15
|
-
super().__init__(getattr(ex, attr))
|
|
15
|
+
super().__init__(getattr(ex, attr), headers, cookies)
|
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
import logging
|
|
2
2
|
from abc import abstractmethod
|
|
3
|
+
from asyncio import sleep
|
|
3
4
|
|
|
4
5
|
import msgspec
|
|
6
|
+
from aiohttp import ClientSession
|
|
5
7
|
from msgspec import Struct
|
|
6
8
|
from tortoise.exceptions import MultipleObjectsReturned, IntegrityError
|
|
7
9
|
from xync_schema import models
|
|
10
|
+
from xync_schema.enums import FileType
|
|
8
11
|
from xync_schema.types import CurEx, CoinEx, BaseAd, BaseAdIn
|
|
9
12
|
|
|
10
13
|
from xync_client.Abc.Base import BaseClient, MapOfIdsList
|
|
@@ -66,7 +69,7 @@ class BaseExClient(BaseClient):
|
|
|
66
69
|
|
|
67
70
|
# Импорт Pm-ов (с Pmcur-, Pmex- и Pmcurex-ами) и валют (с Curex-ами) с биржи в бд
|
|
68
71
|
async def set_pmcurexs(self):
|
|
69
|
-
PyroClient(bot)
|
|
72
|
+
pbot = PyroClient(bot)
|
|
70
73
|
# Curs
|
|
71
74
|
cur_pyds: dict[str, CurEx] = await self.curs()
|
|
72
75
|
curs: dict[int | str, models.Cur] = {
|
|
@@ -154,33 +157,33 @@ class BaseExClient(BaseClient):
|
|
|
154
157
|
await models.Pmex.update_or_create({"pm": pm_}, ex=self.ex, exid=k, name=pm.name)
|
|
155
158
|
else:
|
|
156
159
|
pmin = models.Pm.validate({**pmu.model_dump(), "country_id": country_id, "typ": pm.typ})
|
|
157
|
-
#
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
#
|
|
160
|
+
# logo
|
|
161
|
+
if pm.logo or (file := None):
|
|
162
|
+
if not (file := await models.File.get_or_none(name=pm.logo)):
|
|
163
|
+
if not pm.logo.startswith("https:"):
|
|
164
|
+
if not pm.logo.startswith("/"):
|
|
165
|
+
pm.logo = "/" + pm.logo
|
|
166
|
+
pm.logo = "https://" + pm.logo
|
|
167
|
+
async with ClientSession() as ss:
|
|
168
|
+
resp = await ss.get(pm.logo)
|
|
169
|
+
if resp.ok:
|
|
170
|
+
byts = await resp.read()
|
|
171
|
+
upf, ref = await pbot.save_file(byts, resp.content_type)
|
|
172
|
+
await sleep(1)
|
|
173
|
+
typ = FileType[resp.content_type.split("/")[-1]]
|
|
174
|
+
file, _ = await models.File.update_or_create(
|
|
175
|
+
{"ref": ref, "size": len(byts), "typ": typ}, name=pm.logo
|
|
176
|
+
)
|
|
177
|
+
await pbot.get_file(file.ref) # check
|
|
178
|
+
# /logo
|
|
176
179
|
try:
|
|
177
180
|
pms[k], _ = await models.Pm.update_or_create(**pmin.df_unq())
|
|
178
181
|
except (MultipleObjectsReturned, IntegrityError) as e:
|
|
179
182
|
raise e
|
|
180
183
|
prev = k, pmu.norm, pm.name, pmu.country
|
|
181
184
|
# Pmexs
|
|
182
|
-
pmexs = [models.Pmex(exid=k, ex=self.ex, pm=pm, name=pms_epyds[k].name) for k, pm in pms.items()]
|
|
183
|
-
await models.Pmex.bulk_create(pmexs, on_conflict=["ex_id", "exid"], update_fields=["pm_id", "
|
|
185
|
+
pmexs = [models.Pmex(exid=k, ex=self.ex, pm=pm, name=pms_epyds[k].name, logo=file) for k, pm in pms.items()]
|
|
186
|
+
await models.Pmex.bulk_create(pmexs, on_conflict=["ex_id", "exid"], update_fields=["pm_id", "logo_id", "name"])
|
|
184
187
|
# Pmex banks
|
|
185
188
|
for k, pm in pms_epyds.items():
|
|
186
189
|
if banks := pm.banks:
|
|
@@ -20,7 +20,10 @@ class ExClient(BaseExClient):
|
|
|
20
20
|
super().__init__(ex)
|
|
21
21
|
|
|
22
22
|
class BinanceUnifier(PmUnifier):
|
|
23
|
-
pm_map = {
|
|
23
|
+
pm_map = {
|
|
24
|
+
"Banque de développement local (BDL)": "Banque de développement local (BDL)",
|
|
25
|
+
"Viettel Money": "ViettelPay"
|
|
26
|
+
}
|
|
24
27
|
|
|
25
28
|
unifier_class = BinanceUnifier
|
|
26
29
|
|
|
@@ -18,8 +18,8 @@ class ExClient(BaseExClient, BaseBingXClient):
|
|
|
18
18
|
class BingUnifier(PmUnifier):
|
|
19
19
|
pm_map = {
|
|
20
20
|
"СБП": "SBP",
|
|
21
|
-
"
|
|
22
|
-
"
|
|
21
|
+
"Transfer with Specific Bank": "Transfers with specific bank",
|
|
22
|
+
"Al-Rafidain Qi Services": "Al-Rafidain QiServices",
|
|
23
23
|
}
|
|
24
24
|
|
|
25
25
|
unifier_class = BingUnifier
|
|
@@ -21,6 +21,9 @@ class ExClient(BaseExClient):
|
|
|
21
21
|
pm_map = {
|
|
22
22
|
"Philippine National Bank": "Philippines National Bank",
|
|
23
23
|
"Banque du Developpement Local BDL": "Banque de développement local (BDL)",
|
|
24
|
+
"ADCB Abu Dhabi Commercial Bank": "ADCB",
|
|
25
|
+
"BDO": "Banco De Oro (BDO)",
|
|
26
|
+
"Touch 'n Go": "Touch n Go"
|
|
24
27
|
}
|
|
25
28
|
|
|
26
29
|
unifier_class = BitGetUnifier
|
|
@@ -1,12 +1,17 @@
|
|
|
1
|
+
from asyncio import run
|
|
1
2
|
from enum import IntEnum
|
|
2
3
|
from time import sleep
|
|
3
4
|
|
|
4
5
|
import pyotp
|
|
6
|
+
from x_model import init_db
|
|
7
|
+
from xync_schema import models
|
|
8
|
+
|
|
5
9
|
from xync_client.Abc.Base import FlatDict
|
|
6
10
|
from xync_schema.models import Cur
|
|
7
11
|
|
|
8
12
|
from xync_client.Abc.Agent import BaseAgentClient
|
|
9
|
-
from xync_client.
|
|
13
|
+
from xync_client.Bybit.ws import prv
|
|
14
|
+
from xync_client.loader import BYT2FA, PG_DSN
|
|
10
15
|
|
|
11
16
|
|
|
12
17
|
class NoMakerException(Exception):
|
|
@@ -18,7 +23,7 @@ class AdsStatus(IntEnum):
|
|
|
18
23
|
WORKING = 1
|
|
19
24
|
|
|
20
25
|
|
|
21
|
-
class
|
|
26
|
+
class AgentClient(BaseAgentClient): # Bybit client
|
|
22
27
|
host = "api2.bybit.com"
|
|
23
28
|
headers = {"cookie": ";"} # rewrite token for public methods
|
|
24
29
|
|
|
@@ -109,31 +114,35 @@ class ExClient(BaseAgentClient): # Bybit client
|
|
|
109
114
|
return fiat
|
|
110
115
|
return list_methods[1]
|
|
111
116
|
|
|
117
|
+
async def ott(self):
|
|
118
|
+
t = await self._post("/user/private/ott")
|
|
119
|
+
return t
|
|
120
|
+
|
|
112
121
|
# 27
|
|
113
|
-
def fiat_upd(self, fiat_id: int, detail: str, name: str = None) -> dict:
|
|
122
|
+
async def fiat_upd(self, fiat_id: int, detail: str, name: str = None) -> dict:
|
|
114
123
|
fiat = self.get_payment_method(fiat_id)
|
|
115
124
|
fiat["realName"] = name
|
|
116
125
|
fiat["accountNo"] = detail
|
|
117
126
|
result = await self._post("/fiat/otc/user/payment/new_update", fiat)
|
|
118
127
|
srt = result["result"]["securityRiskToken"]
|
|
119
|
-
self._check_2fa(srt)
|
|
128
|
+
await self._check_2fa(srt)
|
|
120
129
|
fiat["securityRiskToken"] = srt
|
|
121
130
|
result2 = await self._post("/fiat/otc/user/payment/new_update", fiat)
|
|
122
131
|
return result2
|
|
123
132
|
|
|
124
133
|
# 28
|
|
125
|
-
def fiat_del(self, fiat_id: int) -> dict:
|
|
134
|
+
async def fiat_del(self, fiat_id: int) -> dict | str:
|
|
126
135
|
data = {"id": fiat_id, "securityRiskToken": ""}
|
|
127
136
|
method = await self._post("/fiat/otc/user/payment/new_delete", data)
|
|
128
137
|
srt = method["result"]["securityRiskToken"]
|
|
129
|
-
self._check_2fa(srt)
|
|
138
|
+
await self._check_2fa(srt)
|
|
130
139
|
data["securityRiskToken"] = srt
|
|
131
140
|
delete = await self._post("/fiat/otc/user/payment/new_delete", data)
|
|
132
141
|
return delete
|
|
133
142
|
|
|
134
|
-
def switch_ads(self, new_status: AdsStatus) -> dict:
|
|
143
|
+
async def switch_ads(self, new_status: AdsStatus) -> dict:
|
|
135
144
|
data = {"workStatus": new_status.name}
|
|
136
|
-
res = self._post("/fiat/otc/maker/work-config/switch", data)
|
|
145
|
+
res = await self._post("/fiat/otc/maker/work-config/switch", data)
|
|
137
146
|
return res
|
|
138
147
|
|
|
139
148
|
def online_ads(self) -> str:
|
|
@@ -145,7 +154,7 @@ class ExClient(BaseAgentClient): # Bybit client
|
|
|
145
154
|
ads = [ad for ad in list_ads if set(ad["payments"]) - {"5", "51"}]
|
|
146
155
|
return float(ads[0]["price"])
|
|
147
156
|
|
|
148
|
-
def my_fiats(self, cur: Cur = None):
|
|
157
|
+
async def my_fiats(self, cur: Cur = None):
|
|
149
158
|
upm = await self._post("/fiat/otc/user/payment/list")
|
|
150
159
|
return upm["result"]
|
|
151
160
|
|
|
@@ -296,3 +305,21 @@ class ExClient(BaseAgentClient): # Bybit client
|
|
|
296
305
|
"size": 10,
|
|
297
306
|
},
|
|
298
307
|
)
|
|
308
|
+
|
|
309
|
+
|
|
310
|
+
def listen(data: dict):
|
|
311
|
+
print(data)
|
|
312
|
+
|
|
313
|
+
|
|
314
|
+
async def main():
|
|
315
|
+
_ = await init_db(PG_DSN, models, True)
|
|
316
|
+
agent = await models.Agent.filter(actor__ex_id=9, auth__isnull=False).prefetch_related("actor__ex").first()
|
|
317
|
+
cl: AgentClient = agent.client()
|
|
318
|
+
t = await cl.ott()
|
|
319
|
+
ts = int(float(t["time_now"]) * 1000)
|
|
320
|
+
await prv(agent.auth["deviceId"], t["result"], ts, listen)
|
|
321
|
+
await cl.close()
|
|
322
|
+
|
|
323
|
+
|
|
324
|
+
if __name__ == "__main__":
|
|
325
|
+
run(main())
|
|
@@ -24,6 +24,8 @@ class ExClient(BaseExClient): # Bybit client
|
|
|
24
24
|
"Local Card-Green": "Sberbank",
|
|
25
25
|
"Local Card-Yellow": "T-Bank",
|
|
26
26
|
"Banque de développement local (BDL)": "Banque de développement local (BDL)",
|
|
27
|
+
"Al-Rajhi Bank": "Al Rajhi Bank",
|
|
28
|
+
"BDO": "Banco De Oro (BDO)"
|
|
27
29
|
}
|
|
28
30
|
|
|
29
31
|
host = "api2.bybit.com"
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import json
|
|
2
|
+
|
|
3
|
+
import websockets
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
async def prv(did: str, tok: str, ts: int, cb: callable):
|
|
7
|
+
u = f"wss://ws2.bybit.com/private?appid=bybit&os=web&deviceid={did}×tamp={ts}"
|
|
8
|
+
async with websockets.connect(u) as websocket:
|
|
9
|
+
auth_msg = json.dumps({"req_id": did, "op": "login", "args": [tok]})
|
|
10
|
+
await websocket.send(auth_msg)
|
|
11
|
+
|
|
12
|
+
sub_msg = json.dumps({"op": "subscribe", "args": ["FIAT_OTC_TOPIC", "FIAT_OTC_ONLINE_TOPIC"]})
|
|
13
|
+
await websocket.send(sub_msg)
|
|
14
|
+
sub_msg = json.dumps({"op": "input", "args": ["FIAT_OTC_TOPIC", '{"topic":"SUPER_DEAL"}']})
|
|
15
|
+
await websocket.send(sub_msg)
|
|
16
|
+
sub_msg = json.dumps({"op": "input", "args": ["FIAT_OTC_TOPIC", '{"topic":"OTC_ORDER_STATUS"}']})
|
|
17
|
+
await websocket.send(sub_msg)
|
|
18
|
+
sub_msg = json.dumps({"op": "input", "args": ["FIAT_OTC_TOPIC", '{"topic":"WEB_THREE_SELL"}']})
|
|
19
|
+
await websocket.send(sub_msg)
|
|
20
|
+
sub_msg = json.dumps({"op": "input", "args": ["FIAT_OTC_TOPIC", '{"topic":"APPEALED_CHANGE"}']})
|
|
21
|
+
await websocket.send(sub_msg)
|
|
22
|
+
|
|
23
|
+
sub_msg = json.dumps({"op": "subscribe", "args": ["fiat.cashier.order"]})
|
|
24
|
+
await websocket.send(sub_msg)
|
|
25
|
+
sub_msg = json.dumps({"op": "subscribe", "args": ["fiat.cashier.order-eftd-complete-privilege-event"]})
|
|
26
|
+
await websocket.send(sub_msg)
|
|
27
|
+
sub_msg = json.dumps({"op": "subscribe", "args": ["fiat.cashier.order-savings-product-event"]})
|
|
28
|
+
await websocket.send(sub_msg)
|
|
29
|
+
sub_msg = json.dumps({"op": "subscribe", "args": ["fiat.deal-core.order-savings-complete-event"]})
|
|
30
|
+
await websocket.send(sub_msg)
|
|
31
|
+
|
|
32
|
+
sub_msg = json.dumps({"op": "subscribe", "args": ["FIAT_OTC_TOPIC", "FIAT_OTC_ONLINE_TOPIC"]})
|
|
33
|
+
await websocket.send(sub_msg)
|
|
34
|
+
|
|
35
|
+
while resp := await websocket.recv():
|
|
36
|
+
if data := json.loads(resp).get("data"):
|
|
37
|
+
cb(data)
|
|
@@ -18,7 +18,8 @@ class ExClient(BaseExClient):
|
|
|
18
18
|
pm_map = {
|
|
19
19
|
"Philippine National Bank (PNB)": "Philippines National Bank (PNB)",
|
|
20
20
|
"Al-Rajhi Bank": "Al Rajhi Bank",
|
|
21
|
-
"SBP - Fast Bank Transfer": "SBP"
|
|
21
|
+
"SBP - Fast Bank Transfer": "SBP",
|
|
22
|
+
"Touch 'n Go": "Touch n Go"
|
|
22
23
|
}
|
|
23
24
|
unifier_class = MexcUnifier
|
|
24
25
|
|
|
@@ -15,7 +15,11 @@ from xync_client.pm_unifier import PmUnifier
|
|
|
15
15
|
class ExClient(BaseExClient):
|
|
16
16
|
class OkxUnifier(PmUnifier):
|
|
17
17
|
pm_map = {
|
|
18
|
-
"SBP Fast Bank Transfer": "SBP"
|
|
18
|
+
"SBP Fast Bank Transfer": "SBP",
|
|
19
|
+
"ADCB": "Abu Dhabi Commercial Bank ADCB",
|
|
20
|
+
"Al-Rafdin QiServices": "Al-Rafidain QiServices",
|
|
21
|
+
"Viettel Pay": "ViettelPay",
|
|
22
|
+
"Zain Cash - Business": "ZainCash - Business"
|
|
19
23
|
}
|
|
20
24
|
|
|
21
25
|
unifier_class = OkxUnifier
|
|
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.25.dev110 → xync_client-0.0.25.dev112}/tests/_todo_refact/Binance/test_binance.py
RENAMED
|
File without changes
|
{xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/tests/_todo_refact/Bybit/test_bybit.py
RENAMED
|
File without changes
|
{xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/tests/_todo_refact/Bybit/test_bybit_p2p.py
RENAMED
|
File without changes
|
{xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/tests/_todo_refact/Gate/test_gate.py
RENAMED
|
File without changes
|
{xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/tests/_todo_refact/Htx/test_htx_p2p.py
RENAMED
|
File without changes
|
{xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/tests/_todo_refact/Wallet/test_agent.py
RENAMED
|
File without changes
|
{xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/tests/_todo_refact/Wallet/test_ex.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
|
{xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client/Binance/binance_async.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
|
{xync_client-0.0.25.dev110 → xync_client-0.0.25.dev112}/xync_client.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|