Простой Telegram-бот на Python за 30 минут
На Хабре, да и не только, про ботов рассказано уже так много, что даже слишком. Но заинтересовавшись пару недель назад данной темой, найти нормальный материал у меня так и не вышло: все статьи были либо для совсем чайников и ограничивались отправкой сообщения в ответ на сообщение пользователя, либо были неактуальны. Это и подтолкнуло меня на написание статьи, которая бы объяснила такому же новичку, как я, как написать и запустить более-менее осмысленного бота (с возможностью расширения функциональности).
Часть 1: Регистрация бота
Самая простая и описанная часть. Очень коротко: нужно найти бота @BotFather, написать ему /start, или /newbot, заполнить поля, которые он спросит (название бота и его короткое имя), и получить сообщение с токеном бота и ссылкой на документацию. Токен нужно сохранить, желательно надёжно, так как это единственный ключ для авторизации бота и взаимодействия с ним.
Часть 2: Подготовка к написанию кода
Как уже было сказано в заголовке, писать бота мы будем на Python’е. В данной статье будет описана работа с библиотекой PyTelegramBotAPI (Telebot). Если у вас не установлен Python, то сперва нужно сделать это: в терминале Linux нужно ввести
Если же вы пользуетесь Windows, то нужно скачать Python с официального сайта .
После, в терминале Linux, или командной строке Windows вводим
Теперь все готово для написания кода.
Часть 3: Получаем сообщения и говорим «Привет»
Небольшое отступление. Телеграмм умеет сообщать боту о действиях пользователя двумя способами: через ответ на запрос сервера (Long Poll), и через Webhook, когда сервер Телеграмма сам присылает сообщение о том, что кто-то написал боту. Второй способ явно выглядит лучше, но требует выделенного IP-адреса, и установленного SSL на сервере. В этой статье я хочу рассказать о написании бота, а не настройке сервера, поэтому пользоваться мы будем Long Poll’ом.
Открывайте ваш любимый текстовый редактор, и давайте писать код бота!
Первое, что нужно сделать это импортировать нашу библиотеку и подключить токен бота:
Теперь объявим метод для получения текстовых сообщений:
В этом участке кода мы объявили слушателя для текстовых сообщений и метод их обработки. Поле content_types может принимать разные значения, и не только одно, например
Будет реагировать на текстовые сообщения, документы и аудио. Более подробно можно почитать в официальной документации
Теперь добавим в наш метод немного функционала: если пользователь напишет нам «Привет», то скажем ему «Привет, чем я могу помочь?», а если нам напишут команду «/help», то скажем пользователю написать «Привет»:
Данный участок кода не требует комментариев, как мне кажется. Теперь нужно добавить в наш код только одну строчку (вне всех методов).
Теперь наш бот будет постоянно спрашивать у сервера Телеграмма «Мне кто-нибудь написал?», и если мы напишем нашему боту, то Телеграмм передаст ему наше сообщение. Сохраняем весь файл, и пишем в консоли
Где bot.py – имя нашего файла.
Теперь можно написать боту и посмотреть на результат:
Часть 4: Кнопки и ветки сообщений
Отправлять сообщения это несомненно весело, но ещё веселее вести с пользователем диалог: задавать ему вопросы и получать на них ответы. Допустим, теперь наш бот будет спрашивать у пользователя по очереди его имя, фамилию и возраст. Для этого мы будем использовать метод register_next_step_handler бота:
И так, данные пользователя мы записали. В этом примере показан очень упрощённый пример, по хорошему, хранить промежуточные данные и состояния пользователя нужно в БД, но мы сегодня работаем с ботом, а не с базами данных. Последний штрих – запросим у пользователей подтверждение того, что все введено верно, да не просто так, а с кнопками! Для этого немного отредактируем код метода get_age
И теперь наш бот отправляет клавиатуру, но если на нее нажать, то ничего не произойдёт. Потому что мы не написали метод-обработчик. Давайте напишем:
Как создать телеграм-бота на Python
Python — самый популярный язык программирования в феврале 2022 года.


