Загрузка...

Скрипт Генератор и чекер юзернеймов тг Python

Тема в разделе Python создана пользователем Правый 2 май 2025. (поднята 11 май 2025) 340 просмотров

Загрузка...
  1. Правый
    Правый Автор темы 2 май 2025 Волос кучерявый 761 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()
     
    2 май 2025 Изменено
    1. Посмотреть предыдущие комментарии (9)
    2. n1s_01
      Правый, нууу звучит как бесполезно, но ладно молодец, удачи
    3. Правый Автор темы
      Ivan_vois, сча закину код, добавил проверку на фрагменте
      2 май 2025 Изменено
Top