[1 Часть] Капча для Телеграм ботов и не только
Всем привет, начинаю свой цикл образовательных статей на Python, значительная часть которых, будет сосредоточена именно на телеграм ботах и фреймворке aiogram.
Сегодня мы будем реализовывать невероятную анбрекебл капчу для наших телеграм ботов (и не только, все зависит от ваших целей) с использованием публичной библиотеки "https://pypi.org/project/captcha/"
Не будем прибегать к формальностям и пояснять принцип работы и необходимости капчи даже в телеграм ботах, вы можете вполне заглянуть в сурс библиотеки (Советую так иногда делать для саморазвития), приступим сразу к коду.
Устанавливаем либу введя команду в консоль:
pip install captcha
Пока разберемся с методами библиотеки, далее будем пробовать интегрировать это в телеграм бота
Импортируем либу:
from captcha.image import ImageCaptcha
Здесь мы из модуля image хватаем класс ImageCaptcha, который содержит в себе методы для генерации самой фотокарточки.Обьявляем экземпляр класса ImageCaptcha и сразу даем ему параметры для генерации:
image = ImageCaptcha(width = 300, height = 100)
В переменной image лежит экземпляр класса, который и будет генерировать картиночку по параметрам в скобках. Применяем невероятные знания английского языка и выясняем, что мы задали ширину и высоту нашей будущей капчи.
Помните что я говорил про исследование сурсов библиотеки? Это в целом не все. Дал нам бог возможность смотреть содержимое классов в более читаемом виде с помощью технологии intellisense и мы ей должны пользоваться. Она доступна в IDE Visual Studio Code при установке плагина для Python (При запуске петухон файлов обратите в правый нижний угол, там нам предлагают сразу его установить).
С помощью этого плагина мы можем просматривать атрибуты, методы и прочие полезности прямо при редактировании кода. Так выглядит список атрибутов и описание
класса ImageCaptcha
Тут мы наблюдаем в том числе и описание доступных атрибутов, допускаемые типы данных и значения этих атрибутов по умолчанию (не все атрибуты как мы понимаем обязательные)
Далее мы создаем переменную, хранящую в себе текст для нашей капчи, она нужна для генерации и дальнейшей проверки пользовательского ввода
captcha_text = 'endway'
Текст капчи задали? Давайте генерировать:
data = image.generate(captcha_text) # Вызываем метод класса image для генерации картики.
Этот метод возвращает байт код картиночки, который мы можем использовать для отправки например
image.write(captcha_text, 'CAPTCHA.png') # В уже известном классе так же есть метод для прямой записи еще не сгенерированной капчи в файл.
Так может выглядеть результат:
Так же в целом можно создать звуковую капчу. Дрочить эту тему не буду: уже все описал выше, прилагаю код
Код
from captcha.audio import AudioCaptcha
audio = AudioCaptcha()
captcha_text = "5454"
audio_data = audio.generate(captcha_text)
audio_file = "audio"+captcha_text+'.wav'
audio.write(captcha_text, audio_file)
Статья слегка затянулась, предлагаю выкатить продолжение в виде второй части. Там расскажу как все это дело воткнуть в телеграм бота. Там заодно расскажу про стейджи и их хранилища из aiogram,)