- 20.06.2022
- 26 939
- 230
- 36
- Награды
- 10
- Пол
- Муж.
Репутация:
- Автор темы
- Администратор
- Модератор
- Команда форума
- #1
Статья является уроком для новых пользователей с разбором функциональности бота.
Нужные библиотеки:
Заходим в командную строку и прописываем:
Подготовка для разработки:
Нужен любой редактор кода, подойдет как Sublime Text, VS code, PyCharm и т.п.
Я использую PyCharm. Создаем проект и погнали.
Архитектура проекта:
Создание папок:
Handlers - В этой директории будет все основные функции бота.
Middlewares - Директория нужна для мидлвари, так скажем прослойка в коде.
Keyboards - Клавиатура для бота.
DataBase - Создание базы данных.
Создание файлов:
bot.py - Запускает бот.
config.py - Файл для конфигурации бота, точнее хранение его данных, таких как Токен бота, данные подключения к базе данных. Хранение данных в Python файле не безопасно, вдруг вы можете загрузить их в общий доступ) Тогда можно использовать виртуальное окружение.
Дальше файлы будем создавать по факту.
Приступаем к работе:
Заходим в нажимаем 'Старт', пишем /newbot.
Даем имя нашему боту и дальше даем ему username, Random_bot либо RandomBot, Назвать бота можно как угодно так же как и username.
Когда получили Token бота, переходим в редактор кода.
Заходим в config.py и прописываем:
Заходим в bot.py и начинаем писать код.
Импорты:
import asyncio - Асинхронный модуль для написания кода входа и выхода.
import logging - Модуль который уведомляет о состоянии событий нашего бота.
from aiogram import Bot, Dispatcher - Aiogram основная библиотека для написания бота, из нее импортируем объект бота и диспетчер, он принимает все события и обрабатывает их.
from config import BOT_TOKEN - Из файла config импортируем переменную BOT_TOKEN.
bot = Bot(BOT_TOKEN, parse_mode='HTML') - Создаем объект бота и помечаем разметку сообщений 'parse_mode' как HTML, для меня разметка простая да и во все она не сложная.
dp = Dispatcher() - Диспетчер, ну тут все и так понятно.
dp.include_routers(router) - Подключает к диспетчеру все наши роутеры(Обработчики). Пример с Роутерами увидите в следующих файлов. Роутеры можно регистрировать двумя способами:
dp.include_routers(start.router, menu.router)
или
dp.include_routers(start.router)
dp.include_routers(menu.router)
await bot.delete_webhook(drop_pending_updates=True) - Удаляет все сообщения, которые произошли после последнего завершения работы бота.
await dp.start_polling(bot) - Периодически отправляет запрос на Telegram сервер, что бы узнать появилось ли новое событие.
logging.basicConfig(level=logging.INFO) - информирует о новых событиях в боте.
Команда /start:
Переходим в папку handlers, создаем Python файл: start.py.
В нем пишем:
Все необходимое импортируем из библиотеки aiogram.
F - Новый магический фильтр который может обрабатывать любой тип сообщения.
Command - Фильтр для работы с командами.
Message - Тип для работы с сообщениями
Затем создаем Router, для следящей привязки его к обработчиком.
@router.message(Command('start')) - Создаем декоратор обработчика событий с фильтром команды start
Создаем асинхронную функцию с типом Message и в ней отвечаем пользователю. Отвечать текстом на сообщение можно двумя способами при помощи answer и reply.
Пример с answer
Пример с reply
{message.from_user.full_name} - Выводит полное имя и фамилию пользователя(full_name), так же есть и другие типы такие как id, username, last_name, first_name и т.п.
Теперь разберем {message.from_user.options}:
message - объект функции,
from_user - Обращение к пользователю
options - тут параметры которые нам нужны, о них я говорил выше.
Обратно переходим в main.py в импортах пишем
В функции main, изменяем строку dp.include_routers(router) в ней
дописываем dp.include_routers(start.router)
Кнопки:
Существуют два вида кнопок это Inline и Reply.
Переходим в директорию keyboards в ней создаем две директории:
1.Reply
2.Inline
В директории Reply создадим файл menu_kb_reply.py
Из aiogram импортируем все нужное для клавиатуры.
Создаем функцию menu_kb в ней создаем клавиатуру.
adjust(2) - Сделает клавиатуру в два столбца.
as_markup(resize_keyboard=True) - преобразовывает с ReplyKeyboardBuilder() в ReplyKeyboardMarkupб, resize_keyboard=True - делает кнопки по меньше внизу будет два примера.
Переходим в файл start.py
Импортируем кнопки:
Приписываем после нашего сообщения, клавиатуру reply_markup=menu_kb()
Теперь в директории handlers создаем директорию menu, в ней создаем Python файл profile.py.
Для чего это нужно? Будет удобно в дальнейшем когда будет большой проект, не искать где же тот файл, а все файлы будут разбиты по директориям.
Переходим в файл profile.py, прописываем:
Из aiogram импортируем все то что надо, создаем Router, создаем декоратор с фильтром F.text, бот будет принимать слово Профиль от пользователя и затем выполняет код внутри функции.
Создаем Python файл в этой же директории about_project.py и в нем пишем:
Все тоже самое что и в profile.py, лишь только добавляется Inline клавиатура.
В коде URL кнопка, т.е при помощи ее можно переходить на какой либо URL-адрес.
Переходим в bot.py.
В импортах пишем:
В строке dp.include_routers() в скобках дописываем profile.router, about_project.router, получилось
Запуск бота:
Запускаем бота, в консоль появилась информация от библиотеки logging.
Переходим в нашего бота, нажимаем Старт.
Проверка работоспособности бота:

