Как добавить id человека в Телеграмме в своего бота

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

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

Основа

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

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

Открываем 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

Как создать бота в телеграмме и настроить работу команд

Комфортное обучение в летнем формате от Product Live

Что такое Telegram знает каждый пользователь соцсетей. Это один из самых популярных мессенджеров в России, с помощью которого можно не только переписываться с друзьями, но и продвигать различные бизнес-проекты.

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

Содержание статьи скрыть

Что такое чат-бот и для чего он нужен

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

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

Еще по теме:  Два Телеграмма в телефоне в одном человек есть в другом нет почему

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

Основные функции чат-бота:

  • ответы на самые часто задаваемые вопросы;
  • создание меню с командами для дальнейшей работы;
  • создание рассылок для подписчиков;
  • ведение статистики подписчиков;
  • развлекательный контент;
  • показ новостной ленты.

Чат-бот посылает запрограммированную информацию в зависимости от тематики канала. Это может быть график работы магазина, стоимость услуг, курс валют и так далее. В названии такого аккаунта всегда есть слово bot.

Основными преимуществами создания такого помощника является:

  • круглосуточная работа — чат-бот предоставит информацию для клиента 24/7;
  • клиент может моментально получить ответ на интересующий вопрос;
  • для работы с роботом не требуется установка дополнительных программ.

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

Ежедневные советы от диджитал-наставника Checkroi прямо в твоем телеграме!
Подписывайся на канал
Подписаться

Создание чат-бота в телеграме

Для начала необходимо зайти в свой аккаунт в телеграмме или скачать приложение через App Store или Play Маркет. Для установки приложения на компьютер необходимо скачать установочный файл с официального сайта.

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

  • Puzzlebot;
  • Manybot;
  • Botobot;
  • Bottap;
  • BotFather.

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

Создаём чат-бот через сервис BotFather

Открываем приложение телеграма и в поисковой строке набираем имя «BotFather». Это официальный системный бот приложения, который помогает с регистрацией других ботов в мессенджере. Обратите внимание, что у данного сервиса есть официальное подтверждение — синяя галочка.

Открываем приложение телергама и в поисковой строке набираем имя «BotFather»

Шаг 1. Бот запрограммирован давать ответы, поэтому он никогда не начинает диалог. Чтобы получить информацию об установке вашего помощника, необходимо дать системному боту команду. Напишите в диалоговое окно /newbot. Далее бот будет задавать вопросы или давать инструкции.

Необходимо придумать имя боту

Шаг 2. Необходимо придумать имя боту — оно будет отображаться в поисковой строке в списке контактов. Как правило, существующему названию компании или профиля в соцсети дописывают приставку bot. Если имя занято, то будут приходить системные сообщения — необходимо придумать другое. Для названия помощника можно использовать от 5 до 32 символов.

Если имя занято, то будут приходить системные сообщения — необходимо придумать другое

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

Токен необходимо скопировать и вставить в диалоговое окно

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

Настраиваем чат-бот

Для более полной информации необходимо настроить описание чат-бота — вставить аватар, написать информацию о компании.

Для этого нужно в диалоговом окне нажать команду /mybots. Появится меню настроек и редактирования.

Появится меню настроек и редактирования

И далее по очереди делаем описание каждого необходимого пункта. В любой момент можно редактировать описание и менять информацию.

В любой момент можно редактировать описание и менять информацию

Создаём команды для чат-бота

Далее необходимо прописать необходимые команды, которые будет выполнять бот. Необходим начать с ним диалог — для этого нажимаем команду «нажать» внизу чата.

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

  • /newpost — отправка сообщений подписчикам;
  • /schedule — посмотреть отложенные посты;
  • /subscrlbers — посмотреть количество подписчиков;
  • /commands — создание собственных команд и настройка бота;
  • /botlang — установка языка бота
  • /setdescription — возможность отредактировать описание бота;
  • /channels — настройка автоматической выкладки постов в Телеграм;
  • /admins — управление администраторами бота;
  • /tutorials — ответы на вопросы, связанные с созданием и настройкой бота;

Как создать бота для Telegram | Бот отправляющий изображения котов

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

ЯП который мы будем использовать, как всегда Python. Напишем простого бота, который по заданной команде будет присылать нам котиков, а еще добавим кнопку, чтобы не вводить команды каждый раз. Вот рабочий пример (надеюсь к моменту твоего прочтения, я его еще буду хостить).
И итог того, что должно получиться:

Скриншот чата с ботом

Подготовка

Для начала мы будем исходить из того, что Python3 уже установлен и из командной строки прекрасно работает >_ python и >_ pip. Сидим мы из под Linux или Windows неважно.
Для работы с телеграмом будем использовать эту библиотеку, для установки необходима командная строка с правами администратора.
И ввод одной команды.

pip install python-telegram-bot —upgrade

pip install requests

Чат с BotFather

Не забудем и про добавление команды

Чат с BotFather

Пишем код

В принципе, многое уже и так есть в примерах в репозитории и заново ничего придумывать не надо, мы лишь изменим и дополним то, что уже есть.
И так поехали, берем из примеров простого бота echobot2, который уже умеет отвечать на все сообщения и знает команды /help /start. Отвечалку на все сообщения мы изменим, команды тоже немного поменяем и добавим свою /cat, которая собственно и будет постить котиков :3.
Для начала подставляем ранее полученный токен, необходимый для работы.

Еще по теме:  Как отключить выноски в Телеграмме

Код инициализации бота

Смотрим дальше и видим, что все обработчики в боте (команды, текст и тд) находятся в функции main и добавляются как dp.add_handler
Как вы можете заметить, событие использования команды в чате состоит из двух частей: текст команд и функции, которая вызывается при ее использовании.

