Лайфхаки

Маленькие, полезные хитрости

Telegram bot разработка на локальном компьютере за 5 шагов

17.03.2024 в 12:34

Telegram bot разработка на локальном компьютере за 5 шагов


Небольшое отступление. Телеграмм умеет сообщать боту о действиях пользователя двумя способами: через ответ на запрос сервера (Long Poll), и через Webhook, когда сервер Телеграмма сам присылает сообщение о том, что кто-то написал боту. Второй способ явно выглядит лучше, но требует выделенного IP-адреса, и установленного SSL на сервере. В этой статье я хочу рассказать о написании бота, а не настройке сервера, поэтому пользоваться мы будем Long Poll'ом. Открывайте ваш любимый текстовый редактор, и давайте писать код бота!Первое, что нужно сделать это импортировать нашу библиотеку и подключить токен бота:

import telebot; bot = telebot.TeleBot('%ваш токен%');

Теперь объявим метод для получения текстовых сообщений:

@bot.message_handler(content_types=) def get_text_messages(message):

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

@bot.message_handler(content_types=)

Будет реагировать на текстовые сообщения, документы и аудио. Более подробно можно почитать вТеперь добавим в наш метод немного функционала: если пользователь напишет нам «Привет», то скажем ему «Привет, чем я могу помочь?», а если нам напишут команду «/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.")

Данный участок кода не требует комментариев, как мне кажется. Теперь нужно добавить в наш код только одну строчку (вне всех методов).

Связанные вопросы и ответы:

1. Какие шаги нужно выполнить для разработки Telegram бота на локальном компьютере

Для разработки Telegram бота на локальном компьютере, сначала необходимо создать аккаунт разработчика на платформе Telegram. Затем необходимо установить и настроить необходимое программное обеспечение, такое как Python, Node.js или Java. После этого следует создать самого бота через BotFather и получить API ключ, который понадобится для работы с ботом. Затем разработчик может приступить к написанию кода бота и его тестированию на локальном компьютере.

2. Какие языки программирования подходят для разработки Telegram ботов

Для разработки Telegram ботов подходят различные языки программирования, такие как Python, Node.js, Java, PHP, Ruby и другие. Выбор языка зависит от предпочтений разработчика, его опыта и целей проекта. Например, Python и Node.js часто используются для создания ботов из-за своей популярности и простоты в использовании.

3. Какие инструменты можно использовать для тестирования Telegram бота на локальном компьютере

Для тестирования Telegram бота на локальном компьютере можно использовать различные инструменты, такие как Postman, curl или специализированные библиотеки для работы с Telegram API. Эти инструменты позволяют отправлять запросы к API бота и проверять его поведение в различных сценариях. Также разработчику полезно иметь логгеры для отслеживания работы бота и обнаружения ошибок.

4. Каким образом можно создать локальный сервер для тестирования Telegram бота

Для создания локального сервера для тестирования Telegram бота можно использовать различные инструменты, такие как ngrok, localhost.run или просто запустить сервер на своем компьютере. Ngrok позволяет создать временный публичный URL для тестирования бота, localhost.run предоставляет подобную функциональность, а запуск сервера на своем компьютере позволяет полностью контролировать окружение тестирования.

5. Каким образом можно защитить API ключ Telegram бота при разработке на локальном компьютере

Для защиты API ключа Telegram бота при разработке на локальном компьютере рекомендуется использовать файл .env для хранения конфиденциальной информации. В этот файл можно записать API ключ и другие секреты, которые не должны попасть в открытый доступ. Затем разработчик может загрузить этот файл в .gitignore, чтобы избежать случайного публикации в репозитории.

6. Каким образом можно установить и настроить необходимое программное обеспечение для разработки Telegram бота

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

7. Какие инструменты разработки рекомендуется использовать для создания Telegram ботов на локальном компьютере

Для создания Telegram ботов на локальном компьютере рекомендуется использовать различные инструменты разработки, такие как Visual Studio Code, PyCharm, IntelliJ IDEA или другие IDE с поддержкой выбранного языка программирования. Эти инструменты предоставляют удобную среду для написания, отладки и тестирования кода бота, а также предлагают различные плагины и расширения для удобства разработки.

