Как установить aiogram в python windows

Provide feedback

Saved searches

Use saved searches to filter your results more quickly

Sign up

Используемая версия aiogram: 3.7.0

Некоторые детали сознательно упрощены!

Автор этой книги убеждён, что помимо теории должна быть и практика. Чтобы максимально упростить повторение
приведённого далее кода, пришлось пойти на использование подходов, пригодных только для локальной разработки
и обучения.

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

Или иногда в качестве хранилищ данных будут использоваться структуры, расположенные исключительно в
оперативной памяти (словари, списки…). В действительности такие объекты нежелательны, поскольку остановка
бота приведёт безвозвратной потере данных.

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

Важно помнить, что автор ставит перед собой цель объяснить именно работу с Telegram Bot API при помощи
aiogram, а не вообще весь Computer Science во всём его многообразии.

Терминология¶

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

  • ЛС — личные сообщения, в контексте бота это диалог один-на-один с пользователем, а не группа/канал.
  • Чат — общее название для ЛС, групп, супергрупп и каналов.
  • Апдейт — любое событие из этого списка:
    сообщение, редактирование сообщения, колбэк, инлайн-запрос, платёж, добавление бота в группу и т.д.
  • Хэндлер — асинхронная функция, которая получает от диспетчера/роутера очередной апдейт
    и обрабатывает его.
  • Диспетчер — объект, занимающийся получением апдейтов от Telegram с последующим выбором хэндлера
    для обработки принятого апдейта.
  • Роутер — аналогично диспетчеру, но отвечает за подмножество множества хэндлеров.
    Можно сказать, что диспетчер — это корневой роутер.
  • Фильтр — выражение, которое обычно возвращает True или False и влияет на то, будет вызван хэндлер или нет.
  • Мидлварь — прослойка, которая вклинивается в обработку апдейтов.

Установка¶

Для начала давайте создадим каталог для бота, организуем там virtual environment (далее venv) и
установим библиотеку aiogram.
Проверим, что установлен Python версии 3.9 (если вы знаете, что установлен 3.9 и выше, можете пропустить этот раздел):

