xync-client 0.0.114__py3-none-any.whl → 0.0.155__py3-none-any.whl
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/Abc/AdLoader.py +299 -0
- xync_client/Abc/Agent.py +94 -10
- xync_client/Abc/Ex.py +27 -22
- xync_client/Abc/HasAbotUid.py +10 -0
- xync_client/Abc/InAgent.py +0 -11
- xync_client/Abc/PmAgent.py +42 -35
- xync_client/Abc/xtype.py +24 -2
- xync_client/Binance/ex.py +2 -2
- xync_client/BingX/ex.py +2 -2
- xync_client/BitGet/ex.py +2 -2
- xync_client/Bybit/InAgent.py +229 -114
- xync_client/Bybit/agent.py +584 -572
- xync_client/Bybit/etype/ad.py +11 -56
- xync_client/Bybit/etype/cred.py +29 -9
- xync_client/Bybit/etype/order.py +55 -62
- xync_client/Bybit/ex.py +17 -4
- xync_client/Gate/ex.py +2 -2
- xync_client/Gmail/__init__.py +119 -98
- xync_client/Htx/agent.py +162 -31
- xync_client/Htx/etype/ad.py +18 -11
- xync_client/Htx/ex.py +9 -11
- xync_client/KuCoin/ex.py +2 -2
- xync_client/Mexc/agent.py +85 -0
- xync_client/Mexc/api.py +636 -0
- xync_client/Mexc/etype/order.py +639 -0
- xync_client/Mexc/ex.py +12 -10
- xync_client/Okx/ex.py +2 -2
- xync_client/Pms/Payeer/__init__.py +147 -43
- xync_client/Pms/Payeer/login.py +29 -2
- xync_client/Pms/Volet/__init__.py +148 -94
- xync_client/Pms/Volet/api.py +17 -13
- xync_client/TgWallet/ex.py +2 -2
- xync_client/details.py +44 -0
- xync_client/loader.py +2 -1
- xync_client/pm_unifier.py +1 -1
- {xync_client-0.0.114.dist-info → xync_client-0.0.155.dist-info}/METADATA +6 -1
- {xync_client-0.0.114.dist-info → xync_client-0.0.155.dist-info}/RECORD +39 -33
- {xync_client-0.0.114.dist-info → xync_client-0.0.155.dist-info}/WHEEL +0 -0
- {xync_client-0.0.114.dist-info → xync_client-0.0.155.dist-info}/top_level.txt +0 -0
|
@@ -1,22 +1,28 @@
|
|
|
1
1
|
import logging
|
|
2
2
|
import re
|
|
3
|
-
from asyncio import run
|
|
3
|
+
from asyncio import run
|
|
4
|
+
from datetime import datetime
|
|
5
|
+
from decimal import Decimal
|
|
4
6
|
from enum import StrEnum
|
|
5
|
-
from
|
|
7
|
+
from hashlib import sha256
|
|
6
8
|
|
|
7
|
-
from
|
|
9
|
+
from PGram import Bot
|
|
10
|
+
from playwright.async_api import async_playwright, Page, Locator, Position, Playwright, Browser # , FloatRect
|
|
8
11
|
from pyotp import TOTP
|
|
9
12
|
|
|
10
13
|
# noinspection PyProtectedMember
|
|
11
14
|
from playwright._impl._errors import TimeoutError
|
|
12
|
-
from pyro_client.client.bot import BotClient
|
|
13
15
|
from pyro_client.client.user import UserClient
|
|
16
|
+
from pyrogram.handlers import MessageHandler
|
|
17
|
+
from tortoise.timezone import now
|
|
18
|
+
from xync_schema import models
|
|
14
19
|
from xync_schema.enums import UserStatus
|
|
15
|
-
from xync_schema.models import Cur, User, PmAgent, Cred, PmCur, Fiat
|
|
20
|
+
from xync_schema.models import Cur, User, PmAgent, Cred, PmCur, Fiat, TopUp, Transfer
|
|
16
21
|
|
|
22
|
+
from xync_client.Abc.PmAgent import PmAgentClient
|
|
17
23
|
from xync_client.Gmail import GmClient
|
|
18
24
|
from xync_client.Pms.Volet.api import APIClient
|
|
19
|
-
from xync_client.loader import
|
|
25
|
+
from xync_client.loader import PAY_TOKEN
|
|
20
26
|
|
|
21
27
|
|
|
22
28
|
class CaptchaException(Exception): ...
|
|
@@ -31,14 +37,6 @@ class NoCodeException(Exception): ...
|
|
|
31
37
|
class NoMailException(Exception): ...
|
|
32
38
|
|
|
33
39
|
|
|
34
|
-
class Pages(StrEnum):
|
|
35
|
-
base_url = "https://account.volet.com/"
|
|
36
|
-
LOGIN = base_url + "login"
|
|
37
|
-
OTP_LOGIN = base_url + "login/otp"
|
|
38
|
-
HOME = base_url + "pages/transaction"
|
|
39
|
-
SEND = base_url + "pages/transfer/wallet"
|
|
40
|
-
|
|
41
|
-
|
|
42
40
|
def parse_transaction_info(text: str) -> dict[str, str] | None:
|
|
43
41
|
# Поиск ID транзакции
|
|
44
42
|
transaction_id_match = re.search(r"Transaction ID:\s*([\w-]+)", text)
|
|
@@ -57,104 +55,159 @@ def parse_transaction_info(text: str) -> dict[str, str] | None:
|
|
|
57
55
|
return None
|
|
58
56
|
|
|
59
57
|
|
|
60
|
-
class Client:
|
|
58
|
+
class Client(PmAgentClient):
|
|
59
|
+
class Pages(StrEnum):
|
|
60
|
+
base = "https://account.volet.com/"
|
|
61
|
+
LOGIN = base + "login"
|
|
62
|
+
OTP_LOGIN = base + "login/otp"
|
|
63
|
+
# HOME = base + "pages/transaction"
|
|
64
|
+
SEND = base + "pages/transfer/wallet"
|
|
65
|
+
|
|
66
|
+
async def check_in(
|
|
67
|
+
self, amount: int | Decimal | float, cur: str, dt: datetime, tid: str | int = None
|
|
68
|
+
) -> float | None:
|
|
69
|
+
return await (self.api.check_by_id(tid) if tid else self.api.check_by_amount(amount, cur))
|
|
70
|
+
|
|
71
|
+
async def proof(self) -> bytes:
|
|
72
|
+
pass
|
|
73
|
+
|
|
61
74
|
uid: int
|
|
62
75
|
agent: PmAgent
|
|
63
|
-
|
|
76
|
+
abot: Bot
|
|
77
|
+
ubot: UserClient
|
|
64
78
|
api: APIClient
|
|
65
79
|
page: Page
|
|
66
80
|
gmail: GmClient
|
|
81
|
+
norm: str = "payeer"
|
|
82
|
+
pages: type(StrEnum) = Pages
|
|
83
|
+
with_userbot: bool = True
|
|
67
84
|
|
|
68
|
-
def __init__(self,
|
|
69
|
-
|
|
70
|
-
self.gmail = GmClient(
|
|
71
|
-
|
|
72
|
-
async def start(self, pw: Playwright, headed: bool = False):
|
|
73
|
-
self.agent = await PmAgent.get(
|
|
74
|
-
user__username_id=self.uid, user__status__gte=UserStatus.PAY, pm__norm="volet"
|
|
75
|
-
).prefetch_related("user__gmail", "user__username__session")
|
|
85
|
+
def __init__(self, agent: PmAgent, browser: Browser, abot: Bot):
|
|
86
|
+
super().__init__(agent, browser, abot)
|
|
87
|
+
self.gmail = GmClient(agent.user)
|
|
76
88
|
self.api = APIClient(self.agent.auth["api"], self.agent.auth["password"], self.agent.auth["login"])
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
89
|
+
|
|
90
|
+
@staticmethod
|
|
91
|
+
def form_redirect(topup: TopUp) -> tuple[str, dict | None]:
|
|
92
|
+
ac_account_email = topup.topupable.auth["ac_account_email"]
|
|
93
|
+
ac_sci_name = topup.topupable.auth["ac_sci_name"]
|
|
94
|
+
ac_order_id = str(topup.id)
|
|
95
|
+
ac_amount = "{0:.2f}".format(topup.amount * 0.01)
|
|
96
|
+
ac_currency = topup.cur.ticker
|
|
97
|
+
ac_comments = "XyncPay top up"
|
|
98
|
+
secret = topup.topupable.auth["secret"]
|
|
99
|
+
data = [ac_account_email, ac_sci_name, ac_amount, ac_currency, secret, ac_order_id]
|
|
100
|
+
|
|
101
|
+
ac_sign = sha256(":".join(data).encode()).hexdigest()
|
|
102
|
+
|
|
103
|
+
params = {
|
|
104
|
+
"ac_account_email": ac_account_email,
|
|
105
|
+
"ac_sci_name": ac_sci_name,
|
|
106
|
+
"ac_amount": ac_amount,
|
|
107
|
+
"ac_currency": ac_currency,
|
|
108
|
+
"ac_order_id": ac_order_id,
|
|
109
|
+
"ac_sign": ac_sign,
|
|
110
|
+
"ac_comments": ac_comments,
|
|
111
|
+
}
|
|
112
|
+
url = "https://account.volet.com/sci/"
|
|
113
|
+
return url, params
|
|
114
|
+
|
|
115
|
+
def get_topup(self, tid: str) -> dict:
|
|
116
|
+
t = self.api.check_by_id(tid)
|
|
117
|
+
return t["status"] == "COMPLETED" and {
|
|
118
|
+
"pmid": t["id"],
|
|
119
|
+
"from_acc": t["walletSrcId"],
|
|
120
|
+
"oid": t["orderId"],
|
|
121
|
+
"amount": int(t["amount"] * 100),
|
|
122
|
+
"ts": t["updatedTime"],
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
async def wait_for_code(self, uid: int, topic: str, hg: tuple[MessageHandler, int]) -> str:
|
|
126
|
+
code = await self.ubot.wait_from(uid, topic, hg)
|
|
127
|
+
return code and code[-6:]
|
|
128
|
+
|
|
129
|
+
async def _login(self):
|
|
130
|
+
ll = self.page.locator("input#j_username")
|
|
131
|
+
await ll.fill(self.agent.auth["login"])
|
|
132
|
+
await self.page.locator("input#j_password").fill(self.agent.auth["password"])
|
|
133
|
+
await self.page.wait_for_timeout(300)
|
|
134
|
+
await ll.click()
|
|
135
|
+
await ll.press(key="ArrowLeft")
|
|
136
|
+
await ll.blur()
|
|
137
|
+
volet_bot_id, topic = 243630567, "otp_login"
|
|
102
138
|
await self.page.locator("input#loginToAdvcashButton", has_text="log in").hover()
|
|
139
|
+
hg = self.ubot.subscribe_for(volet_bot_id, topic)
|
|
103
140
|
await self.page.locator("input#loginToAdvcashButton:not([disabled])", has_text="log in").click()
|
|
104
|
-
await self.page.wait_for_url(
|
|
105
|
-
await self.
|
|
106
|
-
|
|
107
|
-
async def login_otp(self):
|
|
108
|
-
if not (code := await self.wait_for_code("login")):
|
|
109
|
-
await self.bot.receive("no login code", photo=await self.page.screenshot())
|
|
141
|
+
await self.page.wait_for_url(self.pages.OTP_LOGIN)
|
|
142
|
+
if not (code := await self.wait_for_code(volet_bot_id, topic, hg)):
|
|
143
|
+
await self.ubot.receive("no login code", photo=await self.page.screenshot())
|
|
110
144
|
raise NoCodeException(self.agent.user_id)
|
|
111
145
|
await self.page.locator("input#otpId").fill(code)
|
|
112
146
|
await self.page.click("input#checkOtpButton")
|
|
113
|
-
await self.page.wait_for_url(
|
|
147
|
+
await self.page.wait_for_url(self.pages.SEND, wait_until="domcontentloaded")
|
|
148
|
+
# save state
|
|
149
|
+
# noinspection PyTypeChecker
|
|
150
|
+
self.agent.state = await self.page.context.storage_state()
|
|
151
|
+
await self.agent.save()
|
|
114
152
|
|
|
115
|
-
async def send(self,
|
|
116
|
-
|
|
153
|
+
async def send(self, t: Transfer) -> tuple[str, bytes] | float:
|
|
154
|
+
dest, cur = t.order.cred.detail, t.order.cred.pmcur.cur.ticker
|
|
155
|
+
amount = round(t.order.amount * 10**-t.order.cred.pmcur.cur.scale, t.order.cred.pmcur.cur.scale)
|
|
156
|
+
self.last_active = now()
|
|
157
|
+
curs_map = {"RUB": "Ruble"}
|
|
158
|
+
await self.go(self.pages.SEND, False)
|
|
117
159
|
await self.page.click("[class=combobox-account]")
|
|
118
|
-
await self.page.click('[class=rf-ulst-itm] b:has-text("
|
|
119
|
-
await self.page.
|
|
160
|
+
await self.page.click(f'[class=rf-ulst-itm] b:has-text("{curs_map[cur]}")')
|
|
161
|
+
await self.page.wait_for_selector(f"#srcCurrency:has-text('{cur}')")
|
|
120
162
|
await self.page.fill("#srcAmount", str(amount))
|
|
121
|
-
|
|
122
|
-
await
|
|
163
|
+
dw = self.page.locator("#destWalletId")
|
|
164
|
+
await dw.fill(dest)
|
|
165
|
+
await dw.blur()
|
|
166
|
+
await self.page.wait_for_selector(f"#destCurrency:has-text('{cur}')")
|
|
167
|
+
volet_bot_id, topic = 243630567, "otp_send"
|
|
168
|
+
hg = self.ubot.subscribe_for(volet_bot_id, topic)
|
|
123
169
|
await self.page.locator("form#mainForm input[type=submit]", has_text="continue").click()
|
|
124
170
|
# todo: check success confirming
|
|
125
171
|
if otp := self.agent.auth.get("otp"):
|
|
126
172
|
totp = TOTP(otp)
|
|
127
173
|
code = totp.now()
|
|
128
174
|
elif self.agent.user.username.session:
|
|
129
|
-
if not (code := await self.wait_for_code(
|
|
130
|
-
if 1: # todo:
|
|
131
|
-
await self.gmail.
|
|
132
|
-
|
|
175
|
+
if not (code := await self.wait_for_code(volet_bot_id, topic, hg)):
|
|
176
|
+
if 1: # todo: Is mail_confirm required?
|
|
177
|
+
if _mcr := await self.gmail.volet_confirm(amount, t.updated_at):
|
|
178
|
+
...
|
|
179
|
+
# todo: click Continue
|
|
180
|
+
if not (code := await self.wait_for_code(volet_bot_id, topic, hg)):
|
|
181
|
+
code = await self.wait_for_code(volet_bot_id, topic, hg)
|
|
182
|
+
if not code:
|
|
183
|
+
await self.receive("no send trans code", photo=await self.page.screenshot())
|
|
133
184
|
raise NoCodeException(self.agent.user_id)
|
|
134
185
|
else:
|
|
135
186
|
raise OtpNotSetException(self.agent.user_id)
|
|
136
187
|
await self.page.fill("#securityValue", code)
|
|
137
188
|
await self.page.locator("input[type=submit]", has_text="confirm").click()
|
|
138
|
-
await self.page.wait_for_url(
|
|
189
|
+
await self.page.wait_for_url(self.pages.SEND)
|
|
190
|
+
tid = await self.page.text_content("ul.p-confirmation-info dl.success>dd")
|
|
139
191
|
await self.page.get_by_role("heading").click()
|
|
140
|
-
slip = await self.page.screenshot(clip={"x": 440, "y": 205, "width":
|
|
141
|
-
await self.
|
|
192
|
+
slip = await self.page.screenshot(clip={"x": 440, "y": 205, "width": 440, "height": 415})
|
|
193
|
+
await self.receive(f"{amount} to {dest} sent", photo=slip)
|
|
194
|
+
return tid, slip
|
|
142
195
|
|
|
143
|
-
async def go(self, url: Pages):
|
|
196
|
+
async def go(self, url: Pages, commit: bool = True):
|
|
144
197
|
try:
|
|
145
|
-
await self.page.goto(url)
|
|
198
|
+
await self.page.goto(url, wait_until="commit" if commit else "domcontentloaded")
|
|
146
199
|
if len(await self.page.content()) < 1000: # todo: fix captcha symptom
|
|
147
200
|
await self.captcha_click()
|
|
148
201
|
except Exception as e:
|
|
149
|
-
await self.
|
|
202
|
+
await self.receive(repr(e), photo=await self.page.screenshot())
|
|
150
203
|
raise e
|
|
151
204
|
|
|
152
205
|
async def send_cap_help(self, xcap: Locator):
|
|
153
206
|
if await xcap.count():
|
|
154
207
|
bb = await xcap.bounding_box(timeout=2000)
|
|
155
208
|
byts = await self.page.screenshot(clip=bb)
|
|
156
|
-
await self.
|
|
157
|
-
txt = await self.
|
|
209
|
+
await self.receive("put x, y", photo=byts)
|
|
210
|
+
txt = await self.ubot.wait_from(self.uid, "xy", timeout=59) # todo: fix
|
|
158
211
|
for xy in txt.split(";"):
|
|
159
212
|
px, py = xy
|
|
160
213
|
x, y = bb["x"] + bb["width"] * int(px) / 100, bb["y"] + bb["height"] * int(py) / 100
|
|
@@ -173,7 +226,7 @@ class Client:
|
|
|
173
226
|
if await xcap.count():
|
|
174
227
|
await self.send_cap_help(xcap)
|
|
175
228
|
try:
|
|
176
|
-
await self.page.wait_for_url(lambda url: url != captcha_url)
|
|
229
|
+
await self.page.wait_for_url(lambda url: url != captcha_url, wait_until="commit")
|
|
177
230
|
except TimeoutError: # if page no changed -> captcha is undone
|
|
178
231
|
await self.page.screenshot()
|
|
179
232
|
raise CaptchaException(self.page.url)
|
|
@@ -204,35 +257,36 @@ class Client:
|
|
|
204
257
|
]
|
|
205
258
|
[await Fiat.update_or_create({"amount": amount}, cred=cred) for cred, amount in creds]
|
|
206
259
|
|
|
207
|
-
async def stop(self):
|
|
208
|
-
# save state
|
|
209
|
-
self.agent.state = await self.page.context.storage_state()
|
|
210
|
-
await self.agent.save()
|
|
211
|
-
# closing
|
|
212
|
-
await self.bot.stop()
|
|
213
|
-
await self.gmail.stop()
|
|
214
|
-
await self.page.context.close()
|
|
215
|
-
await self.page.context.browser.close()
|
|
216
|
-
|
|
217
260
|
|
|
218
261
|
async def _test():
|
|
219
262
|
from x_model import init_db
|
|
220
|
-
from
|
|
263
|
+
from xync_client.loader import TORM
|
|
221
264
|
|
|
222
265
|
_ = await init_db(TORM, True)
|
|
223
|
-
logging.basicConfig(level=logging.
|
|
224
|
-
|
|
266
|
+
logging.basicConfig(level=logging.INFO)
|
|
267
|
+
abot = Bot(PAY_TOKEN)
|
|
225
268
|
playwright: Playwright = await async_playwright().start()
|
|
226
|
-
|
|
269
|
+
|
|
227
270
|
try:
|
|
228
|
-
await
|
|
229
|
-
await
|
|
230
|
-
await
|
|
271
|
+
o = await models.Order.create(ad_id=7, exid=1, amount=900, cred_id=522, taker_id=419)
|
|
272
|
+
await o.fetch_related("cred__pmcur__cur", "ad")
|
|
273
|
+
pma = await models.PmAgent.get(
|
|
274
|
+
active=True,
|
|
275
|
+
auth__isnull=False,
|
|
276
|
+
pm_id=o.cred.pmcur.pmex_exid,
|
|
277
|
+
user__person__actors=o.ad.maker_id,
|
|
278
|
+
user__status=UserStatus.ACTIVE,
|
|
279
|
+
).prefetch_related("pm", "user__gmail", "user__username__session")
|
|
280
|
+
t = models.Transfer(amount=9, created_at=now(), order=o)
|
|
281
|
+
pcl: Client = pma.client(abot)
|
|
282
|
+
pcl = await pcl.start(playwright, True, True)
|
|
283
|
+
await pcl.send(t)
|
|
284
|
+
await pcl.wait_for_payments()
|
|
231
285
|
except TimeoutError as te:
|
|
232
|
-
await
|
|
286
|
+
await pcl.receive(repr(te), photo=await pcl.page.screenshot())
|
|
233
287
|
raise te
|
|
234
288
|
finally:
|
|
235
|
-
await
|
|
289
|
+
await pcl.stop()
|
|
236
290
|
|
|
237
291
|
|
|
238
292
|
if __name__ == "__main__":
|
xync_client/Pms/Volet/api.py
CHANGED
|
@@ -9,6 +9,8 @@ from zeep.client import Client
|
|
|
9
9
|
|
|
10
10
|
from xync_client.loader import TORM
|
|
11
11
|
|
|
12
|
+
period = 5
|
|
13
|
+
|
|
12
14
|
|
|
13
15
|
class APIClient:
|
|
14
16
|
wsdl = "https://wallet.advcash.com/wsm/merchantWebService?wsdl"
|
|
@@ -83,25 +85,27 @@ class APIClient:
|
|
|
83
85
|
params.update(walletId=to)
|
|
84
86
|
return self.make_request("sendMoney", params)
|
|
85
87
|
|
|
88
|
+
async def check_by_amount(self, amount: decimal, cur: str = "RUB", timeout: int = 5 * 60, past: int = 0):
|
|
89
|
+
hist: list = self.make_request("history", {"transactionDirection": "INCOMING", "count": 3, "from": 0})
|
|
90
|
+
if int(hist[0].amount) == int(amount):
|
|
91
|
+
return hist[0]["amount"], hist[0]["id"]
|
|
92
|
+
await sleep(period)
|
|
93
|
+
past += period
|
|
94
|
+
if past < timeout:
|
|
95
|
+
return await self.check_by_amount(amount, cur, timeout, past)
|
|
96
|
+
return None, None
|
|
86
97
|
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
hist: list = cl.make_request("history", {"transactionDirection": "INCOMING", "count": 3, "from": 0})
|
|
92
|
-
if int(hist[0].amount) == int(amount):
|
|
93
|
-
return hist[0]
|
|
94
|
-
await sleep(period)
|
|
95
|
-
past += period
|
|
96
|
-
if past < timeout:
|
|
97
|
-
return await check_payment(cl, amount, cur, timeout, past)
|
|
98
|
-
return False
|
|
98
|
+
def check_by_id(self, tid: str):
|
|
99
|
+
if t := self.make_request("findTransaction", tid):
|
|
100
|
+
return t["amount"], t["id"]
|
|
101
|
+
return None, None
|
|
99
102
|
|
|
100
103
|
|
|
101
104
|
async def main():
|
|
102
105
|
_ = await init_db(TORM, True)
|
|
103
106
|
cl = APIClient("main", "mixfixX98", "mixartemev@gmail.com")
|
|
104
|
-
b = cl.get_balances()
|
|
107
|
+
# b = cl.get_balances()
|
|
108
|
+
b = cl.check_by_id("ce9a52be-8085-431e-8e6e-b0be427c6c55")
|
|
105
109
|
cl.make_request("history", {"transactionDirection": "INCOMING", "count": 100, "from": 0})
|
|
106
110
|
print(b)
|
|
107
111
|
|
xync_client/TgWallet/ex.py
CHANGED
|
@@ -16,7 +16,7 @@ from xync_client.TgWallet.pyd import (
|
|
|
16
16
|
_PmsTrait,
|
|
17
17
|
_BaseAd,
|
|
18
18
|
)
|
|
19
|
-
from xync_client.loader import
|
|
19
|
+
from xync_client.loader import NET_TOKEN, TORM
|
|
20
20
|
from xync_client.Abc.Ex import BaseExClient
|
|
21
21
|
from xync_client.Abc.xtype import MapOfIdsList
|
|
22
22
|
from xync_client.TgWallet.auth import AuthClient
|
|
@@ -156,7 +156,7 @@ class ExClient(BaseExClient, AuthClient):
|
|
|
156
156
|
async def _test():
|
|
157
157
|
await init_db(TORM)
|
|
158
158
|
tgex = await models.Ex.get(name="TgWallet")
|
|
159
|
-
async with FileClient(
|
|
159
|
+
async with FileClient(NET_TOKEN) as b:
|
|
160
160
|
cl: ExClient = tgex.client(b)
|
|
161
161
|
|
|
162
162
|
await cl.set_coins()
|
xync_client/details.py
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import asyncio
|
|
2
|
+
from xync_client.loader import TORM
|
|
3
|
+
from x_model import init_db
|
|
4
|
+
from xync_schema import models
|
|
5
|
+
import re
|
|
6
|
+
from typing import List, Dict
|
|
7
|
+
|
|
8
|
+
details = ["дай(те)?", "номер", "рек(и|визиты)", "карту", "банк(и|а)?", "куда", "(на )?как(ой|ую)", "актуал"]
|
|
9
|
+
|
|
10
|
+
begging = ["вз (лайк|отзыв)", "взаим(о|ный)?", "отзыву?", "like", "лайкни"]
|
|
11
|
+
|
|
12
|
+
greetings = [
|
|
13
|
+
"привет(ствую|ик)?",
|
|
14
|
+
"здаровa?",
|
|
15
|
+
"здоров(а|енько)",
|
|
16
|
+
"здравствуй(те)?",
|
|
17
|
+
"Добрый ?(день|вечер)?",
|
|
18
|
+
"h(i|ello)",
|
|
19
|
+
"сал(ют|лам)",
|
|
20
|
+
"ку",
|
|
21
|
+
"йо",
|
|
22
|
+
"хай",
|
|
23
|
+
"добро пожаловать",
|
|
24
|
+
]
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
async def search_messages(phrases_to_find) -> List[Dict[str, str]]:
|
|
28
|
+
_ = await init_db(TORM, True)
|
|
29
|
+
msgs = await models.Msg.all().values("txt")
|
|
30
|
+
patterns = [re.compile(rf"\b{phrase}\b", re.IGNORECASE) for phrase in phrases_to_find]
|
|
31
|
+
results = []
|
|
32
|
+
for msg in msgs:
|
|
33
|
+
if not msg["txt"]:
|
|
34
|
+
continue
|
|
35
|
+
for pattern in patterns:
|
|
36
|
+
if pattern.search(msg["txt"]):
|
|
37
|
+
results.append({pattern.pattern: msg["txt"]})
|
|
38
|
+
for i in results:
|
|
39
|
+
print(i)
|
|
40
|
+
return results
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
if __name__ == "__main__":
|
|
44
|
+
asyncio.run(search_messages(greetings))
|
xync_client/loader.py
CHANGED
|
@@ -4,7 +4,8 @@ from xync_schema import models
|
|
|
4
4
|
|
|
5
5
|
load_dotenv()
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
NET_TOKEN = env("NET_TOKEN")
|
|
8
|
+
PAY_TOKEN = env("PAY_TOKEN")
|
|
8
9
|
PG_DSN = f"postgres://{env('POSTGRES_USER')}:{env('POSTGRES_PASSWORD')}@{env('POSTGRES_HOST', 'xyncdbs')}:{env('POSTGRES_PORT', 5432)}/{env('POSTGRES_DB', env('POSTGRES_USER'))}"
|
|
9
10
|
TORM = {
|
|
10
11
|
"connections": {"default": PG_DSN},
|
xync_client/pm_unifier.py
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: xync-client
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.155
|
|
4
4
|
Author-email: Mike Artemiev <mixartemev@gmail.com>
|
|
5
5
|
Project-URL: Homepage, https://gitlab.com/XyncNet/client
|
|
6
6
|
Project-URL: Repository, https://gitlab.com/XyncNet/client
|
|
@@ -8,12 +8,17 @@ Requires-Python: >=3.11
|
|
|
8
8
|
Requires-Dist: asynchuobi
|
|
9
9
|
Requires-Dist: bs4
|
|
10
10
|
Requires-Dist: bybit-p2p
|
|
11
|
+
Requires-Dist: google-api-python-client
|
|
12
|
+
Requires-Dist: google-auth-httplib2
|
|
13
|
+
Requires-Dist: google-auth-oauthlib
|
|
11
14
|
Requires-Dist: requests-toolbelt
|
|
12
15
|
Requires-Dist: msgspec
|
|
13
16
|
Requires-Dist: python-binance
|
|
14
17
|
Requires-Dist: pybit
|
|
15
18
|
Requires-Dist: pyotp
|
|
19
|
+
Requires-Dist: pypng
|
|
16
20
|
Requires-Dist: kurigram
|
|
21
|
+
Requires-Dist: payeer-api
|
|
17
22
|
Requires-Dist: playwright
|
|
18
23
|
Requires-Dist: python-dotenv
|
|
19
24
|
Requires-Dist: python-okx
|
|
@@ -1,20 +1,23 @@
|
|
|
1
1
|
xync_client/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
2
|
-
xync_client/
|
|
3
|
-
xync_client/
|
|
4
|
-
xync_client/
|
|
2
|
+
xync_client/details.py,sha256=21itVPCgAtaYRR1H9J9oYudj95gafcFjExUN6QL17OI,1330
|
|
3
|
+
xync_client/loader.py,sha256=hxf8ob50DO7r_qjr2qBoO7IyjkXeHHzVQ63YjXerjoU,600
|
|
4
|
+
xync_client/pm_unifier.py,sha256=DYkFYXzmhVEh8WJvI---3Geas34mZ83cT1O-88D68YQ,6568
|
|
5
|
+
xync_client/Abc/AdLoader.py,sha256=EsrQY_yjhRE2V-4eK2nfq1aAmZPY-FX7x9yKXfp7ILk,14066
|
|
6
|
+
xync_client/Abc/Agent.py,sha256=FjpFWnVj6FB498KCDtGPzCMHdRuOo4ejPvRmOeug7qM,8764
|
|
5
7
|
xync_client/Abc/Asset.py,sha256=hlgyFaU9byr2N2r8Heh-_ICx49SKuKxfRTUA4yQWmEw,454
|
|
6
8
|
xync_client/Abc/Auth.py,sha256=OPQXN7_XYQZP9431ylFksd6JDusbKG8N_1g6CXTZ6yY,1495
|
|
7
9
|
xync_client/Abc/BaseTest.py,sha256=vaAs5Z4HYV7k_C3zQz6JKO75s2hXtVbBI3-0Srkzv5Q,2388
|
|
8
|
-
xync_client/Abc/Ex.py,sha256=
|
|
10
|
+
xync_client/Abc/Ex.py,sha256=s6v_jR_Wqj64RxU6lDd6-IYpmGBcWNASsBqkX3MCoPo,13554
|
|
9
11
|
xync_client/Abc/Exception.py,sha256=Sts7RpP370NBdjaH_cyXDdHtjge8zXNUGWCrKw49Zyk,482
|
|
10
|
-
xync_client/Abc/
|
|
12
|
+
xync_client/Abc/HasAbotUid.py,sha256=LsTHHjMHBauCwJoqgDa9Lx4R6xsDOHfsN4jM539Bpqg,279
|
|
13
|
+
xync_client/Abc/InAgent.py,sha256=8BnZ7VzWLIJY93xnNTqlpY3JdarQkkpRRjDDEALaVAA,303
|
|
11
14
|
xync_client/Abc/Order.py,sha256=7-FGIJu5z9aYi0A_eJV4F-cp_6Mz_izNpefexDQZvHw,2428
|
|
12
|
-
xync_client/Abc/PmAgent.py,sha256=
|
|
13
|
-
xync_client/Abc/xtype.py,sha256=
|
|
15
|
+
xync_client/Abc/PmAgent.py,sha256=Xl-0-KMwcTp_7qIt7NV7-aD22j955tFYFqcHHbmGMTQ,4193
|
|
16
|
+
xync_client/Abc/xtype.py,sha256=H2S5UV67v5Uiy0KC3JI4N142MYQWS_8d9d3N8_WHnVs,3050
|
|
14
17
|
xync_client/Binance/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
15
18
|
xync_client/Binance/binance_async.py,sha256=LP2DZaHwkfsp_4Tjvetb-1ntjQtJfODF0OgZpoPx4KU,2688
|
|
16
19
|
xync_client/Binance/earn_api.py,sha256=hvk0MaVTLszIglQXVhbUjGcaHfbF9Ul7FFXmy94U2so,4411
|
|
17
|
-
xync_client/Binance/ex.py,sha256=
|
|
20
|
+
xync_client/Binance/ex.py,sha256=m9KvSS-FjPe0BH-npkoqaIZ2WyNUsddxEgrbUpFzGsw,5368
|
|
18
21
|
xync_client/Binance/exceptions.py,sha256=An-TK5_SKmGXMdGIs_K59u-0iBpqVgOPfkJqrEELcGQ,847
|
|
19
22
|
xync_client/Binance/sapi.py,sha256=_2eXFtcFIerjvyyyqqSnwZxCqQPiMUdqAXJj7hyOQDQ,9584
|
|
20
23
|
xync_client/Binance/web_c2c.py,sha256=WZ2BVq26ZcdOEcRvRsEKxvwe6x-XQ51b-nEFFAaRNOk,9249
|
|
@@ -23,46 +26,49 @@ xync_client/Binance/etype/pm.py,sha256=rorFX4HDjqDQwJ7Kqx41KOO1JJAi4yWbe4pkGAMmR
|
|
|
23
26
|
xync_client/BingX/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
24
27
|
xync_client/BingX/agent.py,sha256=F-QvzPCwwSvgFe5DafscT-puISbqCw23iTnvbfXlV-k,4318
|
|
25
28
|
xync_client/BingX/base.py,sha256=Zx2H21iZrF94cMOz3imz6djMMNzAaB_iJSzDSP6beXo,739
|
|
26
|
-
xync_client/BingX/ex.py,sha256=
|
|
29
|
+
xync_client/BingX/ex.py,sha256=QzHaEEB_mnOSdMSfvg3Odd9oHortj6wZeIC7fPPFFf4,4275
|
|
27
30
|
xync_client/BingX/req.mjs,sha256=JvLv1KBKsiIVVvRmAFC0RqpsxkBcwqbjk2_PGCubnX0,304
|
|
28
31
|
xync_client/BingX/sign.js,sha256=uTfbKV0Y7bKapOs1AtlT1FmduelwvH2pGqIxCK2z5NY,100086
|
|
29
32
|
xync_client/BingX/etype/ad.py,sha256=aUsZcvhk418d73SaOQlZYYYikHN1zFVYj49d5Xzb6qc,1360
|
|
30
33
|
xync_client/BingX/etype/pm.py,sha256=hKaUHwkZC2ioBv_mNfIIutDkNNhO_ljhsCtSy2uwLAY,128
|
|
31
34
|
xync_client/BitGet/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
32
35
|
xync_client/BitGet/agent.py,sha256=YVs3bDY0OcEJGU7m2A8chzO6PFhWDnQQrA-E6MVkBBg,3030
|
|
33
|
-
xync_client/BitGet/ex.py,sha256=
|
|
36
|
+
xync_client/BitGet/ex.py,sha256=uEvvXuLaJv8o8BFi0bMA3XyBuTfVDWagAjLOHZl-xlE,3765
|
|
34
37
|
xync_client/BitGet/etype/ad.py,sha256=fysSW47wGYjSOPUqY864z857AJz4gjN-nOkI1Jxd27U,1838
|
|
35
38
|
xync_client/BitPapa/ex.py,sha256=U-RRB_RSOtErfRgxOZYWegZ_td_uZO37YKo3Jxchf_w,912
|
|
36
|
-
xync_client/Bybit/InAgent.py,sha256=
|
|
37
|
-
xync_client/Bybit/agent.py,sha256=
|
|
38
|
-
xync_client/Bybit/ex.py,sha256=
|
|
39
|
+
xync_client/Bybit/InAgent.py,sha256=sHpugXfgeAYG68z6cKiTc3QSeGGNGKUSCh5NzXIbAKw,26657
|
|
40
|
+
xync_client/Bybit/agent.py,sha256=ekzuPdZQpKMhONe_tZT54nri2D0aYRMao4UOjIE123A,59456
|
|
41
|
+
xync_client/Bybit/ex.py,sha256=ovbCZ1-36KIo-8FYb8yt_VNE3UZszBoik10Adzrpi2Y,5088
|
|
39
42
|
xync_client/Bybit/order.py,sha256=H4UIb8hxFGnw1hZuSbr0yZ4qeaCOIZOMc6jEst0ycBs,1713
|
|
40
43
|
xync_client/Bybit/web_earn.py,sha256=qjqS10xlFc8r40IhDdPZ0LxA2dFEGbvBGXdsrUUJCMo,3019
|
|
41
44
|
xync_client/Bybit/web_p2p.py,sha256=sAXzK03t6jwDnz4rrvP2IzI0KxfKa7C_5GuzH1HwLuA,11768
|
|
42
45
|
xync_client/Bybit/ws.py,sha256=OQjZHo_MiAH1dlOs3c-aUZBKyqToNTmH560udh6RYDE,1431
|
|
43
|
-
xync_client/Bybit/etype/ad.py,sha256=
|
|
44
|
-
xync_client/Bybit/etype/cred.py,sha256=
|
|
45
|
-
xync_client/Bybit/etype/order.py,sha256=
|
|
46
|
-
xync_client/Gate/ex.py,sha256=
|
|
46
|
+
xync_client/Bybit/etype/ad.py,sha256=r356t4Kmho5Q6BAS0JWyRmsxui427W9O2Y1glUU6l3g,5091
|
|
47
|
+
xync_client/Bybit/etype/cred.py,sha256=CH6xqHh1214bLhHy_K9eVBb1SJVhWBfGb0l3LtBf3fU,1701
|
|
48
|
+
xync_client/Bybit/etype/order.py,sha256=A1LQSqSOIgDu-dfZDhAdSnED_Xty4vXdJEoikRbelH0,8350
|
|
49
|
+
xync_client/Gate/ex.py,sha256=QbhB3u7TWnvVGD-AknB2nay6KZjEXQ-1JT9UacX4sWI,3735
|
|
47
50
|
xync_client/Gate/premarket.py,sha256=IW-CgkmNJePJR2j_NRfULNKTePMX35XlhldqdiO76zY,2138
|
|
48
51
|
xync_client/Gate/etype/ad.py,sha256=-EwtFcOWWvtE6UjaOdsuXWDTCVjAIRK0kSEsqPP4Yls,1296
|
|
49
|
-
xync_client/Gmail/__init__.py,sha256=
|
|
50
|
-
xync_client/Htx/agent.py,sha256=
|
|
52
|
+
xync_client/Gmail/__init__.py,sha256=9JGT8PyzJaOTVvaFV0Gki3Fdo6Bp6m6DnWOPGZJ-eAA,5436
|
|
53
|
+
xync_client/Htx/agent.py,sha256=NqoiK95Zhxle5ZqB0aa1kfIbQo2qEGjkhlzwr4LA9Y0,12573
|
|
51
54
|
xync_client/Htx/earn.py,sha256=jL6eRwytZEMRom_3bFm1DYthi_GFg-E1Mm3ZDXENHSg,2386
|
|
52
|
-
xync_client/Htx/ex.py,sha256=
|
|
55
|
+
xync_client/Htx/ex.py,sha256=66GTk7kitTXrNdwM0xRJTc2sIlLk0VUOAWunYG7iF-s,6051
|
|
53
56
|
xync_client/Htx/etype/__init__.py,sha256=sZIhFOxj2dRQRmMe86-y9vlzOGAPo1qoOi6u1qVxWr0,123
|
|
54
|
-
xync_client/Htx/etype/ad.py,sha256=
|
|
57
|
+
xync_client/Htx/etype/ad.py,sha256=2nTTUgL1utDBVUYiVpDzCowlXFg-94leihFpAAguK8A,2311
|
|
55
58
|
xync_client/Htx/etype/cred.py,sha256=sAOQTsk7BA8zBWUkkwM6vIQcq1LcSK5NLYGrkTdtkQ8,1129
|
|
56
59
|
xync_client/Htx/etype/pm.py,sha256=ILCP9reFRkfuzmtsJDYomJ3WBTU4s_KE-69JksTxwMk,375
|
|
57
60
|
xync_client/Htx/etype/test.py,sha256=uomFicPE1OoA3WXnXOxhsTtGJEpVCQ0CId9D0NI6vto,893
|
|
58
|
-
xync_client/KuCoin/ex.py,sha256=
|
|
61
|
+
xync_client/KuCoin/ex.py,sha256=w-6-aedlC1mYf8LShMv6pOrQzqMR9E6yIyXGUHQP888,3237
|
|
59
62
|
xync_client/KuCoin/web.py,sha256=--OHS0Z29xjfNUjdTL7K0EDmU4dwej95OJ8Sv4PsxLI,920
|
|
60
63
|
xync_client/KuCoin/etype/ad.py,sha256=MTx90Qo2xFKvfgIr4_qMowjwO23HVpFCD6J7INNFDuQ,1223
|
|
61
64
|
xync_client/KuCoin/etype/pm.py,sha256=S50S5fyY5YeWlcPwO66o-GsPcdqgoeXuxvmEIy6Zqvs,130
|
|
62
|
-
xync_client/Mexc/
|
|
65
|
+
xync_client/Mexc/agent.py,sha256=7xhT-UH3aLFAVAfnGUhHqOauNeADNt84ifsT-x3ydq4,2843
|
|
66
|
+
xync_client/Mexc/api.py,sha256=RUbggGalZllKcxTRjXzhW05WTvhXCtdCLETRty-ZcAE,18998
|
|
67
|
+
xync_client/Mexc/ex.py,sha256=JAx07nIzMs8p2PfAmlTpvugis4dlgGjxhQiKlGRS0jY,4416
|
|
63
68
|
xync_client/Mexc/etype/ad.py,sha256=GUgvylx_z64CXNcw0YejUQJHg9F59eRo5v0zU7DRrAM,1434
|
|
69
|
+
xync_client/Mexc/etype/order.py,sha256=LUA4jL5Y1Qmf1C6rU9_PFyg9aCqo60kZbZPAiSrx77U,19001
|
|
64
70
|
xync_client/Mexc/etype/pm.py,sha256=m5kCoMx9IEKUPB-z7YwwymQhASkv2npC4-Z_ePYeeRY,453
|
|
65
|
-
xync_client/Okx/ex.py,sha256=
|
|
71
|
+
xync_client/Okx/ex.py,sha256=WG1NSh7wFMNePV0eXDePWELUBD1ksxE_-Q87QaDXLvE,4542
|
|
66
72
|
xync_client/Okx/etype/ad.py,sha256=rTWMMmDwJK9chBByyihCZcgE5P6c5ti2yR1RbUtev3A,3773
|
|
67
73
|
xync_client/Okx/etype/pm.py,sha256=MaxeyltowP3ESdOjec2HvSfMBwV_mC6w56Xbw-puadc,251
|
|
68
74
|
xync_client/Pms/.gitignore,sha256=uGduC1_B8Wc0RiBzBS1YsrLPClFG2e42r1At9taidMI,6
|
|
@@ -71,14 +77,14 @@ xync_client/Pms/Alfa/state.json,sha256=MKE6vl-JsJO9PNCVqoQgBgYZTgYkHCas7USwl8QFt
|
|
|
71
77
|
xync_client/Pms/MTS/__init__.py,sha256=P_E7W46IZEk8RsEgl7H1xV3JplMT5l9vYQYTYyNbyQ8,2101
|
|
72
78
|
xync_client/Pms/Ozon/__init__.py,sha256=EvQZDSPv0fOT2hNCTP44nXHOIEQvP5bQf_7HVLiZc2I,4123
|
|
73
79
|
xync_client/Pms/Payeer/.gitignore,sha256=sWORdRp8ROppV2CsMEDJ3M_SokrNWCf8b1hlaNs64hg,12
|
|
74
|
-
xync_client/Pms/Payeer/__init__.py,sha256=
|
|
80
|
+
xync_client/Pms/Payeer/__init__.py,sha256=dSQw0JSQGW33sjScyhpOkFK4VsNU-ob1K-ldmZWLmQQ,10020
|
|
75
81
|
xync_client/Pms/Payeer/api.py,sha256=bb8qrlPYyWafel1VR-2nate6xBeRZAVciFJblHygfAs,549
|
|
76
|
-
xync_client/Pms/Payeer/login.py,sha256=
|
|
82
|
+
xync_client/Pms/Payeer/login.py,sha256=GyNwB-GKE_1nlkbZJ0KNI-EnCT0j_S9ogFdn-ufb-zU,3053
|
|
77
83
|
xync_client/Pms/Sber/__init__.py,sha256=dxQfd9ZPhFTc_C4xrwaxrV6p0SijDCLNzBeUv3oQG38,4926
|
|
78
84
|
xync_client/Pms/Sber/utils.py,sha256=gIeJspwvoBbOBt-fjxwW4WDHPoL2Evs8LVufsjrFOfo,1870
|
|
79
85
|
xync_client/Pms/Tinkoff/__init__.py,sha256=ZyLvBEUn-vh-85oPUUDS586AHgvx3c-mkQE3yBQtbw8,5580
|
|
80
|
-
xync_client/Pms/Volet/__init__.py,sha256=
|
|
81
|
-
xync_client/Pms/Volet/api.py,sha256=
|
|
86
|
+
xync_client/Pms/Volet/__init__.py,sha256=mYJEmZwFoNU2B2erv7n8k6RA0PsXU12K7hpyrdEocrk,12088
|
|
87
|
+
xync_client/Pms/Volet/api.py,sha256=6_dH2rzmyyvha3PeoiZdSltiAzKDWn8roSUJOAErX4M,3673
|
|
82
88
|
xync_client/Pms/Volet/pl.py,sha256=l7lvUrpjFoObXPHaseOIAcSbkNqJdpy6OLDutxYJH3U,2451
|
|
83
89
|
xync_client/Pms/Volet/_todo_req/req.mjs,sha256=ut3Jw37rL5lY7SskjZ9f1l0VE33tuP-PZEYUTcJMc2I,817
|
|
84
90
|
xync_client/Pms/Volet/_todo_req/req.py,sha256=mKvdPrb-lkQ98Ws92_oBKu5yqyU8Krxy9XwuIhdsBao,1570
|
|
@@ -88,13 +94,13 @@ xync_client/Pms/Yandex/__init__.py,sha256=2Fu77vDlnGnhesu-OTSsn8lYsnMGO2eDBxWW57
|
|
|
88
94
|
xync_client/TgWallet/agent.py,sha256=2fCB8ea8kEAbMqqcflpZUoHTK6_dQZrxmZbrhXci7nk,22066
|
|
89
95
|
xync_client/TgWallet/asset.py,sha256=pNauwSE7tp5mKQVxH3W-B1yyEV6ZCefttVElOhyqJ1c,433
|
|
90
96
|
xync_client/TgWallet/auth.py,sha256=pfoEiOW3bg8oJqD4hFBlSNnxTTVTzr305YrAREqqfFY,1284
|
|
91
|
-
xync_client/TgWallet/ex.py,sha256=
|
|
97
|
+
xync_client/TgWallet/ex.py,sha256=N6z9Ht_wZXRR_6qSj8HMYg4URGiLvSjkUZZaJlgvt8k,8206
|
|
92
98
|
xync_client/TgWallet/inAgent.py,sha256=vJUQNlQviSnDnhSfEubqwz-DnrYtMnS4qZ2gDjnK3Tc,5441
|
|
93
99
|
xync_client/TgWallet/order.py,sha256=BOmBx5WWfJv0-_-A8DcR-Xd8utqO_VTmSqSegm0cteQ,3818
|
|
94
100
|
xync_client/TgWallet/pyd.py,sha256=Ys3E8b3RLuyQ26frWT0F0BorkNxVpxnd18tY4Gp9dik,5636
|
|
95
101
|
xync_client/TgWallet/pyro.py,sha256=2K7QWdo48k4MbbgQt90gdz_HiPck69Njm4xaMjIVgoo,1440
|
|
96
102
|
xync_client/TgWallet/web.py,sha256=kDcv9SKKQPe91mw1qJBpbuyKYCAmZdfdHJylHumLBVU,1608
|
|
97
|
-
xync_client-0.0.
|
|
98
|
-
xync_client-0.0.
|
|
99
|
-
xync_client-0.0.
|
|
100
|
-
xync_client-0.0.
|
|
103
|
+
xync_client-0.0.155.dist-info/METADATA,sha256=PizI21QJhBoGXcmRFqqmjbcilHvhK9uwXdD5zmz1t6k,1149
|
|
104
|
+
xync_client-0.0.155.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
105
|
+
xync_client-0.0.155.dist-info/top_level.txt,sha256=bmYEVIIrD3v7yFwH-X15pEfRvzhuAdfsAZ2igvNI4O8,12
|
|
106
|
+
xync_client-0.0.155.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|