Advertisement
L4zzur

Algoritmika Aiogram Test

Nov 11th, 2022 (edited)
840
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 5.44 KB | Source Code | 0 0
  1. import asyncio
  2. import logging
  3. from aiogram import Bot, Dispatcher, types
  4. import requests
  5. import pyowm
  6. from pyowm.utils.config import get_default_config
  7. from aiogram.dispatcher.filters import Command
  8.  
  9. # функция перевода градусов угла в понятные человеку направления сторон света
  10. def deg_to_text(deg):
  11.     return ["С", "С-З", "З", "Ю-З", "Ю", "Ю-В", "В", "С-В"][round(deg / 45) % 16]
  12.  
  13.  
  14. # Включаем логирование, чтобы не пропустить важные сообщения
  15. logging.basicConfig(level=logging.INFO)
  16. # Объект бота
  17. bot = Bot(token="ВСТАВИТЬ СВОЙ ТОКЕН ИЗ BOT FATHER") # !!!
  18. # Диспетчер управляет хэндлерами.
  19. # Диспетчер регистрирует функции-обработчики, дополнительно ограничивая перечень вызывающих их событий через фильтры.
  20. # После получения очередного апдейта (события от Telegram), диспетчер выберет нужную функцию обработки, подходящую по всем фильтрам.
  21. dp = Dispatcher(bot)
  22.  
  23. # Хэндлер на команду /start
  24. @dp.message_handler(commands=["start"])
  25. async def cmd_start(message: types.Message):
  26.     await message.answer("Привет, пользователь!")
  27.  
  28.  
  29. # Хэндлер на команду /help
  30. @dp.message_handler(commands=["help"])
  31. async def help(message: types.Message):
  32.     await message.reply("Напиши мне что-нибудь, и я отпрпавлю этот текст тебе в ответ!")
  33.  
  34.  
  35. # Хэндлер на команду /weather
  36. # пример использования - /weather Калининград
  37. @dp.message_handler(commands=["weather"])
  38. async def weather(message: types.Message, command: Command):
  39.     if command.args:  # проверяем, есть ли аргументы
  40.         place = command.args  # получаем наш город
  41.         config_dict = get_default_config()  # задаем конфиг
  42.         config_dict["language"] = "ru"  # указываем русский язык
  43.         owm = pyowm.OWM(
  44.             "84061a2a5ff54b490d63bd38d557b06d", config_dict
  45.         )  # создаем объект OWM
  46.         mgr = owm.weather_manager()  # создаем менеджер погоды
  47.         observation = mgr.weather_at_place(place)  # находим наш город
  48.         w = observation.weather  # и получаем из него погоду
  49.         temp = w.temperature("celsius")["temp"]  # температура
  50.         wind = w.wind()
  51.         wind_dir = deg_to_text(wind["deg"])  # направление ветра
  52.         wind_speed = wind["speed"]  # скорость ветра
  53.         await message.reply(
  54.             "В городе "
  55.             + place
  56.             + " сейчас "
  57.             + w.detailed_status
  58.             + "\n"
  59.             + "Температура: "
  60.             + str(temp)
  61.             + "°C"
  62.             + "\n"
  63.             + "Ветер: "
  64.             + str(wind_speed)
  65.             + " м/с "
  66.             + wind_dir
  67.         )  # отправляем сообщение ответом
  68.     else:  # если аргументов нет
  69.         await message.reply("После команды необходимо ввести город!")
  70.  
  71.  
  72. # Хэндлер на команду /fox
  73. @dp.message_handler(commands=["fox"])
  74. async def fox(message: types.Message):
  75.     image = requests.get("https://randomfox.ca/floof/").json()[
  76.         "image"
  77.     ]  # получаем картинку с сайта
  78.     await message.answer_photo(
  79.         photo=image, caption="Держи фотографию лисы!"
  80.     )  # отправляем картинку с подписью пользователю
  81.  
  82.  
  83. # Хэндлер на команду /cat
  84. @dp.message_handler(commands=["cat"])
  85. async def cat(message: types.Message):
  86.     image = requests.get("https://api.thecatapi.com/v1/images/search").json()[0][
  87.         "url"
  88.     ]  # получаем картинку с сайта
  89.     await message.answer_photo(
  90.         photo=image, caption="Держи фотографию кота!"
  91.     )  # отправляем картинку с подписью пользователю
  92.  
  93.  
  94. # Хэндлер на команду /gif
  95. @dp.message_handler(commands=["gif"])
  96. async def gif(message: types.Message):
  97.     animation = requests.get(
  98.         "https://api.giphy.com/v1/gifs/random?api_key=DVrb5yloSRThdNjJxahPjoqQiIcQQTzX&tag=dog"
  99.     ).json()["data"]["images"]["original_mp4"][
  100.         "mp4"
  101.     ]  # получаем GIF с сайта
  102.     await message.answer_animation(
  103.         animation=animation, caption="Держи гифку собаки!"
  104.     )  # отправляем GIF с подписью пользователю
  105.  
  106.  
  107. # Эхо хендлер (возвращает любое сообщение назад пользователю)
  108. @dp.message_handler()
  109. async def echo_message(message: types.Message):
  110.     await message.answer(message.text)  # возвращаем текст сообщения пользователя
  111.  
  112.  
  113. # Запуск процесса поллинга (механизм получения) новых апдейтов
  114. async def main():
  115.     await dp.start_polling(bot)
  116.  
  117.  
  118. if __name__ == "__main__":
  119.     asyncio.run(main())
  120.  
Tags: python aiogram
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement