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
, нам понадобятся следующие шаги:
- Получить API ключ для погодного сервиса (например, OpenWeatherMap).
- Настроить обработчик команды `/weather`, который будет запрашивать у пользователя разрешение на доступ к его геолокации.
- Использовать полученные координаты для запроса погодной информации с помощью API погодного сервиса.
- Отправить пользователю сообщение с информацией о погоде.
Ниже приведен пример кода на языке 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% теории. У меня множество авторских заданий, которые фокусируются на практике. Вы не просто изучаете теорию, а сразу применяете знания в реальных проектах и задачах.
Разнообразие учебных материалов: Теория представлена в виде текстовых уроков с примерами и видео, что делает обучение максимально эффективным и удобным.
Понимаю, что обучение информационным технологиям может быть сложным, особенно для новичков. Моя цель – сделать этот процесс максимально простым и увлекательным. У меня персонализированный подход к каждому ученику. Максимальный фокус внимания на ваши потребности и уровень подготовки.