diff --git a/tg_bot/app.py b/tg_bot/app.py index 11d771c..f50862c 100644 --- a/tg_bot/app.py +++ b/tg_bot/app.py @@ -9,12 +9,24 @@ from aiogram.filters import CommandStart from aiogram.types import Message 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' 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()) diff --git a/tg_bot/handlers/lesson_five.py b/tg_bot/handlers/lesson_five.py new file mode 100644 index 0000000..9e3564f --- /dev/null +++ b/tg_bot/handlers/lesson_five.py @@ -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')}" + ) diff --git a/tg_bot/handlers/lesson_one.py b/tg_bot/handlers/lesson_one.py index debaf64..1fc129a 100644 --- a/tg_bot/handlers/lesson_one.py +++ b/tg_bot/handlers/lesson_one.py @@ -8,12 +8,13 @@ router = Router() @router.message(Command('rand')) async def rand_handler(message: types.Message): + """Возвращает пользователю случайное число по комманде /rand""" await message.answer(f'Держи свое случайное число: {randint(0, 100)}') @router.message(F.text) async def echo_handler(message: types.Message) -> None: - """Эхо ответ""" + """Эхо ответ текстовое сообщение пользователя""" try: await message.send_copy(chat_id=message.chat.id) except TypeError: diff --git a/tg_bot/handlers/lesson_tree.py b/tg_bot/handlers/lesson_tree.py index 5f1d4a8..26528b6 100644 --- a/tg_bot/handlers/lesson_tree.py +++ b/tg_bot/handlers/lesson_tree.py @@ -6,6 +6,7 @@ router = Router() @router.message(F.video) async def greating(message: Message, bot: Bot): + """Обрабатывает получении видеофайла и возвращает его в виде Video_note""" await bot.download(message.video, destination='./video.mp4') await bot.send_video_note( diff --git a/tg_bot/handlers/lesson_two.py b/tg_bot/handlers/lesson_two.py index a99fb39..ffee260 100644 --- a/tg_bot/handlers/lesson_two.py +++ b/tg_bot/handlers/lesson_two.py @@ -10,12 +10,14 @@ router = Router() greatings = ['привет', 'добрый день', 'добрый вечер', 'доброе утро', 'здравствуйте'] +# Класс сохнранения состояний FSM class OrderReverse(StatesGroup): string = State() @router.message(Command('reverse')) async def reverse_request(message: Message, state: FSMContext): + """По комманде /reverse активизирует контекст запроса""" await state.set_state(OrderReverse.string) await message.answer( text='Введите строку для разворота', @@ -24,6 +26,8 @@ async def reverse_request(message: Message, state: FSMContext): @router.message(OrderReverse.string, F.text) async def reversing(message: Message, state: FSMContext): + """В контексте запроса получает введенную строку из диалога + и возвращает ее в развернутом виде""" string = message.text if string is not None: 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)) async def greating(message: Message): + """Сробатывает по фильтру при вхождении полученного текста в списке""" await message.answer(f'Здравствуй, {hbold(message.from_user.first_name)}')