Нужные библиотеки:
Установка библиотеки:aiogram версия 3.0.0rc2
Заходим в командную строку и прописываем:
Установится последняя версия aiogram. Если прописать:pip install aiogram -U --pre
То установится aiogram 2.xpip install aiogram
Подготовка для разработки:
Нужен любой редактор кода, подойдет как Sublime Text, VS code, PyCharm и т.п.
Я использую PyCharm. Создаем проект и погнали.
Архитектура проекта:
Создание папок:
Handlers - В этой директории будет все основные функции бота.
Middlewares - Директория нужна для мидлвари, так скажем прослойка в коде.
Keyboards - Клавиатура для бота.
DataBase - Создание базы данных.
Создание файлов:
bot.py - Запускает бот.
config.py - Файл для конфигурации бота, точнее хранение его данных, таких как Токен бота, данные подключения к базе данных. Хранение данных в Python файле не безопасно, вдруг вы можете загрузить их в общий доступ) Тогда можно использовать виртуальное окружение.
Дальше файлы будем создавать по факту.

Приступаем к работе:
Заходим в нажимаем 'Старт', пишем /newbot.
Даем имя нашему боту и дальше даем ему username, Random_bot либо RandomBot, Назвать бота можно как угодно так же как и username.
Когда получили Token бота, переходим в редактор кода.
Заходим в config.py и прописываем:
Python:
BOT_TOKEN = 'Тут ваш Token'

Заходим в bot.py и начинаем писать код.
Python:
import asyncio
import logging
from aiogram import Bot, Dispatcher
from config import BOT_TOKEN
async def main():
bot = Bot(BOT_TOKEN, parse_mode='HTML')
dp = Dispatcher()
dp.include_routers(router)
await bot.delete_webhook(drop_pending_updates=True)
await dp.start_polling(bot)
if __name__ == '__main__':
logging.basicConfig(level=logging.INFO)
asyncio.run(main())

Импорты:
import asyncio - Асинхронный модуль для написания кода входа и выхода.
import logging - Модуль который уведомляет о состоянии событий нашего бота.
from aiogram import Bot, Dispatcher - Aiogram основная библиотека для написания бота, из нее импортируем объект бота и диспетчер, он принимает все события и обрабатывает их.
from config import BOT_TOKEN - Из файла config импортируем переменную BOT_TOKEN.
Функция main():
async def main(): - Асинхронное создание функции называем ее main(), в основном стандартное имя функции, функцию можно назвать как угодно.bot = Bot(BOT_TOKEN, parse_mode='HTML') - Создаем объект бота и помечаем разметку сообщений 'parse_mode' как HTML, для меня разметка простая да и во все она не сложная.
dp = Dispatcher() - Диспетчер, ну тут все и так понятно.
dp.include_routers(router) - Подключает к диспетчеру все наши роутеры(Обработчики). Пример с Роутерами увидите в следующих файлов. Роутеры можно регистрировать двумя способами:
dp.include_routers(start.router, menu.router)
или
dp.include_routers(start.router)
dp.include_routers(menu.router)
await bot.delete_webhook(drop_pending_updates=True) - Удаляет все сообщения, которые произошли после последнего завершения работы бота.
await dp.start_polling(bot) - Периодически отправляет запрос на Telegram сервер, что бы узнать появилось ли новое событие.
logging.basicConfig(level=logging.INFO) - информирует о новых событиях в боте.
Команда /start:
Переходим в папку handlers, создаем Python файл: start.py.
В нем пишем:
Python:
from aiogram import Router, F
from aiogram.filters import Command
from aiogram.types import Message
router = Router()
@router.message(Command('start'))
async def command_start(message: Message):
await message.answer(f'Привет {message.from_user.full_name}!'
'Это твой новый бот!')

Все необходимое импортируем из библиотеки aiogram.
F - Новый магический фильтр который может обрабатывать любой тип сообщения.
Command - Фильтр для работы с командами.
Message - Тип для работы с сообщениями
Затем создаем Router, для следящей привязки его к обработчиком.
@router.message(Command('start')) - Создаем декоратор обработчика событий с фильтром команды start
Создаем асинхронную функцию с типом Message и в ней отвечаем пользователю. Отвечать текстом на сообщение можно двумя способами при помощи answer и reply.
Python:
await message.answer(f'Привет {message.from_user.full_name} Это твой новый бот!')

