Загрузка...

Script Generator and Chekter of userneims TG Python

Thread in Python created by Правый May 2, 2025. (bumped Jun 26, 2025) 505 views

  1. Правый
    Правый Topic starter May 2, 2025 Волос кучерявый 756 Nov 4, 2016
    Мб кому-то будет полезным. Код написан за 2 минуты через гпт. Работает хорошо и шустро, при желании можно допилить. Генерирует юзернеймы по заранее заданным словам-парам, а затем проверяет их занятость. В любом случае, удобная штука, легче чем самому вручную все сидеть придумывать и чекать. Генерирует без всякой хуйни и цифр, в качестве разделителя используется только "_".

    Настройки:
    - max_combinations=500 - максимальное количество генераций.
    - max_length = 12 - максимальная длина юзернейма.
    - word_pairs - пары слов из которых генерируются юзернеймы, можете как добавить, так и удалить.

    [IMG]
    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'е, добавлен второй режим работы, функционал:

    - В отличие от первого режима, генерирует не из заданных ранее слов-пар, а из одного заданного слова+заданных букв.
    - Возможность задать буквы, которые будут использованы для генерации.
    - Возможность включить подстановку букв в начале/конце при генерации.

    [IMG]
    Из минусов то, что не чекает заблокированные телегой юзеры, отмечает их как валидные. Например, юзеры cryptoas и x_crypto на скрине - заблоканы телегой.


    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()
     
    1. View previous comments (9)
    2. n1s_01
      Правый, нууу звучит как бесполезно, но ладно молодец, удачи
    3. Правый Topic starter
    4. Правый Topic starter
      Ivan_vois, сча закину код, добавил проверку на фрагменте
Loading...
Top