Класс bot библиотеки Aiogram

aiogram.Bot — это класс для взаимодействия с Telegram Bot API. Он предоставляет методы для отправки сообщений, загрузки файлов, управления клавиатурами и т.д.

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

Методы и атрибуты класса bot

Методы

  • send_message — Отправляет текстовое сообщение пользователю или в групповой чат.
async def send_message(chat_id: Union[int, str], text: str, **kwargs) -> types.Message:
pass
  • forward_message — Пересылает сообщение из одного чата в другой.
async def forward_message(chat_id: Union[int, str], from_chat_id: Union[int, str], message_id: int, **kwargs) -> types.Message:
pass
  • send_photo, send_audio, send_document, send_video, и другие — Отправляют различные медиафайлы в чат.
async def send_photo(chat_id: Union[int, str], photo: Union[types.PhotoSize, str], **kwargs) -> types.Message:
pass

async def send_audio(chat_id: Union[int, str], audio: Union[types.Audio, str], **kwargs) -> types.Message:
pass

async def send_document(chat_id: Union[int, str], document: Union[types.Document, str], **kwargs) -> types.Message:
pass

async def send_video(chat_id: Union[int, str], video: Union[types.Video, str], **kwargs) -> types.Message:
pass
  • send_location — Отправляет геолокацию.
async def send_location(chat_id: Union[int, str], latitude: float, longitude: float, **kwargs) -> types.Message:
pass
  • send_poll — Создает опрос.
async def send_poll(chat_id: Union[int, str], question: str, options: List[str], **kwargs) -> types.Message:
pass
  • send_chat_action — Отправляет индикатор действия в чат (например, «набирает текст»).
async def send_chat_action(chat_id: Union[int, str], action: str, **kwargs) -> bool:
pass
  • get_chat — Получает информацию о чате.
async def get_chat(chat_id: Union[int, str]) -> types.Chat:
pass
  • get_me — Получает информацию о боте.
async def get_me() -> types.User:
pass
  • delete_message — Удаляет сообщение.
async def delete_message(chat_id: Union[int, str], message_id: int) -> bool:
pass

Атрибуты

  • token — Токен вашего бота, который используется для аутентификации при взаимодействии с Telegram API.
bot = Bot(token="YOUR_BOT_TOKEN")

Примеры реализации ботов, использующих методы класса bot

Бот, который отправляет сообщения с информацией о погоде в локации пользователя по команде /weather

Для реализации бота, который отправляет сообщения с информацией о погоде в локации пользователя по команде /weather, нам понадобятся следующие шаги:

  1. Получить API ключ для погодного сервиса (например, OpenWeatherMap).
  2. Настроить обработчик команды `/weather`, который будет запрашивать у пользователя разрешение на доступ к его геолокации.
  3. Использовать полученные координаты для запроса погодной информации с помощью API погодного сервиса.
  4. Отправить пользователю сообщение с информацией о погоде.

Ниже приведен пример кода на языке Python с использованием библиотеки Aiogram и OpenWeatherMap для создания такого бота:

import logging
import aiogram
from aiogram import Bot, Dispatcher, types
from aiogram.contrib.middlewares.logging import LoggingMiddleware
import requests

# Укажите токен своего бота
BOT_TOKEN = "YOUR_BOT_TOKEN"
# Укажите API ключ для OpenWeatherMap
WEATHER_API_KEY = "YOUR_OPENWEATHERMAP_API_KEY"

# Инициализируем бота и диспетчера
bot = Bot(token=BOT_TOKEN)
dp = Dispatcher(bot)
dp.middleware.setup(LoggingMiddleware())

# Обработчик команды /start
@dp.message_handler(commands=["start"])
async def cmd_start(message: types.Message):
await message.reply("Привет! Отправь команду /weather, чтобы узнать погоду в своей локации.")

# Обработчик команды /weather
@dp.message_handler(commands=["weather"])
async def cmd_weather(message: types.Message):
# Запрашиваем у пользователя доступ к его геолокации
keyboard = types.ReplyKeyboardMarkup(resize_keyboard=True, one_time_keyboard=True)
button = types.KeyboardButton(text="Отправить мою геолокацию", request_location=True)
keyboard.add(button)

await message.reply("Отправьте мне вашу геолокацию, чтобы узнать погоду в вашем районе.", reply_markup=keyboard)

# Обработчик получения геолокации от пользователя
@dp.message_handler(content_types=[types.ContentType.LOCATION])
async def get_weather_by_location(message: types.Message):
latitude = message.location.latitude
longitude = message.location.longitude

# Формируем URL для запроса погоды с помощью API OpenWeatherMap
url = f"http://api.openweathermap.org/data/2.5/weather?lat={latitude}&lon={longitude}&appid={WEATHER_API_KEY}&units=metric"
response = requests.get(url)
weather_data = response.json()

if response.status_code == 200:
# Получаем данные о погоде из ответа API
weather_description = weather_data["weather"][0]["description"]
temperature = weather_data["main"]["temp"]
humidity = weather_data["main"]["humidity"]

# Отправляем пользователю сообщение с информацией о погоде
weather_message = f"Сейчас в вашей локации:\nПогода: {weather_description}\nТемпература: {temperature}°C\nВлажность: {humidity}%"
await message.reply(weather_message)
else:
await message.reply("Произошла ошибка при получении данных о погоде. Попробуйте позже.")

