Пример кода бота Телеграмм

Тарас Голомозый, fullstack web-разработчик и преподаватель в школе программирования Elbrus Bootcamp, написал инструкцию по созданию простого бота на JavaScript с возможностью расширения функционала. В базовом варианте его задача — показывать текущую погоду по геолокации пользователя.

Пару слов об уровне знаний, на который рассчитан этот текст. Для создания бота достаточно иметь базовое представления о JavaScript, а также знать, как работает API. Перед началом работы нужно установить библиотеку telegraf.js, которая работает на базе официального API Telegram, и библиотеку для выполнения HTTP-запросов (например, axios).

Шаг первый: базовый функционал

Откроем редактор кода и инициализируем проект через терминал с помощью команды npm -y. После этого в проекте появится файл package.json. Теперь мы можем добавить все необходимые библиотеки командой npm i, после которой через пробел прописываются названия необходимых нам библиотек. Все названия можно посмотреть в документации: в этом примере это будут telegraf и axios.

Как ИДЕАЛЬНО писать БОТОВ на PYTHON | Aiogram & Nextcord

Стоит отметить, что API погоды отдельно устанавливать не нужно — она работает по архитектуре клиент-сервер, что позволяет просто отправлять запросы и получать ответы.

Пока устанавливаются библиотеки, можно прочитать документацию к ним. У telegraf.js есть несколько примеров готового бота. Можно взять первый пример и посмотреть, как он работает.

Для этого создадим новый файл с именем bot.js и добавим в него следующий код:

const < Telegraf >= require(‘telegraf’); const bot = new Telegraf(process.env.BOT_TOKEN); bot.start((ctx) => ctx.reply(‘Welcome’)); bot.help((ctx) => ctx.reply(‘Send me a sticker’)); bot.on(‘sticker’, (ctx) => ctx.reply(»)); bot.hears(‘hi’, (ctx) => ctx.reply(‘Hey there’)); bot.launch(); // Enable graceful stop process.once(‘SIGINT’, () => bot.stop(‘SIGINT’)); process.once(‘SIGTERM’, () => bot.stop(‘SIGTERM’));
«start»: «node bot.js»

Если мы запустим проект в терминале командой npm start, то увидим сообщение «Bot token is required».

Получить токен можно через Telegram BotFather — официального бота мессенджера, который создает другие боты и управляет ими. В интерфейсе выбираем /start, затем — /newbot, и следом задаем имя и адрес. В этой инструкции это будет elbrusbootcampweatherbot.

Еще по теме:  У каких эмодзи есть анимация в Телеграмме

После этого BotFather пришлет сообщение с токеном и ссылкой на бот. Копируем токен и вставляем его в третью строчку примера:

const bot = new Telegraf(process.env.BOT_TOKEN);

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

Первая строка отвечает за подключение библиотеки telegraf, которая непосредственно взаимодействует с API Telegram и позволяет нам использовать определенные методы для работы с ботом. В следующей строке создаем нового бота и указываем ключ доступа к нему.

ChatGPT В Питоне. Создаем телеграм бота при помощи OpenAI ChatGTP Python

Далее указано, как бот будет реагировать на различные команды: при нажатии /start он отправит сообщение welcome, при отправке стрикера — эмодзи и так далее. Последние две строчки нужны для того, чтобы выполнение ботом команд правильно завершалось в облачных сервисах.

Другие методы кроме /start нам не понадобятся, поэтому их можно смело удалить:

const < Telegraf >= require(‘telegraf’); const bot = new Telegraf(process.env.BOT_TOKEN); bot.start((ctx) => ctx.reply(‘Welcome’)); bot.launch(); // Enable graceful stop process.once(‘SIGINT’, () => bot.stop(‘SIGINT’)); process.once(‘SIGTERM’, () => bot.stop(‘SIGTERM’));

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

bot.on (‘message’,(ctx) => < console.log(‘ctx.message’); >)

Теперь при отправке боту геолокации в консоли мы увидим объект location, в котором содержится широта и долгота. Добавим проверку: если в сообщении пользователя содержится объект location, данные из него отправляются на сервер через API агрегатора прогнозов погоды.

bot.on (‘message’,(ctx) => < if(‘ctx.message.location’)< console.log(‘ctx.message.location’); >)

Шаг второй: подключаем API

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

Вставим пример в код, используя результат проверки ctx.message.location с указанием широты и долготы:

bot.on(‘message’, (ctx) => < if (ctx.message.location) < const weatherAPIUrl = `https://openweathermap.org/data/2.5/weather?lat=$appid=439d4b8O4bc8187953eb36d2a8c26a02`; > >);

API-ключ можно создать в личном кабинете на сайте OpenWeather. Ключ указывается как параметр appid.

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

Еще по теме:  Почему Телеграмм запрещает делать снимки экрана хотя канал общедоступный

const axios = require(‘axios’);

Поскольку все операции со сторонним сервером выполняются асинхронно, добавим async и await в метод bot.on:

