8
Phone Number Tracker
phoneGW menangani opsi nomor 3, Phone Number Tracker. Entri di list options menyimpan 'num': 3 dengan 'func': phoneGW, sehingga call_option memanggil fungsi itu tanpa argumen (GhostTR.py:192-1961). Fungsi didekorasi @is_option, jadi run_banner dijalankan lebih dulu setiap kali tracker dipilih; mekanisme dekoratornya dibahas di Banner dan Dekorator is_option.
Berbeda dari dua tracker lain, phoneGW tidak menghubungi jaringan sama sekali. Seluruh data berasal dari library phonenumbers, yang diimpor di GhostTR.py:13-142 dan dideklarasikan tanpa pin versi di requirements.txt:1-23.
Input dan default region
phoneGW membaca satu input dengan prompt Enter phone number target Ex [+6281xxxxxxxxx], lalu menetapkan default_region = "ID" (GhostTR.py:80-844). Nilai itu tidak hanya dipakai saat parsing; ia muncul lagi sebagai argumen format panggilan, sehingga satu variabel mengatur dua perilaku.
| Pemakaian | Pemanggilan | Efek |
|---|---|---|
| Parsing | phonenumbers.parse(User_phone, default_region) | nomor tanpa kode negara ditafsirkan sebagai nomor region ID (GhostTR.py:86-895) |
| Format panggilan | format_number_for_mobile_dialing(parsed_number, default_region, with_formatting=True) | keluaran Mobile format mengikuti gaya dialing Indonesia (GhostTR.py:90-976) |
⚠️ Default region ditulis mati sebagai
"ID". Nomor luar negeri tanpa kode negara akan tetap dibaca sebagai nomor Indonesia, dan tidak ada opsi untuk mengubah region lewat argumen maupun input.
Rantai pemanggilan library
phonenumbers.parse mengembalikan satu objek PhoneNumber bernama parsed_number. Semua helper sesudahnya menerima objek itu, bukan string mentah, sehingga input hanya diparse sekali (GhostTR.py:86-895).
sequenceDiagram
autonumber
participant Menu as options
participant P as phoneGW
participant PN as phonenumbers
participant CR as carrier
participant GC as geocoder
participant TZ as timezone
Menu->>P: panggil func lewat wrapper is_option
Note over P: baca input User_phone, set default_region = ID
rect rgb(245,158,11)
P->>PN: parse User_phone dengan default_region
PN-->>P: parsed_number
end
rect rgb(139,92,246)
P->>PN: region_code_for_number
P->>PN: is_valid_number dan is_possible_number
P->>PN: format_number INTERNATIONAL dan E164
P->>PN: format_number_for_mobile_dialing with_formatting=True
P->>PN: number_type
P->>CR: name_for_number bahasa en
CR-->>P: jenis_provider
P->>GC: description_for_number bahasa id
GC-->>P: location
P->>TZ: time_zones_for_number
TZ-->>P: timezone1
P->>P: timezoneF = join timezone1
end
rect rgb(45,125,70)
P-->>Menu: cetak 12 baris informasi lalu cabang Type
end
%% fig: Pemanggilan phonenumbers di dalam phoneGW
%% desc: Satu objek parsed_number dipakai ulang oleh helper phonenumbers, carrier, geocoder, dan timezone, lalu hasilnya dicetak menjadi dua belas baris informasi.carrier dan geocoder dipanggil dengan kode bahasa yang berbeda, "en" untuk operator dan "id" untuk lokasi (GhostTR.py:86-895). Karena itu satu keluaran yang sama dapat mencampur nama operator berbahasa Inggris dengan deskripsi wilayah berbahasa Indonesia.
Nilai turunan dan label keluarannya
| Variabel | Helper yang dipanggil | Label keluaran |
|---|---|---|
location | geocoder.description_for_number(parsed_number, "id") | Location |
region_code | phonenumbers.region_code_for_number | Region Code |
timezoneF | timezone.time_zones_for_number, lalu ', '.join | Timezone |
jenis_provider | carrier.name_for_number(parsed_number, "en") | Operator |
is_valid_number | phonenumbers.is_valid_number | Valid number |
is_possible_number | phonenumbers.is_possible_number | Possible number |
formatted_number | format_number(..., PhoneNumberFormat.INTERNATIONAL) | International format |
formatted_number_for_mobile | format_number_for_mobile_dialing(..., with_formatting=True) | Mobile format |
number_type | phonenumbers.number_type | Type (lihat bagian berikut) |
Baris pertama sampai kedelapan tabel di atas berasal dari blok assignment GhostTR.py:86-895 dan GhostTR.py:90-976, sedangkan seluruh label di kolom ketiga diambil dari blok print di GhostTR.py:99-1127.
E.164 format tidak punya variabel perantara: nilainya dipanggil langsung di dalam print dengan PhoneNumberFormat.E164 (GhostTR.py:99-1127). Baris Country code dan dua baris nomor lokal membaca atribut objek parsed_number, yaitu country_code dan national_number.
Cabang tipe nomor
number_type hanya dipakai untuk memilih satu dari tiga cabang cetak, bukan untuk mengubah nilai lain (GhostTR.py:113-1188).
| Kondisi | Baris Type yang dicetak |
|---|---|
PhoneNumberType.MOBILE | This is a mobile number |
PhoneNumberType.FIXED_LINE | This is a fixed-line number |
| nilai selain kedua konstanta itu | This is another type of number |
⚠️ Cabang
elsemenutupi semua tipe lain, termasuk nomor VoIP atau toll-free. KeluaranThis is another type of numbertidak memberi petunjuk tipe sebenarnya, dan nilainumber_typementah tidak pernah dicetak.
Batasan yang perlu diketahui
Original numberdanLocal numbermencetak atribut yang sama,parsed_number.national_number, sehingga dua baris keluaran selalu identik (GhostTR.py:99-1127).phoneGWtidak memiliki bloktry/exceptsendiri, meskipunphonenumbers.parsedapat gagal pada input yang tidak bisa dibaca (GhostTR.py:80-1189). Bagaimana kegagalan itu merambat ke menu dibahas di Penanganan Error dan Interupsi.- Validasi tidak menghentikan eksekusi: hasil
is_valid_numberdanis_possible_numberhanya dicetak, sehingga nomor tidak valid tetap diproses sampai baris terakhir (GhostTR.py:99-1127).