[groosha@main lesson_01]$ python3.9
Python 3.9.9 (main, Jan 11 2022, 16:35:07) 
[GCC 11.1.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> exit()
[groosha@main lesson_01]$ 

Теперь создадим файл requirements.txt, в котором укажем используемую нами версию aiogram. Также нам понадобится
библиотека pydantic-settings для файлов конфигурации.

О версиях aiogram

В этой главе используется aiogram 3.x, перед началом работы рекомендую заглянуть в
канал релизов библиотеки и проверить наличие более новой версии. Подойдёт любая
более новая, начинающаяся с цифры 3, поскольку aiogram 2.x более рассматриваться не будет и считается устаревшим.

[groosha@main 01_quickstart]$ python3.11 -m venv venv
[groosha@main 01_quickstart]$ echo "aiogram<4.0" > requirements.txt
[groosha@main 01_quickstart]$ echo "pydantic-settings" >> requirements.txt
[groosha@main 01_quickstart]$ source venv/bin/activate
(venv) [groosha@main 01_quickstart]$ pip install -r requirements.txt 
# ...здесь куча строк про установку...
Successfully installed ...тут длинный список...
[groosha@main 01_quickstart]$

Обратите внимание на префикс «venv» в терминале. Он указывает, что мы находимся в виртуальном окружении с именем «venv».
Проверим, что внутри venv вызов команды python указывает на всё тот же Python 3.11:

(venv) [groosha@main 01_quickstart]$ python
Python 3.11.9 (main, Jan 11 2024, 16:35:07) 
[GCC 11.1.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> exit()
(venv) [groosha@main 01_quickstart]$ deactivate 
[groosha@main 01_quickstart]$ 

Последней командой deactivate мы вышли из venv, чтобы он нам не мешал.

Если для написания ботов вы используете PyCharm, рекомендую также установить сторонний плагин
Pydantic для поддержки автодополнения кода
в телеграмных объектах.

Первый бот¶

Давайте создадим файл bot.py с базовым шаблоном бота на aiogram:

bot.py

import asyncio
import logging
from aiogram import Bot, Dispatcher, types
from aiogram.filters.command import Command

# Включаем логирование, чтобы не пропустить важные сообщения
logging.basicConfig(level=logging.INFO)
# Объект бота
bot = Bot(token="12345678:AaBbCcDdEeFfGgHh")
# Диспетчер
dp = Dispatcher()

# Хэндлер на команду /start
@dp.message(Command("start"))
async def cmd_start(message: types.Message):
    await message.answer("Hello!")

# Запуск процесса поллинга новых апдейтов
async def main():
    await dp.start_polling(bot)

if __name__ == "__main__":
    asyncio.run(main())

Первое, на что нужно обратить внимание: aiogram — асинхронная библиотека, поэтому ваши хэндлеры тоже должны быть асинхронными,
а перед вызовами методов API нужно ставить ключевое слово await, т.к. эти вызовы возвращают корутины.

Асинхронное программирование в Python

Не стоит пренебрегать официальной документацией!
Прекрасный туториал по asyncio доступен на сайте Python.

Если вы в прошлом работали с какой-то другой библиотекой для Telegram, например, pyTelegramBotAPI, то концепция
хэндлеров (обработчиков событий) вам сразу станет понятна, разница лишь в том, что в aiogram хэндлерами управляет диспетчер.
Диспетчер регистрирует функции-обработчики, дополнительно ограничивая перечень вызывающих их событий через фильтры.
После получения очередного апдейта (события от Telegram), диспетчер выберет нужную функцию обработки, подходящую по всем
фильтрам, например, «обработка сообщений, являющихся изображениями, в чате с ID икс и с длиной подписи игрек». Если две
функции имеют одинаковые по логике фильтры, то будет вызвана та, что зарегистрирована раньше.

Чтобы зарегистрировать функцию как обработчик сообщений, нужно сделать одно из двух действий:
1. Навесить на неё декоратор, как в примере выше.
С различными типами декораторов мы познакомимся позднее.
2. Напрямую вызвать метод регистрации у диспетчера или роутера.

Рассмотрим следующий код:

# Хэндлер на команду /test1
@dp.message(Command("test1"))
async def cmd_test1(message: types.Message):
    await message.reply("Test 1")

# Хэндлер на команду /test2
async def cmd_test2(message: types.Message):
    await message.reply("Test 2")

Давайте запустим с ним бота:

Команда /test2 не работает

Хэндлер cmd_test2 не сработает, т.к. диспетчер о нём не знает. Исправим эту ошибку
и отдельно зарегистрируем функцию:

# Хэндлер на команду /test2
async def cmd_test2(message: types.Message):
    await message.reply("Test 2")

# Где-то в другом месте, например, в функции main():
dp.message.register(cmd_test2, Command("test2"))

Снова запустим бота:

Обе команды работают

Синтаксический сахар¶

Для того чтобы сделать код чище и читабельнее, aiogram расширяет возможности стандартных объектов Telegram.
Например, вместо bot.send_message(...) можно написать message.answer(...) или message.reply(...). В последних
двух случаях не нужно подставлять chat_id, подразумевается, что он такой же, как и в исходном сообщении.
Разница между answer и reply простая: первый метод просто отправляет сообщение в тот же чат, второй делает «ответ» на
сообщение из message:

@dp.message(Command("answer"))
async def cmd_answer(message: types.Message):
    await message.answer("Это простой ответ")


@dp.message(Command("reply"))
async def cmd_reply(message: types.Message):
    await message.reply('Это ответ с "ответом"')

Разница между message.answer() и message.reply()

Более того, для большинства типов сообщений есть вспомогательные методы вида
«answer_{type}» или «reply_{type}», например:

@dp.message(Command("dice"))
async def cmd_dice(message: types.Message):
    await message.answer_dice(emoji="🎲")

что значит ‘message: types.Message’ ?

Python является интерпретируемым языком с сильной, но динамической типизацией,
поэтому встроенная проверка типов, как, например, в C++ или Java, отсутствует. Однако начиная с версии 3.5
в языке появилась поддержка подсказок типов, благодаря которой
различные чекеры и IDE вроде PyCharm анализируют типы используемых значений и подсказывают
программисту, если он передаёт что-то не то. В данном случае подсказка types.Message сообщает
PyCharm-у, что переменная message имеет тип Message, описанный в модуле types библиотеки
aiogram (см. импорты в начале кода). Благодаря этому IDE может на лету подсказывать атрибуты и функции.

При вызове команды /dice бот отправит в тот же чат игральный кубик. Разумеется, если его надо отправить в какой-то
другой чат, то придётся по старинке вызывать await bot.send_dice(...). Но объект bot (экземпляр класса Bot) может быть
недоступен в области видимости конкретной функции. В aiogram 3.x объект бота, которому пришёл апдейт, неявно
прокидывается в хэндлер и его можно достать как аргумент bot. Предположим, вы хотите по команде /dice
отправлять кубик не в тот же чат, а в канал с ID -100123456789. Перепишем предыдущую функцию:

# не забудьте про импорт
from aiogram.enums.dice_emoji import DiceEmoji

@dp.message(Command("dice"))
async def cmd_dice(message: types.Message, bot: Bot):
    await bot.send_dice(-100123456789, emoji=DiceEmoji.DICE)

Иногда при запуске бота может потребоваться передать одно или несколько дополнительных значений.
Это может быть какая-нибудь переменная, объект конфигурации, список чего-то, отметка времени и что угодно ещё.
Для этого достаточно передать эти данные как именованные (kwargs) аргументы в диспетчер, либо присвоить значения, как
если бы вы работали со словарём.

Такая возможность лучше всего подходит для передачи объектов, которые должны жить в единственном экземпляре и не меняться
в ходе работы бота (т.е. быть только для чтения). Если предполагается, что значение должно изменяться со временем, то помните, что
это сработает только с мутабельными объектами.
Чтобы получить значения в хэндлерах, просто укажите их как аргументы. Рассмотрим на примере:

# Где-то в другом месте
# Например, в точке входа в приложение
from datetime import datetime

# bot = ...
dp = Dispatcher()
dp["started_at"] = datetime.now().strftime("%Y-%m-%d %H:%M")
await dp.start_polling(bot, mylist=[1, 2, 3])


@dp.message(Command("add_to_list"))
async def cmd_add_to_list(message: types.Message, mylist: list[int]):
    mylist.append(7)
    await message.answer("Добавлено число 7")


@dp.message(Command("show_list"))
async def cmd_show_list(message: types.Message, mylist: list[int]):
    await message.answer(f"Ваш список: {mylist}")


@dp.message(Command("info"))
async def cmd_info(message: types.Message, started_at: str):
    await message.answer(f"Бот запущен {started_at}")

Теперь переменную started_at и список mylist можно читать и писать в разных хэндлерах. А если вам нужно пробрасывать
уникальные для каждого апдейта значения (например, объект сессии СУБД),
то ознакомьтесь с мидлварями.

Аргумент mylist может быть изменён между вызовами

Файлы конфигурации¶

Чтобы не хранить токен прямо в коде (вдруг вы захотите залить своего бота в публичный репозиторий?) можно вынести
подобные данные в отдельный конфигурационный файл. Существует хорошее и адекватное мнение,
что для прода достаточно переменных окружения, однако в рамках этой книги мы будем пользоваться отдельными файлами .env,
чтобы немного упростить себе жизнь и сэкономить читателям время на разворачивание демонстрационного проекта.

Итак, создадим рядом с bot.py отдельный файл config_reader.py со следующим содержимым

config_reader.py

from pydantic_settings import BaseSettings, SettingsConfigDict
from pydantic import SecretStr


class Settings(BaseSettings):
    # Желательно вместо str использовать SecretStr 
    # для конфиденциальных данных, например, токена бота
    bot_token: SecretStr

    # Начиная со второй версии pydantic, настройки класса настроек задаются
    # через model_config
    # В данном случае будет использоваться файла .env, который будет прочитан
    # с кодировкой UTF-8
    model_config = SettingsConfigDict(env_file='.env', env_file_encoding='utf-8')


# При импорте файла сразу создастся 
# и провалидируется объект конфига, 
# который можно далее импортировать из разных мест
config = Settings()

Теперь немного отредактируем наш bot.py:

bot.py

# импорты
from config_reader import config

# Для записей с типом Secret* необходимо 
# вызывать метод get_secret_value(), 
# чтобы получить настоящее содержимое вместо '*******'
bot = Bot(token=config.bot_token.get_secret_value())

Наконец, создадим файл .env (с точкой в начале), где опишем токен бота:

.env

BOT_TOKEN = 0000000000:AaBbCcDdEeFfGgHhIiJjKkLlMmNn

Если всё сделано правильно, то при запуске python-dotenv подгрузит переменные из файла .env, pydantic
их провалидирует и объект бота успешно создастся с нужным токеном.

На этом мы закончим знакомство с библиотекой, а в следующих главах рассмотрим другие «фишки» aiogram и Telegram Bot API.

#Руководства


  • 0

Большой гайд по работе с Aiogram на примере эхо‑бота — чат‑бота, который повторяет за пользователем его фразы. Весь код — внутри статьи.

Иллюстрация: Polina Vari для Skillbox Media

Антон Яценко

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

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

Благодаря этой статье вы научитесь с нуля создавать чат-ботов с помощью Python и библиотеки Aiogram. Мы напишем эхо-бота, который отвечает на сообщения пользователя точно такими же сообщениями. Это первая часть урока по Aiogram — во второй части мы добавим боту кнопки и новые фичи.

Содержание

  • Библиотеки для создания бота
  • Краткое описание Aiogram
  • Создаём эхо-бота
  • Шаг 1. Устанавливаем Python
  • Шаг 2. Создаём виртуальное окружение
  • Шаг 3. Создаём бота
  • Шаг 4. Подключаем Aiogram
  • Шаг 5. Пишем код для эхо-бота
  • Шаг 6. Запускаем бота и проверяем работу
  • Что дальше?

Для создания телеграм-ботов на Python существует несколько десятков библиотек. Они различаются популярностью, размером комьюнити и функциональностью. Рассмотрим самые популярные.

Aiogram. Современная библиотека, набирающая популярность: многие чат-боты написаны на ней. В этой и последующих статьях цикла мы будем работать именно с Aiogram. Библиотека реализует асинхронное выполнение кода, что позволяет не останавливать работу бота в ожидании ответа пользователя. Кроме того, у Aiogram есть подробная документация и большое русскоязычное комьюнити.

Python-telegram-bot. Одна из первых библиотек для создания ботов. Отличается от Aiogram синхронным подходом к работе, то есть при ожидании ответа от пользователя выполнение кода останавливается.

TeleBot. Библиотека для создания простых ботов, позволяющая работать с асинхронным и синхронным подходом на выбор. Подходит для небольших проектов. Подробнее можно узнать в документации.

Перед тем как приступить к написанию нашего бота, остановимся подробнее на одной технической особенности Aiogram.

Как уже было сказано ранее, одно из главных достоинств библиотеки — полная асинхронность. Она использует синтаксис async/await, который позволяет программе выполнять несколько задач одновременно и эффективно управлять потоком выполнения.

Вот простой пример функции, использующей механизм async/await:

# Хендлер для команды /start
@dp.message(Command("start"))
async def start(message: types.Message):
    await message.answer("Привет, пользователь!")

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

В хендлере мы прописываем, что бот должен сделать в ответ на сообщение. А для того, чтобы для каждой команды вызывался нужный обработчик, функция оборачивается в декоратор, которому передаётся имя команды без символа /.

Служебное слово async указывает интерпретатору, что функция будет работать в асинхронном режиме. Это означает, что интерпретатору не нужно ждать, пока выполняется код функции, — он может выполнять следующие инструкции, пока start что-нибудь не вернёт. Это «что-нибудь» следует за служебным словом await («ожидать»), а не return, как в обычном коде.

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

Вот несколько полезных источников, которые помогут разобраться в библиотеке и следить за её обновлениями:

  • официальная документация,
  • репозиторий библиотеки на GitHub,
  • русскоязычный телеграм-чат, посвящённый Aiogram,
  • англоязычный чат, посвящённый Aiogram,
  • канал с новостями библиотеки,
  • тестовый бот на основе Aiogram.

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

Для этого нам необходимо:

  • установить Python и настроить виртуальное окружение;
  • зарегистрировать бота в специальном телеграм-канале @BotFather;
  • установить библиотеку Aiogram;
  • написать код эхо-бота, связав его по API с Telegram.

На macOS или Linux. Python установлен в эти операционные системы изначально. Чтобы проверить его наличие, откройте терминал и введите команду:

python --version

Если Python установлен, то терминал покажет его версию:

Скриншот: Aiogram / Skillbox Media

На Windows требуется установка Python. Сделать это проще всего по нашей инструкции.


После установки и проверки Python требуется установить виртуальное окружение с помощью virtualenv. Это специальный инструмент, который позволяет изолировать друг от друга проекты в разработке, независимо устанавливая для них библиотеки и пакеты. Удобно, когда вы работаете над разными приложениями одновременно.

virtualenv устанавливается через терминал:

sudo pip3 install virtualenv

После этого необходимо создать директорию для проекта, внутри которой будет работать виртуальное окружение:

mkdir telegram_bot
cd telegram_bot

Команда mkdir создаст папку telegram_bot, а команда cd переведёт нас в неё. Теперь в этой директории будут храниться файлы проекта, связанные с нашим ботом.

Развернём виртуальное окружение внутри папки telegram_bot:

virtualenv venv -p python3

Теперь его активируем. Если этого не сделать, то оно не будет работать.

source venv/bin/activate

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


Для создания бота необходимо воспользоваться Telegram и ботом @BotFather. Откройте мессенджер и введите название бота в поисковой строке:

Скриншот: Aiogram / Skillbox Media

Открываем его, жмём кнопку «Запустить» и вводим команду /newbot:

Скриншот: Aiogram / Skillbox Media

Теперь напишем название и юзернейм для нашего бота. Назовём его echo_skillbox_bot (теперь это имя занято, так что вам надо будет придумать своё). В ответ придёт наш токен, который мы будем использовать для подключения к API Telegram.

Скриншот: Aiogram / Skillbox Media

Этот токен мы сохраняем — он потребуется нам в будущем.


Для установки Aiogram воспользуемся менеджером пакетов PIP. Вводим в терминал:

pip install aiogram

Важно! Библиотека устанавливается в созданное ранее виртуальное окружение, связанное с папкой telegram_bot. Если вы решите создать нового бота в другой директории на компьютере, то установку будет необходимо провести заново, иначе Aiogram не будет работать.


Писать код на Python лучше всего в IDE, а не в окне терминала. В проекте ниже мы будем использовать бесплатный редактор Visual Studio Code, но вы можете воспользоваться любым удобным для вас инструментом.

Откроем IDE и создадим файл main.py. Для этого проекта нам потребуется только он. Импортируем из Aiogram нужные классы и модуль:

from aiogram import Bot, Dispatcher, executor, types

Разберёмся, что каждый из них делает. Начнём с классов:

  • Bot определяет, на какие команды от пользователя и каким способом отвечать.
  • Dispatcher позволяет отслеживать обновления.
  • Executor запускает бота и выполняет функции, которые следует выполнить.

Модуль types позволит нам использовать базовые классы для аннотирования, то есть восприятия сообщений. Например, мы будем использовать types.Message, позволяющий работать с приёмом текстовых сообщений пользователя. Подробно об этом можно прочесть в документации.

Импортируем наш токен, который поможет коммуницировать с API Telegram:

API_TOKEN = '5602787567:AAGYv7NrSjwyW7qPs_yvu70C060zrcfZDbQ' #В одинарных кавычках размещаем токен, полученный от @BotFather.

Теперь необходимо инициализировать объекты bot и Dispatcher, передав первому наш токен. Если их не инициализировать, то код не будет работать.

bot = Bot(token=API_TOKEN)
dp = Dispatcher(bot)

Настроим приветственное окно для нового пользователя, которое будет появляться при нажатии команды /start. Для этого создаём message_handler и прописываем функцию ответа:

@dp.message_handler(commands=['start']) #Явно указываем в декораторе, на какую команду реагируем. 
async def send_welcome(message: types.Message):
   await message.reply("Привет!\nЯ Эхо-бот от Skillbox!\nОтправь мне любое сообщение, а я тебе обязательно отвечу.") #Так как код работает асинхронно, то обязательно пишем await.

Теперь при нажатии на кнопку Начать или при вводе команды /start пользователь будет получать от бота приветственное сообщение.

Разберёмся в коде:

  • message_handler — это декоратор, который реагирует на входящие сообщения и содержит в себе функцию ответа. Декоратор — это «обёртка» вокруг функций, позволяющая влиять на их работу без изменения кода самих функций. В нашем случае мы управляем функцией, считая команды пользователя.
  • commands=[‘start’] — это команда, которая связана с декоратором и запускает вложенную в него функцию.
  • async def send_welcome — создаёт асинхронную функцию, которая принимает в себя сообщение пользователя message, определяемое через тип Message. Саму функцию можно назвать любым образом. Мы выбрали send_welcome, чтобы название было понятным и осмысленным.
  • await message.reply — определяет ответ пользователя, используя await из-за асинхронности работы библиотеки.

Теперь создадим событие, которое будет обрабатывать введённое пользователем сообщение:

@dp.message_handler() #Создаём новое событие, которое запускается в ответ на любой текст, введённый пользователем.
async def echo(message: types.Message): #Создаём функцию с простой задачей — отправить обратно тот же текст, что ввёл пользователь.
   await message.answer(message.text)

Так как бот должен реагировать на любое текстовое сообщение от пользователя, то скобки в @dp.message_handler мы оставляем пустыми. Параметр message не отличается от использованного в предыдущих шагах.

Для ответа мы также используем метод message, указывая, что возвращаем исходный текст, принятый в message.

Остаётся последний этап — настроить получение сообщений от сервера в Telegram. Если этого не сделать, то мы не получим ответы бота. Реализовать получение новых сообщений можно с помощью поллинга. Он работает очень просто — метод start_polling опрашивает сервер, проверяя на нём обновления. Если они есть, то они приходят в Telegram. Для включения поллинга необходимо добавить две строчки:

if __name__ == '__main__':
   executor.start_polling(dp, skip_updates=True)

Всё, теперь код нашего бота полностью готов:

from aiogram import Bot, Dispatcher, executor, types
 
API_TOKEN = '5602787567:AAGYv7NrSjwyW7qPs_yvu70C060zrcfZDbQ'
 
bot = Bot(token=API_TOKEN)
dp = Dispatcher(bot)
 
@dp.message_handler(commands=['start'])
async def send_welcome(message: types.Message):
   await message.reply("Привет!\nЯ Эхо-бот от Skillbox!\nОтправь мне любое сообщение, а я тебе обязательно отвечу.")
 
@dp.message_handler()
async def echo(message: types.Message):
   await message.answer(message.text)
 
if __name__ == '__main__':
   executor.start_polling(dp, skip_updates=True)

Сохраняем его в нашей папке telegram_bot под именем main.py.


Для запуска бота нам необходим терминал. Открываем его и переходим в нашу папку telegram_bot. После этого вводим команду:

python3 main.py

В ответ терминал пришлёт сообщение, что обновления успешно пропущены:

Скриншот: Aiogram / Skillbox Media

Находим нашего бота в Telegram по имени @echo_skillbox_bot и запускаем его, нажав на кнопку Начать. В ответ на это или на команду /start нам придёт приветственное сообщение:

Скриншот: Aiogram / Skillbox Media

Попробуем написать что-то:

Скриншот: Aiogram / Skillbox Media

Как мы видим — всё работает. Бот возвращает нам наши сообщения.

Расширять функциональность бота, указывая для разных команд пользователя разные ответы. Например, добавить раздел помощи, который будет появляться по команде /help. Или настроить запуск кода на виртуальном сервере, чтобы бот работал независимо от вашего компьютера.

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

Курс с трудоустройством: «Профессия Python-разработчик»
Узнать о курсе

Пройдите тест, узнайте какой профессии подходите

Работать самостоятельно и не зависеть от других

Работать в команде и рассчитывать на помощь коллег

Организовывать и контролировать процесс работы

Введение в aiogram и установка необходимых библиотек

Aiogram — это мощная и удобная библиотека для создания Telegram-ботов на языке программирования Python. Она позволяет легко и быстро разрабатывать ботов, используя асинхронные функции и удобный интерфейс. В этой статье мы рассмотрим основные шаги по созданию бота с использованием aiogram, начиная с установки необходимых библиотек и заканчивая созданием интерактивного меню.

Кинга Идем в IT: пошаговый план для смены профессии

Установка aiogram

Для начала, необходимо установить библиотеку aiogram. Это можно сделать с помощью пакетного менеджера pip. Откройте терминал и выполните следующую команду:

Также потребуется установить библиотеку python-dotenv для работы с переменными окружения. Эта библиотека позволяет хранить конфиденциальные данные, такие как токены, в отдельном файле .env, что упрощает управление конфигурацией и повышает безопасность:

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

Создание простого бота: отправка сообщений

Создание файла конфигурации

Создайте файл .env в корневой директории проекта и добавьте в него ваш токен бота, который можно получить у BotFather. Этот файл будет содержать конфиденциальную информацию, поэтому не забудьте добавить его в .gitignore, если вы используете систему контроля версий:

Основной код бота

Создайте файл bot.py и добавьте следующий код. Этот код создает простого бота, который отвечает на команды /start и /help приветственным сообщением. Мы используем библиотеку dotenv для загрузки переменных окружения из файла .env:

Этот код создает простого бота, который отвечает на команды /start и /help приветственным сообщением. Обратите внимание на использование асинхронных функций, что позволяет боту работать эффективно и быстро.

Работа с Inline Keyboard: создание интерактивных кнопок

Создание кнопок

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

Обработка нажатий кнопок

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

Теперь бот будет отправлять сообщения в ответ на нажатие кнопок. Это делает взаимодействие с ботом более динамичным и интересным для пользователей.

Использование диспетчера для обработки сообщений и команд

Добавление новых команд

Диспетчер (Dispatcher) позволяет обрабатывать различные типы сообщений и команд. Добавим обработку команды /info. Это позволяет расширить функциональность бота и предоставить пользователям больше информации:

Обработка текстовых сообщений

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

Этот код будет отправлять обратно любое полученное текстовое сообщение. Это простой способ создать эхо-бота, который повторяет сообщения пользователей.

Создание интерактивного меню и обработка пользовательских действий

Создание меню

Создадим интерактивное меню с несколькими уровнями. Это позволяет пользователям выбирать различные опции и получать соответствующие ответы от бота:

Обработка выбора в меню

Добавим обработку выбора в меню. Это позволяет боту реагировать на выборы пользователей и отправлять соответствующие сообщения:

Теперь бот будет отправлять сообщения в ответ на выбор опций в меню. Это делает взаимодействие с ботом более структурированным и удобным для пользователей.

Заключение

Теперь вы знаете, как создать Telegram-бота с использованием библиотеки aiogram. Мы рассмотрели основные шаги: установку библиотек, создание простого бота, работу с Inline Keyboard, использование диспетчера для обработки сообщений и команд, а также создание интерактивного меню. Надеюсь, эта статья была полезной и поможет вам в создании ваших собственных ботов. Удачи! 😉

Читайте также

Back to top

View this page

Toggle table of contents sidebar

From PyPI¶

pip install -U aiogram

From Arch Linux Repository¶

Warning

Package in this repository may be outdated. Use PyPI package for the latest version.

pacman -S python-aiogram

Development build¶

From GitHub¶

pip install https://github.com/aiogram/aiogram/archive/refs/heads/dev-3.x.zip

Понравилась статья? Поделить с друзьями:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
  • Windows 10 home не обновляется до pro
  • Как удалить sticky notes в windows 10 полностью
  • Восстановление при загрузке не удалось восстановить компьютер strtrail txt windows 10 что делать
  • Как вызвать командную строку в windows 7 клавишами от имени администратора
  • Как поменять профиль пользователя в windows 7