Телеграм используют более пятисот миллионов людей по всему миру. Компании с его помощью упрощают заказ товаров или услуг, дают консультации. Для этого используют ботов — автоматические программы. Их пишут на разных языках программирования. Рассмотрим, как создать бот на самом популярном в феврале 2022 года языке — Python.
Установите интерпретатор Python
Python — динамически типизированный, интерпретируемый язык. Программы, написанные на нём, не компилируются в исполняемые файлы. Поэтому, чтобы запускать Python-программы, устанавливают его интерпретатор.
️ Windows

Выберите последнюю версию Python


Поставьте галочку перед установкой напротив Add Python to PATH
❗ Вызов интерпретатора в командной строке Windows отличается от других ОС. Используйте команду py вместо python3.
️ Linux
Если вы используете ОС Linux, вероятно, Python уже установлен. Чтобы проверить, откройте терминал с помощью команды:
Если вы видите что-то вроде Python 3.x.x, то Python есть. В противном случае используйте установленный менеджер пакетов. В основном это apt. Введите команду:
Установите виртуальное окружение с помощью команды:
️ MacOS
На макбуках Python часто тоже уже есть. Откройте терминал и проверьте с помощью команды:
Ответ Python 3.x.x, а не ошибка, тоже подтверждает, что Python установлен. Если нет — используйте менеджер пакетов brew. Введите команду:
Установите пакет для создания виртуального окружения:
Создайте папки проекта и виртуального окружения
Откройте терминал Linux или MacOS, командную строку Windows. Перейдите в директорию, в которой вы хотите создать проект бота. Последовательно
или, если вы используете Windows:
Эти команды создадут папку проекта myBot внутри текущей рабочей директории. А в ней — папку с виртуальным окружением.
Активируйте окружение, выберите и установите библиотеки
Чтобы активировать виртуальное окружение на MacOS или Linux, используйте команду
Чтобы создавать боты, используют разные библиотеки. Самые популярные: python-telegram-bot с синхронным подходом, aiogram с асинхронным.
Асинхронность позволяет отвлекаться от задач и не ждать ввода от пользователя, поэтому мы будем использовать библиотеку aiogram. Документация по ней — на docs.aiogram.
Используйте менеджер Python-пакетов (pip). Чтобы установить библиотеку aiogram, введите команду:
Зарегистрируйте бота и получите API-ключ
Откройте телеграм и найдите бота @BotFather. Он нужен, чтобы создавать другие боты и управлять ими.


Введите команду /newbot и отображаемое имя бота
Теперь введите никнейм бота. Он должен быть уникальным, в конце обязательно слово bot. Когда юзернейм пройдет валидацию, вы получите сообщение с API-ключом.

Никому не сообщайте полученный токен
Примеры ботов
Эхобот
Для начала в папке проекта создайте несколько файлов.

Handlers.py будет хранить функции — обработчики сообщений и команд, main.py нужен для запуска
Напишите в main.py код:
Здесь из библиотеки aiogram мы импортируем классы Bot, Dispatcher — класс, который регистрирует, на какие команды/сообщения и какой функцией отвечать. И executor — он запускает бота и выполняет функции, зарегистрированные в диспетчере. На второй строке мы импортируем модуль handlers.py — в нём хранят обработчики.
Затем объявите переменную, в которую нужно вставить токен от @BotFather. Создайте экземпляр класса бота, в него передайте токен. И экземпляр диспетчера, в него передайте только что созданный бот.
Далее откройте файл handlers.py и напишите в нём пару команд, которые будут обрабатывать запросы:
Здесь из модуля aiogram импортируем типы, с помощью которых преобразуем текст сообщения или файлы в структуру данных. Это может быть Message — сообщение, Audio — аудиозапись, Animation — анимация.
Далее определите асинхронные функции, чтобы обрабатывать команды /start и отвечать на сообщения.
Зарегистрируйте эти функции в диспетчере. Для этого в файле main.py добавьте перед запуском программы:
В итоге файл main.py выглядит так:

