import os import requests import time from datetime import datetime, timedelta import urllib3 # Nonaktifkan peringatan SSL urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) # Token dan chat ID Telegram telegram_bot_token = "7873878930:AAEXqR4z7PQWECKWHtVLJZbpqLhxPxiG0EU" telegram_chat_id = "-4663505528" # Token dan chat ID untuk Telegram #telegram_bot_token = "7782992742:AAHdX0vHwqXS8dJrjQJvr8tkFmWQ84v4sDg" #telegram_chat_id = "-4653669484" # Fungsi mendapatkan waktu sekarang dalam WIB (manual offset) def get_wib_time(): return datetime.utcnow() + timedelta(hours=7) # Fungsi kirim pesan ke Telegram def send_telegram_message(domain, status, list_category, error_details=None): url = "https://api.telegram.org/bot{}/sendMessage".format(telegram_bot_token) current_time = get_wib_time() message = "šŸ”” *Pengecekan Status Domain*\n\n" \ "Domain: `{}`\n" \ "Status: *{}*\n" \ "Kategori: *{}*\n".format(domain, status, list_category) if error_details: message += "Detail Error: `{}`\n".format(error_details) message += "\nšŸ“… {}".format(current_time.strftime("%Y-%m-%d %H:%M:%S WIB")) payload = { "chat_id": telegram_chat_id, "text": message, "parse_mode": "Markdown", } try: response = requests.post(url, data=payload) response.raise_for_status() print("āœ… Pesan terkirim ke Telegram untuk domain: {} (Status: {})".format(domain, status)) except requests.exceptions.RequestException as e: print("āŒ Error saat mengirim ke Telegram: {}".format(e)) # Fungsi cek status domain def check_domain_status(domain, retries=3): for attempt in range(retries): try: response = requests.get("https://{}".format(domain), timeout=10, verify=True) if response.status_code == 200: return "UP" elif response.status_code == 403: return "UP (HTTP 403)" else: return "DOWN (HTTP {})".format(response.status_code) except requests.exceptions.SSLError as e: return "SSL ERROR", str(e) except requests.exceptions.RequestException: if attempt < retries - 1: print("āš ļø Gagal menghubungi {}, mencoba ulang ({}/{})...".format(domain, attempt+1, retries)) time.sleep(2) else: return "DOWN (Timeout atau Error)", None # Fungsi cek domain dari file def check_domains(file_name, list_category): try: with open(file_name, "r") as file: for idx, domain in enumerate(file, start=1): domain = domain.strip() if domain: result = check_domain_status(domain) if isinstance(result, tuple): status, error_details = result else: status = result error_details = None current_time_str = get_wib_time().strftime("%Y-%m-%d %H:%M:%S WIB") print("{:<5} {:<30} {:<20} {:<20} {}".format(idx, domain, status, current_time_str, list_category)) with open("status.log", "a") as log_file: log_file.write("{} - {} - {} - {}\n".format(current_time_str, domain, status, list_category)) if "DOWN" in status or "SSL ERROR" in status: send_telegram_message(domain, status, list_category, error_details) except IOError: print("āŒ File '{}' tidak ditemukan, melewati kategori ini.".format(file_name)) except Exception as e: print("āš ļø Error saat membaca '{}': {}".format(file_name, e)) # Bersihkan terminal def clear_terminal(): os.system('cls' if os.name == 'nt' else 'clear') # Fungsi utama def main(): file_categories = { #"AMP.txt": "AMP", "LP_Ads.txt": "LP Ads", "Mainsite.txt": "Mainsite", "MS_Ads.txt": "Mainsite Ads", "sosmed.txt": "GOChat", "jagalink.txt": "Jagalink", "xavier.txt": "Xavi3r", "MasterMiror.txt": "Master Mirror", #"MasterDomainMirror.txt": "Master Domain Mirror", } try: while True: clear_terminal() print("=" * 80) print("{:^80}".format("MEMULAI PENGECEKAN DOMAIN")) print("=" * 80) print("{:<5} {:<30} {:<20} {:<20} {:<20}".format("No", "Domain", "Status", "Waktu", "Kategori")) print("-" * 80) for file_name, list_category in file_categories.items(): check_domains(file_name, list_category) end_time = get_wib_time().strftime("%Y-%m-%d %H:%M:%S WIB") print("-" * 80) print("{:^80}".format("Selesai Pengecekan: {}".format(end_time))) print("{:^80}".format("Pengecekan berikutnya dalam 5 menit...")) print("=" * 80) time.sleep(5 * 60) except KeyboardInterrupt: print("\nšŸš€ Dihentikan oleh pengguna. Program berhenti.\n") if __name__ == "__main__": main()