HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
Баннер 1   Баннер 2
НОВЫЕ ТОРГОВАЯ НОВОСТИ ЧАТ
loading...
Скрыть
Вернуться   ANTICHAT > ПРОГРАММИРОВАНИЕ > Python
   
 
 
Опции темы Поиск в этой теме Опции просмотра

  #1  
Старый 29.07.2025, 13:51
NGSH
Новичок
Регистрация: 24.07.2025
Сообщений: 6
С нами: 426411

Репутация: 3
По умолчанию

Что делает бот​
  • При команде /start показывает картинку-капчу.
  • Есть кнопка «Обновить капчу», чтобы получить новое изображение.
  • Пользователь вводит текст с картинки.
  • На ввод даётся три попытки.
  • Пока капча не решена, остальные команды не работают.
  • После правильного ввода бот снимает блокировку и принимает любые команды.


  • captcha telegram bot:





    Код:
    import
    os
    ,
    logging
    from
    telegram
    import
    Update
    ,
    InlineKeyboardMarkup
    ,
    InlineKeyboardButton
    ,
    InputMediaPhoto
    from
    telegram
    .
    ext
    import
    (
    Application
    ,
    CommandHandler
    ,
    MessageHandler
    ,
    CallbackContext
    ,
    CallbackQueryHandler
    ,
    filters
    )
    from
    captcha
    .
    image
    import
    ImageCaptcha
    
    TOKEN
    =
    "Сюда ты должен вставить свой токен бота"
    CAPTCHA_FOLDER
    =
    "captchas"
    os
    .
    makedirs
    (
    CAPTCHA_FOLDER
    ,
    exist_ok
    =
    True
    )
    user_data
    =
    {
    }
    logging
    .
    basicConfig
    (
    format
    =
    '%(asctime)s - %(name)s - %(levelname)s - %(message)s'
    ,
    level
    =
    logging
    .
    INFO
    )
    logger
    =
    logging
    .
    getLogger
    (
    __name__
    )
    def
    generate_captcha
    (
    user_id
    :
    int
    )
    :
    captcha_text
    =
    os
    .
    urandom
    (
    3
    )
    .
    hex
    (
    )
    .
    upper
    (
    )
    image
    =
    ImageCaptcha
    (
    width
    =
    300
    ,
    height
    =
    150
    )
    file_path
    =
    os
    .
    path
    .
    join
    (
    CAPTCHA_FOLDER
    ,
    f"{user_id}_captcha.png"
    )
    image
    .
    write
    (
    captcha_text
    ,
    file_path
    )
    return
    captcha_text
    ,
    file_path
    async
    def
    start
    (
    update
    :
    Update
    ,
    context
    :
    CallbackContext
    )
    :
    user_id
    =
    update
    .
    effective_user
    .
    id
    captcha_text
    ,
    captcha_path
    =
    generate_captcha
    (
    user_id
    )
    user_data
    [
    user_id
    ]
    =
    {
    'captcha'
    :
    captcha_text
    ,
    'passed'
    :
    False
    ,
    'attempts'
    :
    0
    }
    keyboard
    =
    [
    [
    InlineKeyboardButton
    (
    "Обновить капчу"
    ,
    callback_data
    =
    'refresh'
    )
    ]
    ]
    with
    open
    (
    captcha_path
    ,
    'rb'
    )
    as
    photo
    :
    await
    update
    .
    message
    .
    reply_photo
    (
    photo
    =
    photo
    ,
    caption
    =
    "🔐 Для использования бота решите капчу:\n➖ Отправьте текст с картинки\n🔄 Если не видно — обновите капчу"
    ,
    reply_markup
    =
    InlineKeyboardMarkup
    (
    keyboard
    )
    )
    async
    def
    refresh_captcha
    (
    update
    :
    Update
    ,
    context
    :
    CallbackContext
    )
    :
    query
    =
    update
    .
    callback_query
    await
    query
    .
    answer
    (
    )
    user_id
    =
    query
    .
    from_user
    .
    id
    captcha_text
    ,
    captcha_path
    =
    generate_captcha
    (
    user_id
    )
    user_data
    [
    user_id
    ]
    =
    {
    'captcha'
    :
    captcha_text
    ,
    'passed'
    :
    False
    ,
    'attempts'
    :
    user_data
    .
    get
    (
    user_id
    ,
    {
    }
    )
    .
    get
    (
    'attempts'
    ,
    0
    )
    }
    keyboard
    =
    [
    [
    InlineKeyboardButton
    (
    "Обновить капчу"
    ,
    callback_data
    =
    'refresh'
    )
    ]
    ]
    with
    open
    (
    captcha_path
    ,
    'rb'
    )
    as
    photo
    :
    await
    query
    .
    edit_message_media
    (
    media
    =
    InputMediaPhoto
    (
    media
    =
    photo
    )
    ,
    reply_markup
    =
    InlineKeyboardMarkup
    (
    keyboard
    )
    )
    await
    query
    .
    edit_message_caption
    (
    caption
    =
    "🔄 Капча обновлена! Отправьте текст с картинки:"
    ,
    reply_markup
    =
    InlineKeyboardMarkup
    (
    keyboard
    )
    )
    async
    def
    verify_captcha
    (
    update
    :
    Update
    ,
    context
    :
    CallbackContext
    )
    :
    user_id
    =
    update
    .
    message
    .
    from_user
    .
    id
    user_input
    =
    update
    .
    message
    .
    text
    .
    strip
    (
    )
    .
    upper
    (
    )
    if
    user_data
    .
    get
    (
    user_id
    ,
    {
    }
    )
    .
    get
    (
    'passed'
    )
    :
    await
    update
    .
    message
    .
    reply_text
    (
    "✅ Вы уже прошли проверку!"
    )
    return
    if
    user_id
    not
    in
    user_data
    :
    await
    update
    .
    message
    .
    reply_text
    (
    "⚠️ Сначала запустите /start"
    )
    return
    captcha_data
    =
    user_data
    [
    user_id
    ]
    if
    captcha_data
    [
    'attempts'
    ]
    >=
    3
    :
    await
    update
    .
    message
    .
    reply_text
    (
    "🚫 Превышено число попыток! Запустите /start заново"
    )
    return
    if
    user_input
    ==
    captcha_data
    [
    'captcha'
    ]
    :
    user_data
    [
    user_id
    ]
    [
    'passed'
    ]
    =
    True
    await
    update
    .
    message
    .
    reply_text
    (
    "✅ Капча пройдена успешно!\n\nТеперь вы можете использовать бота!\nПопробуйте команду: /hello"
    )
    else
    :
    user_data
    [
    user_id
    ]
    [
    'attempts'
    ]
    +=
    1
    attempts_left
    =
    3
    -
    user_data
    [
    user_id
    ]
    [
    'attempts'
    ]
    await
    update
    .
    message
    .
    reply_text
    (
    f"❌ Неверно! Осталось попыток:{attempts_left}\nПопробуйте еще раз или обновите капчу"
    )
    async
    def
    hello
    (
    update
    :
    Update
    ,
    context
    :
    CallbackContext
    )
    :
    user_id
    =
    update
    .
    effective_user
    .
    id
    if
    user_data
    .
    get
    (
    user_id
    ,
    {
    }
    )
    .
    get
    (
    'passed'
    )
    :
    await
    update
    .
    message
    .
    reply_text
    (
    f"👋 Привет,{update.effective_user.first_name}!"
    )
    else
    :
    await
    update
    .
    message
    .
    reply_text
    (
    "🚫 Сначала пройдите капчу через /start"
    )
    def
    main
    (
    )
    :
    application
    =
    Application
    .
    builder
    (
    )
    .
    token
    (
    TOKEN
    )
    .
    build
    (
    )
    application
    .
    add_handler
    (
    CommandHandler
    (
    "start"
    ,
    start
    )
    )
    application
    .
    add_handler
    (
    CommandHandler
    (
    "hello"
    ,
    hello
    )
    )
    application
    .
    add_handler
    (
    MessageHandler
    (
    filters
    .
    TEXT
    &
    ~
    filters
    .
    COMMAND
    ,
    verify_captcha
    )
    )
    application
    .
    add_handler
    (
    CallbackQueryHandler
    (
    refresh_captcha
    ,
    pattern
    =
    '^refresh$'
    )
    )
    application
    .
    run_polling
    (
    )
    if
    __name__
    ==
    '__main__'
    :
    main
    (
    )


 
Ответить с цитированием
 





Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT ™ © 2001- Antichat Kft.