Простой телеграм бот hello world в aiogram

простейший бот

Библиотека aiogram является мощным инструментом разработки для создания ботов Telegram на языке Python. Она предоставляет удобный и высокоуровневый интерфейс для взаимодействия с API Telegram, что позволяет разработчикам легко создавать и настраивать функциональность ботов.

Возможности aiogram

  1. Управление событиями: aiogram позволяет обрабатывать различные события, такие как новые сообщения, обновления клавиатуры, вступление пользователей в чаты и т.д. Вы можете настроить обработчики для этих событий и определить, как ваш бот будет реагировать на них.
  2. Работа с командами: aiogram обеспечивает удобный способ создания команд для вашего бота. Вы можете определить, какие сообщения или входящие команды будут вызывать определенные действия и легко настроить ответы на них.
  3. Отправка сообщений и мультимедиа: aiogram предоставляет простой интерфейс для отправки текстовых сообщений, изображений, аудио, видео, документов и других медиафайлов. Вы также можете отправлять встроенные клавиатуры и кнопки для взаимодействия с пользователями.
  4. Работа с состояниями: aiogram поддерживает работу с состояниями чата. Это позволяет вашему боту отслеживать контекст и состояние разговора с каждым пользователем. Вы можете использовать состояния, чтобы запоминать данные пользователя или организовывать диалог в несколько шагов.
  5. Работа с базами данных: aiogram интегрируется с популярными базами данных, такими как SQLite и PostgreSQL. Вы можете использовать базы данных для хранения и извлечения данных, связанных с вашим ботом, таких как пользователи, настройки и другая информация.
  6. Поддержка асинхронности: aiogram полностью асинхронна и основана на asyncio, что позволяет обрабатывать множество запросов одновременно и эффективно управлять ресурсами.

Библиотека aiogram обладает богатым функционалом и хорошо документирована.

Приведенные примеры работают на версии aiogram 2x

Простейший бот с помощью aiogram

Пример простейшего бота с использованием библиотеки aiogram, который отвечает на команду /start сообщением «Привет мир!»

import logging
from aiogram import Bot, Dispatcher, types
from aiogram.contrib.fsm_storage.memory import MemoryStorage
from aiogram.dispatcher import FSMContext
from aiogram.dispatcher.filters import Command

# Установка уровня логирования
logging.basicConfig(level=logging.INFO)

# Инициализация бота и диспетчера
bot = Bot(token='YOUR_BOT_TOKEN')
storage = MemoryStorage()
dp = Dispatcher(bot, storage=storage)

# Обработчик команды /start
@dp.message_handler(Command('start'))
async def start_command(message: types.Message, state: FSMContext):
    # Отправка приветственного сообщения
    await message.reply("Привет мир!")

# Запуск бота
if __name__ == '__main__':
    from aiogram import executor
    executor.start_polling(dp, skip_updates=True)

Вам нужно заменить 'YOUR_BOT_TOKEN' на токен вашего бота Telegram, который можно получить у BotFather при создании бота. Запустите этот код, и ваш бот будет отвечать на команду /start сообщением «Привет мир!».

Убедитесь, что у вас установлена библиотека aiogram (pip install aiogram) и все зависимости.

Вывод логов

Импорт модуля logging и установка уровня логирования с помощью logging.basicConfig(level=logging.INFO) используются для настройки вывода логов во время работы вашего бота.

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

logging.basicConfig() задает базовую конфигурацию логирования для вашего приложения. В данном случае мы устанавливаем уровень логирования на INFO, что означает, что будут выводиться только информационные сообщения и сообщения с более высоким уровнем (например, WARNING, ERROR, CRITICAL).

Настройка уровня логирования позволяет контролировать, какая информация будет отображаться в логе вашего бота. В приведенном примере мы устанавливаем INFO, чтобы получать информационные сообщения о выполнении команд и других событий в боте. Однако, вы можете изменить уровень логирования в соответствии с вашими потребностями, установив другой уровень, например, DEBUG, WARNING, ERROR, CRITICAL, или использовать собственные настройки логирования.

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

Классы Bot и Dispatcher

Объекты Bot, Dispatcher являются основными компонентами библиотеки aiogram и используются для разработки ботов Telegram.

  1. Bot: Объект Bot представляет самого бота Telegram. Он отвечает за взаимодействие с API Telegram. При создании объекта Bot, вы должны передать ему токен вашего бота, который вы получаете от BotFather при регистрации бота в Telegram. Bot предоставляет методы для отправки сообщений, получения обновлений, управления чатами и других операций, связанных с вашим ботом.
  2. Dispatcher: Объект Dispatcher является ядром библиотеки aiogram. Он предоставляет механизм для обработки входящих обновлений от Telegram и маршрутизации их к соответствующим обработчикам. Dispatcher отвечает за регистрацию обработчиков событий, фильтрацию обновлений и управление состояниями. Он позволяет вам определить, как ваш бот будет реагировать на различные события, такие как новые сообщения, команды, обновления клавиатуры и др.

