multi-wallet-plugin/multi-wallet.py

228 lines
6.7 KiB
Python

import json
import account
import os
import time
# Plugin Data
info = {
"name": "Multi Wallet Functions",
"description": "Access and manage multiple wallets at once",
"version": "1.0",
"author": "Nathan.Woodburn/"
}
# Functions
functions = {
"balance": {
"name": "Wallet Balances",
"type": "default",
"description": "List balances of all wallets",
"params": {},
"returns": {
"result":
{
"name": "Result",
"type": "list"
}
}
},
"domains": {
"name": "Domains",
"type": "default",
"description": "List number of domains in each wallet",
"params": {},
"returns": {
"result":
{
"name": "Result",
"type": "list"
}
}
},
"expiring": {
"name": "Expiring Domains",
"type": "default",
"description": "List domains that are expiring and their wallet",
"params": {
"days": {
"name": "Days until expiry (default 30)",
"type": "number"
}
},
"returns": {
"result":
{
"name": "Result",
"type": "text"
}
}
},
"export": {
"name": "Export Domains",
"type": "default",
"description": "Export domains to a file",
"params": {
},
"returns": {
"result":
{
"name": "result.csv",
"type": "file"
}
}
},
"dash": {
"name": "Dashboard widget",
"type": "dashboard",
"description": "List total balance of all wallets on your dashboard",
"params": {},
"returns": {
"result":
{
"name": "Total Holdings",
"type": "text"
}
}
},
"enable": {
"name": "Enable Dashboard widget",
"type": "default",
"description": "Enable the dashboard widget",
"params": {},
"returns": {
"result":
{
"name": "Result",
"type": "text"
}
}
},
"disable": {
"name": "Disable Dashboard widget",
"type": "default",
"description": "Disable the dashboard widget",
"params": {},
"returns": {
"result":
{
"name": "Result",
"type": "text"
}
}
}
}
if not os.path.exists("user_data/multiwallet.json"):
with open("user_data/multiwallet.json", "w") as f:
json.dump({
"enabled": False,
"lastUpdate": 0
}, f)
def balance(params, authentication):
wallets = account.listWallets()
balances = []
total = 0
available = 0
for wallet in wallets:
info = account.getBalance(wallet)
balances.append(f"{wallet}: Available: {info['available']:,.2f} HNS, Total: {info['total']:,.2f} HNS")
total += info['total']
available += info['available']
balances.append(f"Total: Available: {available:,.2f} HNS, Total: {total:,.2f} HNS")
return {"result": balances}
def expiring(params, authentication):
days = params['days']
if days == None or days == '':
days = 30
else:
days = int(days)
wallets = account.listWallets()
expiring = ''
for wallet in wallets:
walletExpiring = []
domains = account.getDomains(wallet)
for domain in domains:
if 'stats' in domain and 'daysUntilExpire' in domain['stats']:
if domain['stats']['daysUntilExpire'] <= days:
walletExpiring.append({"domain": domain['name'], "wallet": wallet, "days": domain['stats']['daysUntilExpire']})
if len(walletExpiring) > 0:
expiring += f"<div class='row'><div class='col-md-12'><h3>{wallet} Expiring Domains</h3><table class='table table-striped'><thead><tr><th>Domain</th><th>Days Until Expiration</th></tr></thead><tbody>"
for domain in walletExpiring:
expiring += f"<tr><td>{domain['domain']}</td><td>{domain['days']}</td></tr>"
expiring += "</tbody></table></div></div>"
return {"result": expiring}
def export(params, authentication):
wallets = account.listWallets()
result = "name,expiry,value,wallet"
for wallet in wallets:
domains = account.getDomains(wallet)
for domain in domains:
if 'stats' in domain and 'renewalPeriodEnd' in domain['stats']:
result += f"\n{domain['name']},{domain['stats']['renewalPeriodEnd']},{domain['value']/1000000},{wallet}"
else:
result += f"\n{domain['name']},N/A,{domain['value']/1000000},{wallet}"
return {"result": result}
def dash(params, authentication):
with open("user_data/multiwallet.json", "r") as f:
multiwallet = json.load(f)
if multiwallet['enabled'] == False:
return {"result": None}
# Check time
currentTime = int(time.time())
if currentTime - multiwallet['lastUpdate'] < 60*10:
return {"result": f"Available: {multiwallet['total']['available']:,.2f} HNS<br>Total: {multiwallet['total']['total']:,.2f} HNS"}
wallets = account.listWallets()
total = 0
available = 0
for wallet in wallets:
info = account.getBalance(wallet)
total += info['total']
available += info['available']
multiwallet['total'] = {
"available": available,
"total": total
}
multiwallet['lastUpdate'] = currentTime
with open("user_data/multiwallet.json", "w") as f:
json.dump(multiwallet, f)
return {"result": f"Available: {available:,.2f} HNS<br>Total: {total:,.2f} HNS"}
def domains(params, authentication):
wallets = account.listWallets()
domains = []
total = 0
for wallet in wallets:
numDomains = len(account.getDomains(wallet))
domains.append(f"{wallet}: {numDomains}")
total += numDomains
domains.append(f"Total: {total}")
return {"result": domains}
def enable(params, authentication):
with open("user_data/multiwallet.json", "r") as f:
multiwallet = json.load(f)
multiwallet['enabled'] = True
with open("user_data/multiwallet.json", "w") as f:
json.dump(multiwallet, f)
return {"result": "Success"}
def disable(params, authentication):
with open("user_data/multiwallet.json", "r") as f:
multiwallet = json.load(f)
multiwallet['enabled'] = False
with open("user_data/multiwallet.json", "w") as f:
json.dump(multiwallet, f)
return {"result": "Success"}