Чтобы проверить работу, введите в терминале python3 main.py или py main.py на Windows. Откройте бота в телеграме и запустите его
Криптобот
Чтобы написать криптобота, который будет сообщать текущую цену BTC, LTC и DASH, используйте бесплатный API-сервис SoChain. Еще потребуется дополнительная библиотека, чтобы создать асинхронные запросы aiohttp, но ее устанавливают вместе с aiogram.
Создайте новый модуль utils.py. Добавьте в него url-адрес API-сервиса. Чтобы узнавать цену, используйте метод Get Prices. Он возвращает json-объект с данными о цене из нескольких источников. Поэтому напишите функцию, которая вычисляет среднее значение:
Далее откройте файл handlers.py и напишите код:
Теперь измените main.py файл: зарегистрируйте функции. Затем протестируйте бота:

Когда пользователь укажет неподдерживаемую сеть ETH, бот вернет цену биткоина, потому что так устроен API-сервис. Если он не распознал сеть, то использует BTC
Чтобы исправить ошибку, создайте клавиатуру, которая возвращает нужные значения. Напишите специальный класс Middleware: в нём описываются проверки до и после обработки запроса. Либо проверьте вхождение внутри функции. Последний вариант проще и легче.
Если пользователь отправит неподдерживаемый акроним криптосети, вы сообщите ему об этом. Для этого в файле utils.py определите список поддерживаемых сетей:
Теперь отредактируйте функцию расчета цены криптовалюты в файле handlers.py. Для этого добавьте проверку вхождения сети в список поддерживаемых:

Когда пользователь укажет неподдерживаемую сеть ETH, бот сообщит об этом
Код всех файлов
Главное о телеграм-боте на Python
- Чтобы создать бота, установите интерпретатор Python. На Linux и MacOS он часто уже есть.
- Создайте папку с проектом myBot, в ней — папку с окружением, активируйте его, установите библиотеку aiogram. Она позволяет обрабатывать запросы, даже если вы ждете, пока пользователь введет информацию.
- Регистрируйте бота и управляйте его настройками с помощью @BotFather.
В онлайн-университете Skypro обучаем профессии Python-разработчика за 10 месяцев. Узнаете, как писать чистый код, серверы для магазина, приложения, сервиса или игры, разрабатывать сложную архитектуру сервисов. Выполните практические задания с реальными инструментами и сделаете четыре проекта для портфолио. Развиваем только нужные навыки, необходимые для старта в профессии.
Основы создания Telegram бота на Python

В этой статье мы разберём, как создать простой Telegram bot на языке программирования Python, но тут будут только основы, которые скорее для новичков, чем для профессионалов.
Также если вас интересует разработка ботов, но на JavaScript, то можете посмотреть статью: «Telegram bot на JavaScript», ещё скажу, что по сути мы будем делать бота из этой статьи, только на Python.
Установка Telegram API:
Для начала нужно скачать нужный API, для создания бота, но перед этим рекомендуется сделать виртуальное окружение, для этого прочитайте статью «Создание Virtual Environments Python».
После того как это сделали скачиваем telegram bot API на Python, это делается как обычно через pip install.
На этом установка закончилась.
Регистрация Telegram бота:
Перед созданием, нужно получить токен для бота, для этого напишите боту @BotFather.

Там пишем команду «/newbot», после вам нужно будет выбрать имя бота, которое будет отображается в списке чатов, потом имя для обращения к чату, которое через знак собаки, после этого получите токен.

