Pytelegrambotapi работа с базами данных

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

Собрать базу подписчиков бота не сложно, потому что при «старте» бота вместе с запросом приходят нужные данные. Нам необходимо только организовать сбор этих данных. Они нам могу пригодиться, например для хранения настроек пользователя, или при формировании рассылки информационных сообщений. Без самостоятельного ведения базы или использования сторонних ресурсов получить список тех, кто начал диалог с вашим ботом невозможно, то есть Телеграм вам такой информации нигде не выведет, по крайней мере на момент написания статьи, я такого функционала в мессенджере не встречал.

Для примера сделаем возможность пользователю выбирать язык интерфейса (мультиязычность), и соответствующую настройку будем хранить вместе с данными пользователя.

Как организовать сбор данных?

Для начала создадим таблицу users в базе MySQL (используйте кодировку utf8mb4_unicode_ci )
CREATE TABLE IF NOT EXISTS `users` ( `id` int(11) NOT NULL AUTO_INCREMENT, `telegram_id` bigint(20) DEFAULT NULL, `first_name` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL, `last_name` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL, `username` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL, `lang` varchar(2) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

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

Telegram-бот pyTelegramBotAPI с базой данных SQLite3

Добавим новый метод setPdo в класс по организации соединения с СУБД MySQL, сам класс Db вы можете посмотреть в предыдущей статье «Авторизация на сайт через Телеграм без использования официального виджета», также в прикрепленном к статье файле будут все приведенные скрипты.

else < $set .= «`» . str_replace(«`», ««», $field) . «`» . «=:» . $field . «, «; >> > return substr($set, 0, -2); > ?>

Вынесем все необходимые в рамках этой статьи методы взаимодействия с Telegram Bot API в отдельный класс Bot, не забудьте заменить ___TOKEN__ВАШЕГО__БОТА___ на токен от своего бота. Класс при необходимости можно расширить, а методы дополнить, но это на ваше усмотрение.

Добавляем боту мультиязычность

В качестве примера применения базы пользователей сделаем боту мультиязычный интерфейс, для этого необходимо при старте пользователю выводить возможность выбора языка в случае, если ранее им язык не был выбран. Мультиязычность позволит вам как создателю бота расширить круг пользователей, повысить лояльность и соответственно получить больше клиентов. Класс Lang работает с файлами, которые содержат текстовые данные на разных языках в формате JSON. На сервере сделаем для них отдельную директорию lang и поместим ее в корень. Структура приложения по итогу будет выглядеть так:

Метод getParam() принимает один обязательный параметр и один необязательный. Обязательный параметр — это ключ в массиве данных языкового файла, по нему мы будем получать значение контента. В качестве не обязательного параметра можно передать массив (ключ — значение) для подстановки необходимых нам динамических данных, например имя пользователя:

$this->lang->getParam(«helloText», [ ‘name’ => $this->user->getFullName() ]);

Lang.php

Файлы с контентом ru.json и en.json
ru.json < «error»: «Произошла исключительная ситуация», «helloText»: «Привет мой друг. nТвое имя nn/lang — Сменить настройки языка» > en.json < «error»: «An exceptional situation has occurred», «helloText»: «Hello, my friend. nYour name is nn/lang — Change language» >

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

Переходим к самому интересному, это класс WebHook. После того как пришел запрос от пользователя мы создаем необходимые объекты и отправляем на проверку языковой настройки. В случае если у пользователя еще не выбран язык (это возможно при первом старте бота) то ему выводится предложение со списком языковых настроек. Если у него язык уже выбран, то все данные передаются в роутер, и там в зависимости от команды выполняются необходимые действия. В нашем варианте выводится приветствие. Еще есть команда на смену языка /lang при ее выполнении пользователю предлагается список на смену языковой настройки.

Index.php — это файл, на который необходимо настроить вебхук.

После успешной настройки вышеописанного приложения у вас будет основа для разработки мультиязычного приложения на базе Телеграм. Исходный код можно скачать и использовать на свое усмотрение.

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

Ошибка c импортом библиотеки в PyCharm pycharm Telebot.

Стандартный import в Python, когда подчеркивает красным

При создании чат-бота в начале работы, с использованием библиотеки pyTelegramBotAPI, сразу PyCharm подчеркивает красным «import telebot», т.е. PyCharm не видит telebot, соответственно нужно подгрузить данную библиотеку.

pic import telebot

Как добавить в PyCharm Telebot

Логично данную библиотеку pyTelegramBotAPI, сразу подгрузить в PyCharm. Можно сразу нажать на подчеркнутое слово и подсказки PyCharm предложат установить эту библиотеку, часто так и поступают. Но тут надо быть осторожнее, т. к. библиотек существует великое множество (что является огромным плюсом самого питона) и импорт некоторых библиотек могут быть одинаковыми, от этого можно на ровном месте получить проблему, иногда которую приходится долго искать.

Например у библиотек pyTelegramBotAPI и Telebot импорт вызывается одной и той же командой «import telebot».

Но перед импортом нужно установить нужную библиотеку (хотя, лучше начать с активации виртуальной среды, об этом написано далее).

Еще добавим что существуют другие библиотеки для создания чат ботов. Например, по сслыке, можете ознакомится с python-telegram-bot и aiogram.

Источник: 7bd.ru

Как написать бота в Телеграме на Python с нуля — пошаговая инструкция

Боты в Телеграме — это уже давно не новинка: каждый уважающий себя интернет-магазин внутри социальной сети обладает возможностью удобной навигации по меню, и даже некоторые новостные каналы настраивают таргет по пожеланиям пользователя с помощью автоматизированных систем.

Вопрос остается в другом: как сделать бота так, чтобы не растратить миллионы на отладку и работу? Несмотря на то, что существует огромное количество автоматических конструктов, все равно нужно потратить немало времени на разбор алгоритма и итогового кода. К тому же они не могут гарантировать корректную работу абсолютно всех функций. Например, когда кто-то захочет связать курс доллара с днями проигрышей «Спартака», ему придется самостоятельно настраивать логику в собственной программе.

Программирование — вот, за чем стоит создание качественного бота. И мы попросту не могли обойти эту тему стороной, потому что с помощью Python создать автоматизированную систему в Телеграме проще простого. Копируем код, исследуем каждую строчку и удивляемся результатам!

Действие 1. Немного теории-базы для понимания принципа работы API Telegram

В первую очередь необходимо понять, каким образом бот будет производить отправку сообщений с прочтением ответов от пользователей.

Разработчики Telegram создали функционал для удобного использования API HTML. Он, в свою очередь, зависит от URL, общий вид функции:

При этом #названиеметода# — может быть как getChat (открыть чат), sendMessage (отправить сообщение), так и getUpdates (обновление). Для подтверждения подлинности бота в системе внутри каждой программной строки указывается токен — специальные символы, создающиеся при формировании бота.

Общий вид токена представлен далее:

При этом стоит понимать, что большая часть методов требует предоставления дополнительных параметров. В случае с sendMessage — непосредственный текст и chat_id. Именно поэтому внутри ботов реализуются как POST, так и GET запросы, которые передаются как URL-строки (например, application/#x-www-form-urlencoded#) и могут быть представлены только в кодировке UTF-8.

Еще по теме:  Как удалить акаунт в Телеграме

После того, как API-функция получает запрос, бот отправляет ответ формата JSOM. Предположим, что ранее был выполнен запрос данных при помощи метода getME, в таком случае пользователь получит ответ следующего вида:

В том случае, если значение поля «ok» равно true, результат обработки появится в поле, именованном «field». В ином случае текст ошибки можно будет найти в «description».

Второй вопрос, который необходимо изучить — каким образом бот будет получать сообщения от пользователей, и как реализуется дальнейшая обработка?

Несмотря на то, что во многих языках программирования поддерживаются многомиллионные библиотеки со схожими алгоритмами, разработчики остановились на двух методах:

Первый — ручная обработка методов при помощи getUpdates. То есть, бот будет получать объекты-массив формата Update. При этом сама функция работает как длинный опрос, то есть, изначально пользователи отправляют запросы, система обрабатывает их, выдает результат, и идет откат к первому действию, пока не закончится работа бота. Если не хочется производить повторную работу и тратить вычислительные мощности, лучше задуматься над параметром offset.

Метод getUpdates настоятельно рекомендуется использовать, если:

  1. Нет желания формировать произвольную настройку HTTPS.
  2. Производится работа со скриптовыми языками, трудно встраиваемыми в деятельность веб-серверов.
  3. Бот находится время от времени в высокой нагрузке.
  4. Периодически производится смена сервера для бота.

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

Метод Webhooks является одним из оптимальных в том случае, если:

  1. Используется веб-язык для дополнения программирования (PHP, HTML).
  2. Бот не страдает от высокой нагрузки и нет необходимости самостоятельной обработки запросов.
  3. У бота есть стабильное место внутри веб-сервера.

Третий, не менее важный вопрос: каким образом производится регистрация бота внутри социальной сети Телеграм?

Касательно Python, одна из наиболее часто используемых библиотек — PyTelegramBotAPI. Она написана в соответствии с базовыми принципами ООП и является лишь оболочкой для HTML-запросов. При этом все типы данных представляют собой отдельные классы.

Действие 2. Подготовка плацдарма для взлета бота

Основа бота на Python — новейшая библиотека PyTelegramBotAPI (в простонародье «Телебот»). Прежде чем начинать работу непосредственно с программированием, необходимо убедиться, что на компьютере установлена актуальная версия программного обеспечения. Функция для Linux:

После этого при помощи командной строки (Windows) или терминала (Linux) необходимо произвести установку библиотеки:

На этом все приготовления закончены — настоятельно рекомендуется использовать версию Python 3-го поколения (3.7+). Это избавит от проблем с совместимостью, наиболее актуальные версии расположены на официальном сайте.

Действие 3. Настройка речевого аппарата бота

Вне зависимости от того, в какой именно среде будет писаться код (блокнот, Jupyter Notebook), программирование будет одинаковым — использование long pool, много упорства и немало фантазии под соусом из функционала библиотеки Телебота.

При этом стоит понимать, что поле «content_types» может принимать различные значения в зависимости от ситуаций — это может быть набор-массив, числа, знаки и тому подобное. Например:

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

Дальнейший код является сугубо демонстрационным и лишь описывает основной синтаксис взаимодействия библиотеки Телебот и Python. Постараемся создать такую программу, чтобы пользователь писал «Привет», а в ответ получал эксклюзивный «Привет от Партнеркина!».

if message.text == «Привет»:

bot.send_message(message.from_user.id, «Привет от Партнеркина!»)

elif message.text == «/help»:

bot.send_message(message.from_user.id, «Напиши «Привет»)»)

else:

bot.send_message(message.from_user.id, «Партнеркин помогает с /help»)

Каждая из указанных функций характеризует поведение пользователя — что именно он может ввести, и как на это должен реагировать бот. Остается добавить только одну строку, которая работает только с методом long pool:

Еще по теме:  Боты в телеге определяющие информацию по ВК

Вне зависимости от того будет ли находиться пользователь в диалоге, каждую секунду бот будет спрашивать непосредственно у социальной сети «Пишет ли мне этот пользователь в этом диалоге?». Постепенно расширяясь на множество диалогов, возможно увеличение времени задержки.

Действие 4. Добавление логики и мозгов

Взаимодействие с пользователем посредством угадывания каждой его фразы — это, конечно, весело. Однако мы постараемся расширить функционал, введя количество покупок, наименования и стоимость. В этом нам потребуется следующий метод register_next_step_handler:

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

def get_price(message):

global price;

while price == 0: #проверка, что цена не равна 0

try:

price = count*100 #проверка, что

except Exception:

bot.send_message(message.from_user.id, Некорректное количество товара);

keyboard = types.InlineKeyboardMarkup(); //кнопочки

key_yes = types.InlineKeyboardButton(text=’Да’, callback_data=’yes’); #кнопка «Да»

keyboard.add(key_yes); #добавление кнопки в клавиатуру

key_no= types.InlineKeyboardButton(text=’Нет’, callback_data=’no’);

keyboard.add(key_no);

question= ‘Итоговая стоимость ‘+str(age)+’ за ‘+name+’ в количестве ‘+price+’?’)

bot.send_message(message.from_user.id, text=question, reply_markup=keyboard)

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

Самый последний шаг — добавить типы из начальной библиотеки:

Действие 5. Расширение функционала

Функционал Телебота поистине безграничен — постоянно добавляются новые фишки, пользователи демонстрируют исключительные функции, которые в режиме реального времени позволяют не столько взаимодействовать с пользователями, сколько снимают данные и фиксируют сигналы для работы (с валютами, например).

Но касательно работы с пользователями, разработчики постарались по максимуму, добавив, например, целых два типа кнопок:

Классическая RelpyKeyboardMarkup — кнопки расположены непосредственно под полем ввода сообщения:

Современная InlineKeyboardMarkup — кнопки привязаны к конкретному сообщению:

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

Эксперты отвечают

М Михаил

Телеграм-боты могут всё, что угодно?

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

Если планируется работа с достаточно крупными проектами, рекомендуется также начать работу с виртуальным выделенным сервером (VPS). В отличие от стандартного AWS он обладает большими возможностями для гибкого программирования, а также устанавливается в процессе использования библиотеки Docker.

Вывод

Написать свой собственный код для бота — значит, быть уверенным в его полной работоспособности, предполагать всевозможные тесты и уметь отлаживать нерабочие куски в режиме реального времени. Современные технологии позволяют овладеть языком программирования за считанные часы — так почему бы не воспользоваться такой возможностью для автоматизации работы в Телеграме?
А если у вас за плечами часы практики или есть готовое портфолио по созданию подобных ботов, то смело можно размещать свое резюме в нашем специальном разделе, где заказчики ищут исполнителей для своих проектов.

Источник: partnerkin.com

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