Мб кому-то будет полезным. Код написан за 2 минуты через гпт. Работает хорошо и шустро, при желании можно допилить. Генерирует юзернеймы по заранее заданным словам-парам, а затем проверяет их занятость. В любом случае, удобная штука, легче чем самому вручную все сидеть придумывать и чекать. Генерирует без всякой хуйни и цифр, в качестве разделителя используется только "_". Настройки: - max_combinations=500 - максимальное количество генераций. - max_length = 12 - максимальная длина юзернейма. - word_pairs - пары слов из которых генерируются юзернеймы, можете как добавить, так и удалить. скрин работы скрипта import itertools import requests import time from urllib.parse import quote def generate_usernames(word_pairs, max_length, max_combinations=500): """ Генерирует варианты юзернеймов на основе пар слов :param word_pairs: список пар слов :param max_length: максимальная длина юзернейма :param max_combinations: максимальное количество комбинаций для генерации :return: список юзернеймов """ usernames = set() for word1, word2 in word_pairs: # Приводим слова к нижнему регистру и удаляем пробелы w1 = word1.lower().replace(" ", "") w2 = word2.lower().replace(" ", "") # Генерируем варианты без разделителя variants = [ f"{w1}{w2}", f"{w2}{w1}" ] # Генерируем варианты с разделителем _ variants.extend([ f"{w1}_{w2}", f"{w2}_{w1}" ]) # Добавляем только те варианты, которые соответствуют максимальной длине for variant in variants: if len(variant) <= max_length: usernames.add(variant) # Ограничиваем количество комбинаций return list(usernames)[:max_combinations] def check_telegram_username(username): """ Проверяет доступность юзернейма в Telegram :param username: юзернейм для проверки :return: True если доступен, False если занят """ url = f"https://t.me/{quote(username)}" try: response = requests.get(url, timeout=10) if "If you have <strong>Telegram</strong>, you can contact" in response.text: return True return False except Exception as e: print(f"Ошибка при проверке {username}: {e}") return False def main(): print("=== Генератор и чекер юзернеймов Telegram ===") # Задаем пары слов согласно требованиям word_pairs = [ ("tree", "cat"), ("car", "dark"), ("yellow", "wolf"), ("beautiful", "ship"), ("sword", "stone"), ("diamond", "bread") ] max_length = 12 # Генерируем юзернеймы print("\nГенерация юзернеймов...") usernames = generate_usernames(word_pairs, max_length) print(f"Сгенерировано {len(usernames)} вариантов") # Проверяем доступность print("\nПроверка доступности юзернеймов...") available = [] for i, username in enumerate(usernames, 1): print(f"Проверка {i}/{len(usernames)}: {username}", end='\r') if check_telegram_username(username): available.append(username) print(f"Найден свободный юзернейм: {username}") time.sleep(1) # Чтобы не получить блокировку # Выводим результаты print("\n\n=== Результаты ===") if available: print("Доступные юзернеймы:") for username in available: print(f"• {username}") print(f"\nВсего найдено: {len(available)} свободных юзернеймов") else: print("Не найдено свободных юзернеймов по заданным критериям") # Сохраняем в файл if available: with open("good.txt", "w") as f: f.write("\n".join(available)) print("Список сохранен в файл 'good.txt'") if __name__ == "__main__": main() Python import itertools import requests import time from urllib.parse import quote def generate_usernames(word_pairs, max_length, max_combinations=500): """ Генерирует варианты юзернеймов на основе пар слов :param word_pairs: список пар слов :param max_length: максимальная длина юзернейма :param max_combinations: максимальное количество комбинаций для генерации :return: список юзернеймов """ usernames = set() for word1, word2 in word_pairs: # Приводим слова к нижнему регистру и удаляем пробелы w1 = word1.lower().replace(" ", "") w2 = word2.lower().replace(" ", "") # Генерируем варианты без разделителя variants = [ f"{w1}{w2}", f"{w2}{w1}" ] # Генерируем варианты с разделителем _ variants.extend([ f"{w1}_{w2}", f"{w2}_{w1}" ]) # Добавляем только те варианты, которые соответствуют максимальной длине for variant in variants: if len(variant) <= max_length: usernames.add(variant) # Ограничиваем количество комбинаций return list(usernames)[:max_combinations] def check_telegram_username(username): """ Проверяет доступность юзернейма в Telegram :param username: юзернейм для проверки :return: True если доступен, False если занят """ url = f"https://t.me/{quote(username)}" try: response = requests.get(url, timeout=10) if "If you have <strong>Telegram</strong>, you can contact" in response.text: return True return False except Exception as e: print(f"Ошибка при проверке {username}: {e}") return False def main(): print("=== Генератор и чекер юзернеймов Telegram ===") # Задаем пары слов согласно требованиям word_pairs = [ ("tree", "cat"), ("car", "dark"), ("yellow", "wolf"), ("beautiful", "ship"), ("sword", "stone"), ("diamond", "bread") ] max_length = 12 # Генерируем юзернеймы print("\nГенерация юзернеймов...") usernames = generate_usernames(word_pairs, max_length) print(f"Сгенерировано {len(usernames)} вариантов") # Проверяем доступность print("\nПроверка доступности юзернеймов...") available = [] for i, username in enumerate(usernames, 1): print(f"Проверка {i}/{len(usernames)}: {username}", end='\r') if check_telegram_username(username): available.append(username) print(f"Найден свободный юзернейм: {username}") time.sleep(1) # Чтобы не получить блокировку # Выводим результаты print("\n\n=== Результаты ===") if available: print("Доступные юзернеймы:") for username in available: print(f"• {username}") print(f"\nВсего найдено: {len(available)} свободных юзернеймов") else: print("Не найдено свободных юзернеймов по заданным критериям") # Сохраняем в файл if available: with open("good.txt", "w") as f: f.write("\n".join(available)) print("Список сохранен в файл 'good.txt'") if __name__ == "__main__": main() Вторая версия скрипта. Проверяет занятость юзера на fragment'е, добавлен второй режим работы, функционал: - В отличие от первого режима, генерирует не из заданных ранее слов-пар, а из одного заданного слова+заданных букв. - Возможность задать буквы, которые будут использованы для генерации. - Возможность включить подстановку букв в начале/конце при генерации. скрин работы скрипта Из минусов то, что не чекает заблокированные телегой юзеры, отмечает их как валидные. Например, юзеры cryptoas и x_crypto на скрине - заблоканы телегой. import itertools import requests import time from urllib.parse import quote def generate_mode1_usernames(word_pairs, max_length, max_combinations=500): """Режим 1: Генерация из пар слов""" usernames = set() for word1, word2 in word_pairs: w1 = word1.lower().replace(" ", "") w2 = word2.lower().replace(" ", "") variants = [ f"{w1}{w2}", f"{w2}{w1}", f"{w1}_{w2}", f"{w2}_{w1}" ] for variant in variants: if len(variant) <= max_length: usernames.add(variant) return list(usernames)[:max_combinations] def generate_mode2_usernames(base_word, allowed_chars, max_length, add_to_beginning=True, add_to_end=True, max_combinations=500): """Режим 2: Генерация из базового слова + разрешенных букв""" base_word = base_word.lower().replace(" ", "") allowed_chars = [c.lower().strip() for c in allowed_chars if c.strip().isalpha()] if not allowed_chars: return [] usernames = set() max_add_length = min(3, max_length - len(base_word)) for length in range(1, max_add_length + 1): for combo in itertools.product(allowed_chars, repeat=length): chars = ''.join(combo) # Добавление в начало if add_to_beginning: # Без разделителя variant = chars + base_word if len(variant) <= max_length: usernames.add(variant) # С разделителем if len(chars) + 1 + len(base_word) <= max_length: usernames.add(f"{chars}_{base_word}") # Добавление в конец if add_to_end: # Без разделителя variant = base_word + chars if len(variant) <= max_length: usernames.add(variant) # С разделителем if len(base_word) + 1 + len(chars) <= max_length: usernames.add(f"{base_word}_{chars}") # Комбинированные варианты (префикс + база + суффикс) if length >= 2 and add_to_beginning and add_to_end: for split_pos in range(1, length): prefix = ''.join(combo[:split_pos]) suffix = ''.join(combo[split_pos:]) # Без разделителей variant = prefix + base_word + suffix if len(variant) <= max_length: usernames.add(variant) # С разделителями if len(prefix) + 1 + len(base_word) + 1 + len(suffix) <= max_length: usernames.add(f"{prefix}_{base_word}_{suffix}") return list(usernames)[:max_combinations] def check_telegram_username(username): """Проверяет доступность юзернейма в Telegram""" url = f"https://t.me/{quote(username)}" try: response = requests.get(url, timeout=5) return "If you have <strong>Telegram</strong>, you can contact" in response.text except Exception as e: print(f"Ошибка при проверке Telegram {username}: {e}") return False def check_fragment_username(username): """Проверяет, не выставлен ли юзернейм на продажу на Fragment""" url = f"https://fragment.com/username/{username}" headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36', 'Accept-Language': 'en-US,en;q=0.9' } try: response = requests.get(url, headers=headers, timeout=5, allow_redirects=False) # Если редирект на главную с параметром query - юзернейм свободен if response.status_code == 302 and 'fragment.com/?query=' in response.headers.get('Location', ''): return True # Если страница загрузилась без редиректа - юзернейм занят if response.status_code == 200: return False return True except Exception as e: print(f"Ошибка при проверке Fragment {username}: {e}") return True # В случае ошибки считаем свободным def check_username_availability(username): """Комплексная проверка доступности""" return check_telegram_username(username) and check_fragment_username(username) def run_mode1(): """Запуск режима 1 (пары слов)""" print("\n--- Режим 1: Генерация из пар слов ---") word_pairs = [ ("cat", "dog"), ("ship", "sword"), ("stone", "phone"), ("mouse", "cheer"), ("bear", "door"), ("floor", "room") ] max_length = int(input("Введите максимальную длину юзернейма (по умолчанию 12): ") or 12) check_delay = float(input("Введите задержку между проверками (по умолчанию 0.5 сек): ") or 0.5) print("\nГенерация юзернеймов...") usernames = generate_mode1_usernames(word_pairs, max_length) print(f"Сгенерировано {len(usernames)} вариантов") return usernames, check_delay def run_mode2(): """Запуск режима 2 (базовое слово + буквы)""" print("\n--- Режим 2: Генерация из базового слова + букв ---") base_word = input("Введите базовое слово (например '***'): ").strip() allowed_chars = input("Введите разрешенные буквы через запятую (например a,b,c,d): ").strip().split(',') max_length = int(input("Введите максимальную длину юзернейма (например 6): ")) print("\nОпции генерации:") add_to_beginning = input("Добавлять буквы в начало? (y/n, по умолчанию y): ").strip().lower() != 'n' add_to_end = input("Добавлять буквы в конец? (y/n, по умолчанию y): ").strip().lower() != 'n' check_delay = float(input("\nВведите задержку между проверками (по умолчанию 0.5 сек): ") or 0.5) print("\nГенерация юзернеймов...") usernames = generate_mode2_usernames( base_word=base_word, allowed_chars=allowed_chars, max_length=max_length, add_to_beginning=add_to_beginning, add_to_end=add_to_end ) print(f"Сгенерировано {len(usernames)} вариантов") return usernames, check_delay def check_usernames(usernames, check_delay): """Проверка сгенерированных юзернеймов""" print("\nПроверка доступности (Telegram + Fragment)...") available = [] for i, username in enumerate(usernames, 1): print(f"Проверка {i}/{len(usernames)}: {username.ljust(20)}", end='\r') if check_username_availability(username): available.append(username) print(f"Найден свободный: {username.ljust(20)}") time.sleep(check_delay) return available def main(): print("=== Генератор юзернеймов Telegram ===") print("Режимы работы:") print("1. Генерация из пар слов") print("2. Генерация из базового слова + букв") while True: mode = input("Выберите режим (1 или 2): ").strip() if mode in ['1', '2']: break print("Ошибка: введите 1 или 2") if mode == '1': usernames, check_delay = run_mode1() else: usernames, check_delay = run_mode2() available = check_usernames(usernames, check_delay) print("\n\n=== Результаты ===") if available: print(f"Найдено {len(available)} свободных юзернеймов:") for username in available: print(f"• {username}") with open("free_usernames.txt", "w", encoding='utf-8') as f: f.write("\n".join(available)) print("\nСписок сохранен в файл 'free_usernames.txt'") else: print("Свободных юзернеймов не найдено") if __name__ == "__main__": main() Python import itertools import requests import time from urllib.parse import quote def generate_mode1_usernames(word_pairs, max_length, max_combinations=500): """Режим 1: Генерация из пар слов""" usernames = set() for word1, word2 in word_pairs: w1 = word1.lower().replace(" ", "") w2 = word2.lower().replace(" ", "") variants = [ f"{w1}{w2}", f"{w2}{w1}", f"{w1}_{w2}", f"{w2}_{w1}" ] for variant in variants: if len(variant) <= max_length: usernames.add(variant) return list(usernames)[:max_combinations] def generate_mode2_usernames(base_word, allowed_chars, max_length, add_to_beginning=True, add_to_end=True, max_combinations=500): """Режим 2: Генерация из базового слова + разрешенных букв""" base_word = base_word.lower().replace(" ", "") allowed_chars = [c.lower().strip() for c in allowed_chars if c.strip().isalpha()] if not allowed_chars: return [] usernames = set() max_add_length = min(3, max_length - len(base_word)) for length in range(1, max_add_length + 1): for combo in itertools.product(allowed_chars, repeat=length): chars = ''.join(combo) # Добавление в начало if add_to_beginning: # Без разделителя variant = chars + base_word if len(variant) <= max_length: usernames.add(variant) # С разделителем if len(chars) + 1 + len(base_word) <= max_length: usernames.add(f"{chars}_{base_word}") # Добавление в конец if add_to_end: # Без разделителя variant = base_word + chars if len(variant) <= max_length: usernames.add(variant) # С разделителем if len(base_word) + 1 + len(chars) <= max_length: usernames.add(f"{base_word}_{chars}") # Комбинированные варианты (префикс + база + суффикс) if length >= 2 and add_to_beginning and add_to_end: for split_pos in range(1, length): prefix = ''.join(combo[:split_pos]) suffix = ''.join(combo[split_pos:]) # Без разделителей variant = prefix + base_word + suffix if len(variant) <= max_length: usernames.add(variant) # С разделителями if len(prefix) + 1 + len(base_word) + 1 + len(suffix) <= max_length: usernames.add(f"{prefix}_{base_word}_{suffix}") return list(usernames)[:max_combinations] def check_telegram_username(username): """Проверяет доступность юзернейма в Telegram""" url = f"https://t.me/{quote(username)}" try: response = requests.get(url, timeout=5) return "If you have <strong>Telegram</strong>, you can contact" in response.text except Exception as e: print(f"Ошибка при проверке Telegram {username}: {e}") return False def check_fragment_username(username): """Проверяет, не выставлен ли юзернейм на продажу на Fragment""" url = f"https://fragment.com/username/{username}" headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36', 'Accept-Language': 'en-US,en;q=0.9' } try: response = requests.get(url, headers=headers, timeout=5, allow_redirects=False) # Если редирект на главную с параметром query - юзернейм свободен if response.status_code == 302 and 'fragment.com/?query=' in response.headers.get('Location', ''): return True # Если страница загрузилась без редиректа - юзернейм занят if response.status_code == 200: return False return True except Exception as e: print(f"Ошибка при проверке Fragment {username}: {e}") return True # В случае ошибки считаем свободным def check_username_availability(username): """Комплексная проверка доступности""" return check_telegram_username(username) and check_fragment_username(username) def run_mode1(): """Запуск режима 1 (пары слов)""" print("\n--- Режим 1: Генерация из пар слов ---") word_pairs = [ ("cat", "dog"), ("ship", "sword"), ("stone", "phone"), ("mouse", "cheer"), ("bear", "door"), ("floor", "room") ] max_length = int(input("Введите максимальную длину юзернейма (по умолчанию 12): ") or 12) check_delay = float(input("Введите задержку между проверками (по умолчанию 0.5 сек): ") or 0.5) print("\nГенерация юзернеймов...") usernames = generate_mode1_usernames(word_pairs, max_length) print(f"Сгенерировано {len(usernames)} вариантов") return usernames, check_delay def run_mode2(): """Запуск режима 2 (базовое слово + буквы)""" print("\n--- Режим 2: Генерация из базового слова + букв ---") base_word = input("Введите базовое слово (например '***'): ").strip() allowed_chars = input("Введите разрешенные буквы через запятую (например a,b,c,d): ").strip().split(',') max_length = int(input("Введите максимальную длину юзернейма (например 6): ")) print("\nОпции генерации:") add_to_beginning = input("Добавлять буквы в начало? (y/n, по умолчанию y): ").strip().lower() != 'n' add_to_end = input("Добавлять буквы в конец? (y/n, по умолчанию y): ").strip().lower() != 'n' check_delay = float(input("\nВведите задержку между проверками (по умолчанию 0.5 сек): ") or 0.5) print("\nГенерация юзернеймов...") usernames = generate_mode2_usernames( base_word=base_word, allowed_chars=allowed_chars, max_length=max_length, add_to_beginning=add_to_beginning, add_to_end=add_to_end ) print(f"Сгенерировано {len(usernames)} вариантов") return usernames, check_delay def check_usernames(usernames, check_delay): """Проверка сгенерированных юзернеймов""" print("\nПроверка доступности (Telegram + Fragment)...") available = [] for i, username in enumerate(usernames, 1): print(f"Проверка {i}/{len(usernames)}: {username.ljust(20)}", end='\r') if check_username_availability(username): available.append(username) print(f"Найден свободный: {username.ljust(20)}") time.sleep(check_delay) return available def main(): print("=== Генератор юзернеймов Telegram ===") print("Режимы работы:") print("1. Генерация из пар слов") print("2. Генерация из базового слова + букв") while True: mode = input("Выберите режим (1 или 2): ").strip() if mode in ['1', '2']: break print("Ошибка: введите 1 или 2") if mode == '1': usernames, check_delay = run_mode1() else: usernames, check_delay = run_mode2() available = check_usernames(usernames, check_delay) print("\n\n=== Результаты ===") if available: print(f"Найдено {len(available)} свободных юзернеймов:") for username in available: print(f"• {username}") with open("free_usernames.txt", "w", encoding='utf-8') as f: f.write("\n".join(available)) print("\nСписок сохранен в файл 'free_usernames.txt'") else: print("Свободных юзернеймов не найдено") if __name__ == "__main__": main()