# Other library imports from json import dumps class IRCCommands(object): class trades(object): name = "trades" authed = True @staticmethod def run(cmd, spl, length, authed, msg, agora, revolut, tx): """ Get details of open trades and post on IRC. """ trades = agora.dashboard(send_irc=False, formatted=True) if trades is False: msg("Error getting trades.") return if not trades: msg("No open trades.") return for trade_id in trades: msg(trade_id) class create(object): name = "create" authed = True @staticmethod def run(cmd, spl, length, authed, msg, agora, revolut, tx): """ Post an ad on AgoraDesk with the given country and currency code. """ posted = agora.create_ad(spl[1], spl[2]) if posted["success"]: msg(f"{posted['response']['data']['message']}: {posted['response']['data']['ad_id']}") else: msg(posted["response"]["data"]["message"]) class messages(object): name = "messages" authed = True @staticmethod def run(cmd, spl, length, authed, msg, agora, revolut, tx): """ Get all messages for all open trades or a given trade. """ if length == 1: messages = agora.get_all_messages(send_irc=False) if messages is False: msg("Error getting messages.") return if not messages: msg("No messages.") return for message_id in messages: for message in messages[message_id]: msg(f"{message_id}: {message}") msg("---") elif length == 2: messages = agora.get_messages(spl[1], send_irc=False) if not messages: msg("No messages.") for message in messages: msg(f"{spl[1]}: {message}") class dist(object): name = "dist" authed = True @staticmethod def run(cmd, spl, length, authed, msg, agora, revolut, tx): # Distribute out our ad to all countries in the config rtrn = agora.dist_countries() msg(dumps(rtrn)) class find(object): name = "find" authed = True @staticmethod def run(cmd, spl, length, authed, msg, agora, revolut, tx): """ Find a transaction received by Revolut with the given reference and amount. """ try: int(spl[2]) except ValueError: msg("Amount is not an integer.") rtrn = tx.find_tx(spl[1], spl[2]) if rtrn == "AMOUNT_INVALID": msg("Reference found but amount invalid.") elif not rtrn: msg("Reference not found.") else: return dumps(rtrn) class accounts(object): name = "accounts" authed = True @staticmethod def run(cmd, spl, length, authed, msg, agora, revolut, tx): accounts = revolut.accounts() accounts_posted = 0 if accounts is None: msg("Error getting accounts.") for account in accounts: if account["balance"] > 0: if "name" in account: name = account["name"] else: name = "not_set" msg(f"{name} {account['currency']}: {account['balance']}") accounts_posted += 1 if accounts_posted == 0: msg("No accounts with balances.") class total(object): name = "total" authed = True @staticmethod def run(cmd, spl, length, authed, msg, agora, revolut, tx): total_usd = revolut.get_total_usd() if total_usd is False: msg("Error getting total balance.") msg(f"Total: {round(total_usd, 2)}USD") class ping(object): name = "ping" authed = False @staticmethod def run(cmd, spl, length, authed, msg): msg("Pong!") class release_url(object): name = "release_url" authed = True @staticmethod def run(cmd, spl, length, authed, msg, agora, revolut, tx): trades = agora.dashboard_release_urls() if not trades: msg("No trades.") for trade in trades: msg(trade) class message(object): name = "msg" authed = True @staticmethod def run(cmd, spl, length, authed, msg, agora, revolut, tx): if length > 2: full_msg = " ".join(spl[2:]) rtrn = agora.agora.contact_message_post(spl[1], full_msg) msg(f"Sent {full_msg} to {spl[1]}: {rtrn}") class refs(object): name = "refs" authed = True @staticmethod def run(cmd, spl, length, authed, msg, agora, revolut, tx): msg(f"References: {', '.join(tx.get_refs())}") class ref(object): name = "ref" authed = True @staticmethod def run(cmd, spl, length, authed, msg, agora, revolut, tx): if length == 2: ref_data = tx.get_ref(spl[1]) if not ref_data: msg("No such reference: {spl[1]}") msg(f"{spl[1]}: {dumps(ref_data)}") class delete(object): name = "del" authed = True @staticmethod def run(cmd, spl, length, authed, msg, agora, revolut, tx): if length == 2: ref_data = tx.get_ref(spl[1]) if not ref_data: msg(f"No such reference: {spl[1]}") return tx.del_ref(spl[1]) msg(f"Deleted reference: {spl[1]}")