Finish implementation and tests for the cheat system #3
|
@ -408,3 +408,15 @@ class IRCCommands(object):
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def run(cmd, spl, length, authed, msg, agora, revolut, tx):
|
def run(cmd, spl, length, authed, msg, agora, revolut, tx):
|
||||||
agora.withdraw_funds()
|
agora.withdraw_funds()
|
||||||
|
|
||||||
|
class shuffle(object):
|
||||||
|
name = "shuffle"
|
||||||
|
authed = True
|
||||||
|
helptext = "Convert all currencies in Revolut to supplied one. Usage: shuffle <currency>"
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def run(cmd, spl, length, authed, msg, agora, revolut, tx):
|
||||||
|
if length == 2:
|
||||||
|
currency = spl[1]
|
||||||
|
rtrn = revolut.shuffle(currency)
|
||||||
|
msg(dumps(rtrn))
|
||||||
|
|
|
@ -8,6 +8,8 @@ import requests
|
||||||
from cryptography.hazmat.primitives import serialization
|
from cryptography.hazmat.primitives import serialization
|
||||||
from cryptography.hazmat.backends import default_backend
|
from cryptography.hazmat.backends import default_backend
|
||||||
import jwt
|
import jwt
|
||||||
|
from random import choices
|
||||||
|
from string import ascii_uppercase
|
||||||
|
|
||||||
# Project imports
|
# Project imports
|
||||||
from settings import settings
|
from settings import settings
|
||||||
|
@ -199,3 +201,53 @@ class Revolut(object):
|
||||||
else:
|
else:
|
||||||
total_usd += account["balance"] / rates[account["currency"]]
|
total_usd += account["balance"] / rates[account["currency"]]
|
||||||
return total_usd
|
return total_usd
|
||||||
|
|
||||||
|
def convert(self, from_account_id, from_currency, to_account_id, to_currency, sell_amount):
|
||||||
|
"""
|
||||||
|
Convert currency.
|
||||||
|
:param sell_currency: currency to sell
|
||||||
|
:param buy_currency: currency to buy
|
||||||
|
:param sell_amount: amount of currency to sell
|
||||||
|
"""
|
||||||
|
reference = "".join(choices(ascii_uppercase, k=5))
|
||||||
|
headers = {"Authorization": f"Bearer {self.token}"}
|
||||||
|
data = {
|
||||||
|
"from": {
|
||||||
|
"account_id": from_account_id,
|
||||||
|
"currency": from_currency,
|
||||||
|
"amount": sell_amount,
|
||||||
|
},
|
||||||
|
"to": {
|
||||||
|
"account_id": to_account_id,
|
||||||
|
"currency": to_currency,
|
||||||
|
},
|
||||||
|
"request_id": reference,
|
||||||
|
}
|
||||||
|
r = requests.post(f"{settings.Revolut.Base}/exchange", headers=headers, data=dumps(data))
|
||||||
|
if r.status_code == 200:
|
||||||
|
return r.json()
|
||||||
|
else:
|
||||||
|
self.log.error("Error converting balance: {content}", content=r.content)
|
||||||
|
return False
|
||||||
|
|
||||||
|
def shuffle(self, currency):
|
||||||
|
"""
|
||||||
|
Exchange money in all accounts to the given currency.
|
||||||
|
:param currency: the currency to convert all our funds to
|
||||||
|
"""
|
||||||
|
accounts = self.accounts()
|
||||||
|
|
||||||
|
# Find given currency account
|
||||||
|
for account in accounts:
|
||||||
|
if account["currency"] == currency:
|
||||||
|
if account["state"] == "active" and account["public"] is True:
|
||||||
|
dest_account = account
|
||||||
|
# Remove this account
|
||||||
|
accounts.remove(dest_account)
|
||||||
|
break
|
||||||
|
|
||||||
|
for account in accounts:
|
||||||
|
if account["balance"] > 0:
|
||||||
|
self.convert(account["id"], account["currency"], dest_account["id"], dest_account["currency"], account["balance"])
|
||||||
|
|
||||||
|
return True
|
||||||
|
|
Loading…
Reference in New Issue