3
Struktur Berkas dan Arsitektur
GhostTrack dikirim sebagai satu modul tunggal. Berkas GhostTR.py memuat seluruh program, dari shebang dan komentar lisensi di baris pertama sampai guard if __name__ == '__main__' di baris terakhir (GhostTR.py:1-51, GhostTR.py:309-3152). Tidak ada paket dan tidak ada pemecahan modul per fitur: lapisan menu, dispatcher, dan semua handler hidup di berkas yang sama. Berkas pendukung di akar repository hanya menyuplai dependensi, instruksi pakai, dan gambar.
| Berkas | Peran | Bukti |
|---|---|---|
GhostTR.py | seluruh logika: import, palet warna ANSI, dekorator is_option, empat handler, tabel options, dispatcher, banner, entry point | GhostTR.py:7-153 |
requirements.txt | dua dependensi runtime, requests dan phonenumbers, masing-masing satu baris | requirements.txt:1-24 |
README.md | urutan git clone sampai python3 GhostTR.py beserta tangkapan layar tiap menu | README.md:21-275 |
asset/bn.png | banner di kepala README | README.md:1-46 |
asset/ip.png | tangkapan layar menu IP Tracker | README.md:29-317 |
asset/phone.png | tangkapan layar menu Phone Tracker | README.md:39-418 |
asset/User.png | tangkapan layar menu Username Tracker | README.md:45-479 |
Tiga lapisan di dalam satu berkas
Struktur internal GhostTR.py terdiri dari tiga lapisan yang saling memanggil langsung, ditambah satu tabel data yang menjadi satu-satunya titik registrasi fitur (GhostTR.py:179-20710). Lapisan menu menggambar layar, lapisan dispatcher menerjemahkan nomor pilihan menjadi pemanggilan fungsi, dan lapisan handler melakukan pekerjaan pelacakan.
graph TD
entry["__main__ guard"] --> main
main --> option
main --> execute_option
option --> clear
option --> option_text
option_text --> options[("options")]
execute_option --> call_option
execute_option -->|setelah Press enter| main
call_option --> is_in_options
call_option --> options
options --> IP_Track
options --> showIP
options --> phoneGW
options --> TrackLu
options -->|num 0| exit_opt["exit"]
IP_Track -.->|@is_option| run_banner
showIP -.->|@is_option| run_banner
phoneGW -.->|@is_option| run_banner
TrackLu -.->|@is_option| run_banner
style entry fill:#2d7d46,color:#fff
style main fill:#2d7d46,color:#fff
style execute_option fill:#2d7d46,color:#fff
style options fill:#f59e0b,color:#000
style call_option fill:#f59e0b,color:#000
style is_in_options fill:#f59e0b,color:#000
style IP_Track fill:#8b5cf6,color:#fff
style showIP fill:#8b5cf6,color:#fff
style phoneGW fill:#8b5cf6,color:#fff
style TrackLu fill:#8b5cf6,color:#fff
style run_banner fill:#8b5cf6,color:#fff
style exit_opt fill:#dc2626,color:#fff
%% fig: Lapisan menu, dispatcher, dan handler di GhostTR.py
%% desc: main memanggil option lalu execute_option; execute_option memakai call_option dan is_in_options untuk memilih entri options yang menunjuk ke salah satu handler, dan setiap handler digambar bannernya lewat is_option.| Lapisan | Fungsi | Isi |
|---|---|---|
| Entry point | penjaga eksekusi | if __name__ == '__main__' membungkus main() dan menangkap KeyboardInterrupt (GhostTR.py:309-3152) |
| Menu | menggambar layar | option menulis banner ASCII dan daftar pilihan, option_text menyusun barisnya, clear memilih cls atau clear sesuai os.name (GhostTR.py:259-27211, GhostTR.py:245-24912, GhostTR.py:210-21613) |
| Banner | dekorasi per fitur | run_banner mencetak banner Ghost Tracker ke stderr sebelum handler berjalan (GhostTR.py:275-29314) |
| Dispatcher | memilih dan menjalankan | main, execute_option, call_option, is_in_options (GhostTR.py:296-30615, GhostTR.py:230-24216, GhostTR.py:219-22717, GhostTR.py:252-25618) |
| Data | registrasi fitur | daftar options berisi kunci num, text, dan func (GhostTR.py:179-20710) |
| Handler | pekerjaan pelacakan | IP_Track, phoneGW, TrackLu, showIP (GhostTR.py:39-17619) |
Urutan pemanggilan tetap: main membersihkan layar, memanggil option, lalu membaca int(input(...)); nilai itu diteruskan ke execute_option (GhostTR.py:296-30615). execute_option memanggil call_option, menahan layar dengan input('... Press enter to continue'), lalu kembali ke main (GhostTR.py:230-24216). call_option lebih dulu memverifikasi nomor lewat is_in_options dan melempar ValueError('Option not found') bila nomor tidak terdaftar (GhostTR.py:219-22717, GhostTR.py:252-25618).
⚠️ Registrasi fitur tersebar di dua tempat. Satu handler harus didefinisikan sebagai fungsi dan didaftarkan ulang sebagai entri
options; tidak ada mekanisme penemuan otomatis. Entri yang kehilangan kuncifunchanya mencetakNo function detecteddan tidak melakukan apa pun (GhostTR.py:179-20710, GhostTR.py:219-22717).
Dekorator dan palet warna bersama
Semua handler memakai satu dekorator yang sama, is_option. wrapper di dalamnya memanggil run_banner() lebih dulu, baru mengeksekusi func(*args, **kwargs) (GhostTR.py:30-3620). Perilakunya dirinci di Banner dan Dekorator is_option.
Delapan konstanta warna ANSI (Bl, Re, Gr, Ye, Blu, Mage, Cy, Wh) didefinisikan sekali di bagian atas berkas dan dipakai ulang oleh setiap print di menu maupun handler (GhostTR.py:17-2421). Karena itu seluruh tampilan perkakas konsisten tanpa modul tema terpisah.
Ketergantungan ke pustaka luar
Berkas hanya mengimpor json, requests, time, os, phonenumbers, dan stderr (GhostTR.py:7-153). requests dipakai untuk memanggil API pada handler IP dan username, sedangkan phonenumbers beserta carrier, geocoder, dan timezone hanya dipakai handler nomor telepon (GhostTR.py:39-17619). Dua pustaka itulah isi requirements.txt, sehingga pip3 install -r requirements.txt sebelum menjalankan skrip sudah cukup (requirements.txt:1-24). Rincian endpoint per handler ada di Peta Endpoint dan Konfigurasi.
Karena arsitekturnya satu berkas, membaca GhostTR.py dari atas ke bawah sudah cukup untuk memahami seluruh program: konstanta, dekorator, handler, tabel options, dispatcher, banner, lalu entry point. Alur menu secara langkah demi langkah dibahas di Alur Eksekusi Menu.