Модуль types

Модуль types содержит различные классы и типы данных, предоставляемые библиотекой aiogram. Эти классы представляют различные объекты Telegram, такие как сообщения (Message), пользователи (User), чаты (Chat), клавиатуры (ReplyKeyboardMarkup, InlineKeyboardMarkup) и т.д. Классы types используются для представления и работы с данными, полученными от Telegram API. Они облегчают доступ к различным свойствам и методам этих объектов и обеспечивают удобный способ взаимодействия с Telegram API в вашем боте.

Хранилище

Класс FSMStorage из модуля aiogram.contrib.fsm_storage.memory предоставляет реализацию хранилища состояний (Finite State Machine — FSM) в памяти для библиотеки aiogram.

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

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

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

Однако, класс FSMStorage в памяти является удобным выбором для небольших проектов и разработки прототипов, когда вам не требуется сохранять долгосрочные данные или вы хотите быстро приступить к разработке функциональности вашего бота с использованием состояний.

Фильтры диспетчера и работа с командами

Модуль aiogram.dispatcher.filters содержит различные фильтры, которые позволяют сортировать и фильтровать входящие обновления в библиотеке aiogram. Один из наиболее распространенных классов фильтров в этом модуле — это класс Command.

Класс Command является фильтром, который позволяет отфильтровать входящие сообщения от пользователя, которые являются командами. Команда — это сообщение, которое начинается с символа «/». Например, команда может выглядеть как /start, /help, /settings и так далее.

Пример использования класса Command в библиотеке aiogram:

from aiogram import Bot, Dispatcher, types
from aiogram.dispatcher.filters import Command

bot = Bot(token='YOUR_BOT_TOKEN')
dp = Dispatcher(bot)

@dp.message_handler(Command('start'))
async def handle_start(message: types.Message):
    await message.reply('Привет! Бот запущен.')

@dp.message_handler(Command('help'))
async def handle_help(message: types.Message):
    await message.reply('Это помощь.')

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

В приведенном примере, используя класс Command('start'), мы определяем обработчик, который будет вызываться только при получении команды /start от пользователя. Когда бот получает сообщение с командой /start, он отправляет ответное сообщение с текстом «Привет! Бот запущен.».

Аналогично, мы определяем обработчик для команды /help. Когда бот получает сообщение с командой /help, он отправляет ответное сообщение с текстом «Это помощь.».

Использование класса Command позволяет удобно фильтровать и обрабатывать только входящие сообщения, которые являются командами, и выполнять соответствующие действия. Это особенно полезно, когда вы хотите предоставить пользователю определенные команды для взаимодействия с вашим ботом.

Декоратор диспетчера @dp.message_handler

@dp.message_handler — это декоратор в библиотеке aiogram, который применяется к функции-обработчику сообщений (message handler). Этот декоратор указывает библиотеке, что функция должна быть вызвана для обработки определенного типа входящих сообщений.

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

Пример использования @dp.message_handler:

from aiogram import Bot, Dispatcher, types

bot = Bot(token='YOUR_BOT_TOKEN')
dp = Dispatcher(bot)

@dp.message_handler(content_types=types.ContentType.TEXT)
async def handle_text(message: types.Message):
    await message.reply('Вы отправили текстовое сообщение.')

@dp.message_handler(content_types=types.ContentType.PHOTO)
async def handle_photo(message: types.Message):
    await message.reply('Вы отправили фотографию.')

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

В этом примере мы используем @dp.message_handler для регистрации двух обработчиков сообщений. Первый обработчик вызывается только для текстовых сообщений (content_types=types.ContentType.TEXT). Когда бот получает текстовое сообщение от пользователя, он вызывает функцию handle_text, которая отправляет ответное сообщение «Вы отправили текстовое сообщение.»

Аналогично, второй обработчик вызывается только для сообщений с типом «фотография» (content_types=types.ContentType.PHOTO). Когда бот получает фотографию от пользователя, он вызывает функцию handle_photo, которая отправляет ответное сообщение «Вы отправили фотографию.»

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

Функции — обработчики сообщений

Функции-обработчики сообщений в библиотеке aiogram являются функциями, которые вызываются при получении новых входящих сообщений от пользователей. Эти функции выполняют определенные действия в ответ на сообщения и могут взаимодействовать с API Telegram для отправки ответов, обновлений клавиатур и других операций.

