Как проверить ваш чат в Telegram на наличие пользователей с неофициальными приложениями

Константин Докучаев
Константин Докучаев
Как проверить ваш чат в Telegram на наличие пользователей с неофициальными приложениями

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

Но как узнать заранее, с кем стоит общаться, а с кем — нет? Если вы являетесь администратором чата, то вы можете легко проверить его участников на «чистоту» мессенджера.

Для начала работы вам понадобится установить Python для своей операционной системы, создать любого бота через @BotFather и получить для него токен.

Затем откройте терминал и выполните в нём команду:

pip install https://github.com/KurimuzonAkuma/kurigram/archive/dev.zip --force-reinstall

Теперь получите данные для подключения по API по этой ссылке https://my.telegram.org/apps. Вам нужны данные из полей App api_id и App api_hash.

Скопируйте скрипт ниже и сохраните его в файл с расширением .py:

import asyncio
from pyrogram.client import Client
from pyrogram import raw


async def main() -> None:
    api_id = ???
    api_hash = "??"
    bot_token = "???"
    chat = "???"

    print("Скрипт запущен. Подключение к Telegram...")

    count_risk = 0
    processed = 0

    async with Client(
        "acc",
        bot_token=bot_token,
        api_id=api_id,
        api_hash=api_hash,
        proxy=dict(
            scheme="socks5",
            hostname="127.0.0.1",
            port=1080,
        )
    ) as app:
        print("Авторизация прошла успешно.")

        # Получаем информацию о чате
        chat_info = await app.get_chat(chat)
        total_members = getattr(chat_info, "members_count", None)

        if total_members is not None:
            print(f"Всего участников в чате: {total_members}")
        else:
            print("Не удалось получить общее количество участников чата.")

        print("Начинаю проверку участников...\n")

        async for member in app.get_chat_members(chat):
            if member.user.is_bot:
                continue

            processed += 1

            name = " ".join(
                x for x in [member.user.first_name, member.user.last_name] if x
            ).strip() or str(member.user.id)

            username = f"@{member.user.username}" if member.user.username else "@нет_username"

            try:
                peer = await app.resolve_peer(member.user.id)
                full = await app.invoke(
                    raw.functions.users.GetFullUser(id=peer)
                )

                await asyncio.sleep(3)

                risk = bool(getattr(full.full_user, "unofficial_security_risk", False))

                if risk:
                    count_risk += 1
                    print(f"{name} {username}")

            except Exception as e:
                print(f"Ошибка для {member.user.id} ({name}): {e}")

            # Вывод процента проверки
            if total_members:
                percent = processed / total_members * 100
                print(f"Проверено: {processed}/{total_members} ({percent:.1f}%)")

        print(f"\nГотово. Найдено не чистых пользователей: {count_risk}")


if __name__ == "__main__":
    try:
        asyncio.run(main())
    except (SystemExit, KeyboardInterrupt):
        print("bye")

В скрипте вам нужно поправить следующие данные:

  • api_id — указать ваш api_id
  • api_hash — указать ваш api_hash
  • bot_token — указать ваш bot_token
  • chat — указать юзернейм чата для парсинга (без @)
  • proxy — указать данные для подключения через socks5 Proxy

Теперь просто выполните этот файл через терминал. Если всё сделано правильно, то начнётся парсинг участников.

Если скрипт найдёт участников, которые используют неофициальный мессенджер, он отобразит их имя. Если таких участников нет, то их просто не покажет.



Great! Next, complete checkout for full access to All-In-One Person
Welcome back! You've successfully signed in
You've successfully subscribed to All-In-One Person
Success! Your account is fully activated, you now have access to all content
Success! Your billing info has been updated
Your billing was not updated