Какие методы можно использовать, чтобы определить, является ли пользователь настоящим человеком, а не автоматизированной программой?

Здравствуйте! Существует ли способ различить живого пользователя и бота в Telegram, используя Python? Я работаю с библиотекой pyTelegramBotApi (Telebot). <br/> Интересуюсь, потому что в Telegram-группах появляются аккаунты, неотличимые от обычных пользователей (иногда пользуются премиум-аккаунтами). Они начинают отправлять личные сообщения с ответами на новые сообщения в группах, причем по стилю эти сообщения напоминают тексты, сгенерированные ChatGPT.
  • 9 февраля 2025 г. 17:04
Ответы на вопрос 3
Здравствуйте! Определение, является ли пользователь настоящим человеком или ботом, может быть довольно сложной задачей, особенно в сервисах, таких как Telegram. Вот несколько подходов, которые могут помочь в этом процессе:

### 1. **Анализ поведения пользователя**
   - **Частота сообщений**: Боты обычно отправляют сообщения с большей частотой, чем обычные пользователи. Вы можете отслеживать время между сообщениями и использовать это как индикатор.
   - **Ответы на вопросы**: Попробуйте задать вопросы, которые требуют более сложного человеческого ответа. Боты могут труднее реагировать на креативные или необязательные вопросы.

### 2. **Тесты на CAPTCHA**
   - Рекомендуется использовать CAPTCHA-подобные тесты (например, "Пожалуйста, выберите все изображения с автомобилями"). Это может быть сложно реализовать в Telegram, но можно использовать их для проверки пользователей перед тем, как давать доступ к определенным функциям.

### 3. **Анализ текста сообщений**
   - **Стилизации текста**: Используйте алгоритмы обработки естественного языка (NLP) для анализа текста на наличие характерных черт, которые часто встречаются у ботов (например, чрезмерная однообразность, отсутствие опечаток и т.д.).
   - **Модели на основе ML**: Создайте модель машинного обучения, которая может классифицировать сообщения как "бот" или "человек" на основе уже известных примеров.

### 4. **Проверка активности**
   - **Динамика участия**: Если пользователь долгое время неактивен, а потом резко начинает писать много сообщений, это может быть признаком бота.
   - **Анализ взаимодействия**: Подумайте о том, чтобы анализировать типы взаимодействия пользователя (например, как часто он реагирует на сообщения).

### 5. **Использование токенов и подписок**
   - В некоторых случаях можно реализовать систему подписок, где пользователи должны подтверждать свои намерения взаимодействовать (например, отправить команду /start для активации).

### Пример кода на Python с использованием pyTelegramBotApi

Вот пример, как можно начать отслеживать пользователей и их сообщения в вашей группе:

```python
import telebot
from collections import defaultdict
import time

bot = telebot.TeleBot('YOUR_API_TOKEN')

# Словарь для хранения времени отправки сообщений пользователями
user_last_message_time = defaultdict(float)

@bot.message_handler(func=lambda message: True)
def handle_message(message):
    current_time = time.time()
    user_id = message.from_user.id
    
    # Измерение времени между сообщениями
    if user_id in user_last_message_time:
        elapsed_time = current_time - user_last_message_time[user_id]
        # Логика для определения бота по времени
        if elapsed_time < 1:  # Менее 1 секунды может сигнализировать о боте
            print(f"Возможно, бот: {user_id} отправил сообщение слишком быстро.")
    
    # Обновляем время последнего сообщения
    user_last_message_time[user_id] = current_time

    # Ответ на сообщение (можно добавить свою логику здесь)
    bot.reply_to(message, "Ваше сообщение принято!")

bot.polling()
```

Этот пример фиксирует время последнего сообщения от пользователя и может сигнализировать, если сообщения приходят слишком быстро. Это, конечно, лишь один из способов анализа, и в идеале нужно сочетать несколько методов для получения более точного результата. 

Надеюсь, это поможет!
Видел работу бота, который даёт новым вступившим 60 сек нажать кнопку. 
Т.е. в ответ на событие вступления в группу, бот пишет что-то типа
"Вася, у вас есть 60 секунд подтвердить, что вы не бот, нажав кнопку под этим сообщением" и с сообщением идет callback button.

Если не жмёт – аккаунт банится.

Наверное, можно и чуть усложнить:
предлагать несколько кнопок с единственной правильной, и варьировать тексты кнопок. В т.ч. в сообщении загадывать простую загадку типа "Пять плюс десять это сколько?" и кнопки 3, 10, 15, 25. Или "Число делится на три. Неправильный ответ" - 9, 10, 12, 15.

Но всё это не поможет, если вступает реальный человек, а потом, чуть пообщавшись, запускает под этим же аккаунтом Tg-клиента бота.
Использовать "Evil Jailbreak". 
Проще говоря спровоцировать нейросеть вести себя определенным образом. По реакции можно четко понять кто это.
Похожие вопросы