Как написать Telegram-бота на Python: делаем ремайндер
Создаём простого бота-ремайндера в Telegram на языке Python, единственная задача которого — напоминать пользователю о важных делах.
В этой иструкции разберем процесс создания простого бота-ремайндера, единственная задача которого — напоминать пользователю о важных делах. Это базовая конструкция, которую можно усложнять и менять под свои потребности.
Инструкция подойдет для новичков, которые знают Python на базовом уровне, пробовали писать код и установили на компьютер редактор кода.
Первый этап: подготовка проекта и развертывание окружения
Найдем в поиске Telegram BotFather — официального бота мессенджера, который создает другие боты и управляет ими. В интерфейсе выбираем /start, затем — /newbot, и следом задаем имя и адрес. В этой иструкции это будут Elbrus Reminder и elbrus_reminder_bot соответственно.
После этого BotFather пришлет сообщение с токеном и ссылкой на бот:
Токен нужно хранить в безопасном месте — он дает контроль над ботом. и, как следствие, позволяет получить доступ к данным пользователей.
На время закроем Telegram и создадим на компьютере папку с именем проекта: например, reminder_bot. Откроем папку в среде разработки и создадим рабочий файл с понятным названием — bot.py.
Откроем терминал редактора кода и создадим для проекта новое окружение. В среде разработки с помощью команды python -m venv .venv создадим папку с окружением .venv .
Если окружение не активировалось автоматически, можно сделать это вручную, прописав путь к файлу активации в формате source .venv/bin/activate , где source — команда языка программирования Bash. Другой вариант — перезапустить среду разработки. Он работает для Visual Studio Code, но нужно предварительно принять предложение редактора привязать среду к папке проекта сразу после создания окружения.
Практика создания нового окружения под каждый проект позволяет повыстить безопасности и стабильность проекта — в окружении вы можете использовать только те библиотеки и их версии, которые требуются в проекте. Если в проекте появятся дополнительные функции, все изменения будут храниться в этом окружении. При этом оно будет изолировано от других окружений и проектов — это повысит безопасность проекта.
Второй этап: подключаем библиотеки
Проект создан и окружение готово: пора переходить к написанию кода. По правилам хорошего тона в первую очередь через import добавляем несколько предустановленных библиотек Python. При создании бота нам пригодятся logging и time , которые отвечают за определение времени и логирование сообщений.
import time import logging
Затем добавим асинхронную библиотеку aiogram, на основе которой будет работать бот. Она, например, определяет, какое сообщение пришло, как его нужно обработать и какие порты нужны. Сначала устанавливаем ее через терминал командой pip install aiogram , а в редакторе кода пишем следующее:
from aiogram import Bot, Dispatcher, executor, types
Из этой библиотеки нам нужны только отдельные модули и классы — все ее возможности для создания базовой версии бота не пригодятся. Поэтому вместо одиночного import использована команда from <> import <> .
Когда библиотеки импортированы, создадим переменные с токеном бота и сообщением, которое он будет отправлять пользователю. Вы можете заменить это сообщение на любое другое, которое вам необходимо. Это статические переменные, поэтому их имена написаны капслоком:
TOKEN = "здесьбудетваштокенот от BotFather" MSG = "Программировал ли ты сегодня, <>?"
Токены, ключи и прочие данные для настройки проекта лучше загружать более безопасным способом (например, создавать переменные окружения или файлы конфигурации). Но в данном случае сделаем все в одном файле для наглядности, а примеры более безопасной работы с такими переменными разберем в следующих постах.
Теперь создадим экземпляр класса Bot , передав ему в качестве аргумента наш токен, и экземпляр класса Dispatcher (dp), который в качестве аргумента получит bot . В результате получаем связку объекта класса bot с ключем, который привязан к боту, и диспетчера, который привязан к этому боту:
bot = Bot(token=TOKEN) dp = Dispatcher(bot=bot)
Следующим шагом добавим конструкцию под названием декоратор ( massage_handler ) — она помогает получить из диспетчера нужный функционал. В качестве аргумента прописываем команды, которые обрабатывает декоратор — в данном случае это команда /start , которая запускает бот.
@dp.message_handler(commands=['start'])
Под декоратором прописываем функцию, которая будет обрабатывать команду /start и определяет логику, в соответствии с которой будет работать бот. Поскольку мы работаем с асинхронной библиотекой, функция тоже должна быть асинхронной. Для этого перед указанием def добавим ключевое слово async :
async def start_handler(message: types.Message):
Функция приветствует пользователя и обрабатывает сообщение, которое он отправляет в ответ. Из сообщения можно получить информацию о пользователе, который его прислал, время отправки и его ID.
Создаем переменную и сохраняем в ней user id :
user_id = message.from_user.id
Затем получаем из сообщения короткое и полное имя пользователя:
user_name = message.from_user.first_name user_full_name = message.from_user.full_name
Для того, чтобы в логах отображалась информация о пользователе, передаем в виде текста ID и полное имя, а также используем возможности библиотеки time , чтобы определить время, когда писал пользователь:
logging.info(f' ')
Здесь отойдем в сторону и проверим корректность работы модуля time . Сделать это можно в терминале: для этого напишем import time , а затем — time.asctime
Вернемся к коду. Поскольку функция, которую мы используем, асинхронна, вместо обычного для функций return используем await :
await message.reply(f"Привет, !")
Ответить пользователю в боте можно несколькими способами — в данном случае используем reply. Выше в переменной MSG мы задали стандартное сообщение: «Программировал ли ты сегодня, <>?». Зададим частоту напоминаний: семь раз каждые семь суток (60х60х24 — количество секунд в одних сутках) с момента отправки команды /start боту от пользователя:
for i in range(7): await asyncio.sleep(60*60*24)
Затем настроим отправку сообщения с указанием имени пользователя в этом же цикле:
await bot.send_message(user_id, MSG.format(user_name))
Третий этап: финал
Переходим к финальной части: в конце скрипта напишем несколько строк. Они могут показаться странными для новичка, но это общепринятая практика, к которой многие программисты прибегают при разработке. В этой строке мы проверяем, равна ли переменная __name__ строке «__main__» . Это условие всегда будет True, если мы запускаем этот файл как python-скрипт через терминал:
if __name__ == '__main__':
Теперь делаем нашего бота доступным в сети:
executor.start_polling(dp)
Сохраняем файл. Запускаем бота в терминале, открытом в папке проекта, с помощью команды python bot.py .
Вернемся в BotFather и перейдем по ссылке, которую получили вместе с токеном. Нажимаем «Начать» — готово, бот, написанный меньше, чем в 30 строк, работает.
Так выглядит его код целиком:
import time import logging import asyncio from aiogram import Bot, Dispatcher, executor, types TOKEN = "здесьбудетваштокенот@BotFather" MSG = "Программировал ли ты сегодня, <>?" logging.basicConfig(level=logging.INFO) bot = Bot(token=TOKEN) dp = Dispatcher(bot=bot) @dp.message_handler(commands=["start"]) async def start_handler(message: types.Message): user_id = message.from_user.id user_name = message.from_user.first_name user_full_name = message.from_user.full_name logging.info(f' ') await message.reply(f"Привет, !") for i in range(7): await asyncio.sleep(60*60*24) await bot.send_message(user_id, MSG.format(user_name)) if __name__ == "__main__": executor.start_polling(dp)
В следующий раз подробно расскажем, как написать подобный бот на языке программирования JavaScript. Подписывайтесь, чтобы не пропустить инструкцию.
Телеграм-боты на Python и AIOgram
Курс «Телеграм-боты на Python и AIOgram» знакомит интересующихся с тем, как разрабатывать telegram-ботов на языке Python с использованием асинхронной библиотеки AIOgram. В курсе рассмотрена актуальная 3-я версия библиотеки. Помимо рассмотрения Telegram Bot API и библиотеки aiogram, в курсе есть полезная информация о… Ещё
Средний уровень

