В начале февраля Павел Дуров анонсировал, что у Telegram появился так называемый Telegram Login Widget. Проще говоря, теперь любой желающий может встроить авторизацию на своем сайте через Telegram, наряду с уже удобными способами входа через привычные для всех Google, Twitter, Facebook и так далее.
В этой заметке я хочу рассказать и наглядно показать как это сделать, используя Django. Исходный код свободно доступен в моем репозитории на GitHub. Пользуйтесь на здоровье.
Те, кто уже имеет опыт работы с Django Framework, знают, что он предоставляет готовую User модель для авторизации, более того, ее очень легко расширить или написать свою. Я решил пойти другим путём, дабы не городить своих велосипедов, воспользовался готовым и хорошо зарекомендовавшим себя пакетом для авторизации в различных сервисах — python-social-auth. Для тех, кто не в курсе, social-auth это набор готовых библиотек для авторизации через такие сайты как Twitter, Facebook, Instagram, Google, VK и многие других. Проект разбит на модули, где основным является social-core, там хранится набор т.н. бэкендов для авторизации. Помимо social-core, есть ряд пакетов для конкретных фреймворков. Для Django это social-app-django, для Tornado соответственно social-app-tornado и так далее. Покрыты практически все известные веб-фрейморки для Python. Так вот к чему это я?
Telegram Bot для поиска девушек на Python. Telegram Bot для поиска людей
Решил я внести свой вклад в развитие Open Source, и написал backend для авторизации через Telegram в основной модуль social-core. Готовый к слиянию Pull Request можно посмотреть здесь. Правда загвоздка в том, что автор проекта не спешит его сливать в master ветку, на сообщения не реагирует, поэтому пример кода будет базироваться на моем форке social-core. Будем надеяться, что PR примут. Вы можете внести свой вклад, оставив комментарий автору проекта в Issue, который я открыл по случаю готового PR.
Мой проект будет использовать Python 3.6 и Django 2.0.3. Если вам не нравится Django, то вы без труда можете использовать python-social-auth с любым другим фреймворком для реализации авторизации через Telegram для своего сайта.
Создание бота Telegram
Настройка параметров
npm install ngrok -g
Задача js-скрипта, сгенерированного на странице настроек, показать на сайте кнопку для входа. Вот такую:
Настройки можно задать на официальной странице Telegram. Они простые, разобраться нетрудно. Но обратите внимание на 2 параметра:
В Authorization Type необходимо выбрать способ авторизации пользователя:
- Callback. Вызов произвольной JS функции после авторизации пользователя. Если выбрать этот параметр, то в скрипте виджета появится пример такой функции, вызывающий alert с именем, фамилией, псевдонимом и id.
- Redirect to URL. Стандартный способ авторизации через редирект на заданный URL. Именно его в примере я и буду использовать. Сюда позже укажем URL через домен, полученный с помощью ngrok.
Создаем веб-приложение
Итак, склонируйте мой репозиторий. Для проекта желательно создать отдельное виртуальное окружения, чтобы не засорять системный Python и не хапнуть конфликтных ситуаций между зависимостями (а вдруг?). Установите все зависимости из requirements.txt.
Обратите внимание, что в моем проекте-шаблоне в качестве базы данных используется SQLite 3, это сделано для простоты первичной настройки и демонстрации. Следом выполните команду migrate:
python manage.py migrate
Это необходимо сделать для создания таблиц в базе данных для корректной работы приложения.
Теперь запускаем проект привычной командой:
python manage.py runserver
В отдельном окне терминала получим внешний адрес для сайта путем создания туннеля через утилиту ngrok.
ngrok http 8000
Теперь возвращаемся на страницу настройки виджета, где необходимо задать Redirect URL. Полный адрес будет выглядеть вот так:
Возникает вопрос, а как я получил такой путь? Дело в том, что путь /auth/ был задан в urls.py моего проекта для модуля urls.py пакета social_django:
urlpatterns = [ path(‘admin/’, admin.site.urls), path(‘auth/’, include(‘social_django.urls’, namespace=’social’)), path(‘profile/’, TemplateView.as_view(template_name=’profile.html’), name=’profile’), path(», TemplateView.as_view(template_name=’login.html’)), ]
А /complete/telegram это уже стандартный шаблон для редиректа после авторизации в бэкенд-сервисе.
# код social_django.urls urlpatterns = [ # authentication / association url(r’^login/(?P[^/]+)$’.format(extra), views.auth, name=’begin’), url(r’^complete/(?P[^/]+)$’.format(extra), views.complete, name=’complete’), # disconnection url(r’^disconnect/(?P[^/]+)$’.format(extra), views.disconnect, name=’disconnect’), url(r’^disconnect/(?P[^/]+)/(?Pd+)$’ .format(extra), views.disconnect, name=’disconnect_individual’), ]
Более подробно о пакете python-social-auth можно почитать в документации.
Теперь полученный на странице настроек виджета JS-код копируйте в шаблон login.html (вместо моего кода вставьте туда свой). После открывайте браузер и заходите на страницу e019b6e6.ngrok.io (помните, что ваш домен может отличаться).
Если вы всё сделали правильно, то увидите примерно вот такую картинку:
Смело кликайте на виджет, разрешите доступ на авторизацию, и при успешном входе вас перекинет на страницу profile
Поздравляю! Вы успешно авторизовались на сайте через Telegram. Теперь у вас есть время, чтобы разобраться как это работает, посмотрите код моего проекта. В основном необходимо взглянуть на settings.py, всю “грязную” работу за вас делают пакеты social-auth и social-app-django. Если вам интересно как работает процесс авторизации, то изучите мой Pull Request и официальный гайд от Telegram.
Присоединяйтесь к рассылке
Понравился контент? Пожалуйста, подпишись на рассылку.
Интересные записи:
- Pyenv: удобный менеджер версий python
- Celery: начинаем правильно
- Что нового появилось в Django Channels?
- FastAPI, asyncio и multiprocessing
- Работа с MySQL в Python
- Django Channels: работа с WebSocket и не только
- Введение в logging на Python
- Руководство по работе с HTTP в Python. Библиотека requests
- Почему Python?
- Обзор Python 3.9
- Разворачиваем Django приложение в production на примере Telegram бота
- Работа с PostgreSQL в Python
- Как написать Telegram бота: практическое руководство
- Введение в pandas: анализ данных на Python
- Python-RQ: очередь задач на базе Redis
- Django, RQ и FakeRedis
- Итоги первой встречи Python программистов в Алматы
- Обзор Python 3.8
- Участие в подкасте TalkPython
- Строим Data Pipeline на Python и Luigi
- Видео презентации ETL на Python
Источник: khashtamov.com
Чатботы Telegram На Python
Хотели бы вы создать своего собственного чат-бота в Telegram? В этом вам поможет наше руководство!
Для начала нам нужно установить необходимое ПО. Вам потребуется Python 3 и библиотека python-telegram-bot. Не волнуйтесь, установка проста. Найдите подробную инструкцию в интернете.
Далее создадим нового бота в Telegram, воспользовавшись Telegram BotFather. Это займет всего несколько простых шагов. В конце вы получите уникальный токен, который понадобится далее.
⌨️ Пришло время основного этапа — программирования! Откройте любой текстовый редактор и начните писать код. Для начала импортируйте библиотеку Telegram и создайте экземпляр бота с использованием вашего токена.
Теперь мы создадим первую функцию для нашего бота. Когда пользователь отправит сообщение боту, мы хотим, чтобы он получил ответ с приветствием! Для этого используйте метод bot.sendMessage.
Вы только что создали своего первого чат-бота в Telegram! Проверьте его работу в личном кабинете. Но не останавливайтесь на достигнутом — это только начало! В следующей статье мы узнаем больше об Telegram Bot API.
2. Понимание Telegram Bot API
Добро пожаловать в мир чат-ботов Telegram! В этом уроке мы погрузимся в Telegram Bot API.
Telegram предоставляет API, который позволяет разработчикам создавать свои собственные чат-боты. API — это набор рекомендаций, которые рассказывают, как взаимодействовать с сервером Telegram для отправки и получения сообщений.
Чтобы начать создание чат-бота, необходимо создать учетную запись Telegram и получить ключ API. Ключ API уникален для каждого бота и необходим для доступа к API.
После создания бота и получения ключа API, можно начать создание своего чат-бота на Python.
Bot API предоставляет набор методов для отправки и получения сообщений. Например, можно использовать метод ‘sendMessage’ для отправки сообщения пользователю или метод ‘getUpdates’ для получения сообщений с сервера Telegram.
API также обеспечивает интерактивность чат-ботов с помощью встроенных кнопок клавиатуры, запросов обратного вызова и редактирования сообщений. Эти функции позволяют сделать пользовательский интерфейс более привлекательным.
Кроме этого, Bot API предоставляет возможность использовать фильтры и обработчики, чтобы обрабатывать входящие сообщения. Фильтры позволяют боту определить, на какие сообщения он должен отвечать, на основе таких атрибутов, как текст или идентификатор пользователя. Обработчики позволяют боту выполнять код в ответ на определенные типы сообщений.
Для использования Telegram Bot API с Python можно использовать библиотеку ‘python-telegram-bot’. Она обеспечивает простой интерфейс для доступа к Bot API, а также реализацию обработки сообщений и фильтров.
Понимание Telegram Bot API является ключевым для создания успешных и интерактивных чат-ботов. Продолжайте изучение и обучение, и вы возможно создадите потрясающий чат-бот!
3. Добавление интерактивности с помощью Python
Приветствую тебя на третьем уроке! Мы уже научились создавать базового чат-бота в Telegram и разобрались с Telegram Bot API. Теперь пришло время добавить немного интерактивности, используя язык программирования Python!
Перейдем к тому, что мы понимаем под словом «интерактивность». В контексте чат-бота это означает, что нам нужно сделать его более привлекательным и динамичным, позволяя пользователям вводить информацию и получать ответы.
Одним из способов сделать это является создание «команд». Команды — это ключевые слова, начинающиеся с «/». Пользователь может ввести команду в окно чата, чтобы получить определенный ответ от бота. Например, если мы создадим команду «/joke», то бот ответит забавной шуткой.
Для этого мы будем использовать Python. С помощью него мы можем создавать обработчики команд, которые будут прослушивать команды и инициировать ответ. Например, мы можем написать функцию, которая будет вызываться при вводе пользователем команды «/joke», и получать шутку через API, чтобы отправить ее пользователю.
Но дело не только в командах! Python также позволяет создавать интерактивные меню и кнопки. Мы можем использовать формат разметки Telegram, чтобы создать пользовательскую клавиатуру, которая будет появляться при вводе определенной команды. На клавиатуре могут быть параметры, которые пользователь может выбрать, чтобы отправить ответ обратно боту.
В целом, добавление интерактивности с помощью Python — отличный способ сделать нашего чат-бота более привлекательным и динамичным. Используя команды и различные форматы ответов, мы можем создать диалог, который заставит пользователей возвращаться снова и снова!
4. Расширенная обработка сообщений и фильтры
Введение
На прошлых уроках мы создали базового чат-бота для Telegram, используя Python, который мог автоматически отвечать на сообщения пользователей. Однако, по мере того, как мы разрабатываем более сложные чат-боты, нам нужна более эффективная обработка и фильтрация сообщений, с помощью расширенной обработки и фильтров.
Обработка нескольких сообщений
Иногда пользователи отправляют несколько сообщений подряд, перед тем, как мы успеваем ответить, но нам нужно обработать только последнее сообщение. Для этого мы используем декоратор message_handler из библиотеки telebot, который автоматически обрабатывает новые входящие сообщения. С помощью него мы можем проигнорировать старые сообщения и обрабатывать только последнее сообщение от пользователя.
Фильтрация сообщений
Создание бота на Python для Telegram и его упаковка в Docker Compose
В настоящее время многие компании и сообщества используют мессенджеры для общения и предоставления информации своим пользователям. Один из самых популярных мессенджеров — Telegram. Создание бота на Python для Telegram является эффективным способом автоматизировать задачи и взаимодействовать с пользователями. В этой статье мы рассмотрим, как создать бота на Python для Telegram и упаковать его в Docker Compose для удобного развертывания и масштабирования.
Часть 1: Создание бота на Python для Telegram
Шаг 1: Регистрация бота в Telegram
Первым шагом для создания бота на Python для Telegram является регистрация бота и получение токена доступа. Для этого следуйте инструкциям Telegram и создайте нового бота, получив уникальный токен доступа.
Шаг 2: Установка необходимых библиотек
Далее необходимо установить библиотеку python-telegram-bot, которая предоставляет удобный интерфейс для взаимодействия с Telegram API. Вы можете установить ее с помощью pip, выполнив команду:
pip install python-telegram-bot
Шаг 3: Написание кода бота
Теперь, когда у вас есть токен доступа и установлены необходимые библиотеки, можно приступить к написанию кода бота на Python. Вот простой пример кода, который реагирует на приветствие пользователя и отправляет ответное сообщение:
from telegram.ext import Updater, MessageHandler, Filters def handle_message(update, context): message = update.message.text if message.lower() == ‘привет’: context.bot.send_message(chat_id=update.effective_chat.id, text=’Привет, как дела?’) updater = Updater(token=’YOUR_TOKEN_HERE’, use_context=True) dispatcher = updater.dispatcher dispatcher.add_handler(MessageHandler(Filters.text, handle_message)) updater.start_polling()
Вышеуказанный код создает экземпляр Updater , который устанавливает соединение с Telegram API с использованием вашего токена доступа. Затем мы создаем обработчик сообщений MessageHandler , который реагирует на текстовые сообщения. В нашем примере он проверяет, содержит ли сообщение текст «привет» и отправляет ответное сообщение.
Часть 2: Упаковка бота в Docker Compose
Шаг 1: Установка Docker и Docker Compose
Прежде чем упаковывать бота в Docker Compose, убедитесь, что у вас установлены Docker и Docker Compose на вашей системе. Вы можете найти инструкции по установке на официальном сайте Docker.
Шаг 2: Создание Dockerfile
Dockerfile — это файл, который содержит инструкции для создания Docker-образа. Создайте файл с именем «Dockerfile» в корневой папке вашего проекта и добавьте следующий код:
FROM python:3.9 WORKDIR /app COPY requirements.txt . RUN pip install —no-cache-dir -r requirements.txt COPY . . CMD python bot.py
Этот Dockerfile использует базовый образ Python 3.9, устанавливает необходимые зависимости, копирует файлы проекта и запускает скрипт bot.py .
Шаг 3: Создание docker-compose.yml
Теперь создайте файл docker-compose.yml в корневой папке вашего проекта и добавьте следующий код:
version: ‘3’ services: bot: build: . environment: — YOUR_TOKEN=YOUR_TOKEN_HERE
Этот файл определяет службу bot , которая будет построена на основе текущего каталога ( . ). Он также устанавливает переменную окружения YOUR_TOKEN со значением вашего токена доступа.
Шаг 4: Запуск бота в Docker Compose
Теперь вы можете запустить вашего бота в Docker Compose. Откройте терминал, перейдите в папку с файлами проекта и выполните следующую команду:
docker-compose up
Docker Compose автоматически соберет Docker-образ и запустит контейнер с вашим ботом. Вы увидите вывод логов бота в терминале.
Заключение
В этой статье мы рассмотрели, как создать бота на Python для Telegram и упаковать его в Docker Compose. Docker позволяет легко развертывать и масштабировать ботов, обеспечивая удобную изоляцию и управление зависимостями. Docker Compose предоставляет простой способ описания и запуска множества связанных контейнеров. Теперь у вас есть все необходимое для создания и развертывания своего собственного бота на Python для Telegram. Удачи в вашем проекте!
Источник: infozone.pro