ДЗ 5
parent
f1d0e3acb9
commit
3f78a33b94
|
@ -9,12 +9,24 @@ from aiogram.filters import CommandStart
|
||||||
from aiogram.types import Message
|
from aiogram.types import Message
|
||||||
from aiogram.utils.markdown import hbold
|
from aiogram.utils.markdown import hbold
|
||||||
|
|
||||||
from tg_bot.handlers.lesson_four import router as router_one
|
from tg_bot.handlers import (
|
||||||
|
lesson_five,
|
||||||
|
lesson_four,
|
||||||
|
lesson_one,
|
||||||
|
lesson_tree,
|
||||||
|
lesson_two,
|
||||||
|
)
|
||||||
|
|
||||||
TOKEN: str = getenv('BOT_TOKEN') or 'Your TG_BOT token'
|
TOKEN: str = getenv('BOT_TOKEN') or 'Your TG_BOT token'
|
||||||
|
|
||||||
dp = Dispatcher()
|
dp = Dispatcher()
|
||||||
dp.include_routers(router_one)
|
dp.include_routers(
|
||||||
|
lesson_five.router,
|
||||||
|
lesson_four.router,
|
||||||
|
lesson_tree.router,
|
||||||
|
lesson_two.router,
|
||||||
|
lesson_one.router,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
@dp.message(CommandStart())
|
@dp.message(CommandStart())
|
||||||
|
|
|
@ -0,0 +1,39 @@
|
||||||
|
from os import getenv
|
||||||
|
|
||||||
|
import requests # type: ignore
|
||||||
|
from aiogram import F, Router
|
||||||
|
from aiogram.types import Message
|
||||||
|
|
||||||
|
router = Router()
|
||||||
|
|
||||||
|
|
||||||
|
@router.message(F.content_type.in_({'location'}))
|
||||||
|
async def loc_handler(message: Message):
|
||||||
|
"""Срабатывает при получении точки геолокации.
|
||||||
|
Определяет ближыйший адрес по координатам и получает погоду в текщем местоположении
|
||||||
|
"""
|
||||||
|
api_key: str = getenv('GEO_API_KEY') or ''
|
||||||
|
weather_key: str = getenv('WEATHER_API_KEY') or ''
|
||||||
|
|
||||||
|
if message.location is not None:
|
||||||
|
msg = message.location.model_dump()
|
||||||
|
else:
|
||||||
|
msg = {}
|
||||||
|
|
||||||
|
lat = msg.get('latitude', 0.0)
|
||||||
|
long = msg.get('longitude', 0.0)
|
||||||
|
|
||||||
|
geo_rspn = requests.get(
|
||||||
|
f'https://geocode.maps.co/reverse?lat={lat}&lon={long}&api_key={api_key}&lang=ru'
|
||||||
|
)
|
||||||
|
|
||||||
|
lat = round(float(lat), 2)
|
||||||
|
long = round(float(long), 2)
|
||||||
|
|
||||||
|
weather_rspn = requests.get(
|
||||||
|
f'https://api.openweathermap.org/data/2.5/weather?lat={lat}&lon={long}&appid={weather_key}&units=metric&lang=ru'
|
||||||
|
)
|
||||||
|
|
||||||
|
await message.answer(
|
||||||
|
text=f"Вы тут;\n{geo_rspn.json().get('display_name')}\nПогода в доме:\n{weather_rspn.json().get('main')}"
|
||||||
|
)
|
|
@ -8,12 +8,13 @@ router = Router()
|
||||||
|
|
||||||
@router.message(Command('rand'))
|
@router.message(Command('rand'))
|
||||||
async def rand_handler(message: types.Message):
|
async def rand_handler(message: types.Message):
|
||||||
|
"""Возвращает пользователю случайное число по комманде /rand"""
|
||||||
await message.answer(f'Держи свое случайное число: {randint(0, 100)}')
|
await message.answer(f'Держи свое случайное число: {randint(0, 100)}')
|
||||||
|
|
||||||
|
|
||||||
@router.message(F.text)
|
@router.message(F.text)
|
||||||
async def echo_handler(message: types.Message) -> None:
|
async def echo_handler(message: types.Message) -> None:
|
||||||
"""Эхо ответ"""
|
"""Эхо ответ текстовое сообщение пользователя"""
|
||||||
try:
|
try:
|
||||||
await message.send_copy(chat_id=message.chat.id)
|
await message.send_copy(chat_id=message.chat.id)
|
||||||
except TypeError:
|
except TypeError:
|
||||||
|
|
|
@ -6,6 +6,7 @@ router = Router()
|
||||||
|
|
||||||
@router.message(F.video)
|
@router.message(F.video)
|
||||||
async def greating(message: Message, bot: Bot):
|
async def greating(message: Message, bot: Bot):
|
||||||
|
"""Обрабатывает получении видеофайла и возвращает его в виде Video_note"""
|
||||||
await bot.download(message.video, destination='./video.mp4')
|
await bot.download(message.video, destination='./video.mp4')
|
||||||
|
|
||||||
await bot.send_video_note(
|
await bot.send_video_note(
|
||||||
|
|
|
@ -10,12 +10,14 @@ router = Router()
|
||||||
greatings = ['привет', 'добрый день', 'добрый вечер', 'доброе утро', 'здравствуйте']
|
greatings = ['привет', 'добрый день', 'добрый вечер', 'доброе утро', 'здравствуйте']
|
||||||
|
|
||||||
|
|
||||||
|
# Класс сохнранения состояний FSM
|
||||||
class OrderReverse(StatesGroup):
|
class OrderReverse(StatesGroup):
|
||||||
string = State()
|
string = State()
|
||||||
|
|
||||||
|
|
||||||
@router.message(Command('reverse'))
|
@router.message(Command('reverse'))
|
||||||
async def reverse_request(message: Message, state: FSMContext):
|
async def reverse_request(message: Message, state: FSMContext):
|
||||||
|
"""По комманде /reverse активизирует контекст запроса"""
|
||||||
await state.set_state(OrderReverse.string)
|
await state.set_state(OrderReverse.string)
|
||||||
await message.answer(
|
await message.answer(
|
||||||
text='Введите строку для разворота',
|
text='Введите строку для разворота',
|
||||||
|
@ -24,6 +26,8 @@ async def reverse_request(message: Message, state: FSMContext):
|
||||||
|
|
||||||
@router.message(OrderReverse.string, F.text)
|
@router.message(OrderReverse.string, F.text)
|
||||||
async def reversing(message: Message, state: FSMContext):
|
async def reversing(message: Message, state: FSMContext):
|
||||||
|
"""В контексте запроса получает введенную строку из диалога
|
||||||
|
и возвращает ее в развернутом виде"""
|
||||||
string = message.text
|
string = message.text
|
||||||
if string is not None:
|
if string is not None:
|
||||||
string = string[::-1]
|
string = string[::-1]
|
||||||
|
@ -35,4 +39,5 @@ async def reversing(message: Message, state: FSMContext):
|
||||||
|
|
||||||
@router.message(F.text.func(lambda m: m.lower() in greatings))
|
@router.message(F.text.func(lambda m: m.lower() in greatings))
|
||||||
async def greating(message: Message):
|
async def greating(message: Message):
|
||||||
|
"""Сробатывает по фильтру при вхождении полученного текста в списке"""
|
||||||
await message.answer(f'Здравствуй, {hbold(message.from_user.first_name)}')
|
await message.answer(f'Здравствуй, {hbold(message.from_user.first_name)}')
|
||||||
|
|
Loading…
Reference in New Issue