29 344 учащихся
Чему вы научитесь
- Создавать и настраивать телеграм-ботов с помощью @BotFather
- Взаимодействовать с Telegram Bot API посредством http-запросов
- Настраивать IDE VS Code для работы с Python
- Создавать виртуальное окружение для проектов на Python
- Настраивать логирование в проекте
- Правильно работать с импортами в многомодульных проектах
- Разрабатывать телеграм-ботов с требуемым функционалом на Python с помощью асинхронной библиотеки AIOgram
- Работать со встроейнной в aiogram машиной состояний
- Обрабатывать ошибки, возникающие при работе ботов
- Настраивать систему контроля версий Git и размещать проект на GitHub
- Деплоить бота на удаленный сервер
- Настраивать автодеплой бота на удаленный сервер
- .
О курсе
На этом курсе вы научитесь создавать телеграм-ботов на Python с помощью продвинутой асихронной библиотеки aiogram актуальной 3-й версии. При этом вы познакомитесь со многими инструментами профессиональной разработки, которые помогут вам не только в создании телеграм-ботов.
Модули курса
- Общие сведения о телеграм-ботах
- Подготовка инструментов
- Git и GitHub
- Аннотации типов и логирование
- Telegram Bot API
- Асинхронность в Python
- Aiogram
- Первые телеграм-боты
- Структура проекта
- Взаимодействие с ботом
- Машина состояний (FSM)
- База данных
- Обработка ошибок бота
- Деплой бота на сервер
- Автодеплой
- Телеграм-бот с искусственным интеллектом
Когда-то подобного курса не хватало мне самому, поэтому он и появился. С целью облегчить начинающим python-разработчикам вход в тему разработки телеграм-ботов.
Для кого этот курс
Курс подойдет тем, кто уже знает синтаксис языка Python и нарешал достаточное количество учебных задач. Для тех, кто хочет двигаться дальше и понять как теперь абстрактные знания языка связать с реальностью на примере телеграм-ботов. Кому хочется разобраться как вообще вести проекты на Python, начиная от того где писать код и где его хранить и заканчивая тем, как заставить проект работать на удаленном сервере 24/7
Начальные требования
Знание синтаксиса Python и основ программирования, включая ООП.
Базовые знания о том, что такое командная строка и как с ней работать в терминале.
Разработка Telegram бота на Python
Найдите исполнителя для вашего проекта прямо сейчас!
Разместите заказ на фриланс-бирже и предложения поступят уже через несколько минут.
Требуется разработать многопользовательского Telegram фитнес-бота на Python
Подробное ТЗ во прикрепленном файле.
7 лет назад
36 лет Россия
15 лет в сервисе
7 лет назад
Выбранный исполнитель
29 лет Россия
13 лет в сервисе
5 лет назад
7 лет назад
Отзыв заказчика
Задачу по созданию фитнесс бота для Телеграмм выполнил в срок, и хорошо. Рекомендую.
Отзыв фрилансера
Качественное ТЗ. Приятно работать с Игорем.
Похожие заказы
Аппроксимация GPS данных real time
Нужен человек для реализации части проекта. Показывать результаты продвижения каждые 2-3 дня. Если вопросы есть задавайте тут или в скайп. Расчёт — western union. https://docs.google.com/document/d/1oGovRwCoqNkmluQd_CzgERwhfm-iuUitweHSP4JKPmM/edit?usp=drive_web
7 лет назад
Скрипт спидтеста на PHP+JS(JQuery).
Скрипт спидтеста на PHP+JS(JQuery). Требования: 1. Приятный внешний легко масштабируемый интерфейс. Изображения в SVG. 2. Скрипт должен замерять Download и Upload с удаленного сервера. 3. На клиентской стороне должна быть проверка поддержки Flash в браузере. Если .
Прикладное ПО 1 исполнитель
7 лет назад
Реализовать интерфейс приложения «Игры» на С++/Qt5.6
Необходимо реализовать интерфейс приложения «Игры» на С++/Qt5.6.1-1 под Win7 и выше. ТЗ во вложении
7 лет назад
Разработка прил. Windows работающее с VK API, + разработка сайта.
Для начала коротко: Нужный мне сервис представляет из себя следущее: Логин и пароль ВК вписывается в windows приложение (которое связано с Standalon приложением ВК), идет авторизация через лог и пароль (получая токен) именно в тот момент, когда пользователь .
7 лет назад
Сделать ASO для мобильного приложения
Нужно сделать ASO для мобильного приложения, планирую запуск в Новой Зеландии
7 лет назад
Простая программа для массового переименования картинок
Нужна простенькая программа способная выполнять следующие задачи: 1. Есть папка в которой расположены картинки формата jpg, png. 2. Есть список ключей (всего будет около 40-70 ключей, должна быть возможность добавлять этим ключи и менять существующие), которые и .
Прикладное ПО 1 исполнитель
7 лет назад
Шаблон почтового клиента
Создать макет программы почтового клиента. Выслать скрин для оценки. Смысл таков 1 скрин: 3 черточки — это меню ниже иконки — это почта, где красный кружочек это активная почта и в кружочке высвечивается кол-во писем или просто показано, что эта .
Прикладное ПО 1 исполнитель
7 лет назад
Мессенджер на C#
Есть немного не доработанный мессенджер написанный на Java скрипт. Требуется переписать его под C# в Юнити 3D. Установить на сервер и протестировать Оплата поэтапная
7 лет назад
Программа, реализующая описанный алгоритм
Программа должна реализовывать алгоритм, описывающий «методику фор- мирования множества объектов защиты и оценки защитного ресурса» (да-лее — методика).Алгоритм представлен в описании.Методика описывает использование сети связи (представлена графом) раз-личными группами абонентов. Каждая группа абонентов предъявляет своитребования к .
7 лет назад
Помощь нужна в установке удаленно рабочей программы 1с УТ 11
Помощь нужна в установке удаленно рабочей программы 1с УТ 11 в которую выгрузить базу (есть файл .dt с базой, которую сформировали в 1с Управление торговлей 11) сконфигурированную под выгрузку от 5 поставщиков. Указывайте стоимость и сроки, .
Питоном по телеграму! Пишем пять простых Telegram-ботов на Python

