Как подключить базу данных к боту Телеграмм

В интернете и так полным-полно мануалов по подключению базы данных к любому скрипту. Однако, несмотря на такое обилие информации, мои комментарии буквально ломятся от вопросов вида «как?»: «подключить, использовать, настроить» базу данных к telegram боту. Окей, почему бы не написать об этом соответствующую статью.

За основу возьмем заготовку, написанную в статье про бота для Telegram на Php, потому что в основном такие сложности возникают у читателей в комментариях этого материала.

Основа

Имеется скрипт-заготовка бота и имеется mysql, а так-же phpmyadmin, который мы и будем использовать для создания базы.

Да, чтобы работать с базой данных ее надо сначала… создать! Увы, система не сделает ничего за вас, придется делать все вручную. При первом знакомстве в mysql меня это немного разочаровало, но такова реальность. Можно, конечно, написать скрипт инициализации на манер wordpress’овского, я подобное уже делал, но это явно будет не уровень новичка. Поэтому руками, все руками!

Пишем TELEGRAM бота с БАЗОЙ ДАННЫХ на Python

Открываем phpmyadmin, заходим туда и создаем новую базу данных. Я назову ее «revcom_base»;

Тыкаем там создать, а потом переходим туда внутрь. Внутри базы нам надо перейти на вкладку «Операции». Там будет возможность создать первую таблицу.

Называем ее users и тыкаем «вперед». После чего задаем параметры столбцов в таблице:

Поле id у нас имеет атрибут A_I, то есть AUTO_INCREMENT, что означает буквально: у каждого нового пользователя будет свой id, который автоматически будет увеличиваться на 1 для каждого нового пользователя. Поле data_json — это данные пользователя. Если проще — обычное текстовое поле. В него будем записывать пользовательские настройки в формате json. Остальное думаю и так понятно.

Замечу, что все это можно было сгенерить используя SQL, но для простоты делать этого мы тут не будем.

Тыкаем внизу «создать» и получаем первую и единственную нужную нам для демонстрации таблицу. Теперь создадим «модель» то есть php обертку таблицы, которая удобно позволит работать с ней. Ато развелось любителей создавать сложные select запросы и всякие там fetch_assoc прямо в обработчиках команд… Так конечно тоже можно, но код смотрится страшно… И это не верный подход. Поэтому делать будем обертку.

Однако сначала подключение.

Подключение к базе данных

Тут все элементарно. Создаем файл «db_connect.php» прямо в папке бота, куда помещаем типичный шаблонный код:

Еще по теме:  Зайти в Телеграмм с ноута видно ли на телефоне

Используем этот файл в начале нашего бота, размещая там строчку

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

И на страничке бота ошибок нет:

Если у вас есть — указывайте правильные логин и пароль к базе до тех пор пока ошибки не пропадут.

Модель базы

Теперь делаем обертку для нашей базы данных.

Что нам надо уметь?

  1. Нам надо уметь создавать новых пользователей, то есть создавать новые записи в таблице «users»
  2. Нам надо уметь проверять есть этот пользователь в базе или его нет(чтобы не плодить сущности и не создавать по две-три записи в базе для одного пользователя)
  3. Нам надо уметь добавлять данные настроек бота(какие-нибудь) к пользователю
  4. Нам надо уметь считывать сохраненные данные пользователя

Ну вот и пишем нужные нам методы.

Вставка пользователей в базу

Первый метод — это создание, то есть сохранение юзера, в таблицу и выглядеть он будет так:

function make_user($name,$chat_id)< global $db; $name = mysql_real_escape_string($name); $chat_id = mysql_real_escape_string($chat_id); $query = «insert into `users`(name,chat_id) values(»,»)»; mysql_query($query,$db) or die(«пользователя создать не удалось»); >

Добавим этот метод в файл users.php, который, разумеется, надо сначала создать. Этот файл и будет нашей моделью для работы с базой.

Подключать его надо ниже под db_connect.php, вот так:

Ну и, чтобы … убрать вашу неуверенность, вот так выглядит сам файл users.php с нужным нам методом, на данном этапе:

Теперь давайте протестируем как работает этот метод. Человек должен добавляться в базу при поступлении от него первой команды. Поэтому лучше всего будет добавить метод make_user в начало секции on то есть вот, примерно, так:

// регистрация юзера $bot->on(function($Update) use ($bot)< $message = $Update->getMessage(); $mtext = $message->getText(); $cid = $message->getChat()->getId(); make_user($message->getFrom()->getUsername(),$cid); >, function($message) use ($name)< return true; // когда тут true — команда проходит >);

Если у вас уже этот обработчик есть просто добавьте строчку make_user($message->getFrom()->getUsername(),$cid); в нужное место.

Ну и, собственно, сохраняем, а потом пишем что-нибудь боту. Это должно добавить новую запись в таблицу.

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

Впрочем это никак не повредит мне в разработке т.к. я отлично представляю себе как работает mysql.

Проверка на наличие пользователя в базе

Создание есть, осталось сделать так, чтобы один и тот-же пользователь не добавлялся по нескольку раз. (Вы можете отправить несколько сообщений в канал бота и это создаст столько-же записей в базе, чего быть не должно)

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

Для этого будем использовать запрос select и mysql_fetch_array вот так:

function is_user_set($name)

Теперь мы можем проверять есть этот пользователь в базе или нет. Делаем в методе on так:

if(is_user_set($message->getFrom()->getUsername()) == false)< make_user($message->getFrom()->getUsername(),$cid); >

Отлично, теперь сущности не плодятся:

Сохранение пользовательских данных

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

