Бот использовать бд Телеграм

С тех пор, как Telegram в 2015 году представил ботов, другие мессенджеры тоже добавили ботов на свои собственные платформы. Но Telegram по-прежнему опережает своих конкурентов благодаря обширному боту API и свободе, которую он предлагает разработчику. API-бот это интерфейс на основе HTTP, созданный для разработчиков, желающих создавать боты для Telegram.

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

Как работают боты

Чтобы получать обновления от Telegram, вам понадобится токен (token). Все обновления и взаимодействия с вашим ботом в Telegram сохраняются, так что вы можете обратиться к ним, послав запрос по этому URL с указанием токена:

https://api.telegram.org/bot/METHOD_NAME

С чего начать

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

6 УРОК — SQLite + AIOGRAM! ПОДКЛЮЧЕНИЕ БД И СОЗДАНИЕ ТАБЛИЦ | ПОЛНЫЙ КУРС ПО AIOGRAM

Замените вышеуказанный URL на ваш токен и укажите один из методов API-бота Telegram. Давайте используем метод getMe.

https://api.telegram.org/bot/getMe // —> >

Отлично. Но как это сделать в NodeJS? В общем-то так же. Каждый раз, когда нам нужно обновление, мы отсылаем запрос по адресу с указанием нужного метода.

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

Начинаем писать код

Инициализируйте процесс и установите Telegraf:

npm init
npm install telegraf —save

Теперь давайте добавим его к нашему скрипту и создадим простой бот:

const Telegraf = require(‘telegraf’); const app = new Telegraf(YOUR_TOKEN_HERE); app.hears(‘hi’, ctx => < return ctx.reply(‘Hey!’); >); app.startPolling();

Что происходит? У Telegraf есть свои собственный методы чтобы сделать за нас большую часть работы. Мы может использовать этот метод чтобы ответить на сообщение пользователя:

Еще по теме:  Виджет Телеграмм не работает

Reddit bot

Давайте рассмотрим пример. Мы будем отсылать верхний пост из сабредита по запросу пользователя. Установим библиотеку axios чтобы упростить отсылку запросов GET и получение данных от Reddit.

npm install axios —save
const axios = require(‘axios’); // add axios // handle the reaction everytime user sends a text message app.on(‘text’, ctx => < // ctx object holds the Update object from Telegram API // So you can use everything you see there // get the text message sent by user const subreddit = ctx.message.text; // GET the data from Reddit API axios.get(`https://reddit.com/r/$/top.json?limit=10`) .then(res => < // data recieved from Reddit const data = res.data.data; // if subbreddit does not exist if (data.children.length < 1) return ctx.reply(‘The subreddit couldn’t be found.’); // send the first top post link to the user const link = `https://reddit.com/$`; return ctx.reply(link); >) // if there’s any error in request .catch(err => console.log(err)); >);

Когда пользователь отсылает название сабредита, мы будем брать верхний пост из сабредита и отсылать ссылку на него. Просто, а?

Сохранение состояния (state)

Представьте, что пользователь хочет иметь возможность выбрать не только верхний пост, но и самый популярный или самый новый. Нам нужно сохранить последние команды, которые он использовал, чтобы суметь ответить правильно. Заметьте, что мы используем для этого метод command вместо on.

Вы можете создать команды на боте Telegram. Команды начинаются с «/» и являются кликабельными. Чтобы добавить команды к вашему боту, отправьте сообщение BotFather.