Пример с answer
Python:
await message.reply(f'Привет {message.from_user.full_name} Это твой новый бот!')

Пример с reply
{message.from_user.full_name} - Выводит полное имя и фамилию пользователя(full_name), так же есть и другие типы такие как id, username, last_name, first_name и т.п.
Теперь разберем {message.from_user.options}:
message - объект функции,
from_user - Обращение к пользователю
options - тут параметры которые нам нужны, о них я говорил выше.
Обратно переходим в main.py в импортах пишем
Python:
from handlers import start
В функции main, изменяем строку dp.include_routers(router) в ней
дописываем dp.include_routers(start.router)
Кнопки:
Существуют два вида кнопок это Inline и Reply.

Reply кнопки

Inline кнопка
Переходим в директорию keyboards в ней создаем две директории:
1.Reply
2.Inline
В директории Reply создадим файл menu_kb_reply.py

Python:
from aiogram.types import ReplyKeyboardMarkup
from aiogram.utils.keyboard import ReplyKeyboardBuilder
def menu_kb() -> ReplyKeyboardMarkup:
kb_main = ReplyKeyboardBuilder()
kb_main.button(text='Профиль')
kb_main.button(text='О проекте')
kb_main.adjust(2)
return kb_main.as_markup(resize_keyboard=True)

Из aiogram импортируем все нужное для клавиатуры.
Создаем функцию menu_kb в ней создаем клавиатуру.
adjust(2) - Сделает клавиатуру в два столбца.
as_markup(resize_keyboard=True) - преобразовывает с ReplyKeyboardBuilder() в ReplyKeyboardMarkupб, resize_keyboard=True - делает кнопки по меньше внизу будет два примера.

Без resize_keyboard=True

С resize_keyboard=True
Переходим в файл start.py
Импортируем кнопки:
Python:
from keyboards.reply.menu_kb_reply import menu_kb
Приписываем после нашего сообщения, клавиатуру reply_markup=menu_kb()

Теперь в директории handlers создаем директорию menu, в ней создаем Python файл profile.py.

Для чего это нужно? Будет удобно в дальнейшем когда будет большой проект, не искать где же тот файл, а все файлы будут разбиты по директориям.
Переходим в файл profile.py, прописываем:
Python:
from aiogram import Router, F
from aiogram.types import Message
router = Router()
@router.message(F.text == 'Профиль')
async def command_start(message: Message):
await message.reply(f'Пользователь {message.from_user.full_name}!\n'
f'Ваш id: {message.from_user.id}')

Из aiogram импортируем все то что надо, создаем Router, создаем декоратор с фильтром F.text, бот будет принимать слово Профиль от пользователя и затем выполняет код внутри функции.
Создаем Python файл в этой же директории about_project.py и в нем пишем:
Python:
from aiogram import Router, F, types
from aiogram.types import Message
from aiogram.utils.keyboard import InlineKeyboardBuilder
router = Router()
@router.message(F.text == 'О проекте')
async def command_start(message: Message):
kb_project_url = InlineKeyboardBuilder()
kb_project_url.row(types.InlineKeyboardButton(
text="Наш канал", url="https://t.me/AITDteam")
)
await message.reply(f'Проект будет в скором времени обновляться!', reply_markup=kb_project_url.as_markup())

Все тоже самое что и в profile.py, лишь только добавляется Inline клавиатура.
В коде URL кнопка, т.е при помощи ее можно переходить на какой либо URL-адрес.
Переходим в bot.py.
В импортах пишем:
Python:
from handlers.menu import profile, about_project
В строке dp.include_routers() в скобках дописываем profile.router, about_project.router, получилось
Python:
dp.include_routers(start.router, profile.router, about_project.router)

Запуск бота:
Запускаем бота, в консоль появилась информация от библиотеки logging.

Переходим в нашего бота, нажимаем Старт.
Проверка работоспособности бота:


Последние темы в этом разделе:
- [Сергей Спирёв] [Stepik] Библиотека Seaborn. Статистическая визуализация данных в Python (2025)
- [А.Ерошенко, Л.Данилова и др.] Курс по автоматизации тестирования на JavaScript + Playwright (2025)
- [Михаил Крыжановский] [Stepik] Телеграм-боты на Python: продвинутый уровень (2024)
- [IT Start] Курс по Python 3 (2024)
- [А. Ерошенко, С. Хомутинин, С. Васенков] Автоматизация тестирования на Python (2024)
- [IT Start] Создание графического интерфейса в Python 3 с Tkinter (2024)
- [Дмитрий Лаврик] PHP – ООП (2021)
- Параллелизм в Python. Заметка на русском с примерами кода.
- Крутая, содержательная шпаргалка с примерами по веб-фреймворку Django
- Асинхронный Python и Asyncio - Молчанов (2023)