# Запускаем бота
if __name__ == "__main__":
logging.basicConfig(level=logging.INFO)
aiogram.executor.start_polling(dp, skip_updates=True)

Важно отметить, что в данном примере мы использовали OpenWeatherMap для получения данных о погоде. Перед запуском бота, убедитесь, что у вас есть токен вашего бота (BOT_TOKEN) и API ключ для OpenWeatherMap (WEATHER_API_KEY). Вы также должны установить библиотеку Aiogram (pip install aiogram) и библиотеку Requests (pip install requests) для выполнения HTTP-запросов к API погодного сервиса.

Мини-конструктор опросов

Пример бота на языке Python с использованием библиотеки Aiogram, который создает опрос по команде /create_poll и отправляет его в групповой чат. В данном примере опрос будет содержать варианты ответов, указанные пользователем. Чтобы опрос был отправлен в нужный чат, необходимо подставить нужный chat id в метод send_poll. В примере, отправка опроса осуществляется в диалог с ботом.

import logging
import aiogram
from aiogram import Bot, Dispatcher, types
from aiogram.contrib.middlewares.logging import LoggingMiddleware
from aiogram.contrib.fsm_storage.memory import MemoryStorage
from aiogram.dispatcher.filters.state import State, StatesGroup

# Укажите токен своего бота
BOT_TOKEN = "6238867400:AAFzm3FlEgMaXxBZhTzqYWAzEcsFCCp-EDk"

# Инициализируем бота, диспетчера и хранилище
bot = Bot(token=BOT_TOKEN)
storage = MemoryStorage()
dp = Dispatcher(bot, storage=storage)
dp.middleware.setup(LoggingMiddleware())

# Создаем класс состояний, для отслеживания этапов создания опроса
class PollForm(StatesGroup):
    awaiting_question = State()
    awaiting_options = State()

# Обработчик команды /start
@dp.message_handler(commands=["start"])
async def cmd_start(message: types.Message):
    await message.reply("Привет! Отправь команду /create_poll, чтобы создать опрос в групповом чате.")

# Обработчик команды /create_poll
@dp.message_handler(commands=["create_poll"])
async def cmd_create_poll(message: types.Message):
    # Отправляем запрос на ввод вопроса для опроса
    await message.reply("Введите вопрос для опроса:")

    # Устанавливаем состояние, в котором ожидаем ввод вопроса от пользователя
    await PollForm.awaiting_question.set()

# Обработчик ввода вопроса для опроса
@dp.message_handler(state=PollForm.awaiting_question)
async def process_question(message: types.Message, state: aiogram.dispatcher.FSMContext):
    question = message.text

    # Сохраняем вопрос в состоянии
    await state.update_data(question=question)

    # Отправляем запрос на ввод вариантов ответов
    await message.reply("Введите варианты ответов через запятую:")

    # Устанавливаем состояние, в котором ожидаем ввод вариантов ответов от пользователя
    await PollForm.awaiting_options.set()

# Обработчик ввода вариантов ответов для опроса
@dp.message_handler(state=PollForm.awaiting_options)
async def process_options(message: types.Message, state: aiogram.dispatcher.FSMContext):
    options = message.text.split(",")

    # Сохраняем варианты ответов в состоянии
    await state.update_data(options=options)

    # Получаем вопрос и варианты ответов из состояния
    data = await state.get_data()
    question = data.get("question")
    options = data.get("options")

    # Создаем объект опроса и отправляем его в групповой чат
    poll = types.Poll(question=question, options=options, type=types.PollType.REGULAR)
    await message.bot.send_poll(message.chat.id,question=question,options=options,type=types.PollType.REGULAR)

    # Очищаем состояние
    await state.finish()

# Запускаем бота
if __name__ == "__main__":
    logging.basicConfig(level=logging.INFO)
    aiogram.executor.start_polling(dp, skip_updates=True)

Перед запуском бота убедитесь, что у вас есть токен вашего бота (BOT_TOKEN) и установлена библиотека Aiogram (pip install aiogram).

В этом примере используется состояние (FSMContext) для отслеживания этапов создания опроса: сначала пользователю предлагается ввести вопрос, а затем варианты ответов. После получения вопроса и вариантов ответов бот создает объект опроса и отправляет его в групповой чат с помощью метода send_poll.

Индивидуальное и групповое обучение «Python Junior»
Если вы хотите научиться программировать на Python, могу помочь. Запишитесь на мой курс «Python Junior» и начните свой путь в мир ИТ уже сегодня!

Контакты
Для получения дополнительной информации и записи на курсы свяжитесь со мной:

Телеграм: https://t.me/Vvkomlev
Email: victor.komlev@mail.ru

Объясняю сложное простыми словами. Даже если вы никогда не работали с ИТ и далеки от программирования, теперь у вас точно все получится! Проверено десятками примеров моих учеников.

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

Практическая направленность. 80%: практики, 20% теории. У меня множество авторских заданий, которые фокусируются на практике. Вы не просто изучаете теорию, а сразу применяете знания в реальных проектах и задачах.

Разнообразие учебных материалов: Теория представлена в виде текстовых уроков с примерами и видео, что делает обучение максимально эффективным и удобным.

Понимаю, что обучение информационным технологиям может быть сложным, особенно для новичков. Моя цель – сделать этот процесс максимально простым и увлекательным. У меня персонализированный подход к каждому ученику. Максимальный фокус внимания на ваши потребности и уровень подготовки.

 

 

 

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

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

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