Там где замазано, это и есть токен который вы получаете.
Создание Telegram bot на Python:
Теперь перейдём к самому интересному, это к написанию кода, для этого создадим файл где всё будет хранится, я его назову «main.py», в начале в нём делаем импорт и создаём переменную для токена.
Здесь мы подключаем API и специальную библиотеку «types», которая нам нужна для создания кнопок к сообщениям, но кроме этого у неё есть и другие возможности.
Потом объявляем переменную для токена, и создаём бота.
Следующие, пишем не большую функцию для создания кнопок.
Здесь первым делом мы должны сделать специальный массив, для хранения кнопок, используя types.InlineKeyboardMarkup() , потом делаем две кнопки, тут самое интересное, то какие параметры используются при создание, первый, это текст кнопки, а второе, callback_data , то какое значение оно будет возвращать при нажатие.
После через метод add() , добавляем их в массив и возвращаем его. После можно создать функцию, которая будет срабатывать при запуске бота.
Первым делом у нас идёт декоратор, который срабатывает при получение команды «/start», которые обозначаются в параметре commands, который является списком и можно обозначить таким образом несколько команд.
Потом создаём функцию для отправки сообщения, в ней первым делом получаем наши кнопки, потом через функцию send_message() , мы отправляем сообщение.
Примечание:
Название функции после декоратора может быть любое, это не имеет значение.
Последняя функция которая осталось сделать, это для получения значений их кнопки, она делается точно таким же способом.
Здесь мы уже в качестве декоратора обозначаем получение информации от кнопок, но это может быть и что-то другое не обязательно кнопки.
Внутри функции мы создаём кнопки и проверяем, есть ли вообще сообщение, если да, то идёт проверка, что значение сообщения рано одному, это параметр callback_data, который мы использовали при создание кнопок.
Если все верно, то открываем картинку и отправляем её с помощью функции send_photo() , тут все такие же параметры как и при отправки обычного сообщения, только есть photo, которому задаём картинку и вместо text , для текста сообщения, используем caption , дальше закрываем картинку.
Если же первое условие не верно, то проверяем второе, то там нужно значение два, если правильно, то делаем всё также, единственное вместо картинки с водой, используем картинку с блинчиками.
Простой Telegram-бот на Python за 30 минут
На Хабре, да и не только, про ботов рассказано уже так много, что даже слишком. Но заинтересовавшись пару недель назад данной темой, найти нормальный материал у меня так и не вышло: все статьи были либо для совсем чайников и ограничивались отправкой сообщения в ответ на сообщение пользователя, либо были неактуальны. Это и подтолкнуло меня на написание статьи, которая бы объяснила такому же новичку, как я, как написать и запустить более-менее осмысленного бота (с возможностью расширения функциональности).
Часть 1: Регистрация бота
Самая простая и описанная часть. Очень коротко: нужно найти бота @BotFather, написать ему /start, или /newbot, заполнить поля, которые он спросит (название бота и его короткое имя), и получить сообщение с токеном бота и ссылкой на документацию. Токен нужно сохранить, желательно надёжно, так как это единственный ключ для авторизации бота и взаимодействия с ним.
Часть 2: Подготовка к написанию кода
Как уже было сказано в заголовке, писать бота мы будем на Python’е. В данной статье будет описана работа с библиотекой PyTelegramBotAPI (Telebot). Если у вас не установлен Python, то сперва нужно сделать это: в терминале Linux нужно ввести:
sudo apt-get install python python-pip
Если же вы пользуетесь Windows, то нужно скачать Python с официального сайта .
После, в терминале Linux, или командной строке Windows вводим:
Теперь все готово для написания кода
Часть 3: Получаем сообщения и говорим «Привет»
Небольшое отступление. Телеграмм умеет сообщать боту о действиях пользователя двумя способами: через ответ на запрос сервера (Long Poll), и через Webhook, когда сервер Телеграмма сам присылает сообщение о том, что кто-то написал боту. Второй способ явно выглядит лучше, но требует выделенного IP-адреса, и установленного SSL на сервере. В этой статье я хочу рассказать о написании бота, а не настройке сервера, поэтому пользоваться мы будем Long Poll’ом.
Открывайте ваш любимый текстовый редактор, и давайте писать код бота!
Первое, что нужно сделать это импортировать нашу библиотеку и подключить токен бота:
Теперь объявим метод для получения текстовых сообщений:
В этом участке кода мы объявили слушателя для текстовых сообщений и метод их обработки. Поле 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.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)
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)
И теперь наш бот отправляет клавиатуру, но если на нее нажать, то ничего не произойдёт. Потому что мы не написали метод-обработчик. Давайте напишем: