Browse Source

Working on scheduler

JoostSijm 3 years ago
parent
commit
4f01a69558

+ 5 - 6
src/rival_regions_marketbot/__main__.py

@@ -3,7 +3,8 @@
 import time
 from datetime import datetime
 
-from rival_regions_marketbot import LOGGER, marketbot
+from rival_regions_marketbot import LOGGER
+from rival_regions_marketbot.marketbot import MarketBot 
 
 
 while True:
@@ -71,12 +72,10 @@ while True:
         1,
     ]
 
-    LOGGER.info("Looping through resources")
+    LOGGER.info("Looping through items")
     for index, item in enumerate(items):
-        LOGGER.info("Buying: %s", item)
-        marketbot.buy(items[index], buy_price[index])
-        LOGGER.info("Selling: %s", item)
-        marketbot.sell(items[index], sell_price[index])
+        LOGGER.info("Item: %s", item)
+        market_bot = MarketBot(item, sell_price[index], buy_price[index])
 
     SECONDS = 301
     LOGGER.info(

+ 55 - 18
src/rival_regions_marketbot/marketbot.py

@@ -1,10 +1,11 @@
-"""Sell bot"""
+"""Market bot module"""
 
+from datetime import datetime, timedelta
 
-from rival_regions_wrapper import util
 from rival_regions_wrapper.wrapper import Storage
 
-from rival_regions_marketbot import RR_WRAPPER, PROFILE_ID, wrapper
+from rival_regions_marketbot import RR_WRAPPER, PROFILE_ID, SCHEDULER, wrapper
+
 
 MARKET_MAX = {
     "helium-3": 153600,
@@ -28,31 +29,67 @@ MARKET_MAX = {
 }
 
 
-def sell(item, minimum_price):
-    if minimum_price >= 500000000:
-        return
+class MarketBot:
+    """Market bot class"""
+
+    item = None
+    minimum_sell_price = None
+    maximum_buy_price = None
+
+    def __init__(self, item, minimum_sell_price, maximum_buy_price):
+        self.item = item
+        self.miniumum_sell_price = minimum_sell_price
+        self.maximum_buy_price = maximum_buy_price
+
+    def start_jobs(self):
+        """Start jobs"""
+        SCHEDULER.add_job(
+            buy,
+            "date",
+            run_date=datetime.now() + timedelta(minutes=5),
+            id="buy_{}".format(self.item),
+            args=[self.item, self.minimum_sell_price],
+        )
+        SCHEDULER.add_job(
+            sell,
+            "date",
+            run_date=datetime.now() + timedelta(minutes=5),
+            id="sell_{}".format(self.item),
+            args=[self.item, self.minimum_sell_price],
+        )
+
+def sell(item, minimum_sell_price):
+    """Market bot sell method"""
     market = wrapper.Market(RR_WRAPPER)
     first_offer = market.first_offer(item)
     if first_offer["profile_id"] != PROFILE_ID:
         # op_markt = market.offer_by(item, PROFILE_ID)
         # totaal = Storage(RR_WRAPPER).info()[item]
         # totaal = opslag + op_markt
-        totaal = min(Storage(RR_WRAPPER).info()[item], MARKET_MAX[item])
-        price = max(minimum_price, (first_offer["price"] * 100 - 10) / 100)
+        totaal = min(
+            Storage(RR_WRAPPER).info()[item], MARKET_MAX[item]
+        )
+        price = max(
+            minimum_sell_price,
+            (first_offer["price"] * 100 - 10) / 100,
+        )
         # if totaal == op_markt and own_price == minimum_price:
         if totaal != 0:
-            item = util.ITEM_KEYS[item]
-            RR_WRAPPER.post("storage/sell/{}".format(item))
-            RR_WRAPPER.post(
-                "storage/newsell/{}/{}/{}".format(item, totaal, price)
+            market.sell(
+                {
+                    "item": item,
+                    "amount": totaal,
+                    "price": price,
+                }
             )
 
-
-def buy(item, maximum_price):
-    """Buy item based on maximum price"""
-    if maximum_price <= 1:
-        return
+def buy(item, maximum_buy_price):
+    """Market bot buy method"""
     market = wrapper.Market(RR_WRAPPER)
     offer = market.first_offer(item)
-    if offer["price"] <= maximum_price:
+    if offer["price"] <= maximum_buy_price:
         market.buy(offer)
+
+if __name__ == "__main__":
+    sell.__module__ = "marketbot"
+    buy.__module__ = "marketbot"

+ 13 - 2
src/rival_regions_marketbot/wrapper.py

@@ -3,8 +3,7 @@
 import re
 
 from bs4 import BeautifulSoup
-from rival_regions_wrapper import util
-from rival_regions_wrapper import wrapper
+from rival_regions_wrapper import util, wrapper
 
 
 class Profile(wrapper.Profile):
@@ -100,6 +99,7 @@ class Market(wrapper.Market):
         return price
 
     def first_offer(self, item_id):
+        """Offer with the lowest price"""
         if isinstance(item_id, str) and item_id in util.ITEM_KEYS:
             item_id = util.ITEM_KEYS[item_id]
         path = "storage/listed/{}".format(item_id)
@@ -122,3 +122,14 @@ class Market(wrapper.Market):
                 offer["item_id"], offer["profile_id"], amount, offer["price"]
             )
         )
+
+    def sell(self, offer):
+        """Sell item"""
+        if isinstance(offer["item"], str):
+            offer["item"] = util.ITEM_KEYS[offer["item"]]
+        # self.middleware.post("storage/sell/{}".format(item))
+        self.middleware.post(
+            "storage/newsell/{}/{}/{}".format(
+                offer["item"], offer["amount"], offer["price"]
+            )
+        )