# Twisted/Klein imports from twisted.logger import Logger # Other library imports from json import dumps, loads from simplejson.errors import JSONDecodeError import requests from forex_python.converter import CurrencyRates from agoradesk_py.agoradesk import AgoraDesk # Project imports from settings import settings class Agora(object): """ AgoraDesk API handler. """ def __init__(self, irc): self.log = Logger("agora") self.agora = AgoraDesk(settings.Agora.Token) self.cr = CurrencyRates() self.irc = irc def try_json(self, data): try: parsed = data.json() return parsed except JSONDecodeError: self.log.error("Cannot parse {content}", content=data.content) return str(data.content) def dashboard(self): rtrn = self.agora.dashboard() return rtrn def get_messages(self, contact_id): headers = {"Authorization": settings.Agora.Token, "Content-Type": "application/json", "User-Agent": "Agora-Py"} r = requests.get(f"{settings.Agora.Base}/contact_messages/{contact_id}", headers=headers) parsed = self.try_json(r) return parsed def get_ads(self): headers = {"Authorization": settings.Agora.Token, "Content-Type": "application/json", "User-Agent": "Agora-Py"} r = requests.get(f"{settings.Agora.Base}/ads", headers=headers) parsed = self.try_json(r) return parsed def get_rates_all(self): rates = self.cr.get_rates("USD") return rates def create_ad(self, countrycode, currency): headers = {"Authorization": settings.Agora.Token, "Content-Type": "application/json"} print(dumps(headers)) # data = { # "price_equation": f"coingeckoxmrusd*{settings.Agora.Margin}", # "countrycode": countrycode, # "currency": currency, # "msg": settings.Agora.Ad, # "track_max_amount": "false", # "online_provider": "REVOLUT", # "trade_type": "ONLINE_SELL", # "min_amount": price * float(settings.Agora.Margin), # # "max_amount": maxAmount, # "asset": "XMR", # "payment_method_detail": settings.Agora.PaymentMethodDetail, # "require_feedback_score": 0, # "account_info": settings.Agora.PaymentDetails, # } priceformula = f"coingeckoxmrusdusd{currency.lower()}*{settings.Agora.Margin}" rates = self.get_rates_all() minamount = rates[currency] * float(settings.Agora.MinUSD) maxamount = rates[currency] * float(settings.Agora.MaxUSD) data = { "price_equation": priceformula, "countrycode": countrycode, "currency": currency, # "account_info": "My WeChat ID is XXXXX.", "msg": settings.Agora.Ad, # "account_info": settings.Agora.PaymentDetails, "track_max_amount": 0, "online_provider": "REVOLUT", "trade_type": "ONLINE_SELL", "min_amount": minamount, "max_amount": maxamount, "asset": "XMR", "payment_method_details": settings.Agora.PaymentMethodDetails, # "firsttimelimit_xmr": "0.5", # "require_feedback_score": 0, "require_trusted_by_advertiser": 0, "verified_email_required": 0, } print(dumps(data)) r = requests.post(f"{settings.Agora.Base}/ad-create", json=dumps(data), headers=headers) # self.log.info(str(r.content)) parsed = self.try_json(r) return parsed def dist_countries(self): for currency, countrycode in loads(settings.Agora.DistList): rtrn = self.create_ad(countrycode, currency) if not rtrn: return False return True