Какие инструменты нужны для разработки Telegram бота на локальном компьютере

Если от бота нужны нестандартные сценарии использования или в проекте важно полностью контролировать поведение и обработку данных, то без программирования не обойтись. У Telegram открытое API с хорошей документацией, поэтому ботов можно разрабатывать практически на любом языке программирования, но удобнее использовать для этого уже готовые библиотеки.

Разработчики Telegram активно развивают мессенджер, поэтому от библиотеки важно, чтобы она обновлялась так же часто и поддерживала все новшества сервиса. Ботов чаще всего пишут на Python из-за простоты и удобства этого языка.

Для Python существуют следующие библиотеки для ботов Telegram:

aiogram — комплексная библиотека с отличной документацией, поддержкой и активным сообществом. Есть русскоязычное сообщество разработчиков, которое поможет с трудностями и ответит на вопросы. Библиотека aiogram поддерживает асинхронность, работу с машиной состояний и рассчитана на разработку сложных ботов с большим количеством ежедневных пользователей. Сейчас у aiogram две активные версии, и лучше сразу выбирать версию 3.0, которая пока находится в бете, но работает стабильно. Библиотека подразумевает глубокие знания Python и опыт в программировании, поэтому может быть сложной для начинающих;

telebot (pyTelegramBotAPI) — библиотека для простых ботов с небольшим количеством пользователей, поддерживающая работу с основными методами Telegram API. С telebot сложнее организовать асинхронность и управлять большой нагрузкой, но новичкам в разы легче и приятнее с ней работать.

В статье мы будем использовать библиотеку telebot и писать код на Python, поэтому нам понадобится редактор кода. Сейчас разработчики в основном используют один из двух редакторов:

Visual Studio Code — бесплатный редактор кода от компании Microsoft с задатками полноценной среды разработки. VS Code можно использовать практически с любыми языками программирования и технологиями. Для этого компания предусмотрела маркетплейс плагинов, расширяющих возможности редактора. VS Code полностью бесплатный и доступен для Windows, macOS и Linux.

PyCharm — полноценная среда разработки на Python от компании JetBrains. Более тяжеловесная, чем VS Code, и включает в себя дополнительные инструменты для профессиональной работы над большими проектами. Есть как бесплатная версия, так и продвинутая по подписке. Для разработки даже самых сложных ботов хватит возможностей бесплатной версии PyCharm.

Что такое Webhook и как его настроить для работы с Telegram ботом

Для начала что такое Webhook, в контексте телеграм ботов есть два варианта взаимодействия с API:

- polling

polling - Это когда наш бот, в каком-то вечном цикле опрашивает телеграм на наличие "обновлений", то есть если пользователь в боте сделал какое-то действие, что бы бот обработал его ему нужно понять что действие совершено, и что вообще произошло, в этом ему и помогает polling , но мы не будем об этом

webhook - Это тоже штука для того что бы бот понимал что изменилось, но в данном случае не бот опрашивает телеграм на наличие изменений, а телеграм "шлет" изменения для телеграм бота. Тут есть несколько важных моментов, для того что бы работал webhook у вашего бота должно быть доменное имя с настроенным ssl сертификатом, иначе не секюрно и телеграм откажется взаимодействовать с вашим ботом, и тут когда я начинал "играться" с webhook у меня возник вопрос, а как вообще это настроить для тестов, да и вообще как это настроить? ниже я попытаюсь это описать, а именно как развернуть это локально для разработки и самообучения. Для работы будет использоваться python, flask, ngrok, telebot

1 - Начнем пожалуй с самого кода (я надеюсь вы уже сделали самого бота в телеграм? нуу через BotFather ? если нет,мануал), когда нам телеграм будет слать запросы мы должны их не только как-то принять, но и обработать, в этом нам поможет flask ну и естественно python, код базовой и довольно тестовой (то есть не для прода) версии ниже, сори что скрин, я не нашел как тут разместить код в удобочитаемом виде:

Что такое Webhook и как его настроить для работы с Telegram ботом. Делаем телеграм бот на Webhooks для себя

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

В самом верху вы видите 4 константы (по хорошему их бы вынести в отдельный какой-то конфиг):

