Создаем Telegram-бота на Python: aiogram

Этот урок посвящен базовым аспектам работы с библиотекой aiogram для создания ботов в Telegram.

Установка и подключение aiogram

Для работы с aiogram установите её с помощью pip:

pip install aiogram

Вместо полного импорта библиотеки (import aiogram), рекомендуется импортировать только необходимые классы:

from aiogram import Bot, Dispatcher, executor, types
  • Bot: Класс для создания объекта бота.
  • Dispatcher: Класс для обработки событий.
  • executor: Для запуска бота в режиме постоянной работы.
  • types: Для создания кнопок и работы с типами данных.

Создание и настройка бота

После установки библиотеки, создайте объект Bot, передав ему токен вашего бота:

bot = Bot(token='YOUR_BOT_TOKEN')

Замените YOUR_BOT_TOKEN на ваш собственный токен. Далее создайте объект Dispatcher:

dp = Dispatcher(bot)

Для постоянной работы бота используйте функцию start_polling:

executor.start_polling(dp)

Обработка команд и сообщений

Для обработки команд используется message_handler с указанием обрабатываемой команды:

@dp.message_handler(commands=['start'])
async def process_start_command(message: types.Message):
    await message.answer("Hello")

Обратите внимание на ключевое слово async перед функцией, указывающее на асинхронность. Для отправки сообщения можно использовать message.answer() вместо bot.send_message().

Без указания параметров в message_handler, функция будет обрабатывать любые сообщения:

@dp.message_handler()
async def process_any_message(message: types.Message):
    await message.answer("Сообщение получено")

Для обработки определенных типов контента, можно использовать параметр content_types:

@dp.message_handler(content_types=['text'])
async def process_text_message(message: types.Message):
    await message.answer("Текстовое сообщение получено")

Создание и обработка кнопок

Для создания inline-кнопок используется InlineKeyboardMarkup:

markup = types.InlineKeyboardMarkup()
markup.add(types.InlineKeyboardButton(text="Сайт", url="https://itproger.com"))
markup.add(types.InlineKeyboardButton(text="Hello", callback_data="hello"))
await message.answer("Hello", reply_markup=markup)

Обработка нажатия на кнопку осуществляется через callback_query_handler:

@dp.callback_query_handler(lambda call: call.data == 'hello')
async def process_callback(call: types.CallbackQuery):
    await call.message.answer("Сообщение от кнопки")

Для создания Reply-кнопок используется ReplyKeyboardMarkup:

markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
markup.add(types.KeyboardButton("Сайт"), types.KeyboardButton("Вебсайт"))
await message.answer("Выберите действие:", reply_markup=markup)

Свойство resize_keyboard=True позволяет автоматически изменять размер клавиатуры.

Отправка файлов

Для отправки файлов используются методы answer_photo, answer_video и т.д.:

await message.answer_photo(open('path/to/your/photo.jpg', 'rb'))

Библиотека aiogram предоставляет удобные инструменты для создания ботов в Telegram. Её использование схоже с другими библиотеками, такими как telebot, но отличается асинхронным характером работы, что повышает эффективность. Изучив этот урок, вы сможете создавать собственных ботов, используя aiogram.

Что будем искать? Например,программа