From 711da8630c79f97382c6b848c406ce0f662d05b5 Mon Sep 17 00:00:00 2001 From: gsd Date: Sun, 23 Apr 2023 18:48:40 +0300 Subject: [PATCH] =?UTF-8?q?=D0=B4=D0=B5=D0=BD=D1=8C=D0=B3=D0=B8=20=D0=BC?= =?UTF-8?q?=D0=BD=D0=B5=20=D0=BD=D0=B5=D1=81=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend_integration.py | 7 ++++++- tradebot.facti13.external.py | 39 ++++++++++++++++++++++++++++-------- 2 files changed, 37 insertions(+), 9 deletions(-) diff --git a/backend_integration.py b/backend_integration.py index b36d4d9..abdafcf 100644 --- a/backend_integration.py +++ b/backend_integration.py @@ -54,4 +54,9 @@ class BackendClient: error(f"[S64:{steamid.id64}] Backend returned error") traceback.print_exc() return False - return False \ No newline at end of file + return False + + async def prices(self): + async with aiohttp.ClientSession() as session: + async with session.get(self.vip_url) as response: + return await response.json() \ No newline at end of file diff --git a/tradebot.facti13.external.py b/tradebot.facti13.external.py index 9a1d3f4..ae09bb5 100644 --- a/tradebot.facti13.external.py +++ b/tradebot.facti13.external.py @@ -15,6 +15,19 @@ class TradeChecker: WEEK = 604800 DAY = 86400 + prices_map = {} + + def __init__(self, prices): + for price in prices: + if price["money_price"] == 0: + continue + self.prices_map[price['period']] = int(price["item_price"].split()[0]) + if not self.prices_map: + error("cannot parse prices") + sys.exit(228) + else: + info(f"{self.prices_map}") + def mannco_key(self, items): class_id = 101785959 instance_id = 11040578 @@ -40,11 +53,14 @@ class TradeChecker: metal_count = self.pure_metal(items) final_amount = 0 #print(key_count, ",", metal_count) - final_amount += key_count * self.MONTH - if(metal_count >= 20): - final_amount += (metal_count / 20) * self.WEEK - elif(metal_count >= 5): - final_amount += (metal_count / 5) * self.DAY + #ключ всегда месяц ибо стабильная единица + if(key_count >= self.prices_map["month"]): + final_amount += key_count * self.MONTH + + if(metal_count >= self.prices_map["week"]): + final_amount += (metal_count / self.prices_map["week"]) * self.WEEK + elif(metal_count >= self.prices_map["day"]): + final_amount += (metal_count / self.prices_map["day"]) * self.DAY return final_amount @@ -56,12 +72,14 @@ async def send_msg(trade: SteamPy.TradeOffer, message: str): error(f"[{trade.id}] Cannot send message") class SteamClient(SteamPy.Client): - items = TradeChecker() + items = None trade_tracker = {} backend : BackendClient = None async def on_ready(self): info(f"Logged in as: {self.user}") + prices = await self.backend.prices() + self.items = TradeChecker(prices) async def on_connect(self): await self.backend.pulse() @@ -73,6 +91,11 @@ class SteamClient(SteamPy.Client): #Проверка шмота на леквид async def on_trade_receive(self, trade: SteamPy.TradeOffer): + if not self.items: + info("prices is not setup") + prices = await self.backend.prices() + self.items = TradeChecker(prices) + info(f"[{trade.id}] Incoming trade from [{trade.partner.id}] {trade.partner.name}") if trade.state != SteamPy.enums.TradeOfferState.Active: @@ -85,8 +108,8 @@ class SteamClient(SteamPy.Client): await trade.decline() return - if len(trade.items_to_receive) > 25: - warning(f"[{trade.id}] cannot accept trade with more 25 items") + if len(trade.items_to_receive) > 50: + warning(f"[{trade.id}] cannot accept trade with more 50 items") await trade.decline() return