Внедрение mysql в Телеграм бота

Напишем простой Telegram-бот на Python с использованием aiogram, Docker и AWS, предварительно ознакомившись с нужными инструментами.

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

Примечание Вы читаете улучшенную версию некогда выпущенной нами статьи.

Настройка

  • свой токен;
  • адрес Telegram API (https://api.telegram.org/bot);
  • ссылку на документацию.

Обязательно сохраните токен, так как это ключ для взаимодействия с ботом.

Примечание Хранение токена должно быть локальным: ни в коем случае не выгружайте его в общий доступ, например в GitHub-репозиторий .

Далее начните беседу. Введите в поисковой строке имя бота и нажмите /start . Отправьте любое сообщение: оно станет первым обновлением, которое получит Телеграм бот.

Установка Python

Для написания Telegram-бота на Python, нужно установить сам язык. Если вы пользуетесь Windows, скачать Python можно с официального сайта. Версия важна. Нам подойдет Python не ниже версии 3.7. Если же у вас Linux или macOS, то, скорее всего, у вас стоит Python 3.6. Как обновиться, можете почитать здесь.

Разработка Telegram-бота «Доступ к данным MySQL»

Тем, кто только начал изучение этого языка, будет также полезна дорожная карта Python-разработчика.

Установка pip

Это менеджер пакетов. В версиях выше Python 2.7.9 и Python 3.4, а также на macOS/Linux он уже есть. Проверить это можно командой pip —version в терминале. Если же по каким-то причинам он отсутствует, установить его можно при помощи команды:

$ sudo apt-get install python-pip

Установка aiogram

Установить данный фреймворк для Telegram Bot API с помощью pip:

pip install aiogram

Hello, bot!

Давайте напишем простенькую программу приветствия. Для начала следует импортировать библиотеки и создать экземпляры Телеграм бота и диспетчера:

from aiogram import Bot, types from aiogram.dispatcher import Dispatcher from aiogram.utils import executor TOKEN = «ваш токен от бота здесь» bot = Bot(token=TOKEN) dp = Dispatcher(bot)

Теперь напишем обработчик текстовых сообщений, который будет обрабатывать входящие команды /start и /help :

Добавим ещё один обработчик для получения текстовых сообщений. Если бот получит «Привет», он также поздоровается. Все остальные сообщения будут определены, как нераспознанные:

Запускаем Telegram бота, написанного на Python, следующим образом:

if __name__ == ‘__main__’: executor.start_polling(dp)

Примечание Так мы задаём боту непрерывное отслеживание новых сообщений. Если бот упадёт, а сообщения продолжат поступать, они будут накапливаться в течение 24 часов на серверах Telegram, и в случае восстановления бота прилетят ему все сразу.

Ну вот и всё, простенький бот в Телеграмме на языке Python готов.

Docker

Сейчас мало кто не слышал про Docker, но если вдруг не слышали — вот хорошая статья. Для нашего проекта потребуется самый простой Dockerfile:

FROM python:3.8 # set work directory WORKDIR /usr/src/app/ # copy project COPY . /usr/src/app/ # install dependencies RUN pip install —user aiogram # run app CMD [«python», «bot.py»]

Каталог проекта должны при этом содержать следующие файлы:

Для локальных тестов достаточно установить Docker (linux, mac, windows), после чего в папке проекта собрать и запустить контейнер с помощью команд:

docker build -t my_app docker run -d my_app

my_app — это просто название нашего контейнера, вместо которого можно использовать другое имя.

-d — специальный флаг, который запускает контейнер в фоне и позволяет дальше работать в терминале. Это называется detached mode.

Еще по теме:  Как войти в ТГ по токену

Деплой на AWS

Прежде всего нам понадобится аккаунт на Docker Hub. Это аналог GitHub, только не с исходниками кода, а с уже созданными контейнерами. Работа с Docker Hub выглядит достаточно просто:

  1. Локально или с помощью пайплайнов собрали контейнер.
  2. Загрузили его на докер хаб.
  3. В любом удобном месте скачали его. Это может быть локальная машина, VPS сервер или облачный провайдер по типу AWS.
  4. Запустили.

Пройдёмся по этим шагам. Везде, где указано , надо вставлять свой юзернейм, использованный при регистрации на докерхабе. Если это ваша первая публикация на докерхаб, для начала потребуется залогиниться с помощью docker login.

docker build -t /my_app

Загружаем его на докерхаб:

docker push /my_app

Для проверки успешности загрузки можете запустить контейнер из Docker Hub с помощью команды:

docker run -d /my_app

Далее загрузим наш контейнер в AWS Elastic Beanstalk. Для этого потребуется аккаунт на AWS. Если его нет, необходимо зарегистрироваться. Вас попросят ввести данные карты для верификации, но переживать не стоит, ведь мы воспользуемся бесплатным годовым триалом. Чтобы поиграться, этого более чем достаточно, а вот если вы захотите вывести проект в продакшен, следует перейти на VPS — это даст больше контроля и гибкости.

  • Переходим в Elastic Beanstalk, на вкладку Applications, и создаём новое приложение:

  • Называем приложение, теги оставляем пустыми:

  • Создаём для приложения environment:

  • Выбираем Worker environment:

  • В качестве платформы выбираем Docker:

  • В пункте Application code нужно загрузить JSON-файл с конфигурацией Docker-образа. Сам файл:

Dockerrun.aws.json < «AWSEBDockerrunVersion»: «1», «Image»: < «Name»: «/my_app», «Update»: «true» >, «Ports»: [ < «ContainerPort»: 5000, «HostPort»: 8000 >] >

  • Создаём окружение:

  • AWS начинает создавать окружение, просто ждём завершения процесса:

  • Если всё прошло успешно, вы увидите индикатор успешного запуска приложения:

Проверяем работу нашего Telegram bot:

Заключение

Поздравляем! Теперь вы знаете, как писать роботов для Telegram на Python.

Бота можно дополнять другими функциями, например, добавить отправку файлов, опрос или клавиатуру.

Кстати, в телеграмме есть аж целых два типа клавиатур:

  1. Классическая RelpyKeyboardMarkup, у которой кнопки располагаются под полем ввода сообщения:
  2. Более современная InlineKeyboardMarkup, которая привязывается к конкретному сообщению:

Но и это полностью рабочий Телеграм-бот на Python: дополните словарём, и получите полноценную беседу. Также можете опробовать функциональность нашего Telegram-бота.

В «настоящих проектах» не обойтись без базы данных. Тут на помощь приходит docker-compose, который позволяет объединить несколько контейнеров в один сервис. Таким образом, например, можно создать приложение и положить его в контейнер, а базу данных, как отдельный сервис, поместить в другой контейнер, и с помощью docker-compose наладить между ними связь.

Также для более серьёзной разработки лучше использовать выделенный виртуальный сервер (VPS): он даёт гораздо больше гибкости и свободы, чем тот же AWS. А самое главное, он более приближён к «боевой» разработке. Схема работы тут будет даже проще, чем с AWS: вам просто нужно установить Docker, спуллить образ с Docker Hub и запустить его.

Следите за новыми постами по любимым темам

Подпишитесь на интересующие вас теги, чтобы следить за новыми постами и быть в курсе событий.

Источник: tproger.ru

Пишем telegram бота на языке R (часть 4): Построение последовательного, логического диалога с ботом

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

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

Также в данной статье мы научимся использовать под капотом бота базы данных, в нашем примере это будет SQLite, но вы можете использовать любую другую СУБД. Более подробно о взаимодействии с базами данных на языке R я писал в этой статье.

Еще по теме:  Почему в Телеграмме не видно видео собеседника во время разговора

Если вы интересуетесь анализом данных возможно вам будут интересны мои telegram и youtube каналы. Большая часть контента которых посвящены языку R.

  1. Введение
  2. Процесс построения бота
  3. Структура проекта бота
  4. Конфиг бота
  5. Создаём переменную среды
  6. Создаём базу данных
  7. Пишем функции для работы с базой данных
  8. Методы бота
  9. Фильтры сообщений
  10. Обработчики
  11. Код запуска бота
  12. Заключение

Введение

Для того, что бы бот мог запрашивать от вас данные, и ждать ввод какой-либо информации вам потребуется фиксировать текущее состояние диалога. Лучший способ это делать, использовать какую нибудь встраиваемую базу данных, например SQLite.

Т.е. логика будет следующей. Мы вызываем метод бота, и бот последовательно запрашивает у нас какую-то информацию, при этом на каждом шаге он ждёт ввод этой информации, и может осуществлять её проверку.

Создание Telegram-бота c Laravel и BotMan

Материал является вольным переводом статьи Build A Telegram Bot with Laravel and BotMan с сайта scotch.io.

В данном материале для создания Telegram-бота мы используем известную библиотеку BotMan (botman.io).

На рисунке вы можете видеть результат работы созданного по этому материалу Telegram-бота. Здесь по команде /random бот вернул ссылку на случайную картинку собаки:

Естественно, кроме этой команды, бот будет понимать и другие.

В первую очередь установим Botman Studio. Если вы не знаете, что это, то знайте, Botman Studio ­– это стандартное Laravel-приложение с уже включенной в него библиотекой Botman. Так что если вы уже работали с Laravel ранее, то большинство действий из этого материала будет для вас знакомо.

А теперь продолжим, и создадим новый проект командой:

composer create-project —prefer-dist botman/studio ilovedogs

После того, как все установится проверьте работает ли оно. Для этого наберите в браузере: [адрес вашего сайта]/botman/tinker (например, у меня было так: site1.com/botman/tinker), и в результате вы должны увидеть следующую страницу:

Здесь нас интересует первая ссылка Tinker. Перейдя по ней, вы увидите поле ввода, через которое можно «пообщаться» с ботом. Например, если ввести слово «Hi», в ответ вы получите «Hello!». Проверили, что все работает, можем продолжить.

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

  • запрос ссылки на случайную картинку из всех пород собак (команда /random)
  • запрос ссылки на случайную картинку с указанием породы (например, /b dachshund)
  • запрос ссылки на случайную картинку с указанием породы и подпороды (например, /s hound:afghan)

Также добавим простую возможность диалога, где можно выбрать желаемое действие из нескольких вариантов (команда Start conversation): Кроме возможности диалога, нужно еще предусмотреть вариант, когда человек будет вводить какие-то неизвестные команды: Это весь функционал, который нам предстоит реализовать. Читайте дальше, и вы узнаете, как это сделать.

Запрос ссылки на случайную картинку из всех пород собак (команда /random)

Для того, чтобы получить случайную картинку собаки из всех пород собак пользователю нужно будет ввести команду /random. Научим наш бот правильно реагировать на эту команду.

Откроем файл routes/botman.php и добавим туда новую строчку:

Далее создадим новый контроллер с помощью команды:

php artisan make:controller AllBreedsController

Его содержимое должно выглядеть следующим образом:

Здесь мы используем класс DogService (app/services/DogService.php), который будет отвечать за запросы к Dog API и возвращении полученной ссылки на картинку с собакой. Содержимое этого файла должно быть следующим:

Запрос ссылки на случайную картинку с указанием породы (например, /b dachshund)

Добавим новую строчку в файл routes/botman.php:

Далее откроем контроллер AllBreedsController, который мы создали ранее и добавим в него новый метод:

Определим используемый здесь метод byBreed() в сервисном классе DogService, который мы создали ранее:

Еще по теме:  Как изменить папку сохранения файлов Телеграмм на Андроид

Также не забудьте добавить константу с api-ссылкой для получения картинки по названию породы в начало класса DogService:

// The endpoint we will hit to get a random image by a given breed name. const BREED_ENDPOINT = ‘https://dog.ceo/api/breed/%s/images/random’;

Запрос ссылки на случайную картинку с указанием породы и подпороды (например, /s hound:afghan)

Добавим новую строчку в файл routes/botman.php:

Далее создадим новый контроллер с помощью команды:

php artisan make:controller SubBreedController

Его содержимое должно быть следующим:

Определим используемый здесь метод bySubBreed() в сервисном классе DogService, который мы создали ранее:

Также не забудьте добавить константу с api-ссылкой для получения картинки по названию породы и подпороды в начало DogService:

// The endpoint we will hit to get a random image by a given breed name and its sub-breed. const SUB_BREED_ENDPOINT = ‘https://dog.ceo/api/breed/%s/%s/images/random’;

Диалог с выбором желаемого действия (команда Start conversation)

Далее, с помощью artisan-команды создайте новый контроллер:

php artisan make:controller ConversationController

Его содержимое должно быть следующим:

Здесь мы используем класс DefaultConversation, файл для которого нужно создать в папке app/Conversations. Эта папка уже должна быть в структуре проекта, поэтому остается только создать в ней новый файл DefaultConversation.php. Его содержимое должно быть следующим:

Неизвестные команды

Осталось предусмотреть вариант, когда пользователь вводит какие-то неизвестные команды, которые бот не знает. Снова откроем файл routes/botman.php и добавим новую строчку:

Создадим новый контроллер командой:

php artisan make:controller FallbackController

Его содержимое должно быть следующим:

На этом программистская часть закончена, осталось создать новый бот в Telegram, и привязать его к нашему проекту.

Установка Telegram-драйвера

В первую очередь нужно установить Telegram-драйвер в проект:

composer require botman/driver-telegram

Создание нового Telegram-бота

Открываем Telegram и через поиск ищем BotFather. После чего пишем: /newbot. Далее выбираем имя для бота (name), я использовал имя BotmanTest. Затем выбираем пользовательское имя (username), оно должно быть уникальным. После этого вы получите api-токен, который нужно указать в файле .env проекта, для этого добавьте следующую строчку в конец файла:

TELEGRAM_TOKEN=YOUR_TOKEN

И замените YOUR_TOKEN на полученный api-токен.

Открываем доступ извне к проекту с помощью ngrok

Чтобы не выкладывать свой тестовый проект на отдельный сервер в сети, воспользуемся утилитой ngrok. С помощью этой утилиты ваш проект на localhost станет доступен по отдельному адресу в Интернете. Если у вас еще не установлен ngrok, используйте официальную страницу (https://ngrok.com/download) для установки.

После того, как вы установите ngrok запустите Laravel-сервер:

php artisan serve

После чего перейдите в папку с ngrok и выполните команду:

./ngrok http 8000

Теперь ваш проект будет доступен из сети по адресам, которые указаны в строчках Forwarding: Для работы Telegram-бота нужен https-адрес, поэтому используйте его.

Связываем наш проект с Telegram

Для того, чтобы связать наш проект с Telegram, используйте Postman или CURL для выполнения следующей команды:

curl -X POST -F ‘url=https:///botman’ https://api.telegram.org/bot/setWebhook

YOU_URL – https-адрес из ngrok; TOKEN – это TELEGRAM_TOKEN, который вы указали ранее в файле .env.

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

< «ok»: true, «result»: true, «description»: «Webhook was set» >

На этом все, результат работы в Telegram приведен на картинке:

Post Views: 3 600

Как в Laravel создать подключение к БД в runtime Бывают ситуации, например, когда предопределённых в конфиге Laravel подключений к базам данных не достаточно и возникает потребность создавать подключения динамически…

Подтверждение регистрации и верификация email в Laravel 5.6 Как можно сделать очень простую систему подтверждения email адреса пользователя, после того, как он зарегистрируется на сайте? Очень многие книги,…

Почему стоит перейти с Drupal на Laravel Когда приходит понимание того, что технология, любимая многими, тебя настолько устарела, что ты готов к кардинальным изменениям. Многие разработчики крутили…

Источник: evilinside.ru

Рейтинг
( Пока оценок нет )
Загрузка ...