import requests import csv import random import string from bs4 import BeautifulSoup from colorama import init, Fore, Style from datetime import datetime init(autoreset=True) # === ASCII-БАННЕР === banner = r''' ********╗ ******╗ *******╗ ******╗ ******╗ *****╗ ***╗ **╗ ╚══**╔══╝**╔═══**╗**╔════╝**╔═══**╗**╔════╝ **╔══**╗****╗ **║ **║ **║ **║*******╗**║ **║**║ ***╗*******║**╔**╗ **║ **║ **║ **║╚════**║**║ **║**║ **║**╔══**║**║╚**╗**║ **║ ╚******╔╝*******║╚******╔╝╚******╔╝**║ **║**║ ╚****║ ╚═╝ ╚═════╝ ╚══════╝ ╚═════╝ ╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═══╝ Telegram Username Scanner — by O0O ''' print(Fore.CYAN + banner) def log(message): with open("log.txt", "a", encoding="utf-8") as f: timestamp = datetime.now().strftime("[%Y-%m-%d %H:%M:%S]") f.write(f"{timestamp} {message}\n") log("=== Запуск скрипта ===") base_username = input(Fore.GREEN + " Введите базовый username для анализа: ").strip().lower() log(f"Пользователь ввёл базовый username: {base_username}") extra_chars = ['.', '_', '1', 'x', 'bot', 'official'] stats = {"занято": 0, "свободно": 0, "на продаже": 0, "ошибка": 0} results = [] def generate_variations(base, limit=10): variants = set() variants.add(base) while len(variants) < limit + 1: suffix = ''.join(random.choices(string.ascii_lowercase + string.digits, k=2)) variant = f"{base}{random.choice(extra_chars)}{suffix}" variants.add(variant) return list(variants) def is_taken(username): url = f"https://t.me/{username}" try: response = requests.get(url, timeout=5) return response.status_code == 200 except Exception as e: log(f"[ERROR] Ошибка при проверке Telegram для {username}: {e}") return None def is_on_fragment(username): url = f"https://fragment.com/username/{username}" headers = {'User-Agent': 'Mozilla/5.0'} try: response = requests.get(url, headers=headers, timeout=5) if response.status_code == 404: return False return "Buy Now" in response.text or "Highest Bid" in response.text except Exception as e: log(f"[ERROR] Ошибка при запросе Fragment для {username}: {e}") return False usernames = generate_variations(base_username, 10) for i, username in enumerate(usernames, 1): print(Fore.MAGENTA + f"\n[{i}/{len(usernames)}] {username}") log(f"Проверка ника: {username}") status = "неизвестно" fragment = "нет" suggestions = [] taken = is_taken(username) if taken is None: print(Fore.RED + " Ошибка при проверке Telegram") stats["ошибка"] += 1 status = "ошибка" elif taken: print(Fore.RED + " Telegram: ЗАНЯТ") stats["занято"] += 1 status = "занят" suggestions = generate_variations(username, 5) print(Fore.BLUE + " Похожие:") for s in suggestions: print(" - " + s) log(f"{username} занят. Сгенерированы похожие: {suggestions}") else: print(Fore.GREEN + " Telegram: СВОБОДЕН") stats["свободно"] += 1 status = "свободен" log(f"{username} свободен") if is_on_fragment(username): print(Fore.CYAN + " Fragment: В ПРОДАЖЕ") fragment = "да" stats["на продаже"] += 1 log(f"{username} найден на Fragment (в продаже)") else: print(Fore.WHITE + " Fragment: НЕ НАЙДЕН") results.append({ "username": username, "telegram": status, "fragment": fragment, "suggestions": ", ".join(suggestions) }) with open("results.csv", "w", newline="", encoding="utf-8") as f: writer = csv.DictWriter(f, fieldnames=["username", "telegram", "fragment", "suggestions"]) writer.writeheader() writer.writerows(results) print(Fore.YELLOW + "\n--- СТАТИСТИКА ---") for k, v in stats.items(): print(f"{k.capitalize()}: {v}") log(f"Итоги: {stats}") print(Fore.GREEN + "\nРезультаты сохранены в: results.csv") print(Fore.CYAN + Style.BRIGHT + "\n Работа завершена — by O0O\n") log("=== Завершение скрипта ===\n") Python import requests import csv import random import string from bs4 import BeautifulSoup from colorama import init, Fore, Style from datetime import datetime init(autoreset=True) # === ASCII-БАННЕР === banner = r''' ********╗ ******╗ *******╗ ******╗ ******╗ *****╗ ***╗ **╗ ╚══**╔══╝**╔═══**╗**╔════╝**╔═══**╗**╔════╝ **╔══**╗****╗ **║ **║ **║ **║*******╗**║ **║**║ ***╗*******║**╔**╗ **║ **║ **║ **║╚════**║**║ **║**║ **║**╔══**║**║╚**╗**║ **║ ╚******╔╝*******║╚******╔╝╚******╔╝**║ **║**║ ╚****║ ╚═╝ ╚═════╝ ╚══════╝ ╚═════╝ ╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═══╝ Telegram Username Scanner — by O0O ''' print(Fore.CYAN + banner) def log(message): with open("log.txt", "a", encoding="utf-8") as f: timestamp = datetime.now().strftime("[%Y-%m-%d %H:%M:%S]") f.write(f"{timestamp} {message}\n") log("=== Запуск скрипта ===") base_username = input(Fore.GREEN + " Введите базовый username для анализа: ").strip().lower() log(f"Пользователь ввёл базовый username: {base_username}") extra_chars = ['.', '_', '1', 'x', 'bot', 'official'] stats = {"занято": 0, "свободно": 0, "на продаже": 0, "ошибка": 0} results = [] def generate_variations(base, limit=10): variants = set() variants.add(base) while len(variants) < limit + 1: suffix = ''.join(random.choices(string.ascii_lowercase + string.digits, k=2)) variant = f"{base}{random.choice(extra_chars)}{suffix}" variants.add(variant) return list(variants) def is_taken(username): url = f"https://t.me/{username}" try: response = requests.get(url, timeout=5) return response.status_code == 200 except Exception as e: log(f"[ERROR] Ошибка при проверке Telegram для {username}: {e}") return None def is_on_fragment(username): url = f"https://fragment.com/username/{username}" headers = {'User-Agent': 'Mozilla/5.0'} try: response = requests.get(url, headers=headers, timeout=5) if response.status_code == 404: return False return "Buy Now" in response.text or "Highest Bid" in response.text except Exception as e: log(f"[ERROR] Ошибка при запросе Fragment для {username}: {e}") return False usernames = generate_variations(base_username, 10) for i, username in enumerate(usernames, 1): print(Fore.MAGENTA + f"\n[{i}/{len(usernames)}] {username}") log(f"Проверка ника: {username}") status = "неизвестно" fragment = "нет" suggestions = [] taken = is_taken(username) if taken is None: print(Fore.RED + " Ошибка при проверке Telegram") stats["ошибка"] += 1 status = "ошибка" elif taken: print(Fore.RED + " Telegram: ЗАНЯТ") stats["занято"] += 1 status = "занят" suggestions = generate_variations(username, 5) print(Fore.BLUE + " Похожие:") for s in suggestions: print(" - " + s) log(f"{username} занят. Сгенерированы похожие: {suggestions}") else: print(Fore.GREEN + " Telegram: СВОБОДЕН") stats["свободно"] += 1 status = "свободен" log(f"{username} свободен") if is_on_fragment(username): print(Fore.CYAN + " Fragment: В ПРОДАЖЕ") fragment = "да" stats["на продаже"] += 1 log(f"{username} найден на Fragment (в продаже)") else: print(Fore.WHITE + " Fragment: НЕ НАЙДЕН") results.append({ "username": username, "telegram": status, "fragment": fragment, "suggestions": ", ".join(suggestions) }) with open("results.csv", "w", newline="", encoding="utf-8") as f: writer = csv.DictWriter(f, fieldnames=["username", "telegram", "fragment", "suggestions"]) writer.writeheader() writer.writerows(results) print(Fore.YELLOW + "\n--- СТАТИСТИКА ---") for k, v in stats.items(): print(f"{k.capitalize()}: {v}") log(f"Итоги: {stats}") print(Fore.GREEN + "\nРезультаты сохранены в: results.csv") print(Fore.CYAN + Style.BRIGHT + "\n Работа завершена — by O0O\n") log("=== Завершение скрипта ===\n") Функции 1. Проверка доступности ника Через https://t.me/username Если страница существует — ник занят, иначе свободен 2. Проверка на продажу через Fragment Парсит https://fragment.com/username/{username} Определяет, выставлен ли ник на продажу (или продан) 3. Генерация похожих ников Автоматически создаёт 5 похожих ников при занятости