В этой статье мы реализуем простой, но крайне полезный проект на Python — бота для Telegram. Боты — это небольшие скрипты, которые могут взаимодействовать с API, чтобы получать сообщения от пользователя и отправлять информацию в разные чаты и каналы.
Python для новичков
Если ты совсем не ориентируешься в Python, то отличным началом будет прочтение трех вводных статей, которые я публиковал в «Хакере» этим летом, либо посещение курса «Python для новичков», который я начну вести для читателей «Хакера» уже совсем скоро — 30 ноября.
- Python с абсолютного нуля. Учимся кодить без скучных книжек
- Python с абсолютного нуля. Учимся работать со строками, файлами и интернетом
- Python с абсолютного нуля. Работаем с ОС, изучаем регулярные выражения и функции
Чтобы создать бота, нам нужно дать ему название, адрес и получить токен — строку, которая будет однозначно идентифицировать нашего бота для серверов Telegram. Зайдем в Telegram под своим аккаунтом и откроем «отца всех ботов», BotFather.
Жмем кнопку «Запустить» (или отправим / start ), в ответ BotFather пришлет нам список доступных команд:
- / newbot — создать нового бота;
- / mybots — редактировать ваших ботов;
- / setname — сменить имя бота;
- / setdescription — изменить описание бота;
- / setabouttext — изменить информацию о боте;
- / setuserpic — изменить фото аватарки бота;
- / setcommands — изменить список команд бота;
- / deletebot — удалить бота.
Отправим бате‑боту команду / newbot , чтобы создать нового бота. В ответ он попросит ввести имя будущего бота, его можно писать на русском. После ввода имени нужно будет отправить адрес бота, причем он должен заканчиваться на слово bot. Например, xakepbot или xakep_bot . Если адрес будет уже кем‑то занят, BotFather начнет извиняться и просить придумать что‑нибудь другое.
Когда мы наконец найдем свободный и красивый адрес для нашего бота, в ответ получим сообщение, в котором после фразы Use this token to access the HTTP API будет написана строка из букв и цифр — это и есть необходимый нам токен. Сохраним ее где‑нибудь на своем компьютере, чтобы потом использовать в скрипте бота.
Для взаимодействия с Telegram API есть несколько готовых модулей. Самый простой из них — Telebot. Чтобы установить его, набери
pip install pytelegrambotapi
В Linux, возможно, понадобится написать pip3 вместо pip , чтобы указать, что мы хотим работать с третьей версией Python.
Эхо-бот
Для начала реализуем так называемого эхо‑бота. Он будет получать от пользователя текстовое сообщение и возвращать его.