Бот «Шерлок» — это автоматизированный инструмент, который по никнейму находит аккаунты пользователя на десятках платформ: от Telegram и GitHub до Instagram и форумов. Ниже — полное пошаговое руководство: от архитектуры до готового кода на Python.

1. Как работает бот «Шерлок» внутри

Принцип обманчиво прост: у большинства сайтов страница профиля имеет предсказуемый адрес, например github.com/<никнейм>. Бот берёт никнейм, подставляет его в десятки шаблонов URL и проверяет каждую страницу: существует — аккаунт найден, ошибка 404 — нет.

🔄 Схема обработки одного запроса

Пользователь отправляет никнейм
→
Валидация и подстановка в 60+ шаблонов URL
→
Асинхронные запросы к сайтам
→
Отчёт со ссылками на найденные профили

⚡ Пример так работает проверка (симуляция)

Введите никнейм — демо покажет, как бот «прощупывает» сайты по очереди

Лог проверки появится здесь…

Способы проверить существование профиля

Метод Суть Точность
HTTP-код200 — профиль есть, 404 — нетВысокая
Поиск строки в HTMLПоиск маркера вида «пользователь не найден» на страницеСредняя
Проверка APIФормальный ответ API сайта о существовании пользователяМаксимальная

2. Что понадобится: стек технологий

Минимальный набор помещается в одну библиотеку Python и токен Telegram-бота. Но для стабильной работы пригодится чуть больше:

🐍 Python 3.10+

Язык разработки. Асинхронность позволит проверять 60 сайтов за 3–5 секунд.

📦 aiohttp

Асинхронные HTTP-запросы — сердце «Шерлока». Без него каждая проверка займёт минуты.

🤖 aiogram

Библиотека для Telegram Bot API — оборачивает движок в удобный чат-интерфейс.

🗂 data.json

База сайтов: шаблоны URL и маркеры ошибок. Можно позаимствовать у проекта Sherlock (MIT).

💡 Где взять токен: в Telegram у официального бота @BotFather — команда /newbot, имя, юзернейм, и токен вида 123456:ABC-DEF… готов.

3. Архитектура: три независимых модуля

Грамотный «Шерлок» разделён на слои. Так код легко расширять: добавить новый мессенджер или сменить базу сайтов — не трогая движок.

Слой 1. Интерфейс взаимодействия

Telegram-бот на aiogram: принимает команду /start, ждёт никнейм, показывает прогресс («проверено 12 из 60…») и отправляет финальный отчёт. Здесь же — защита от спама: не чаще одного запроса на пользователя в 30 секунд.

4. Пошаговая разработка: от нуля до работающего бота

1

Установка зависимостей

pip install aiohttp aiogram
2

Создание базы сайтов — sites.json

{
  "GitHub":   {"url": "https://github.com/{}", "check": "status"},
  "Telegram": {"url": "https://t.me/{}", "check": "message",
               "error": "If you have Telegram"},
  "Reddit":   {"url": "https://www.reddit.com/user/{}", "check": "status"},
  "Pinterest": {"url": "https://www.pinterest.com/{}", "check": "status"}
}

Тип «status» — ориентируемся на HTTP-код. Тип «message» — ищем на странице маркер ошибки.

3

Асинхронный движок поиска

import json, asyncio, aiohttp

async def check_site(session, sem, name, cfg, nick):
    url = cfg["url"].format(nick)
    async with sem:
        try:
            async with session.get(url, timeout=8,
                                   allow_redirects=True) as r:
                if cfg["check"] == "status":
                    return name, url, r.status == 200
                text = await r.text()
                return name, url, cfg.get("error", "---") not in text
        except Exception:
            return name, url, False

async def check_username(nick):
    sites = json.load(open("sites.json", encoding="utf-8"))
    sem = asyncio.Semaphore(15)
    headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64)"}
    async with aiohttp.ClientSession(headers=headers) as session:
        tasks = [check_site(session, sem, n, c, nick)
                 for n, c in sites.items()]
        results = await asyncio.gather(*tasks)
    return [(n, u) for n, u, ok in results if ok]
4

Обёртка в Telegram-бота

import asyncio
from aiogram import Bot, Dispatcher, types
from aiogram.filters import Command

TOKEN = "ВАШ_ТОКЕН_ОТ_BOTFATHER"
bot = Bot(token=TOKEN)
dp = Dispatcher()

@dp.message(Command("start"))
async def start(m: types.Message):
    await m.answer("🕵️ Отправьте никнейм — найду его аккаунты.")

@dp.message()
async def search(m: types.Message):
    nick = m.text.strip().lstrip("@")
    status = await m.answer(f"🔍 Ищу {nick}…")
    found = await check_username(nick)
    if not found:
        await status.edit_text("❌ Ничего не найдено.")
        return
    lines = [f"✅ {n}" for n, u in found]
    text = f"Найдено профилей: {len(found)}n" + "n".join(lines)
    await status.edit_text(text, parse_mode="HTML")

asyncio.run(dp.start_polling(bot))
5

Запуск и тестирование

Запустите скрипт, откройте бота в Telegram и отправьте заведомо существующий никнейм. Затем добавляйте сайты в базу порциями по 5–10 штук и проверяйте каждый вручную в браузере — это единственный способ отловить ложные срабатывания.

5. Откуда брать сайты для базы и как оценить качество

Базу можно собирать самостоятельно, но быстрее взять за основу открытый список проекта Sherlock на GitHub (лицензия MIT — свободное использование). Главное — регулярно обновлять его: сайты меняют вёрстку, и маркеры ошибок устаревают.

📊 Как растёт ценность бота от размера базы

20 сайтов — прототипохват низкий
60 сайтов — рабочая версияосновные платформы
300+ сайтов — продвинутый поисккак у оригинального Sherlock

Признак качественной записи в базе

✅ Правильно

Проверка по маркеру ошибки («такой страницы не существует») + ручная валидация раз в месяц.

❌ Неправильно

Опора только на код 200: многие сайты отдают 200 и на несуществующие профили (мягкий 404) — отсюда ложные находки.

6. Типичные ошибки и ответы на вопросы

Уменьшите семафор до 10, добавьте случайную паузу между батчами запросов и расширьте пул User-Agent. Для стабильной работы базы из сотен сайтов используют ротацию прокси.
Это ложные срабатывания: сайт отвечает кодом 200 на любой URL. Откройте в браузере несуществующий профиль, найдите на странице строку-маркер ошибки и перенесите её в поле «error» в базе.
Добавьте rate limit: словарь «user_id → время последнего запроса» и отказ при повторе раньше 30 секунд. Плюс очередь задач через asyncio.Queue — запросы будут обрабатываться последовательно, а не внавал.
Инструмент сам по себе нейтрален: он агрегирует уже публичные страницы, не обходя авторизацию. Ключевое правило — использовать его только в законных целях (анализ собственного цифрового следа, проверка уникальности бренда, учебные задачи) и уважать приватность других людей.

Главная мысль

«Шерлок» — это не магия, а сумма трёх навыков: асинхронные запросы, аккуратная база шаблонов и дисциплина тестирования. Начните с 20 сайтов сегодня — через неделю доработок база вырастет до нескольких сотен, а бот превратится из учебного примера в полноценный рабочий инструмент.