Основные аспекты функций-обработчиков сообщений в aiogram:

  1. Асинхронность: Функции-обработчики в aiogram обычно объявляются с использованием ключевого слова async, что позволяет им выполняться асинхронно. Это полезно, когда ваш бот должен выполнять долгие операции или взаимодействовать с внешними ресурсами без блокирования основного потока выполнения.
  2. Аргументы функции: Функции-обработчики могут принимать различные аргументы, которые предоставляют доступ к информации о входящем сообщении и другим контекстным данным. Наиболее распространенным аргументом является message, который представляет входящее сообщение в виде объекта types.Message. Этот объект содержит различные свойства и методы для доступа к информации о сообщении, такой как текст, отправитель, чат и т.д.
  3. Ответы на сообщения: Функции-обработчики могут использовать методы объекта message или методы объекта Bot для отправки ответных сообщений пользователям. Например, вы можете использовать метод message.reply() для отправки ответа с текстом, метод message.answer_photo() для отправки фотографии, и так далее. Методы объекта Bot позволяют отправлять сообщения без явного доступа к объекту message.
  4. Взаимодействие с API Telegram: Функции-обработчики могут выполнять различные операции, связанные с ботом и Telegram API. Например, вы можете использовать методы объекта Bot для получения информации о чате или пользователе, изменения статуса печати, настройки клавиатур и многое другое. Библиотека aiogram предоставляет удобные методы для взаимодействия с API Telegram и упрощает разработку ботов.

Пример простой функции-обработчика сообщений:

from aiogram import Bot, Dispatcher, types

bot = Bot(token='YOUR_BOT_TOKEN')
dp = Dispatcher(bot)

async def handle_message(message: types.Message):
    text = message.text
    user_id = message.from_user.id
    chat_id = message.chat.id
    await bot.send_message(chat_id, f"Вы отправили сообщение: {text}")

dp.register_message_handler(handle_message)

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

В этом примере функция handle_message является обработчиком входящих текстовых сообщений. Она получает объект types.Message в качестве аргумента, извлекает текст сообщения, идентификатор пользователя и идентификатор чата. Затем она использует метод bot.send_message() для отправки ответного сообщения обратно в чат с текстом, который содержит входящее сообщение.

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

Что такое обновления в телеграм ботах?

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

Обновления представляют собой данные, содержащие информацию о событии, такую как тип события, идентификатор чата, идентификатор пользователя, текст сообщения и другие связанные данные. Они представлены в виде JSON-объектов и передаются вашему боту через webhook или с помощью метода long polling.

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

Пример использования обновлений в aiogram:

from aiogram import Bot, Dispatcher, types

bot = Bot(token='YOUR_BOT_TOKEN')
dp = Dispatcher(bot)

@dp.message_handler()
async def handle_message(message: types.Message):
    # Обработка нового сообщения
    await message.reply('Спасибо за сообщение!')

@dp.callback_query_handler()
async def handle_callback_query(query: types.CallbackQuery):
    # Обработка нажатия на кнопку
    await query.answer('Вы нажали на кнопку!')

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

В этом примере мы используем два обработчика для разных типов обновлений. Первый обработчик (@dp.message_handler()) вызывается для новых входящих сообщений. Когда ваш бот получает новое сообщение, он вызывает функцию handle_message, которая отправляет ответное сообщение пользователю.

Второй обработчик (@dp.callback_query_handler()) вызывается для нажатия на кнопки (Inline Keyboard). Когда пользователь нажимает кнопку, Telegram отправляет вашему боту обновление типа callback_query, и функция handle_callback_query вызывается для обработки этого события.

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

Проверка, является ли файл программы запущенным напрямую

Конструкция if __name__ == '__main__' в Python используется для определения, выполняется ли текущий файл как самостоятельная программа или импортируется в другой модуль в качестве библиотеки.

Когда интерпретатор Python запускает файл напрямую, значение __name__ устанавливается в строку '__main__'. Это означает, что код внутри блока if __name__ == '__main__' будет выполнен.

С другой стороны, когда файл импортируется в другой модуль, значение __name__ устанавливается равным имени модуля, и код внутри блока if __name__ == '__main__' будет пропущен.

Таким образом, конструкция if __name__ == '__main__' часто используется для разделения кода, который должен выполняться только при запуске файла как самостоятельной программы, от кода, который должен выполняться только при импортировании файла в другой модуль.

В приведенном примере кода бота с использованием aiogram:

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

Этот блок кода гарантирует, что функция executor.start_polling() будет вызвана только при запуске файла как самостоятельной программы, а не при его импортировании. executor.start_polling() запускает бесконечный цикл для получения обновлений от Telegram API и обработки их с помощью зарегистрированных обработчиков.

Понравилась статья? Поделиться с друзьями:
Школа Виктора Комлева
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!:

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.