bot.on(‘message’, async (ctx) => < if (ctx.message.location) < const weatherAPIUrl = `https://openweathermap.org/data/2.5/weather?lat=$appid=439d4b8O4bc8187953eb36d2a8c26a02`; const response = await axios.get(weatherAPIUrl); > >);

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

ctx.reply(`$: $ $ °C`);

На этом все: итоговый код проекта можно найти в репозитории на GitHub.

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

Катрин Алимова

Катрин Алимова

Вам может также понравиться.

Скрипты async, defer и оптимизация

Скрипты async, defer и оптимизация

Пишем нашу первую сопрограмму

12 сент. 2023 г.

Пишем нашу первую сопрограмму

Основы блокчейна на примере написания криптовалютного кошелька. Часть 2

21 авг. 2023 г.

Источник: elbrusboot.camp

Создание Telegram бота на PHP: Кнопки в телеграм боте. Урок 6

Изучая тему «Создание Telegram бота на PHP», мы уже научились делать так, чтобы в ответ на определённое сообщение, или команду, бот отправлял в чат текстовые сообщения, файлы, картинки и видео.

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

В этом уроке мы рассмотрим пример создания кнопок в Telegram боте на PHP и объединим весь тот код, который изучили ранее. То есть, мы научим нашего бота отправлять пользователю текстовое сообщение, файл, картинку, или видео, если он нажмет на ту или иную кнопку.

Создание меню из кнопок в Telegram

Для создания кнопочного меню в Телеграм боте можно написать следующий код:

// кнопки меню (2 ряди по 2 кнопки) $keyboard = [ [ [‘text’ => ‘Кнопка 1’], [‘text’ => ‘Кнопка 2’], ], [ [‘text’ => ‘Кнопка 3’], [‘text’ => ‘Кнопка 4’], ] ]; $reply_markup = json_encode([«keyboard»=>$keyboard,»resize_keyboard»=>true]); // Відповідь на текстове повідомлення // Отримуємо текст, який відправив користувач Телеграм боту в месенджері if (!empty($data[‘message’][‘text’])) < $text = $data[‘message’][‘text’]; // Виводимо кнопки в Telegram, якщо користувач ввів команду /menu if (mb_stripos( $text, ‘/start’) !== false) < sendTelegram( ‘sendMessage’, [‘chat_id’=>$data[‘message’][‘chat’][‘id’], ‘text’=>’Це кнопкове Меню бота’, ‘reply_markup’=>$reply_markup ] ); exit(); > > ?>

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

Здесь, мы создаём кнопки, которые нужно показать пользователю в Телеграм, этим фрагментом кода:

// кнопки меню (2 ряди по 2 кнопки) $keyboard = [ [ [‘text’ => ‘Кнопка 1’], [‘text’ => ‘Кнопка 2’], ], [ [‘text’ => ‘Кнопка 3’], [‘text’ => ‘Кнопка 4’], ] ]; $reply_markup = json_encode([«keyboard»=>$keyboard,»resize_keyboard»=>true]);

А отправляем эти кнопки Телеграм боту, вот этой строкой кода:

‘reply_markup’=>$reply_markup

Реакция на нажатие кнопок Телеграм бота

Теперь давайте сделаем так, чтобы если человек нажмёт на кнопку, то в ответ ему приходило какое-нибудь сообщение. Например, «Вы нажали на кнопку 1», «Вы нажали на кнопку 2» и т.д.

Когда человек нажимает на кнопку №1, то боту отправляется сообщение «Кнопка 1». Соответственно, мы можем отследить текст этого сообщения и в ответ прислать свой текст (это мы уже проходили в уроке №2 «Отправка и получение сообщений»).

Пример кода

if (!empty($data[‘message’][‘text’])) < $text = $data[‘message’][‘text’]; // Виводимо кнопки в Telegram, якщо користувач ввів команду /menu if (mb_stripos( $text, ‘/start’) !== false) < sendTelegram( ‘sendMessage’, [‘chat_id’=>$data[‘message’][‘chat’][‘id’], ‘text’=>’Це кнопкове Меню бота’, ‘reply_markup’=>$reply_markup ] ); exit(); > else if (mb_stripos( $text, ‘Кнопка 1’) !== false) < sendTelegram( ‘sendMessage’, array( ‘chat_id’ =>$data[‘message’][‘chat’][‘id’], ‘text’ => ‘Ви натиснули кнопку №1’ ) ); exit(); > >

То есть мы взяли код из нашего урока по отправке и получению сообщений Телеграм боту (см. Урок №2) и подставили его в конструкцию If…Then…Else If.

Таким же образом давайте сделаем с получением картинок, файлов и видео. Но предварительно давайте поменяем название наших кнопок на «Send text», «Send picture», «Send file» и «Send video». Так будет намного понятнее для чего предназначена каждая из этих кнопок.

Итоговый код Телеграм бота

Теперь, если пользователь нажмёт на соответствующую кнопку, то от Telegram бота он получит текстовое сообщение, файл, картинку, или видео.

То же самое будет происходить, если человек отправит текстовые сообщения боту в чате: «Send text», «Send picture», «Send file», «Send video».

Примечание.

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