По тому же принципу добавим свою команду строкой
dp.add_handler(CommandHandler(«cat», sendcat)), где cat — это команда , sendcat — вызываемая функция при получение данной команды.

Код инициализации бота

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

Код отправки сообщения в Telegram

Изменим отправляемый текст на сообщение об ошибке

Код отправки сообщения в Telegram

Также изменим отправляемый текст на /start и /help

Украшательства закончены. Приступим к котикам :).
Котики у нас будут состоять из двух функций. Первую вы уже видели в хендлере — sendcat, она будет отвечать за отправку, но встает вопрос, а что же нам собственно отправлять? Тут мы будем использовать вторую функцию getcat которая будет отвечает за предоставление ссылок на картинки с котиками, брать которые мы будет с сайта thecatapi. Его апи позволяет получать ссылки на случайные картинки с котами, чем мы и воспользуемся.
Подключаем библиотеку requests и пишим простенькую функцию выдающию ссылки на картинки с котиками. Потом просто вызываем ее в sendcat.

Получения ссылки python requests

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

Скриншот чата с ботом

Уже неплохо, но что-то все равно не то. Мы отправляем котов не как картинки, а как ссылки, телеграм конечно их подгружает и показывает, но решение так себе. Исправим же это, открываем документацию по работе с апи телеграма для ботов и ищем метод отправки картинок.

Функция отправки изображения в Telegram

Возвращаемся обратно и в функции sendcat заменяем всю строку отправки сообщения на bot.sendPhoto(chat_id=update.message.chat_id, photo=getcat())

Функция отправки сообщения с картинкой

Скриншот чата с ботом

Почти все готово, осталось сделать кнопку в чате, чтобы не вписывать постоянно команду вручную.
Использовать мы будем Inline клавиатуру (прямо в чате которая), она состоит из двух функций: первая отвечает за отрисовку (markup), вторая за обработку нажатий (callback).
Снова идем в примеры, которые даются авторами библиотеки, вытаскиваем вот это и переделываем под себя.
Кое-что доподключаем:

Подключение библиотек inline keyboard

В итоге получается

Код клавиатуры inline в Telegram

Скриншот чата с ботом

Исходный код

import requests from telegram import InlineKeyboardButton, InlineKeyboardMarkup, ReplyKeyboardRemove, ReplyKeyboardMarkup, KeyboardButton from telegram.ext import Updater, CommandHandler, MessageHandler, Filters, CallbackQueryHandler import logging # Enable logging logging.basicConfig(format=’%(asctime)s — %(name)s — %(levelname)s — %(message)s’, level=logging.INFO) logger = logging.getLogger(__name__) # Define a few command handlers. These usually take the two arguments bot and # update. Error handlers also receive the raised TelegramError object in error. def start(bot, update): «»»Приветствие»»» update.message.reply_text(‘Привет, я бот, который очень любит котиков :3nНапиши мне /cat и я поделюсь ими с тобой’) def help(bot, update): «»»Сообщение для помощи с командами»»» update.message.reply_text(‘Чтобы получить котика напиши /cat’) def echo(bot, update): «»»На любой текст отвечаем ошибкой»»» update.message.reply_text(«Неизвестная команда :(«) def error(bot, update, error): «»»Log Errors caused by Updates.»»» logger.warning(‘Update «%s» caused error «%s»‘, update, error) def getcat(): »’Получение ссылки на картинку с котиком»’ try: r = requests.get(‘http://thecatapi.com/api/images/get?format=src’) url = r.url except: url = get_cat() print(‘Error with cat parsing’) pass return url def sendcat(bot, update): «»»Отправка котиков»»» bot.sendPhoto(chat_id=update.message.chat_id, photo=getcat(), reply_markup=draw_button()) def draw_button(): keys =[[InlineKeyboardButton(‘?Еще котика. ‘, callback_data=’1’)]] return InlineKeyboardMarkup(inline_keyboard=keys) def get_callback_from_button(bot, update): query = update.callback_query username = update.effective_user.username chat_id = query.message.chat.id message_id = query.message.message_id if int(query.data) == 1: bot.sendPhoto(photo=getcat(), chat_id=chat_id, message_id=message_id, reply_markup=draw_button()) def main(): «»»Start the bot.»»» # Create the EventHandler and pass it your bot’s token. updater = Updater(«СЮДА ВАШ ТОКЕН») # Get the dispatcher to register handlers dp = updater.dispatcher dp.add_handler(CallbackQueryHandler(get_callback_from_button)) dp.add_handler(CommandHandler(«start», start)) dp.add_handler(CommandHandler(«help», help)) dp.add_handler(CommandHandler(«cat», sendcat)) # on noncommand i.e message — echo the message on Telegram dp.add_handler(MessageHandler(Filters.text, echo)) # log all errors dp.add_error_handler(error) # Start the Bot updater.start_polling() # Run the bot until you press Ctrl-C or the process receives SIGINT, # SIGTERM or SIGABRT. This should be used most of the time, since # start_polling() is non-blocking and will stop the bot gracefully. updater.idle() if __name__ == ‘__main__’: main()

F.A.Q

  • Q: Т.к бот каждый раз запрашивает картинку, а потом еще и загружает ее в мессенджер, уходит масса времени. Как ускорить выдачу ответов?
  • A: Решение — использовать сервера Telegram, как кеш. Сохраняйте при отправке фото их media_id (куда нибудь в бд), чтобы потом можно было быстренько его оттуда вытянуть и отправить.
  • Q: А как сделать ребут, админку, оформить тексты т.д ?
  • A: Здесь есть отличные сниппеты
  • Q: Как осуществить . ?
  • A: Документация Telegram bot api, Вики библиотеки

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

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