Поиск сообщества
Показаны результаты для тегов 'telegram'.
Найдено: 2 результата
-
Часть 1: Регистрация бота Самая простая и описанная часть. Очень коротко: нужно найти бота @BotFather, написать ему /start, или /newbot, заполнить поля, которые он спросит (название бота и его короткое имя), и получить сообщение с токеном бота и ссылкой на документацию. Токен нужно сохранить, желательно надёжно, так как это единственный ключ для авторизации бота и взаимодействия с ним. Часть 2: Подготовка к написанию кода Как уже было сказано в заголовке, писать бота мы будем на Python'е. В данной статье будет описана работа с библиотекой PyTelegramBotAPI (Telebot). Если у вас не установлен Python, то сперва нужно сделать это: в терминале Linux нужно ввести sudo apt-get install python python-pip Если же вы пользуетесь Windows, то нужно скачать Python с официального сайта. После, в терминале Linux, или командной строке Windows вводим pip install pytelegrambotapi Теперь все готово для написания кода. Часть 3: Получаем сообщения и говорим «Привет» Небольшое отступление. Телеграмм умеет сообщать боту о действиях пользователя двумя способами: через ответ на запрос сервера (Long Poll), и через Webhook, когда сервер Телеграмма сам присылает сообщение о том, что кто-то написал боту. Второй способ явно выглядит лучше, но требует выделенного IP-адреса, и установленного SSL на сервере. В этой статье я хочу рассказать о написании бота, а не настройке сервера, поэтому пользоваться мы будем Long Poll'ом. Открывайте ваш любимый текстовый редактор, и давайте писать код бота! Первое, что нужно сделать это импортировать нашу библиотеку и подключить токен бота: import telebot; bot = telebot.TeleBot('%ваш токен%'); Теперь объявим метод для получения текстовых сообщений: @bot.message_handler(content_types=['text']) def get_text_messages(message): В этом участке кода мы объявили слушателя для текстовых сообщений и метод их обработки. Поле content_types может принимать разные значения, и не только одно, например: @bot.message_handler(content_types=['text', 'document', 'audio']) Будет реагировать на текстовые сообщения, документы и аудио. Теперь добавим в наш метод немного функционала: если пользователь напишет нам «Привет», то скажем ему «Привет, чем я могу помочь?», а если нам напишут команду «/help», то скажем пользователю написать «Привет»: 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.") Теперь нужно добавить в наш код только одну строчку (вне всех методов). bot.polling(none_stop=True, interval=0) Теперь наш бот будет постоянно спрашивать у сервера Телеграмма «Мне кто-нибудь написал?», и если мы напишем нашему боту, то Телеграмм передаст ему наше сообщение. Сохраняем весь файл, и пишем в консоли python bot.py Где bot.py – имя нашего файла. Часть 4: Кнопки и ветки сообщений Отправлять сообщения это несомненно весело, но ещё веселее вести с пользователем диалог: задавать ему вопросы и получать на них ответы. Допустим, теперь наш бот будет спрашивать у пользователя по очереди его имя, фамилию и возраст. Для этого мы будем использовать метод register_next_step_handler бота: name = ''; surname = ''; age = 0; @bot.message_handler(content_types=['text']) def start(message): if message.text == '/reg': bot.send_message(message.from_user.id, "Как тебя зовут?"); bot.register_next_step_handler(message, get_name); #следующий шаг – функция get_name else: bot.send_message(message.from_user.id, 'Напиши /reg'); def get_name(message): #получаем фамилию global name; name = message.text; bot.send_message(message.from_user.id, 'Какая у тебя фамилия?'); bot.register_next_step_handler(message, get_surnme); def get_surname(message): global surname; surname = message.text; bot.send_message('Сколько тебе лет?'); bot.register_next_step_handler(message, get_age); def get_age(message): global age; while age == 0: #проверяем что возраст изменился try: age = int(message.text) #проверяем, что возраст введен корректно except Exception: bot.send_message(message.from_user.id, 'Цифрами, пожалуйста'); bot.send_message(message.from_user.id, 'Тебе '+str(age)+' лет, тебя зовут '+name+' '+surname+'?') И так, данные пользователя мы записали. В этом примере показан очень упрощённый пример, по хорошему, хранить промежуточные данные и состояния пользователя нужно в БД, но мы сегодня работаем с ботом, а не с базами данных. Последний штрих – запросим у пользователей подтверждение того, что все введено верно, да не просто так, а с кнопками! Для этого немного отредактируем код метода get_age: def get_age(message): global age; while age == 0: #проверяем что возраст изменился try: age = int(message.text) #проверяем, что возраст введен корректно 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+' '+surname+'?'; bot.send_message(message.from_user.id, text=question, reply_markup=keyboard) И теперь наш бот отправляет клавиатуру, но если на нее нажать, то ничего не произойдёт. Потому что мы не написали метод-обработчик. Давайте напишем: @bot.callback_query_handler(func=lambda call: True) def callback_worker(call): if call.data == "yes": #call.data это callback_data, которую мы указали при объявлении кнопки .... #код сохранения данных, или их обработки bot.send_message(call.message.chat.id, 'Запомню : )'); elif call.data == "no": ... #переспрашиваем Остаётся только дописать в начало файла одну строку: from telebot import types Вот и всё, сохраняем и запускаем нашего бота. Информация была взята с источника: https://habr.com/ru/post/442800/
-
Как же все таки создать своего telegram бота на Laravel? Для создания нам понадобится: Оффициальная документация по Laravel (я думаю что с установкой не будет проблем); Регистрация нашего бота у @BotFather; Установка библиотеки для работы с Telegram API из Github Репозитория; Еще нам нужно доменное имя с SSL Сертификатом (https протокол), ибо телеграм без сертификата не будет слушать наш сервер через WebHook; Ну что, начнем с регистрации нишего бота у @BotFather Прежде чем начать писать код, нового бота нужно зарегистрировать у «папы всех ботов» - @BotFather, чтобы получить токен (ключ) для работы с Telegram API. Открываете чат с @BotFather; Вводите или выбираете из списка команду /newbot; Отправляете желаемое название для бота; Пишете юзернейм бота, по которому его будут находить через поиск. Обязательно на конце вашего юзернейма должно быть слово «bot» или «_bot». Например, CmsToolsBot; По желанию можно сразу настроить полное или краткое описание, список команд и аватарку. По итогу регистрации получаем наш токен — 375466075:AAEARK0r2nXjB67JiB35JCXXhKEyT42Px8s (данный токен не рабочий). Будьте осторожны: никогда и никому не показывайте токен, иначе ваш бот может быть скомпрометирован. Если по несчастливой случайности кто-то нехороший все-таки узнал ваш токен, то заменить его можно всё в том же @BotFather, нажав на кнопку «Revoke current token» в разделе «API Token». Создадим нашего бота Писать код бота будем на Laravel, но чтобы ничего не изобретать, воспользуемся уже готовой и очень удобной Библиотекой. Первое что нам понадобится, так это привязать через метод SetWebhook бота к нашему файлу-обработчику. Сделать это можно при помощи библиотеки, но есть вариант быстрее и проще – это построить вот такую ссылку: https:// api. telegram. org/bot375466075:AAEARK0r2nXjB67JiB35JCXXhKEyT42Px8s/setWebhook?url=https:// site.ru/bot/webhook, где: 375466075:AAEARK0r2nXjB67JiB35JCXXhKEyT42Px8s — это наш токен; https:// site.ru/bot/webhook - ссылка на файл-обработчик на нашем сайте; Открыв в браузере эту ссылку, должен прийти JSON-ответ со значением «Webhook was set», что будет означать, что вебхук установлен, и теперь все запросы от пользователей будут присылаться по адресу файла-обработчика. Ну а теперь самое интерестное, мы уже установили наш Laravel Framework, теперь нам нужно установить библиотеку и создать обработчик, который будет доступен по ссылке https:// site.ru/bot/webhook. Для установки библиотеки, нам понадобится composer (если у Вас не работает композер, то в гугле можно найти много мануалов по использованию и настройке). Ядро composer и vendor папки с установленными библиотеками у laravel находится в корневой папке, так что заходим туда и через терминал (командную строку) пишем команду установки библиотеки: Теперь у нас все готово к написанию обработчика который будет слушать telegram через WebHook. Нам нужно прежде всего создать контроллер, в котором и будет наша функция связи с телеграм. В той же корневой папке через терминал вводим команду для создания нашего контроллера: php artisan make:controller BotController, данная команда автоматически создаст app\Http\Controllers\BotController.php (можно ознакомится с офф документацией по контроллерам), и сразу же создадим роутер чтобы наша ссылка получила формат https:// site.ru/bot/webhook. Нам нужно добавить код routes в файл routes\web.php (так же есть документация по роутерам): Route::group(['prefix' => 'bot', 'middleware' => 'web'], function () { Route::post('webhook', 'BotController@index'); }); И еще так как все post запросы в laravel проходят только с CSRF токеном, то для префикса bot нам нужно сделать исключение, идем в файл app\Http\Middleware\VerifyCsrfToken.php и добавляем исключение: /** * The URIs that should be excluded from CSRF verification. * * @var array */ protected $except = [ //'api/*', 'bot/*' ]; BotController@index - данная строчка значит что мы обращаемся к контроллеру BotController и функции с названием index. Ну а теперь и код контроллера: <?php namespace App\Http\Controllers; use TelegramBot\Api\Client; // подключение библиотеки Telegram API use TelegramBot\Api\Types\ReplyKeyboardMarkup; // использование ReplyKeyboardMarkup (основное меню) use TelegramBot\Api\Types\Inline\InlineKeyboardMarkup; // использование InlineKeyboardMarkup (кнопки под сообщением) class BotController extends Controller { public function index() { // Подключение сайта к Telegram API // Пример token - 375466075:AAEARK0r2nXjB67JiB35JCXXhKEyT42Px8s $bot = new \TelegramBot\Api\Client('token'); // Стандартная команда /start // Таким образом можно создать любую команду $bot->command('start', function ($message) use ($bot) { $answer = 'Добро пожаловать!'; $bot->sendMessage($message->getChat()->getId(), $answer); }); // Пример кнопок у сообщений - команда /keyboard $bot->command('keyboard', function ($message) use ($bot) { $answer = 'Предоставленные кнопки!'; $testKey = new InlineKeyboardMarkup( [ [ ['callback_data' => 'test', 'text' => 'Тестовая кнопка'] ] ] ); $bot->sendMessage($message->getChat()->getId(), $answer, 'HTML', true, null, $testKey); }); // пример кнопок меню под строкой ввода /menu $bot->command('menu', function ($message) use ($bot) { $answer = 'Сообщение показывается и снизу появятся кнопки'; $StartKeyboard = new ReplyKeyboardMarkup( [ [ "Привет" ], [ "/start", "/keyboard" ] ], true, true ); $bot->sendMessage($message->getChat()->getId(), $answer, 'HTML', true, null, $StartKeyboard); }); // Обработка кнопок у сообщений $bot->on(function ($Update) use ($bot) { $callback = $Update->getCallbackQuery(); $message = $callback->getMessage(); // получаем сообщение $cid = $callback->getFrom()->getId(); // уникальный идентификатор chat_id $data = $callback->getData(); // название команды переданный с кнопки у сообщения // пример обработки команды с кнопки if ($data == "test") { $answer = "Пример сообщения с кнопки :)"; // данная функция будет не отправлять сообщение, а редактировать предыдущее сообщение с кнопками $bot->editMessageText($message->getChat()->getId(), $message->getMessageId(), $answer, 'HTML'); $bot->answerCallbackQuery($callback->getId()); // убираем загрузку на кнопке //$bot->answerCallbackQuery($callback->getId(), 'Всплывающее сообщение'); // убирает загрузку на кнопке и показывает сообщение } // убираем вечное обновление (данная проблема только на Laravel, на чистом php вечного обновления нету) if (empty($data)) return true; else return false; }, function ($Update) { try { $callback = $Update->getCallbackQuery(); if (is_null($callback) || !strlen($callback->getData())) return false; return true; } catch (\Exception $e) { return false; } }); // Отлов любых сообщений + обработка reply-кнопок $bot->on(function ($Update) use ($bot) { $message = $Update->getMessage(); // получаем инфо о сообщениях $mtext = $message->getText(); // получаем текст отправленого сообщения пользователем $cid = $message->getChat()->getId(); // получаем chat_id (уникальный ид пользователя в телеграм) // Пример проверки сообщения if (mb_stripos($mtext, "Привет") !== false) { $answer = "Привет, " . $message->getChat()->getFirstName(); // будет отправлено сообщение в ответ "Привет, Konstantin" $bot->sendMessage($message->getChat()->getId(), $answer, 'HTML', true, null); } }, function ($message) { return true; }); // Запуск бота if (!empty($bot->getRawBody())) { try { $bot->run(); } catch (\Exception $e) { // можно добавить функцию уведомления администратора о возможных ошибках } } } } ?> Таким образом можно создать telegram бота любой сложности, от простого новостного бота, до онлайн игр методом команд, примеров таких ботов полно. Работоспособность всех кнопок и команд можно посмотреть на примере одного из моих ботов @InstaSunriseBot, в нем реализованы все коды команд и даже больше и данная библиотека позволяет управлять телеграм каналами через бота, к примеру он может следить за чатом... Если будет интерестная тематика по ботам и различным приложениям на ларавел, могу еще пару статей выложить... Так же можно задать мне вопросы в телеграм @syfer_dev Всем спасибо за внимание