Reorganize all large menus into Rich categorized columns

Convert 7 ANSI menus to Rich Columns with colored category headers:

PyBlock.py (4 menus):
- Lightning Local (21 items): Invoices/Channels/Node/Chat
- Lightning Remote (13 items): Invoices/Channels/Node/LNBits
- API Menu (20 items): Lightning APIs/Payment/Data/Tools
- API Menu OnchainOnly (22 items): same + PhoenixD/Luxor

SPV/spvblock.py (3 menus):
- Bitcoin Core (19 items): Blockchain/Monitoring/Tools/Mining
- Lightning (20 items): Payments/Channels/Node/Tools
- API Menu (24 items): Lightning APIs/Payment/Data/Tools

Each category uses distinct colors (orange/cyan/green/yellow/magenta)
for quick visual scanning. All keybindings preserved.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
GaltRanch 2026-04-01 16:14:58 -03:00
parent a4b3b231a9
commit 3062a344ec
2 changed files with 492 additions and 174 deletions

View file

@ -2268,35 +2268,81 @@ def lightningnetworkLOCAL():
lsd0 = str(lsd)
alias = json.loads(lsd0)
print("""\t\t
from rich.columns import Columns
from rich.text import Text as RText
header = """\t\t
\033[1;37;40m{}\033[0;37;40m: \033[1;31;40mPyBLOCK\033[0;37;40m
\033[1;37;40mNode\033[0;37;40m: \033[1;33;40m{}\033[0;37;40m
\033[1;37;40mBlock\033[0;37;40m: \033[1;32;40m{}\033[0;37;40m
\033[1;37;40mVersion\033[0;37;40m: {}
\033[1;37;40mVersion\033[0;37;40m: {}""".format(n, alias['alias'], d['blocks'], version)
print(header)
\u001b[33;1mA.\033[0;37;40m Lncli Console
\u001b[33;1mB.\033[0;37;40m New Invoice
\u001b[33;1mC.\033[0;37;40m Pay Invoice
\u001b[33;1mD.\033[0;37;40m Make a KeySend Payment
\u001b[33;1mE.\033[0;37;40m New Bitcoin Address
\u001b[33;1mF.\033[0;37;40m List Invoices
\u001b[33;1mG.\033[0;37;40m Channel Balance
\u001b[33;1mH.\033[0;37;40m Show Channels
\u001b[33;1mI.\033[0;37;40m Rebalance Channel
\u001b[33;1mJ.\033[0;37;40m Show Peers
\u001b[33;1mK.\033[0;37;40m Connect Peers
\u001b[33;1mL.\033[0;37;40m Onchain Balance
\u001b[33;1mM.\033[0;37;40m List Onchain Transactions
\u001b[33;1mN.\033[0;37;40m Get Node Info
\u001b[33;1mO.\033[0;37;40m Get Network Information
\u001b[33;1mP.\033[0;37;40m PyChat
\u001b[33;1mZ.\033[0;37;40m Stats
\u001b[33;1mT.\033[0;37;40m Ranking
\u001b[33;1mQ.\033[0;37;40m LNBits List LNURL \033[3;35;40m{lnbitspaid}\033[0;37;40m
\u001b[33;1mS.\033[0;37;40m LNBits Create LNURL \033[3;35;40m{lnbitspaid}\033[0;37;40m
\u001b[33;1mEnter.\033[0;37;40m Return
\n\n\x1b[?25h""".format(n, alias['alias'], d['blocks'], version, lnbitspaid = "UNLOCKED" if os.path.isfile("lnbitSN.conf") else "LOCKED"))
lightningnetworkLOCALcontrol(input("\033[1;32;40mSelect option: \033[0;37;40m"))
lnbitspaid = "UNLOCKED" if os.path.isfile("lnbitSN.conf") else "LOCKED"
# Invoices section
col1 = RText()
col1.append(" INVOICES\n", style="bold yellow underline")
col1.append(" A. ", style="bold yellow")
col1.append("Lncli Console\n", style="white")
col1.append(" B. ", style="bold yellow")
col1.append("New Invoice\n", style="white")
col1.append(" C. ", style="bold yellow")
col1.append("Pay Invoice\n", style="white")
col1.append(" D. ", style="bold yellow")
col1.append("Make a KeySend Payment\n", style="white")
col1.append(" F. ", style="bold yellow")
col1.append("List Invoices\n", style="white")
# Channels section
col2 = RText()
col2.append(" CHANNELS\n", style="bold cyan underline")
col2.append(" G. ", style="bold cyan")
col2.append("Channel Balance\n", style="white")
col2.append(" H. ", style="bold cyan")
col2.append("Show Channels\n", style="white")
col2.append(" I. ", style="bold cyan")
col2.append("Rebalance Channel\n", style="white")
col2.append(" E. ", style="bold cyan")
col2.append("New Bitcoin Address\n", style="white")
col2.append(" L. ", style="bold cyan")
col2.append("Onchain Balance\n", style="white")
col2.append(" M. ", style="bold cyan")
col2.append("List Onchain Transactions\n", style="white")
# Node section
col3 = RText()
col3.append(" NODE\n", style="bold green underline")
col3.append(" N. ", style="bold green")
col3.append("Get Node Info\n", style="white")
col3.append(" O. ", style="bold green")
col3.append("Get Network Information\n", style="white")
col3.append(" J. ", style="bold green")
col3.append("Show Peers\n", style="white")
col3.append(" K. ", style="bold green")
col3.append("Connect Peers\n", style="white")
col3.append(" Z. ", style="bold green")
col3.append("Stats\n", style="white")
col3.append(" T. ", style="bold green")
col3.append("Ranking\n", style="white")
# Chat & LNBits section
col4 = RText()
col4.append(" CHAT & LNBITS\n", style="bold magenta underline")
col4.append(" P. ", style="bold magenta")
col4.append("PyChat\n", style="white")
col4.append(" Q. ", style="bold magenta")
col4.append(f"LNBits List LNURL {lnbitspaid}\n", style="white")
col4.append(" S. ", style="bold magenta")
col4.append(f"LNBits Create LNURL {lnbitspaid}\n", style="white")
rich_console.print()
rich_console.print(Columns([col1, col2, col3, col4], padding=(0, 2), expand=False))
rich_console.print()
rich_console.print(" [dim]Enter.[/dim] [yellow]Return[/yellow]")
rich_console.print()
print("\x1b[?25h")
lightningnetworkLOCALcontrol(rich_prompt("Select option"))
def chatConn():
clear()
@ -2431,28 +2477,67 @@ def lightningnetworkREMOTE():
r = requests.get(url, headers=headers, verify=cert_path)
alias = r.json()
print("""\t\t
from rich.columns import Columns
from rich.text import Text as RText
header = """\t\t
\033[1;37;40m{}\033[0;37;40m: \033[1;31;40mPyBLOCK\033[0;37;40m
\033[1;37;40mNode\033[0;37;40m: \033[1;33;40m{}\033[0;37;40m
\033[1;37;40mBlock\033[0;37;40m: \033[1;32;40m{}\033[0;37;40m
\033[1;37;40mVersion\033[0;37;40m: {}
\033[1;37;40mVersion\033[0;37;40m: {}""".format(a, alias['alias'], d['blocks'], version)
print(header)
\u001b[33;1mA.\033[0;37;40m New Invoice
\u001b[33;1mB.\033[0;37;40m Pay Invoice
\u001b[33;1mC.\033[0;37;40m New Bitcoin Address
\u001b[33;1mD.\033[0;37;40m List Invoices
\u001b[33;1mE.\033[0;37;40m Channel Balance
\u001b[33;1mF.\033[0;37;40m Show Channels
\u001b[33;1mG.\033[0;37;40m Onchain Balance
\u001b[33;1mH.\033[0;37;40m List Onchain Transactions
\u001b[33;1mI.\033[0;37;40m Get Node Info
\u001b[33;1mZ.\033[0;37;40m Stats
\u001b[33;1mT.\033[0;37;40m Ranking
\u001b[33;1mQ.\033[0;37;40m LNBits List LNURL \033[3;35;40m{lnbitspaid}\033[0;37;40m
\u001b[33;1mS.\033[0;37;40m LNBits Create LNURL \033[3;35;40m{lnbitspaid}\033[0;37;40m
\u001b[33;1mEnter.\033[0;37;40m Return
\n\n\x1b[?25h""".format(a, alias['alias'], d['blocks'], version , lnbitspaid = "UNLOCKED" if os.path.isfile("lnbitSN.conf") else "LOCKED"))
lightningnetworkREMOTEcontrol(input("\033[1;32;40mSelect option: \033[0;37;40m"))
lnbitspaid = "UNLOCKED" if os.path.isfile("lnbitSN.conf") else "LOCKED"
# Invoices section
col1 = RText()
col1.append(" INVOICES\n", style="bold yellow underline")
col1.append(" A. ", style="bold yellow")
col1.append("New Invoice\n", style="white")
col1.append(" B. ", style="bold yellow")
col1.append("Pay Invoice\n", style="white")
col1.append(" D. ", style="bold yellow")
col1.append("List Invoices\n", style="white")
# Channels section
col2 = RText()
col2.append(" CHANNELS\n", style="bold cyan underline")
col2.append(" E. ", style="bold cyan")
col2.append("Channel Balance\n", style="white")
col2.append(" F. ", style="bold cyan")
col2.append("Show Channels\n", style="white")
col2.append(" C. ", style="bold cyan")
col2.append("New Bitcoin Address\n", style="white")
col2.append(" G. ", style="bold cyan")
col2.append("Onchain Balance\n", style="white")
col2.append(" H. ", style="bold cyan")
col2.append("List Onchain Transactions\n", style="white")
# Node section
col3 = RText()
col3.append(" NODE\n", style="bold green underline")
col3.append(" I. ", style="bold green")
col3.append("Get Node Info\n", style="white")
col3.append(" Z. ", style="bold green")
col3.append("Stats\n", style="white")
col3.append(" T. ", style="bold green")
col3.append("Ranking\n", style="white")
# LNBits section
col4 = RText()
col4.append(" LNBITS\n", style="bold magenta underline")
col4.append(" Q. ", style="bold magenta")
col4.append(f"LNBits List LNURL {lnbitspaid}\n", style="white")
col4.append(" S. ", style="bold magenta")
col4.append(f"LNBits Create LNURL {lnbitspaid}\n", style="white")
rich_console.print()
rich_console.print(Columns([col1, col2, col3, col4], padding=(0, 2), expand=False))
rich_console.print()
rich_console.print(" [dim]Enter.[/dim] [yellow]Return[/yellow]")
rich_console.print()
print("\x1b[?25h")
lightningnetworkREMOTEcontrol(rich_prompt("Select option"))
def APIMenuLOCAL():
clear()
@ -2482,35 +2567,83 @@ def APIMenuLOCAL():
url = f'https://{lndconnectload["ip_port"]}/v1/getinfo'
r = requests.get(url, headers=headers, verify=cert_path)
alias = r.json()
print("""\t\t
from rich.columns import Columns
from rich.text import Text as RText
header = """\t\t
\033[1;37;40m{}\033[0;37;40m: \033[1;31;40mPyBLOCK\033[0;37;40m
\033[1;37;40mNode\033[0;37;40m: \033[1;33;40m{}\033[0;37;40m
\033[1;37;40mBlock\033[0;37;40m: \033[1;32;40m{}\033[0;37;40m
\033[1;37;40mVersion\033[0;37;40m: {}
\033[1;37;40mVersion\033[0;37;40m: {}""".format(n if path['bitcoincli'] else a, alias['alias'], d['blocks'], version)
print(header)
\033[1;32;40mA.\033[0;37;40m TippinMe FREE
\033[1;32;40mB.\033[0;37;40m Tallycoin FREE
\033[1;32;40mC.\033[0;37;40m Mempool FREE
\033[1;32;40mD.\033[0;37;40m CoinGecko FREE
\033[1;32;40mE.\033[0;37;40m Rate.sx FREE
\033[1;32;40mF.\033[0;37;40m BWT FREE
\033[1;32;40mG.\033[0;37;40m LNBits \033[3;35;40m{lnbitspaid}\033[0;37;40m
\033[1;32;40mH.\033[0;37;40m LNPay \033[3;35;40m{lnpaypaid}\033[0;37;40m
\033[1;32;40mI.\033[0;37;40m OpenNode \033[3;35;40m{opennodepaid}\033[0;37;40m
\033[1;32;40mJ.\033[0;37;40m SatNode FREE
\033[1;32;40mK.\033[0;37;40m Weather FREE
\033[1;32;40mL.\033[0;37;40m Arcade FREE
\033[1;32;40mM.\033[0;37;40m Whale Alert FREE
\033[1;32;40mN.\033[0;37;40m Nostr FREE
\033[1;32;40mQ.\033[0;37;40m Ocean FREE
\033[1;32;40mS.\033[0;37;40m Braiins Pool FREE
\033[1;32;40mT.\033[0;37;40m TinySeed FREE
\033[1;32;40mU.\033[0;37;40m UTXOracle FREE
\033[1;32;40mW.\033[0;37;40m CK Pool FREE
\033[1;32;40mZ.\033[0;37;40m PyBLOCK Pool FREE
\u001b[33;1mEnter.\033[0;37;40m Return
\n\n\x1b[?25h""".format(n if path['bitcoincli'] else a , alias['alias'], d['blocks'], version ,lnbitspaid = "PAID" if os.path.isfile("lnbitSN.conf") else "PREMIUM", lnpaypaid = "PAID" if os.path.isfile("lnpaySN.conf") else "PREMIUM", opennodepaid = "PAID" if os.path.isfile("opennodeSN.conf") else "PREMIUM"))
platfformsLOCALcontrol(input("\033[1;32;40mSelect option: \033[0;37;40m"))
lnbitspaid = "PAID" if os.path.isfile("lnbitSN.conf") else "PREMIUM"
lnpaypaid = "PAID" if os.path.isfile("lnpaySN.conf") else "PREMIUM"
opennodepaid = "PAID" if os.path.isfile("opennodeSN.conf") else "PREMIUM"
# Lightning APIs section
col1 = RText()
col1.append(" LIGHTNING APIS\n", style="bold cyan underline")
col1.append(" G. ", style="bold cyan")
col1.append(f"LNBits {lnbitspaid}\n", style="white")
col1.append(" H. ", style="bold cyan")
col1.append(f"LNPay {lnpaypaid}\n", style="white")
col1.append(" F. ", style="bold cyan")
col1.append("BWT FREE\n", style="white")
col1.append(" D. ", style="bold cyan")
col1.append("CoinGecko FREE\n", style="white")
col1.append(" L. ", style="bold cyan")
col1.append("Arcade FREE\n", style="white")
# Payment section
col2 = RText()
col2.append(" PAYMENT\n", style="bold green underline")
col2.append(" I. ", style="bold green")
col2.append(f"OpenNode {opennodepaid}\n", style="white")
col2.append(" A. ", style="bold green")
col2.append("TippinMe FREE\n", style="white")
col2.append(" B. ", style="bold green")
col2.append("Tallycoin FREE\n", style="white")
col2.append(" M. ", style="bold green")
col2.append("Whale Alert FREE\n", style="white")
col2.append(" T. ", style="bold green")
col2.append("TinySeed FREE\n", style="white")
# Data & Feeds section
col3 = RText()
col3.append(" DATA & FEEDS\n", style="bold yellow underline")
col3.append(" K. ", style="bold yellow")
col3.append("Weather FREE\n", style="white")
col3.append(" E. ", style="bold yellow")
col3.append("Rate.sx FREE\n", style="white")
col3.append(" N. ", style="bold yellow")
col3.append("Nostr FREE\n", style="white")
col3.append(" U. ", style="bold yellow")
col3.append("UTXOracle FREE\n", style="white")
# Tools & Mining section
col4 = RText()
col4.append(" TOOLS & MINING\n", style="bold rgb(255,165,0) underline")
col4.append(" J. ", style="bold rgb(255,165,0)")
col4.append("SatNode FREE\n", style="white")
col4.append(" C. ", style="bold rgb(255,165,0)")
col4.append("Mempool FREE\n", style="white")
col4.append(" Q. ", style="bold rgb(255,165,0)")
col4.append("Ocean FREE\n", style="white")
col4.append(" S. ", style="bold rgb(255,165,0)")
col4.append("Braiins Pool FREE\n", style="white")
col4.append(" W. ", style="bold rgb(255,165,0)")
col4.append("CK Pool FREE\n", style="white")
col4.append(" Z. ", style="bold rgb(255,165,0)")
col4.append("PyBLOCK Pool FREE\n", style="white")
rich_console.print()
rich_console.print(Columns([col1, col2, col3, col4], padding=(0, 2), expand=False))
rich_console.print()
rich_console.print(" [dim]Enter.[/dim] [yellow]Return[/yellow]")
rich_console.print()
print("\x1b[?25h")
platfformsLOCALcontrol(rich_prompt("Select option"))
def APIMenuLOCALOnchainONLY():
clear()
@ -2535,36 +2668,86 @@ def APIMenuLOCALOnchainONLY():
url = f'https://{lndconnectload["ip_port"]}/v1/getinfo'
r = requests.get(url, headers=headers, verify=cert_path)
alias = r.json()
print("""\t\t
from rich.columns import Columns
from rich.text import Text as RText
header = """\t\t
\033[1;37;40m{}\033[0;37;40m: \033[1;31;40mPyBLOCK\033[0;37;40m
\033[1;37;40mBlock\033[0;37;40m: \033[1;32;40m{}\033[0;37;40m
\033[1;37;40mVersion\033[0;37;40m: {}
\033[1;37;40mVersion\033[0;37;40m: {}""".format(n if path['bitcoincli'] else a, d['blocks'], version)
print(header)
\033[1;32;40mA.\033[0;37;40m TippinMe FREE
\033[1;32;40mB.\033[0;37;40m Tallycoin FREE
\033[1;32;40mC.\033[0;37;40m Mempool FREE
\033[1;32;40mD.\033[0;37;40m CoinGecko FREE
\033[1;32;40mE.\033[0;37;40m Rate.sx FREE
\033[1;32;40mF.\033[0;37;40m BWT FREE
\033[1;32;40mG.\033[0;37;40m LNBits \033[3;35;40m{lnbitspaid}\033[0;37;40m
\033[1;32;40mH.\033[0;37;40m LNPay \033[3;35;40m{lnpaypaid}\033[0;37;40m
\033[1;32;40mI.\033[0;37;40m OpenNode \033[3;35;40m{opennodepaid}\033[0;37;40m
\033[1;32;40mJ.\033[0;37;40m SatNode FREE
\033[1;32;40mK.\033[0;37;40m Weather FREE
\033[1;32;40mL.\033[0;37;40m Arcade FREE
\033[1;32;40mM.\033[0;37;40m Whale Alert FREE
\033[1;32;40mN.\033[0;37;40m Nostr FREE
\033[1;32;40mP.\033[0;37;40m PhoenixD FREE
\033[1;32;40mQ.\033[0;37;40m Ocean Pool FREE
\033[1;32;40mR.\033[0;37;40m Luxor Pool FREE
\033[1;32;40mS.\033[0;37;40m Braiins Pool FREE
\033[1;32;40mT.\033[0;37;40m TinySeed FREE
\033[1;32;40mU.\033[0;37;40m UTXOracle FREE
\033[1;32;40mW.\033[0;37;40m CK Pool FREE
\033[1;32;40mZ.\033[0;37;40m PyBLOCK Pool FREE
\u001b[33;1mEnter.\033[0;37;40m Return
\n\n\x1b[?25h""".format(n if path['bitcoincli'] else a, d['blocks'], version ,lnbitspaid = "PAID" if os.path.isfile("lnbitSN.conf") else "PREMIUM", lnpaypaid = "PAID" if os.path.isfile("lnpaySN.conf") else "PREMIUM", opennodepaid = "PAID" if os.path.isfile("opennodeSN.conf") else "PREMIUM"))
platfformsLOCALcontrolOnchainONLY(input("\033[1;32;40mSelect option: \033[0;37;40m"))
lnbitspaid = "PAID" if os.path.isfile("lnbitSN.conf") else "PREMIUM"
lnpaypaid = "PAID" if os.path.isfile("lnpaySN.conf") else "PREMIUM"
opennodepaid = "PAID" if os.path.isfile("opennodeSN.conf") else "PREMIUM"
# Lightning APIs section
col1 = RText()
col1.append(" LIGHTNING APIS\n", style="bold cyan underline")
col1.append(" G. ", style="bold cyan")
col1.append(f"LNBits {lnbitspaid}\n", style="white")
col1.append(" H. ", style="bold cyan")
col1.append(f"LNPay {lnpaypaid}\n", style="white")
col1.append(" F. ", style="bold cyan")
col1.append("BWT FREE\n", style="white")
col1.append(" D. ", style="bold cyan")
col1.append("CoinGecko FREE\n", style="white")
col1.append(" L. ", style="bold cyan")
col1.append("Arcade FREE\n", style="white")
col1.append(" P. ", style="bold cyan")
col1.append("PhoenixD FREE\n", style="white")
# Payment section
col2 = RText()
col2.append(" PAYMENT\n", style="bold green underline")
col2.append(" I. ", style="bold green")
col2.append(f"OpenNode {opennodepaid}\n", style="white")
col2.append(" A. ", style="bold green")
col2.append("TippinMe FREE\n", style="white")
col2.append(" B. ", style="bold green")
col2.append("Tallycoin FREE\n", style="white")
col2.append(" M. ", style="bold green")
col2.append("Whale Alert FREE\n", style="white")
col2.append(" T. ", style="bold green")
col2.append("TinySeed FREE\n", style="white")
# Data & Feeds section
col3 = RText()
col3.append(" DATA & FEEDS\n", style="bold yellow underline")
col3.append(" K. ", style="bold yellow")
col3.append("Weather FREE\n", style="white")
col3.append(" E. ", style="bold yellow")
col3.append("Rate.sx FREE\n", style="white")
col3.append(" N. ", style="bold yellow")
col3.append("Nostr FREE\n", style="white")
col3.append(" U. ", style="bold yellow")
col3.append("UTXOracle FREE\n", style="white")
# Tools & Mining section
col4 = RText()
col4.append(" TOOLS & MINING\n", style="bold rgb(255,165,0) underline")
col4.append(" J. ", style="bold rgb(255,165,0)")
col4.append("SatNode FREE\n", style="white")
col4.append(" C. ", style="bold rgb(255,165,0)")
col4.append("Mempool FREE\n", style="white")
col4.append(" Q. ", style="bold rgb(255,165,0)")
col4.append("Ocean Pool FREE\n", style="white")
col4.append(" R. ", style="bold rgb(255,165,0)")
col4.append("Luxor Pool FREE\n", style="white")
col4.append(" S. ", style="bold rgb(255,165,0)")
col4.append("Braiins Pool FREE\n", style="white")
col4.append(" W. ", style="bold rgb(255,165,0)")
col4.append("CK Pool FREE\n", style="white")
col4.append(" Z. ", style="bold rgb(255,165,0)")
col4.append("PyBLOCK Pool FREE\n", style="white")
rich_console.print()
rich_console.print(Columns([col1, col2, col3, col4], padding=(0, 2), expand=False))
rich_console.print()
rich_console.print(" [dim]Enter.[/dim] [yellow]Return[/yellow]")
rich_console.print()
print("\x1b[?25h")
platfformsLOCALcontrolOnchainONLY(rich_prompt("Select option"))
def decodeHex():
clear()

View file

@ -38,7 +38,7 @@ from shared.display import clear, close, sysinfo, rectangle, delay_print
from shared.formatting import get_ansi_color_code, get_color
from shared.ui import status_bar, show_error, loading
from shared.rich_ui import (
console, rich_status_bar, rich_header, rich_menu, rich_error, rich_prompt
console as rich_console, rich_status_bar, rich_header, rich_menu, rich_error, rich_prompt
)
logger = get_logger("SPV")
@ -4658,33 +4658,73 @@ def bitcoincoremenuLOCAL():
di = json.loads(nn)
a = di
b = str(a)
print("""\t\t
from rich.columns import Columns
from rich.text import Text as RText
header = """\t\t
\033[1;37;40m{}\033[0;37;40m: \033[1;31;40mPyBLOCK\033[0;37;40m
\033[1;37;40mBlock\033[0;37;40m: \033[1;32;40m{}\033[0;37;40m
\033[1;37;40mVersion\033[0;37;40m: {}
\033[1;37;40mVersion\033[0;37;40m: {}""".format(n, b, version)
print(header)
\u001b[38;5;202mA.\033[0;37;40m Bitcoin-cli Console
\u001b[38;5;202mB.\033[0;37;40m Show Genesis Block
\u001b[38;5;202mC.\033[0;37;40m Show Blockchain Information
\u001b[38;5;202mD.\033[0;37;40m Run the Numbers
\u001b[38;5;202mE.\033[0;37;40m Decode Block
\u001b[38;5;202mF.\033[0;37;40m Show QR from a Bitcoin Address
\u001b[38;5;202mG.\033[0;37;40m Show Merkle Proof from a Tx
\u001b[38;5;202mH.\033[0;37;40m Miscellaneous
\u001b[38;5;202mI.\033[0;37;40m ColdCore
\u001b[38;5;202mJ.\033[0;37;40m Whitepaper
\u001b[38;5;202mM.\033[0;37;40m Moscow Time
\u001b[38;5;202mO.\033[0;37;40m OP_RETURN
\u001b[38;5;202mZ.\033[0;37;40m Stats
\u001b[38;5;202mQ.\033[0;37;40m Hashrate
\u001b[38;5;202mU.\033[0;37;40m Unconfirmed Txs
\u001b[38;5;202mS.\033[0;37;40m Mempool
\u001b[38;5;202mPPC.\033[0;37;40m PyBLOCK PooL Computer
\u001b[38;5;202mPPR.\033[0;37;40m PyBLOCK PooL Raspberry
\u001b[38;5;202mVG.\033[0;37;40m Vanity Generator
\u001b[33;1mEnter.\033[0;37;40m Return
\n\n\x1b[?25h""".format(n,b, version ))
bitcoincoremenuLOCALcontrolA(input("\033[1;32;40mSelect option: \033[0;37;40m"))
col1 = RText()
col1.append(" BLOCKCHAIN\n", style="bold rgb(255,102,0) underline")
col1.append(" A. ", style="bold rgb(255,102,0)")
col1.append("Console\n", style="white")
col1.append(" B. ", style="bold rgb(255,102,0)")
col1.append("Genesis Block\n", style="white")
col1.append(" C. ", style="bold rgb(255,102,0)")
col1.append("Blockchain Info\n", style="white")
col1.append(" D. ", style="bold rgb(255,102,0)")
col1.append("Run the Numbers\n", style="white")
col1.append(" M. ", style="bold rgb(255,102,0)")
col1.append("Moscow Time\n", style="white")
col1.append(" J. ", style="bold rgb(255,102,0)")
col1.append("Whitepaper\n", style="white")
col2 = RText()
col2.append(" MONITORING\n", style="bold cyan underline")
col2.append(" S. ", style="bold cyan")
col2.append("Mempool\n", style="white")
col2.append(" U. ", style="bold cyan")
col2.append("Unconfirmed Txs\n", style="white")
col3 = RText()
col3.append(" TOOLS\n", style="bold green underline")
col3.append(" E. ", style="bold green")
col3.append("Decode Block\n", style="white")
col3.append(" F. ", style="bold green")
col3.append("QR from Address\n", style="white")
col3.append(" G. ", style="bold green")
col3.append("Merkle Proof\n", style="white")
col3.append(" O. ", style="bold green")
col3.append("OP_RETURN\n", style="white")
col3.append(" H. ", style="bold green")
col3.append("Miscellaneous\n", style="white")
col3.append(" I. ", style="bold green")
col3.append("ColdCore\n", style="white")
col3.append(" VG. ", style="bold green")
col3.append("Vanity Generator\n", style="white")
col4 = RText()
col4.append(" STATS & MINING\n", style="bold yellow underline")
col4.append(" Z. ", style="bold yellow")
col4.append("Stats\n", style="white")
col4.append(" Q. ", style="bold yellow")
col4.append("Hashrate\n", style="white")
col4.append(" PPC.", style="bold yellow")
col4.append(" Pool Computer\n", style="white")
col4.append(" PPR.", style="bold yellow")
col4.append(" Pool Raspberry\n", style="white")
rich_console.print()
rich_console.print(Columns([col1, col2, col3, col4], padding=(0, 2), expand=False))
rich_console.print()
rich_console.print(" [dim]Enter.[/dim] [yellow]Return[/yellow]")
rich_console.print()
print("\x1b[?25h")
bitcoincoremenuLOCALcontrolA(rich_prompt("Select option"))
def bitcoincoremenuLOCALOPRETURN():
clear()
@ -4720,34 +4760,78 @@ def lightningnetworkLOCAL():
di = json.loads(nn)
a = di
b = str(a)
print("""\t\t
lnbitspaid = "UNLOCKED" if os.path.isfile("lnbitSN.conf") else "LOCKED"
from rich.columns import Columns
from rich.text import Text as RText
header = """\t\t
\033[1;37;40m{}\033[0;37;40m: \033[1;31;40mPyBLOCK\033[0;37;40m
\033[1;37;40mBlock\033[0;37;40m: \033[1;32;40m{}\033[0;37;40m
\033[1;37;40mVersion\033[0;37;40m: {}
\033[1;37;40mVersion\033[0;37;40m: {}""".format(n, b, version)
print(header)
\u001b[33;1mA.\033[0;37;40m Lncli Console
\u001b[33;1mB.\033[0;37;40m New Invoice
\u001b[33;1mC.\033[0;37;40m Pay Invoice
\u001b[33;1mD.\033[0;37;40m Make a KeySend Payment
\u001b[33;1mE.\033[0;37;40m New Bitcoin Address
\u001b[33;1mF.\033[0;37;40m List Invoices
\u001b[33;1mG.\033[0;37;40m Channel Balance
\u001b[33;1mH.\033[0;37;40m Show Channels
\u001b[33;1mI.\033[0;37;40m Rebalance Channel
\u001b[33;1mJ.\033[0;37;40m Show Peers
\u001b[33;1mK.\033[0;37;40m Connect Peers
\u001b[33;1mL.\033[0;37;40m Onchain Balance
\u001b[33;1mM.\033[0;37;40m List Onchain Transactions
\u001b[33;1mN.\033[0;37;40m Get Node Info
\u001b[33;1mO.\033[0;37;40m Get Network Information
\u001b[33;1mP.\033[0;37;40m PyChat
\u001b[33;1mZ.\033[0;37;40m Stats
\u001b[33;1mT.\033[0;37;40m Ranking
\u001b[33;1mQ.\033[0;37;40m LNBits List LNURL \033[3;35;40m{lnbitspaid}\033[0;37;40m
\u001b[33;1mS.\033[0;37;40m LNBits Create LNURL \033[3;35;40m{lnbitspaid}\033[0;37;40m
\u001b[33;1mEnter.\033[0;37;40m Return
\n\n\x1b[?25h""".format(n,b, version , lnbitspaid = "UNLOCKED" if os.path.isfile("lnbitSN.conf") else "LOCKED"))
lightningnetworkLOCALcontrol(input("\033[1;32;40mSelect option: \033[0;37;40m"))
col1 = RText()
col1.append(" PAYMENTS\n", style="bold yellow underline")
col1.append(" B. ", style="bold yellow")
col1.append("New Invoice\n", style="white")
col1.append(" C. ", style="bold yellow")
col1.append("Pay Invoice\n", style="white")
col1.append(" D. ", style="bold yellow")
col1.append("KeySend Payment\n", style="white")
col1.append(" F. ", style="bold yellow")
col1.append("List Invoices\n", style="white")
col1.append(" E. ", style="bold yellow")
col1.append("New BTC Address\n", style="white")
col2 = RText()
col2.append(" CHANNELS & PEERS\n", style="bold cyan underline")
col2.append(" G. ", style="bold cyan")
col2.append("Channel Balance\n", style="white")
col2.append(" H. ", style="bold cyan")
col2.append("Show Channels\n", style="white")
col2.append(" I. ", style="bold cyan")
col2.append("Rebalance Channel\n", style="white")
col2.append(" J. ", style="bold cyan")
col2.append("Show Peers\n", style="white")
col2.append(" K. ", style="bold cyan")
col2.append("Connect Peers\n", style="white")
col3 = RText()
col3.append(" NODE & NETWORK\n", style="bold green underline")
col3.append(" A. ", style="bold green")
col3.append("Lncli Console\n", style="white")
col3.append(" L. ", style="bold green")
col3.append("Onchain Balance\n", style="white")
col3.append(" M. ", style="bold green")
col3.append("Onchain Txs\n", style="white")
col3.append(" N. ", style="bold green")
col3.append("Node Info\n", style="white")
col3.append(" O. ", style="bold green")
col3.append("Network Info\n", style="white")
col4 = RText()
col4.append(" TOOLS & STATS\n", style="bold rgb(255,102,0) underline")
col4.append(" P. ", style="bold rgb(255,102,0)")
col4.append("PyChat\n", style="white")
col4.append(" Z. ", style="bold rgb(255,102,0)")
col4.append("Stats\n", style="white")
col4.append(" T. ", style="bold rgb(255,102,0)")
col4.append("Ranking\n", style="white")
col4.append(" Q. ", style="bold rgb(255,102,0)")
col4.append("LNBits List LNURL ", style="white")
col4.append(lnbitspaid + "\n", style="italic magenta")
col4.append(" S. ", style="bold rgb(255,102,0)")
col4.append("LNBits Create LNURL ", style="white")
col4.append(lnbitspaid + "\n", style="italic magenta")
rich_console.print()
rich_console.print(Columns([col1, col2, col3, col4], padding=(0, 2), expand=False))
rich_console.print()
rich_console.print(" [dim]Enter.[/dim] [yellow]Return[/yellow]")
rich_console.print()
print("\x1b[?25h")
lightningnetworkLOCALcontrol(rich_prompt("Select option"))
def chatConn():
clear()
@ -4856,38 +4940,89 @@ def APIMenuLOCAL():
di = json.loads(nn)
a = di
b = str(a)
print("""\t\t
lnbitspaid = "PAID" if os.path.isfile("lnbitSN.conf") else "PREMIUM"
lnpaypaid = "PAID" if os.path.isfile("lnpaySN.conf") else "PREMIUM"
opennodepaid = "PAID" if os.path.isfile("opennodeSN.conf") else "PREMIUM"
from rich.columns import Columns
from rich.text import Text as RText
header = """\t\t
\033[1;37;40m{}\033[0;37;40m: \033[1;31;40mPyBLOCK\033[0;37;40m
\033[1;37;40mBlock\033[0;37;40m: \033[1;32;40m{}\033[0;37;40m
\033[1;37;40mVersion\033[0;37;40m: {}
\033[1;37;40mVersion\033[0;37;40m: {}""".format(n, b, version)
print(header)
\033[1;32;40mA.\033[0;37;40m TippinMe
\033[1;32;40mB.\033[0;37;40m Tallycoin
\033[1;32;40mC.\033[0;37;40m Mempool
\033[1;32;40mD.\033[0;37;40m CoinGecko
\033[1;32;40mE.\033[0;37;40m Rate.sx
\033[1;32;40mF.\033[0;37;40m BWT
\033[1;32;40mG.\033[0;37;40m LNBits \033[3;35;40m{lnbitspaid}\033[0;37;40m
\033[1;32;40mH.\033[0;37;40m LNPay \033[3;35;40m{lnpaypaid}\033[0;37;40m
\033[1;32;40mI.\033[0;37;40m OpenNode \033[3;35;40m{opennodepaid}\033[0;37;40m
\033[1;32;40mJ.\033[0;37;40m SatNode
\033[1;32;40mK.\033[0;37;40m Weather
\033[1;32;40mL.\033[0;37;40m Arcade
\033[1;32;40mM.\033[0;37;40m Whale Alert
\033[1;32;40mN.\033[0;37;40m Nostr
\033[1;32;40mO.\033[0;37;40m PhoenixD
\033[1;32;40mP.\033[0;37;40m Pickaxe
\033[1;32;40mQ.\033[0;37;40m Ocean Pool
\033[1;32;40mR.\033[0;37;40m Luxor Pool
\033[1;32;40mS.\033[0;37;40m Braiins Pool
\033[1;32;40mT.\033[0;37;40m TinySeed
\033[1;32;40mU.\033[0;37;40m UTXOracle
\033[1;32;40mW.\033[0;37;40m CK Pool
\033[1;32;40mX.\033[0;37;40m Template
\033[1;32;40mZ.\033[0;37;40m PyBLOCK Pool
\u001b[33;1mEnter.\033[0;37;40m Return
\n\n\x1b[?25h""".format(n,b, version ,lnbitspaid = "PAID" if os.path.isfile("lnbitSN.conf") else "PREMIUM", lnpaypaid = "PAID" if os.path.isfile("lnpaySN.conf") else "PREMIUM", opennodepaid = "PAID" if os.path.isfile("opennodeSN.conf") else "PREMIUM"))
platfformsLOCALcontrol(input("\033[1;32;40mSelect option: \033[0;37;40m"))
col1 = RText()
col1.append(" LIGHTNING APIS\n", style="bold cyan underline")
col1.append(" G. ", style="bold cyan")
col1.append("LNBits ", style="white")
col1.append(lnbitspaid + "\n", style="italic magenta")
col1.append(" H. ", style="bold cyan")
col1.append("LNPay ", style="white")
col1.append(lnpaypaid + "\n", style="italic magenta")
col1.append(" O. ", style="bold cyan")
col1.append("PhoenixD\n", style="white")
col1.append(" F. ", style="bold cyan")
col1.append("BWT\n", style="white")
col2 = RText()
col2.append(" PAYMENT\n", style="bold green underline")
col2.append(" I. ", style="bold green")
col2.append("OpenNode ", style="white")
col2.append(opennodepaid + "\n", style="italic magenta")
col2.append(" A. ", style="bold green")
col2.append("TippinMe\n", style="white")
col2.append(" B. ", style="bold green")
col2.append("Tallycoin\n", style="white")
col2.append(" D. ", style="bold green")
col2.append("CoinGecko\n", style="white")
col2.append(" U. ", style="bold green")
col2.append("UTXOracle\n", style="white")
col2.append(" T. ", style="bold green")
col2.append("TinySeed\n", style="white")
col3 = RText()
col3.append(" DATA & FEEDS\n", style="bold yellow underline")
col3.append(" E. ", style="bold yellow")
col3.append("Rate.sx\n", style="white")
col3.append(" K. ", style="bold yellow")
col3.append("Weather\n", style="white")
col3.append(" M. ", style="bold yellow")
col3.append("Whale Alert\n", style="white")
col3.append(" N. ", style="bold yellow")
col3.append("Nostr\n", style="white")
col3.append(" L. ", style="bold yellow")
col3.append("Arcade\n", style="white")
col3.append(" X. ", style="bold yellow")
col3.append("Template\n", style="white")
col4 = RText()
col4.append(" TOOLS & MINING\n", style="bold rgb(255,102,0) underline")
col4.append(" C. ", style="bold rgb(255,102,0)")
col4.append("Mempool\n", style="white")
col4.append(" J. ", style="bold rgb(255,102,0)")
col4.append("SatNode\n", style="white")
col4.append(" P. ", style="bold rgb(255,102,0)")
col4.append("Pickaxe\n", style="white")
col4.append(" Q. ", style="bold rgb(255,102,0)")
col4.append("Ocean Pool\n", style="white")
col4.append(" R. ", style="bold rgb(255,102,0)")
col4.append("Luxor Pool\n", style="white")
col4.append(" S. ", style="bold rgb(255,102,0)")
col4.append("Braiins Pool\n", style="white")
col4.append(" W. ", style="bold rgb(255,102,0)")
col4.append("CK Pool\n", style="white")
col4.append(" Z. ", style="bold rgb(255,102,0)")
col4.append("PyBLOCK Pool\n", style="white")
rich_console.print()
rich_console.print(Columns([col1, col2, col3, col4], padding=(0, 2), expand=False))
rich_console.print()
rich_console.print(" [dim]Enter.[/dim] [yellow]Return[/yellow]")
rich_console.print()
print("\x1b[?25h")
platfformsLOCALcontrol(rich_prompt("Select option"))
def decodeHex(): # show hex
try: