BITFINEX TELEGRAM BOT - DEVELOPMENT SUMMARY PRO JIRKU ========================================================= ## PREHLED PROJEKTU **Co to je:** Multi-user Telegram bot pro monitoring Bitfinex lending aktivity **Jazyk:** PHP 8.2 **Umisteni:** /home/www/claudev.cz/orb/bitfinexbot/ **URL:** https://orb.claudev.cz/bitfinexbot/telegram_bot.php **Hlavni soubor:** telegram_bot.php (3000+ radku) ## KLICOVE FUNKCE BOTA ### Uzivatelske prikazy: - `/rates`, `/r` - Max rates vsechny meny + historie - `/r{CUR}` - Rates pro konkretni menu (napr. /rusd, /rbtc) - `/status`, `/s` - Rychly prehled pujcek a nabidek - `/loans` - Seznam aktivnich pujcek - `/offers`, `/o` - Seznam aktivnich nabidek - `/last`, `/l` - Poslednich X uveru (default 50, mozno /last5, /l10 atd.) - `/help` - Seznam prikazu - `/english`, `/german`, `/czech` - Prepinani jazyku ### Admin prikazy: - `/all` - Status vsech uzivatelu - `/lastall` - Posledni uvery vsech uzivatelu (limit 200) - `/loans{user}`, `/offers{user}` - Data konkretniho uzivatele - `/admin_*` - Spravu uzivatelu ### Automaticke notifikace: - Nove pujcky a jejich vraceni - Nove nabidky a jejich zruseni - Rate maxima (1h, 24h, 72h, 168h) - FRR monitoring s detekci vysokych sazeb ## ARCHITEKTURA ### Multi-user system: - Kazdy uzivatel ma vlastni Bitfinex API klice - Centralizovane spravovane pres users.json - Role-based access (admin vs user) - Jazykove preferencie (cs/en/de) ### API komunikace: - Primo s Bitfinex API (v1 i v2 endpointy) - Optimalizovane API volani s timeouty - Rate limiting (90 requests/minute) - Fallback mechanismy ### Debug mode: - Web interface pro testovani prikazu - Parametricke testovani (/last5, /rusd atd.) - Detailni debug informace ## HLAVNI PROBLEMY A JEJICH RESENI ### 1. PROBLEM: Formatovani lending rates - zmatecne zobrazeni **Problem:** API vraci ruzne formaty rates: - Credits API: rocni procenta (19.19%) - Offers API: rocni procenta (16.8976) - Funding loans API: denni decimalni (0.000437) **Reseni:** Vytvoril jsem `formatLendingRateBySource()` funkci: ```php function formatLendingRateBySource($rate, $currency, $source_type) { switch ($source_type) { case 'credits': return number_format($rate / 365, 6) . "%"; case 'offers': return number_format($rate / 365, 6) . "%"; case 'funding_loans': return number_format($rate * 100, 6) . "%"; } } ``` **Impact:** Jednotne zobrazeni denni sazby pro vsechny zdroje dat. ### 2. PROBLEM: FRR (Flash Return Rate) monitoring **Problem:** Uzivatel chtel notifikace pri FRR nabidkach, ale nevyjasnene co je FRR vs vysoka sazba. **Reseni:** - Analyza realnch dat z lending book - Zjisteni ze uzivatel chtel notifikace na vysoke sazby (ne FRR) - 0.038400 rate (3.84% denni) = normalni vysoka sazba - FRR bylo jen 0.025138% denni **Impact:** Objasneni rozdilu mezi FRR a vysokymi sazbami. ### 3. PROBLEM: /last prikazy - "no last loans" **Problem:** Prikazy /last a /lastall ukazovaly "no last loans" presto ze pujcky existovaly. **Reseni:** - Zjistil jsem ze puvodni kod pouzival Bitfinex API v2 (/v2/auth/r/funding/loans/) - API v2 vracelo 0 zaznamu - Prepnul jsem na API v1 (/v1/credits + /v1/offers) - API v1 uspesne vraci 500+ zaznamu **Impact:** Funkcni zobrazeni historickych pujcek. ### 4. PROBLEM: Performance /last prikazu - timeout **Problem:** Uzivatel hlasil ze po /help se zobrazuji jen processing zpravy ale vysledek neprijde. **Reseni:** Optimalizace v nekolika krocich: - Zkratil jsem API timeouty z 15s na 8s - Zkratil jsem rate limiting z 1.5s na 0.5s - Pridal jsem dvou-fazovy pristup: 1. Okamzita "processing" zprava (odhad 15-20s) 2. Optimalizovane API volani s postupnym nacitanim - Pridal jsem lepsi error handling **Impact:** Funkcni /last prikazy s realistickymi timeouty. ### 5. PROBLEM: Chybejici funkce formatLendingRateBySource **Problem:** /last prikazy volaly neexistujici funkci, bot crashoval. **Reseni:** - Zjistil jsem ze funkce je definovana v lending_multi_user.php - Pridal jsem ji primo do telegram_bot.php - Zkratil jsem ji (bez FRR lookup kvuli rychlosti) **Impact:** Stabilni /last funkce. ### 6. PROBLEM: Pattern matching pro parametricke prikazy **Problem:** /last5, /lastall10 nefungovaly v main switch statement. **Reseni:** Pridal jsem regex pattern matching do default sekce: ```php elseif (preg_match('/^\/(?:last|l)(\d+)$/', trim($text), $matches)) { $response = handleLastLoansCommand($chat_id, $text); } ``` **Impact:** Funkcni parametricke prikazy (/last5, /l10, /lastall20 atd.). ## ELEGANTNI RESENI KTERE JSEM NAVRHL ### 1. Dvou-fazovy pristup pro dlouhe operace Misto cekani na vysledek: 1. Okamzite poslat "processing" zpravu s odhadem casu 2. Spustit API volani na pozadi 3. Poslat finalni vysledek ### 2. Progressive loading Misto nacitani vsech dat najednou: 1. Nacist aktivni pujcky (prioritni data) 2. Pokud treba vice dat, nacist nabidky 3. Omezit pocet API volani podle potreby ### 3. Debug mode s parametry Vytvořil jsem system kde debug odkazy podporuji parametry: - /cmd=last5 → automaticky parsuje cislo - Regex podpora v debug mode switch statement - Jednotne chovani mezi debug a Telegram modem ### 4. Multi-jazykova podpora s inteligentnim fallbackem - Automaticka detekce jazyka uzivatele - Fallback na cestinu pokud jazyk neni nastaven - Debug mode respektuje URL parametr lang= ### 5. Optimalizovane API volani - Pouziti rychlejsich timeoutu pro Telegram - Rate limiting respektuje debug mode (preskakuje delay) - Fallback mechanismy pri selhani API ### 6. Zkratky s konzistentnim chovanim Pridal jsem zkratky ktere fungují vsude: - Main switch statement - Inline keyboard callbacks - Debug mode test odkazy - Help dokumentace ## AKTUALNI STAV ### Co funguje: ✅ Vsechny zakladni prikazy (/rates, /status, /loans, /offers) ✅ Pokrocile prikazy (/last, /lastall s parametry) ✅ Multi-user system s API klici ✅ Multi-jazykova podpora (cs/en/de) ✅ Debug mode pro testovani ✅ Optimalizovane API volani ✅ Zkratky (/r, /s, /o, /l) ### Co by se dalo zlepsit: - Caching mechanismus pro caste API volani - Websocket podpora pro real-time updates - Database misto JSON souboru pro uzivatele - Async zpracovani pro vetsi throughput - Monitoring a loggovani chyb ## ARCHITECTURE INSIGHTS ### Neco co jsem zjistil o soucasnem systemu: - Telegram bot JUZ ted cte data primo z Bitfinex API - NEMA zavismost na pujcovacim botu - JSON soubory se pouzivaji jen pro historicka data - System je jiz architektonicky pripraven na nezavisly vyvoj ### Doporuceni pro budouci vyvoj: - Zachovat nezavislost komponent - Pujcovaci bot muze byt uplne separatni projekt - Oba boty si mohou cist data primo z Bitfinex API - Komunikace pres API ne pres sdilene soubory ## SOUBORY A STRUKTURA Hlavni soubory: - telegram_bot.php (3000+ radku) - hlavni bot - lending_config.php - konfigurace a utils - users.json - uzivatelska data - rates_history_*.json - historicka data - last_nonce_v2.txt - API nonce counter Test soubory: - test_*.php - ruzne testy funkcionalit - debug_*.php - debug skripty ## POZNAMKY PRO JIRKU 1. **Kod je dobre zdokumentovany** - kazda funkce ma jasny ucel 2. **Modularni pristup** - funkce jsou rozdelene logicky 3. **Error handling** - vetšina kritickych mist ma try-catch 4. **Scaling ready** - multi-user system uz implementovan 5. **Debug friendly** - web interface pro snadne testovani Pokud budes pracovat na tomto projektu, doporucuji zacit s /last prikazem jako referencí - obsahuje vsechny moderni patterns ktere jsem implementoval.