Для одного проекта мне понадобился короткий ник в Telegram.

Минимальная длинна ника в тг - 5 символов.

Доступный алфавит - [_a-z0-9] (37 символов).

37^5 = 69 343 957

Значит мы имеем, порядка, 70 миллионов возможных, наиболее, коротких ников. Число большое, но чисто теоретически, могло быть занято (у Telegram, порядка, миллиарда активных пользователей в месяц).

У меня есть скрипт для проверки "зарегистрированности" ников крупными пачками.

Возведу уровень абстракции в абсолют и объясню свои намерения python-кодом. Для примера я решил найти все минимальные доступные ники начинающиеся с iaml:

from string import printable

ALPHABET = printable[:36] + "_"

for i in ALPHABET:
    username = "iaml" + i
    if await check(username):
        print(username)

На выходе мы имеем следующий список ников:

>>> iamlr, iamly, iamlf, iamlm, iaml3, iaml7

Меня заинтересовал iamly. Но при попытке зарегистрировать аккаунт на это имя у меня не получилось...

Оказалось, что ник действительно никем не занят, но выставлен на продажу на платформе fragment.

После беглого аудита у меня появилось ощущение, что все минимальные возможные ники (4-5 символов) заняты (а точнее выставлены на продажу на fragment.

> Ага, и именно сейчас fragment упал...

Вернувшись к проекту через пару недель, я начал ресёрч материалов, касательно закрытого/открытого API фрагмента.

Явного упоминания открытого API на сайте/в поиске я не нашёл (что, не свойственно для проектов Telegram). Значит будет интересно найти способ получения информации.

Первым делом, я, разумеется, проанализировал запросы в параметрах для разработчиков, но это не результатов.

Я уже начал задумываться о реверс-инженеринге мини-приложения в тг, но перед этим решил проверить стандартные пути для API, так сказать методом подбора:

https://api.fragment.com/
https://fragment.com/api/

И второй вариант, всё же дал результат.

{"error":"Bad request"}

После этого я просто погуглил/поискал на github: "fragment.com/api": нашёл 3 репозитория и начал разбираться в одном из них.

Когда я попытался повторить запрос в insomnia (open sourse аналог postman-а), это на удивление не дало результатов.

Скопировал код (меня интересовал только один файл из репозитория), отформатировал, переписал на aiohttp (асинхронная python-библиотека для выполнения http запросов) и оптимизировал, чтобы в процессе понять логику.

> Оказалось, что проблема была в том, что fragment пробрасывает hash для доступа к API: https://fragment.com/api?hash=9e123e5e1aab123456.

Пробросил. Всё работает. Для проверки попробую докопаться до себя:

{
    "ok": True,
    "html": (
        '<...> <div class="<...> tm-value">@iamlostshe</div><...>'
        '<div class=" tm-value">Unknown</div><...>'
        '<div class=" tm-value">Taken</div><...>',
    ),
    "url": '/?query=iamlostshe',
    "expire": 1759692855,
    "show_recent_bids": False,
}

Обновим код, для проверки гипотезы из начала статьи: о том что нет свободных пяти-символьных ников.

from string import printable

ALPHABET = printable[:36] + "_"

for i in ALPHABET:
    for j in ALPHABET:
        username = "iam" + i + j

        if (
            await telegram_checker.check(username) != "Taken"
            and await fragment_checker.check(username) == "Unavailable"
        ):
            print(username)

Такие ники выводятся, при запуске:

>>> iam0b, iam0c, iam0e, iam0h, iam0s, iam0t, iam0w, iam0y, ...
Немного мыслей об уникальности ников

По нику можно многое сказать о человеке, а можно ли оценить его уникальность, универсальным скриптом?

Для начала предлагаю определить, что делает ник уникальным:

1. Длинна - 5-32 символа, чем меньше, тем ценнее.

2. Количество слов (визуальных, например, 1 можно прочитать как l), чем меньше, тем лучше, но если нет, то 0 баллов (буду проверять только 10К самых популярных английских слов).

3. Состоит из одинаковых символов, например @aaaaa.

Предлагаю написать функцию для оценки:

from check_correct import check_correct

_CHARACTER_FREQUENCY = {
    "9": "g",
    "6": "b",
    "4": "a",
    "3": "e",
    "1": "i",
    "1": "l",
    "0": "o",
    "5": "s",
    "7": "t",
    "2": "z",
}

def unique_check(nick: str) -> int:
    """Проверка уникальности ника Telegram.

    Возвращает число от 0 до 300 - показатель уникальности ника.
    """

    if not check_correct(nick):
        print(f"[{nick}] Некорректный юзернейм для оценки уникальности")
        return -1

    res = 0
    nick = nick.lower()

    for k, v in _CHARACTER_FREQUENCY.items():
        nick.replace(k, v)

    res += 100 - (len(nick) - 5) * 100 / 27

    if nick.count(nick[0]) == len(nick):
        res += 100

    return res

Комментарии (3)


  1. nikerossxp
    03.12.2025 21:29

    А потом из-за таких деятелей затянут гайки всем, как всегда.


    1. imalostshe Автор
      03.12.2025 21:29

      fragment-а? или о чём речь?

      если так, то я в любом случае, не раскрываю полного механизма работы.


  1. Chirkeshov_DC
    03.12.2025 21:29

    Ты гений

    Удевлен такими разработками талантами

    Во сколько начинал программировать если не секрет?