// задание настройки function set_udata($name,$data = array()) < global $db; $name = mysql_real_escape_string($name); if(!is_user_set($name))< make_user($name,0); // если каким-то чудом этот пользователь не зарегистрирован в базе >$data = json_encode($data,JSON_UNESCAPED_UNICODE); mysql_query(«update `users` SET data_json = » WHERE name = »»,$db); // обновляем запись в базе > // считываение настройки function get_udata($name) < global $db; $res = array(); $name = mysql_real_escape_string($name); $result = mysql_query(«select * from `users` where name=’$name'»,$db); $arr = mysql_fetch_assoc($result); if(isset($arr[‘data_json’]))< $res = json_decode($arr[‘data_json’], true); >return $res; >

Для проверки этих методов засунем в on такой код:

// сохранение тестовых данных $data = array( «prevmsg» => $mtext ); set_udata($message->getFrom()->getUsername(), $data); // тест получения данных $data = get_udata($message->getFrom()->getUsername()); $bot->sendMessage($message->getChat()->getId(), json_encode($data,JSON_PRETTY_PRINT|JSON_UNESCAPED_UNICODE)); // тут меня кто-то спрашивал как дебажить базу данных. Вот так ее дебажат.

Теперь можно написать что-нибудь в бота и посмотреть на результат. Сначала надпись будет в базу помещена, а потом выдана нам в формате массива.

Все работает, так, как я и задумывал.

Пример использования

Теперь давайте сделаем небольшое взаимодействие с этим инструментарием.

Создадим разветвленный диалог вида: «ваше имя, ваш сайт» и после получения этих данных сохраним их в базе.

// регистрация юзера $bot->on(function($Update) use ($bot)< $message = $Update->getMessage(); $mtext = $message->getText(); $cid = $message->getChat()->getId(); if(is_user_set($message->getFrom()->getUsername()) == false)< make_user($message->getFrom()->getUsername(),$cid); > $data = get_udata($message->getFrom()->getUsername()); // получаем массив данных if(!isset($data[«mode»]))< // если в нем нет режима — значит человек еще не взаимодействовал с этой командой $mode = «name»; // поэтому задаем ему действие по дефолту >else < $mode = $data[«mode»]; >if($mtext == «/dbact»)< // по команде /dbact запускаем цепочку if($mode == «name»)< $bot->sendMessage($message->getChat()->getId(), «Добрый день, укажите, пожалуйста, ваше имя»); $data[«mode»] = «aftername»; set_udata($message->getFrom()->getUsername(), $data); // сохраняем изменения > > if($mode == «aftername»)< // помещаем имя в массив данных $data[«name»] = $message->getText(); // очевидно, что после запроса имени пользователь отправит следюущей командой свое имя, то есть оно будет в тексте сообщения. $bot->sendMessage($message->getChat()->getId(), «Добрый день, укажите ваш сайт»); $data[«mode»] = «website»; set_udata($message->getFrom()->getUsername(), $data); // сохраняем изменения > if($mode == «website»)< $data[«website»] = $message->getText(); // очевидно, что после запроса сайта пользователь отправит следюущей командой свой сайт, то есть адрес будет в тексте сообщения. $bot->sendMessage($message->getChat()->getId(), «спасибо.»); $data[«mode»] = «done»; set_udata($message->getFrom()->getUsername(), $data); // сохраняем изменения > if($mode == «done»)< // если человек уже прошел опрос — выводим ему собранную у него-же информацию $bot->sendMessage($message->getChat()->getId(), «Вы уже проходили опрос и указали такие данные:nИмя — «.$data[«name»].»nсайт — «.$data[«website»]); > >, function($message) use ($name)< return true; // когда тут true — команда проходит >);

Еще по теме:  Как перенести номер Телеграмм

При вызове команды /dbact мы сможем пройти такой вот диалог:

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

Скачать готовый пример

Как обычно вы можете скачать готовый пример бота с этим функционалом

демо php telegram бота с базой данных

Источник: pozi.pro

#4 – SQLite3. Подключение к базе данных

#4 – SQLite3. Подключение к базе данных

За урок вы выполните подключение базы данных к вашему Телеграм Боту. Вы подключите БД SQLite3, но в будущем по схожему принципу сможете подключать любые другие БД.

Видеоурок

База данных SQLite3 была выбрана в качестве примера по причине ее простоты настройки и использования. В точно таком же формате вы в будущем можете подключиться к любой другой базе данных, что поддерживается языком Python. Это могут быть: MySQL, PostgreSQL, MongoDB и многие другие.

Если ваш сайт работает с MySQL, то вы легко можете скачать коннектор для Питона, установить его через pip и подключиться к вашей БД, что используется на сайте. Далее вы сможете выводить ту же информацию, что выводите на сайте.

В ходе урока был показан общий принцип работы с базами данных. В будущем вы можете использовать любую другую БД на свое усмотрение.

Весь код будет доступен после подписки на проект!

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

Как привязать БД к телеграм боту python

Захотел написать телеграмм бота для записи сообщений пользователя в БД.
Так вот набросал код но надо еще добавить запись в БД. Вот код:

Отслеживать
задан 17 июл 2020 в 15:04
user388705 user388705

Прежде чем добавлять запись в бд — ее нужно создать. Потом, чтобы создать бд нужно сначала выбрать какую бд вы будете использовать. Их как бы не один десяток.

17 июл 2020 в 15:09
И как бы токен от тг очень к месту.
17 июл 2020 в 15:10

1 ответ 1

Сортировка: Сброс на вариант по умолчанию

Шаг 1: Создаем базу данных и подключаем её к коду.

Если желаете файликом: используем библиотеку sqlite3 (Guide) Если хотите использовать базу из интернета используем mysql.connector (Guide)

Шаг 2: Пишем запросы

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

cursor.execute(«INSERT INTO table(id) VALUES(‘<>’)».format(message.from_user.id))

Источник: ru.stackoverflow.com

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