$p !== '')); if ($parts === []) { $bot->sendMessage( "Usage: /transfer [TRX|USDT] [amount]\n" ."Omit amount to transfer all. Default asset: USDT.\n" .'To = TRANSFER_TO_ADDRESS (env).' ); return; } $from = $parts[0]; $asset = 'USDT'; $amount = null; if (count($parts) === 2) { $second = strtoupper($parts[1]); if (in_array($second, ['TRX', 'USDT'], true)) { $asset = $second; } elseif ($this->isAmount($parts[1])) { $amount = $parts[1]; } else { $bot->sendMessage('Second arg must be TRX, USDT, or an amount.'); return; } } elseif (count($parts) >= 3) { $asset = strtoupper($parts[1]); if (! in_array($asset, ['TRX', 'USDT'], true)) { $bot->sendMessage('Asset must be TRX or USDT.'); return; } if (! $this->isAmount($parts[2])) { $bot->sendMessage('Invalid amount.'); return; } $amount = $parts[2]; } $label = $amount === null ? "ALL {$asset}" : "{$amount} {$asset}"; $bot->sendMessage("⏳ Transferring {$label} from {$from} …"); $result = $this->transfers->handle('tron', $from, $amount, $asset); if (! ($result['ok'] ?? false)) { $bot->sendMessage('❌ '.($result['error'] ?? 'Transfer failed')); return; } $bot->sendMessage(implode("\n", [ '✅ Transfer submitted', 'From: '.$result['from'], 'To: '.$result['to'], 'Amount: '.$result['amount'].' '.$result['asset'], 'TxID: '.$result['txid'], ])); } private function isAmount(string $value): bool { return (bool) preg_match('/^\d+(\.\d{1,6})?$/', $value); } }