diff --git a/crypto/sol/app.py b/crypto/sol/app.py index 62a4e82..59d008c 100644 --- a/crypto/sol/app.py +++ b/crypto/sol/app.py @@ -210,14 +210,16 @@ async def get_sol_price() -> float: async def convert_balances_to_currency(balances, token_prices, sol_price): converted_balances = {} - for token, amount in balances.items(): - if token == 'SOL': - converted_balances[token] = amount * sol_price - elif token in token_prices: - converted_balances[token] = amount * token_prices[token] + for address, info in balances.items(): + converted_balance = info.copy() # Create a copy of the original info + if info['name'] == 'SOL': + converted_balance['value'] = info['amount'] * sol_price + elif address in token_prices: + converted_balance['value'] = info['amount'] * token_prices[address] else: - converted_balances[token] = None # Price not available - logging.warning(f"Price not available for token {token}") + converted_balance['value'] = None # Price not available + logging.warning(f"Price not available for token {info['name']} ({address})") + converted_balances[address] = converted_balance return converted_balances @@ -374,50 +376,6 @@ async def list_initial_wallet_states(): logging.info(message) await send_telegram_message(message) - global TOKEN_ADDRESSES, FOLLOWED_WALLET_VALUE, YOUR_WALLET_VALUE - - followed_wallet_balances = await get_wallet_balances(FOLLOWED_WALLET) - your_wallet_balances = await get_wallet_balances(YOUR_WALLET) - - all_token_addresses = list(set(followed_wallet_balances.keys()) | set(your_wallet_balances.keys())) - token_prices = await get_token_prices(all_token_addresses) - sol_price = await get_sol_price() - - followed_converted_balances = await convert_balances_to_currency(followed_wallet_balances, token_prices, sol_price) - your_converted_balances = await convert_balances_to_currency(your_wallet_balances, token_prices, sol_price) - - TOKEN_ADDRESSES = {token: amount for token, amount in {**followed_converted_balances, **your_converted_balances}.items() if amount is not None and amount > 0} - logging.info(f"Monitoring balances for tokens: {TOKEN_ADDRESSES.keys()}") - - followed_wallet_state = [] - FOLLOWED_WALLET_VALUE = 0 - for token, amount in followed_converted_balances.items(): - if amount is not None and amount > 0: - followed_wallet_state.append(f"{token}: {amount:.2f} {DISPLAY_CURRENCY}") - FOLLOWED_WALLET_VALUE += amount - - your_wallet_state = [] - YOUR_WALLET_VALUE = 0 - for token, amount in your_converted_balances.items(): - if amount is not None and amount > 0: - your_wallet_state.append(f"{token}: {amount:.2f} {DISPLAY_CURRENCY}") - YOUR_WALLET_VALUE += amount - - message = ( - f"Initial Wallet States (All balances in {DISPLAY_CURRENCY}):\n\n" - f"Followed Wallet ({FOLLOWED_WALLET}):\n" - f"{chr(10).join(followed_wallet_state)}\n" - f"Total Value: {FOLLOWED_WALLET_VALUE:.2f} {DISPLAY_CURRENCY}\n\n" - f"Your Wallet ({YOUR_WALLET}):\n" - f"{chr(10).join(your_wallet_state)}\n" - f"Total Value: {YOUR_WALLET_VALUE:.2f} {DISPLAY_CURRENCY}\n\n" - f"Monitored Tokens:\n" - f"{', '.join(TOKEN_ADDRESSES.keys())}" - ) - - logging.info(message) - await send_telegram_message(message) - async def get_transaction_details_rpc(tx_signature, readfromDump=False): url = SOLANA_HTTP_URL @@ -574,7 +532,7 @@ async def parse_swap_logs(logs): async def follow_move(move): your_balances = await get_wallet_balances(YOUR_WALLET) - your_balance_info = your_balances.get(move['token_in']) + your_balance_info = next((balance for balance in your_balances.values() if balance['address'] == move['token_in']), None) if not your_balance_info: message = f"Move Failed:\nNo balance found for token {move['token_in']}"