Lompat ke konten
dokumentasi.id
Commit a5cb8ad
v4
Star20 rb

Kamu membaca versi lama. Halaman ini hanya bisa dibaca.

3.2

Banner, Warna ANSI, dan Helper

Tampilan GhostTR.py dibangun dari tiga bahan kecil di bagian atas berkas: delapan konstanta warna ANSI, decorator is_option, dan helper layar run_banner() serta clear(). Tidak ada modul presentasi terpisah; keempat fitur pelacakan mencetak hasilnya sendiri memakai konstanta yang sama. Ketiga bahan itu dideklarasikan sebelum list options, sehingga semua fitur di bawahnya mewarisi perilaku yang sama (GhostTR.py:17-36).

Konstanta warna ANSI

Baris 17 sampai 24 mendeklarasikan delapan variabel global berisi escape sequence ANSI, misalnya Bl = '\033[30m' dan Wh = '\033[1;37m'. Nilainya berupa string biasa, jadi bisa ditempel langsung ke dalam f-string sebagai {Wh}, {Gr}, atau {Re} (GhostTR.py:17-24).

KonstantaEscape sequenceWarnaPemakaian nyata di berkas
Bl\033[30mhitamhanya baris 17, tidak dipakai lagi
Re\033[1;31mmerah tebalError : {e} pada TrackLu baris 160, [ ! ] Exit pada execute_option baris 240, Please input number baris 304, Exit baris 313
Gr\033[1;32mhijau tebalprompt input, nilai hasil, dan baris teks di dalam banner
Ye\033[1;33mkuning tebalpenanda Username not found baris 158
Blu\033[1;34mbiru tebalhanya baris 21, tidak dipakai lagi
Mage\033[1;35mmagenta tebalhanya baris 22, tidak dipakai lagi
Cy\033[1;36mcyan tebalhanya baris 23, tidak dipakai lagi
Wh\033[1;37mputih teballabel kolom, bingkai [ + ], pembuka teks banner

Dua konstanta yang paling sering muncul adalah Wh untuk label dan bingkai serta Gr untuk nilai hasil dan teks yang ditekankan. Re khusus dipakai pada jalur kegagalan: pesan Error : {e} di TrackLu dan baris [ ! ] Exit di execute_option (GhostTR.py:158-160, GhostTR.py:239-241). Ye dipakai untuk penanda Username not found di dalam blok yang sama, jadi hasil yang tidak ditemukan tetap berwarna kuning meski berada di jalur gagal (GhostTR.py:158-160). Empat konstanta sisanya hanya hadir di blok deklarasi dan tidak dirujuk di tempat lain (GhostTR.py:20-23).

Decorator is_option

is_option menerima satu fungsi dan mengembalikan wrapper yang memanggil run_banner() lebih dulu, lalu menjalankan func(*args, **kwargs). Decorator ini tidak memakai functools.wraps, dan wrapper tidak mengembalikan nilai apa pun dari func (GhostTR.py:29-36).

Pemasangannya memakai sintaks biasa, terlihat pertama pada IP_Track (GhostTR.py:40-41), lalu pada phoneGW (baris 80), TrackLu (baris 121), dan showIP (baris 169). Karena decorator mengganti nama fungsi dengan wrapper, entri func di dalam list options menunjuk ke wrapper, bukan ke badan fungsi aslinya. Akibatnya banner selalu dicetak sebelum fitur mana pun berjalan.

graph TD
  D["@is_option baris 40"] --> W["wrapper(*args, **kwargs)"]
  W --> B["run_banner() baris 275"]
  B --> C["clear() baris 210"]
  C --> X["os.system: cls atau clear"]
  W --> F["func(*args, **kwargs) baris 33"]
  F --> T["IP_Track / showIP / phoneGW / TrackLu"]
  F -.-> N["wrapper mengembalikan None"]
  style D fill:#f59e0b,color:#000
  style W fill:#f59e0b,color:#000
  style C fill:#f59e0b,color:#000
  style B fill:#8b5cf6,color:#fff
  style X fill:#2d7d46,color:#fff
  style F fill:#8b5cf6,color:#fff
  style T fill:#2d7d46,color:#fff
  style N fill:#dc2626,color:#fff
%% fig: Rantai pemanggilan decorator is_option
%% desc: Setiap fitur berdekorasi memanggil run_banner lebih dulu, dan run_banner membersihkan layar sebelum badan fungsi asli dijalankan tanpa mengembalikan nilainya.
Fig. 1: Rantai pemanggilan decorator is_optionSetiap fitur berdekorasi memanggil run_banner lebih dulu, dan run_banner membersihkan layar sebelum badan fungsi asli dijalankan tanpa mengembalikan nilainya.

Helper layar run_banner() dan clear()

run_banner() membersihkan layar, menunggu time.sleep(1), menulis seni ASCII hantu beserta kotak judul GHOST - TRACKER - IP ADDRESS dan @CODE BY HUNXBYTS ke stderr, lalu menunggu time.sleep(0.5). Penulisannya memakai stderr.writelines, bukan print (GhostTR.py:275-293).

clear() adalah pembungkus tipis di atas os.system. Kalau os.name == 'nt' ia menjalankan cls, selain itu menjalankan clear; hasil pemanggilan disimpan ke variabel _ (GhostTR.py:210-216).

Helper atau decoratorBarisPeranDipanggil dari
is_option30-36membungkus fitur dan mencetak banner lebih duludeklarasi @is_option pada tiap fitur
run_banner275-293membersihkan layar, menunggu, menulis seni ASCII hantu ke stderrwrapper di dalam is_option
clear210-216memilih cls atau clear berdasarkan os.namemain, option, dan run_banner
option_text245-249menyusun daftar opsi dari list optionsoption

⚠️ clear() tidak memeriksa kode keluar os.system, jadi kegagalan perintah pembersih layar tidak terdeteksi oleh kode dan banner bisa menumpuk di atas output lama (GhostTR.py:210-216).

⚠️ Karena semua banner ditulis ke stderr lewat stderr.writelines, pengalihan aliran itu akan menghilangkan banner sementara hasil pencetakan ke stdout tetap tampil (GhostTR.py:275-293).

Dua jalur banner

Ada dua banner berbeda dengan helper pembersih yang sama. Banner menu ditulis oleh option(), yang memanggil clear() lalu mencetak seni ASCII GhostTrack, baris C O D E B Y H U N X, dan akhirnya daftar opsi hasil option_text() (GhostTR.py:259-272). option_text() sendiri hanya merangkai string dari list options dengan format [ num ] text (GhostTR.py:245-249). Banner fitur ditulis oleh run_banner(), yang dipanggil decorator sebelum badan fitur berjalan (GhostTR.py:275-293).

Pemanggil clear() ada tiga: main, option, dan run_banner. main sudah memanggil clear() sebelum memanggil option(), lalu option() memanggil clear() sekali lagi (GhostTR.py:296-306). Rincian urutan pemilihan opsi dan pemanggilan execute_option ada di Loop Menu dan Dispatch Opsi.

graph TD
  M["main() baris 296"] --> O["option() baris 259"]
  M --> CL["clear() baris 210"]
  O --> CL
  O --> OT["option_text() baris 245"]
  O --> A1["stderr: ASCII GhostTrack dan C O D E  B Y  H U N X"]
  W["wrapper dari is_option"] --> R["run_banner() baris 275"]
  R --> CL
  R --> A2["stderr: ASCII GHOST - TRACKER - IP ADDRESS"]
  CL --> S["os.system: cls atau clear"]
  style M fill:#8b5cf6,color:#fff
  style O fill:#8b5cf6,color:#fff
  style R fill:#8b5cf6,color:#fff
  style OT fill:#8b5cf6,color:#fff
  style W fill:#f59e0b,color:#000
  style CL fill:#f59e0b,color:#000
  style A1 fill:#2d7d46,color:#fff
  style A2 fill:#2d7d46,color:#fff
  style S fill:#2d7d46,color:#fff
%% fig: Dua banner yang berbagi clear
%% desc: Banner menu dari option() dan banner fitur dari run_banner() sama-sama memanggil clear() sebelum menulis seni ASCII-nya ke stderr.
Fig. 2: Dua banner yang berbagi clearBanner menu dari option() dan banner fitur dari run_banner() sama-sama memanggil clear() sebelum menulis seni ASCII-nya ke stderr.

Pratinjau banner di README

Berkas asset/bn.png tidak dirujuk satu kali pun oleh GhostTR.py; gambar itu dipakai README.md sebagai pratinjau lewat elemen <img src=.../asset/bn.png> (README.md:4). Jadi gambar banner pada README adalah tangkapan layar, sementara yang dicetak program saat berjalan adalah seni ASCII di dalam run_banner() (GhostTR.py:275-293).