main
Сергей Ванюшкин 2024-02-15 16:15:01 +03:00
parent f1d0e3acb9
commit 3f78a33b94
5 changed files with 61 additions and 3 deletions

View File

@ -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())

View File

@ -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')}"
)

View File

@ -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:

View File

@ -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(

View File

@ -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)}')