let state = >; app.command(‘top’, ctx => const userId = ctx.message.from.id; // if user id does not exist create one if (!state[userId]) state[userId] = id: userId >; // save/update user last command state[userId].command = ‘top’; return ctx.replyWithMarkdown(`Enter a subreddit name to get *top* posts.`); >); app.command(‘hot’, ctx => const userId = ctx.message.from.id; if (!state[userId]) state[userId] = id: userId >; state[userId].command = ‘hot’; return ctx.replyWithMarkdown(‘Enter a subreddit name to get *hot* posts.’); >);

Теперь мы можем отсылать правильные посты на основе фильтра. В нашем text-ответе:

const userId = ctx.message.from.id; // check if state and command exists and set defaults const type = !state[userId] ? ‘top’ : state[userId].command ? state[userId].command : ‘top’; axios.get(`https://reddit.com/r/$subreddit>/$type>.json?limit=10`) .then(res => [ // do stuff ])

Встроенные кнопки

У ботов в Telegramесть интерактивные кнопки под названием InlineKeyboardMarkup. Мы добавим кнопку next, так что пользователь сможет получить следующий пост из данной категории.

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

const Markup > = require(‘telegraf’);

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

Еще по теме:  Не могу изменить номер телефона в Телеграмме

if (!state[userId]) state[userId] = >; state[userId].index = 0;

Вместо отсылки простого текста, мы отсылаем его со встроенной кнопкой в ответе axios:

// old response, only text return ctx.reply(link); // new response, with inline buttons return ctx.reply(link, Markup.inlineKeyboard([ // first argument is button’s text // second argument is callback text Markup.callbackButton(‘➡️ Next’, subreddit), ]).extra() );

Бот Телеграм на PHP

Примеры как зарегистрировать бота в Telegram, описание и взаимодействие с основными методами API. Документация на core.telegram.org и tlgrm.ru (неофициальный, на русском).

Все запросы к API должны осуществляться по HTTPS, подойдет бесплатный сертификат «Let’s Encrypt».

Регистрация бота

Регистрация бота в Telegram

Следующим сообщением отправляем название для бота, обязательно на конце имени должно быть слово «bot» или «_bot». Ответным сообщением получим токен:

Получение токена к bot API Telegram

Тут же можно настроить описание и аватарку:

/setname Имя
/setdescription Краткое описание
/setabouttext Описание бота
/setuserpic Юзерпик

Далее нужно поставить «Webhook» чтобы все сообщения из Telegram приходили на PHP скрипт ( https://example.com/bot.php ). Для этого нужно пройти по ссылке в которой подставлены полученный токен и адрес скрипта. https://api.telegram.org/bot /setWebhook?url= https://example.com/bot.php

В ответе будет

При смене токена, установку вебхука нужно повторить.

Входящие сообщения

Сообщения приходят POST-запросом, с типом application/json . Получить его в PHP можно следующим образом:

$data = file_get_contents(‘php://input’); $data = json_decode($data, true);
Чтобы посмотреть входящие данные, их придется дампить в файл:
file_put_contents(__DIR__ . ‘/message.txt’, print_r($data, true));

Текстовое сообщение

Запрос от Телеграм:

Array ( [update_id] => 17584194 [message] => Array ( [message_id] => 26 [from] => Array ( [id] => 123456789 [is_bot] => [first_name] => UserName [language_code] => ru-US ) [chat] => Array ( [id] => 123456789 [first_name] => UserName [type] => private ) [date] => 1541888068 [text] => Привет бот! ) )

Получим текст сообщения:

if (!empty($data[‘message’][‘text’]))

Фотографии

При отправки фото боту, на скрипт приходит массив превьюшек, последним элементом будет оригинальное фото. Максимальный размер файла 20МБ.

Запрос от Телеграм:

Array ( [update_id] => 17584194 [message] => Array ( [message_id] => 38 [from] => Array ( [id] => 123456789 [is_bot] => [first_name] => UserName [language_code] => ru-US ) [chat] => Array ( [id] => 123456789 [first_name] => UserName [type] => private ) [date] => 1541924962 [photo] => Array ( [0] => Array ( [file_id] => AgADAgADUqexG7u8OEudBvlhgMzKC1agOQ8ABC6Bx26USA7Mw3gAAgI [file_size] => 1196 [width] => 51 [height] => 90 ) [1] => Array ( [file_id] => AgttAgADUqoxG7u8OEudBvlhgMzKC1agOQ8ABKwp_3jDPrIlxHgAAgI [file_size] => 21146 [width] => 180 [height] => 320 ) [2] => Array ( [file_id] => AgADAgADUqyxG7u8OEudBvlhgMzKC1agOQ8ABAN8gJWpUT1MxXgAAgI [file_size] => 90940 [width] => 449 [height] => 800 ) [3] => Array ( [file_id] => AgADAgADUqouu7u8OEudBvlhgMzKC1agOQ8ABIqVC1nEpbLDwngAAgI [file_size] => 114363 [width] => 719 [height] => 1280 ) ) ) )

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

Чтобы скачать файл нужно отправить POST или GET запрос на получение c параметром file_id изображения по URL: https://api.telegram.org/bot /getFile В ответ придет информация о файле:

Array ( [ok] => 1 [result] => Array ( [file_id] => AgADAgADUqoxG5u88E0dBvlhgMzKC1agOQ8ABIqVC1nEpbLDwngAAgI [file_size] => 114363 [file_path] => photos/file_1.jpg ) )

Далее его можно скачать по ссылке: https://api.telegram.org/file/bot / В PHP сохранение файла на сервер можно реализовать следующим образом:

$token = ‘123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11’; if (!empty($data[‘message’][‘photo’])) < $photo = array_pop($data[‘message’][‘photo’]); $ch = curl_init(‘https://api.telegram.org/bot’ . $token . ‘/getFile’); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, array(‘file_id’ =>$photo[‘file_id’])); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HEADER, false); $res = curl_exec($ch); curl_close($ch); $res = json_decode($res, true); if ($res[‘ok’]) < $src = ‘https://api.telegram.org/file/bot’ . $token . ‘/’ . $res[‘result’][‘file_path’]; $dest = __DIR__ . ‘/’ . time() . ‘-‘ . basename($src); copy($src, $dest); >>

Документ

Запрос от Телеграм:

Array ( [update_id] => 17474201 [message] => Array ( [message_id] => 44 [from] => Array ( [id] => 123456789 [is_bot] => [first_name] => UserName [language_code] => ru-US ) [chat] => Array ( [id] => 123456789 [first_name] => UserName [type] => private ) [date] => 1541925844 [document] => Array ( [file_name] => IMG_7947.JPG [mime_type] => image/jpeg [thumb] => Array ( [file_id] => AAQCABMNv_QOAATwQugveIZBldZ3AAIC [file_size] => 2644 [width] => 67 [height] => 90 ) [file_id] => BQADAgADtQEAAqu9OEhzn2cEz8LpkgI [file_size] => 1976218 ) ) )
Скачивание файлов происходит по такой же схеме как у фотографий.
if (!empty($data[‘message’][‘document’])) < $file_id = $data[‘message’][‘document’][‘file_id’]; $ch = curl_init(‘https://api.telegram.org/bot’ . $token . ‘/getFile’); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, array(‘file_id’ =>$file_id)); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HEADER, false); $res = curl_exec($ch); curl_close($ch); $res = json_decode($res, true); if ($res[‘ok’]) < $src = ‘https://api.telegram.org/file/bot’ . $token . ‘/’ . $res[‘result’][‘file_path’]; $dest = __DIR__ . ‘/’ . time() . ‘-‘ . basename($src); copy($src, $dest); >>

Ответы бота

Отправка текста

$response = array( ‘chat_id’ => $data[‘message’][‘chat’][‘id’], ‘text’ => ‘Хай!’ ); $ch = curl_init(‘https://api.telegram.org/bot’ . $token . ‘/sendMessage’); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $response); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HEADER, false); curl_exec($ch); curl_close($ch);

Отправка картинки

$response = array( ‘chat_id’ => $data[‘message’][‘chat’][‘id’], ‘photo’ => curl_file_create(__DIR__ . ‘/image.png’) ); $ch = curl_init(‘https://api.telegram.org/bot’ . $token . ‘/sendPhoto’); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $response); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HEADER, false); curl_exec($ch); curl_close($ch);

Отправка файла

Пример скрипта

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

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

2 Управление базой данных через phpMyAdmin [База данных и СУБД MySQL]

Рассказываю как написать бота с использованием pyTelegramBotAPI и добавить к нему базу данных на SQLite3.

Опубликовать в социальную сеть
Поделиться видео

Russian

  • Albanian
  • Amharic
  • Arabic
  • Brazilian
  • Bulgarian
  • Croatian
  • Danish
  • Deutsch
  • English
  • Farsi
  • Français
  • Georgian
  • Greek
  • Hebrew
  • Italian
  • Lithuanian
  • Nederlands
  • Polish
  • Portuguese
  • Română
  • Serbian
  • Slovak
  • Spanish
  • Swedish
  • Türkçe
  • Thai

Источник: best-coding.ru

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