Бот «Шерлок» — это автоматизированный инструмент, который по никнейму находит аккаунты пользователя на десятках платформ: от Telegram и GitHub до Instagram и форумов. Ниже — полное пошаговое руководство: от архитектуры до готового кода на Python.
1. Как работает бот «Шерлок» внутри
Принцип обманчиво прост: у большинства сайтов страница профиля имеет предсказуемый адрес, например github.com/<никнейм>. Бот берёт никнейм, подставляет его в десятки шаблонов URL и проверяет каждую страницу: существует — аккаунт найден, ошибка 404 — нет.
🔄 Схема обработки одного запроса
⚡ Пример так работает проверка (симуляция)
Введите никнейм — демо покажет, как бот «прощупывает» сайты по очереди
Способы проверить существование профиля
| Метод | Суть | Точность |
|---|---|---|
| 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).
123456:ABC-DEF… готов.
3. Архитектура: три независимых модуля
Грамотный «Шерлок» разделён на слои. Так код легко расширять: добавить новый мессенджер или сменить базу сайтов — не трогая движок.
4. Пошаговая разработка: от нуля до работающего бота
Установка зависимостей
pip install aiohttp aiogram
Создание базы сайтов — 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» — ищем на странице маркер ошибки.
Асинхронный движок поиска
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]
Обёртка в 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))
Запуск и тестирование
Запустите скрипт, откройте бота в Telegram и отправьте заведомо существующий никнейм. Затем добавляйте сайты в базу порциями по 5–10 штук и проверяйте каждый вручную в браузере — это единственный способ отловить ложные срабатывания.
5. Откуда брать сайты для базы и как оценить качество
Базу можно собирать самостоятельно, но быстрее взять за основу открытый список проекта Sherlock на GitHub (лицензия MIT — свободное использование). Главное — регулярно обновлять его: сайты меняют вёрстку, и маркеры ошибок устаревают.
📊 Как растёт ценность бота от размера базы
Признак качественной записи в базе
✅ Правильно
Проверка по маркеру ошибки («такой страницы не существует») + ручная валидация раз в месяц.
❌ Неправильно
Опора только на код 200: многие сайты отдают 200 и на несуществующие профили (мягкий 404) — отсюда ложные находки.
6. Типичные ошибки и ответы на вопросы
Главная мысль
«Шерлок» — это не магия, а сумма трёх навыков: асинхронные запросы, аккуратная база шаблонов и дисциплина тестирования. Начните с 20 сайтов сегодня — через неделю доработок база вырастет до нескольких сотен, а бот превратится из учебного примера в полноценный рабочий инструмент.