API_TOKEN - Когда вы создадите бот в BotFather, вам будет выдан токен, вот его нужно добавить сюда

APP_HOST = '127.0.0.1' - Эта и следующая переменная для flask, он будет принимать запросы которые идут на порт и интерфейс указанный в этих переменных

APP_PORT = '8444'

WEB_HOOK_URL - Доменное имя, на него будет телеграм отправлять все запросы, где его взять так что бы не платить (все же это для самообучения) ? об этом чуть позже

Так же я подключил logger что бы удобней было контролировать то, что хочется видеть в в логах.

Что такое Webhook и как его настроить для работы с Telegram ботом. Делаем телеграм бот на Webhooks для себя

Что такое Webhook и как его настроить для работы с Telegram ботом. Делаем телеграм бот на Webhooks для себя

Что такое Webhook и как его настроить для работы с Telegram ботом. Делаем телеграм бот на Webhooks для себя

Как создать и зарегистрировать бота в Telegram Bot API

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

Стоит отметить, что 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'));

В package.json пропишем стартовый скрипт для этого файла. Для этого в разделе scripts добавим новый пункт со следующим содержанием: 

"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 и позволяет нам использовать определенные методы для работы с ботом. В следующей строке создаем нового бота и указываем ключ доступа к нему. 

Далее указано, как бот будет реагировать на различные команды: при нажатии /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'));

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

Какие языки программирования можно использовать для разработки Telegram бота на локальном компьютере

Модульность и расширяемость

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

from telegram import Update from telegram.ext import Updater, CommandHandler def start(update: Update, context): update.message.reply_text('Привет, я ваш телеграм-бот!') def main(): updater = Updater('YOUR_BOT_TOKEN') dp = updater.dispatcher dp.add_handler(CommandHandler('start', start)) updater.start_polling() updater.idle() if __name__ == '__main__': main()

Этот код демонстрирует, как вы можете легко добавить обработчик команды "start" и расширить бота, добавляя дополнительные обработчики и функциональность.

Поддержка асинхронности

Асинхронное программирование становится все более важным аспектом при создании телеграм-ботов, особенно при обработке большого количества запросов. Профессиональные разработчики ищут библиотеки, которые предоставляют поддержку асинхронности, такие какasyncio. Это позволяет эффективно управлять множеством одновременных запросов без блокирования основного потока выполнения. Пример с использованиемaiogram:

import logging from aiogram import Bot, Dispatcher, types from aiogram.contrib.middlewares.logging import LoggingMiddleware from aiogram.utils import executor API_TOKEN = 'YOUR_API_TOKEN' logging.basicConfig(level=logging.INFO) bot = Bot(token=API_TOKEN) dp = Dispatcher(bot) dp.middleware.setup(LoggingMiddleware()) @dp.message_handler(commands=) async def on_start(message: types.Message): await message.answer("Привет, я ваш телеграм-бот!") if __name__ == '__main__': from aiogram import executor executor.start_polling(dp, skip_updates=True)

В этом примере, мы используемasync/awaitдля обработки сообщений асинхронно.

Удобство в использовании

Удобство в использовании включает в себя хорошо документированные методы, примеры кода и хорошую структуру API.

Производительность

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

Сообщество и поддержка

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

Как настроить локальный сервер для тестирования Telegram бота

Бот должен уметь отправлять запросы Телеграм-серверу и получать от него апдейты (updates, обновления).

Как получать апдейты в Bot API

Получать апдейты можно одним из двух способов:

    Поллинг — просто регулярно отправлять запрос к серверу Телеграма для получения обновлений,

    Вебхук — сделать так, чтобы Телеграм сам отправлял запросы по нужному URL.

Конечно, удобнее использовать библиотеки, чем делать http-запросы "руками".

Если вы попробуете, как написать Телеграм-бота на Python, вам предложат воспользоваться библиотеками python-telegram-bot и telebot. Но не стоит.

Ну, если вы только хотите познакомиться с разработкой ботов и написать своего hello-world-бота, то можете, конечно использовать и их. Но эти библиотеки могут далеко не всё. Среди разработчиков ботов лучшей библиотекой для ботов на Python считается. Она асинхронная, использует декораторы и содержит удобные инструменты для разработки. Ещё был хороший, но он давно не обновлялся.

Также ботов часто пишут на JavaScript, для этого обычно используется. Библиотеки есть и для многих других языков, но используют их реже.

Если же вы хотите использовать Telegram API, то можете воспользоваться Python'овскимии.

Пример кода бота

Если вы хотите получить какое-то представление о том, как вообще выглядит код бота, вот вам пример использования на aiogram с его странички на GitHub :

import asyncio from aiogram import Bot, Dispatcher, types async def start_handler(event: types.Message): await event.answer( f"Hello, {event.from_user.get_mention(as_html=True)} ?!", parse_mode=types.ParseMode.HTML, ) async def main(): bot = Bot(token=BOT-TOKEN) try: disp = Dispatcher(bot=bot) disp.register_message_handler(start_handler, commands={"start", "restart"}) await disp.start_polling() finally: await bot.close() asyncio.run(main())

Этот бот будет отвечать на команды/startи и/restart.

Как добавить функционал кнопок и меню в Telegram бота

Как отправить сообщение в telegram канал на php? Давайте разберем отправку публикации с картинкой и без в telegram канал через бота на языке php.

Создаем бота

В telegram эта процедура занимает всего пару минут. Для создания и настроек есть официальный верифицированный бот: @BotFather . Откройте его в telegram и отправьте ему следующую команду

/newbot

Далее нужно будет придумать название и логин своему боту. Это все выполняется прямо в чате telegram.

После успешного создания и настроек, BotFather пришлет токен созданного бота. Токен потребуется для отправки запросов к api. У telegram есть документация с описанием всех методов api, которые можно использовать. Документацию можно почитать тут: api ботов telegram . На этом настройка бота закончена.

Пример Php кода для отправки сообщения в telegram

В нашем случае всю документацию читать не придется, достаточно только два метода – sendPhoto и sendmessage.

Как отправить сообщение с изображением через Telegram бота

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

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

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

Локальное хранение : В этом случае, данные о состоянии хранятся на сервере, где работает ваш бот. Это быстрый и простой способ управления состоянием. Однако, если сервер перезагружается или бот перезапускается, данные о состоянии могут быть утеряны. Пример кода на библиотекеtelebotдля локального хранения:

import telebot bot = telebot.TeleBot('YOUR_BOT_TOKEN') user_states = {} @bot.message_handler(func=lambda message: True) def handle_message(message): chat_id = message.chat.id if chat_id not in user_states: user_states = 'start' if user_states == 'start': # Обработка сообщения в состоянии "start" user_states = 'next_state' elif user_states == 'next_state': # Обработка сообщения в состоянии "next_state" user_states = 'start' # Остальная логика бота

Удаленное хранение : Для более надежного хранения состояния, особенно при работе с более сложными ботами или в средах с множеством инстансов бота, вы можете использовать удаленное хранение. Это может включать в себя базы данных или хранилища, такие как Redis. Пример кода наtelebotс использованием Redis для удаленного хранения:

import telebot import redis bot = telebot.TeleBot('YOUR_BOT_TOKEN') redis_db = redis.StrictRedis(host='localhost', port=6379, db=0) @bot.message_handler(func=lambda message: True) def handle_message(message): chat_id = message.chat.id current_state = redis_db.get(f'user_state_{chat_id}') if current_state == b'start': # Обработка сообщения в состоянии "start" redis_db.set(f'user_state_{chat_id}', 'next_state') elif current_state == b'next_state': # Обработка сообщения в состоянии "next_state" redis_db.set(f'user_state_{chat_id}', 'start') # Остальная логика бота

Обработка состояния с использованием FSM (Finite State Machine)

Finite State Machine (FSM) - это модель, которая описывает все возможные состояния, в которых может находиться ваш бот, и переходы между этими состояниями. Использование FSM делает управление состоянием структурированным и понятным.

FSM состоит из состояний, событий и переходов. Каждое состояние представляет собой определенный контекст, в котором находится бот, каждое событие - действие пользователя или бота, а переход - изменение состояния в ответ на событие.