__version__ = (1, 0, 6) # # @@@@@@ @@@@@@ @@@@@@@ @@@@@@@ @@@@@@ @@@@@@@@@@ @@@@@@ @@@@@@@ @@@ @@@ @@@ @@@@@@@@ @@@@@@ # @@@@@@@@ @@@@@@@ @@@@@@@ @@@@@@@@ @@@@@@@@ @@@@@@@@@@@ @@@@@@@@ @@@@@@@@ @@@ @@@ @@@ @@@@@@@@ @@@@@@@ # @@! @@@ !@@ @@! @@! @@@ @@! @@@ @@! @@! @@! @@! @@@ @@! @@@ @@! @@@ @@! @@! !@@ # !@! @!@ !@! !@! !@! @!@ !@! @!@ !@! !@! !@! !@! @!@ !@! @!@ !@! @!@ !@! !@! !@! # @!@!@!@! !!@@!! @!! @!@!!@! @!@ !@! @!! !!@ @!@ @!@ !@! @!@ !@! @!@ !@! @!! @!!!:! !!@@!! # !!!@!!!! !!@!!! !!! !!@!@! !@! !!! !@! ! !@! !@! !!! !@! !!! !@! !!! !!! !!!!!: !!@!!! # !!: !!! !:! !!: !!: :!! !!: !!! !!: !!: !!: !!! !!: !!! !!: !!! !!: !!: !:! # :!: !:! !:! :!: :!: !:! :!: !:! :!: :!: :!: !:! :!: !:! :!: !:! :!: :!: !:! # :: ::: :::: :: :: :: ::: ::::: :: ::: :: ::::: :: :::: :: ::::: :: :: :::: :: :::: :::: :: # : : : :: : : : : : : : : : : : : : : :: : : : : : : :: : : : :: :: :: : : # # © Copyright 2024 # # https://t.me/Den4ikSuperOstryyPer4ik # and # https://t.me/ToXicUse # # 🔒 Licensed under the GNU AGPLv3 # https://www.gnu.org/licenses/agpl-3.0.html # # meta developer: @AstroModules # meta banner: https://raw.githubusercontent.com/Den4ikSuperOstryyPer4ik/Astro-modules/main/Banners/AstroWeather.jpg import contextlib import random import requests from .. import loader, utils class AstroWeatherMod(loader.Module): """Модуль для получения информации о погоде в Вашем городе, в красивом формате""" strings = { "name": "AstroWeather", "error": "⚠️ Ошибка", "api_error": ( "🚫 Вы не указали API ключ!\n" "👀 Пожалуйста, укажите его в конфиге ниже" ), "search": "{} Поиск информации о погоде в городе {}.." } async def text(self, temperature: int, veter: int, sky, hum, city, moji): """Generate text""" sky = { "Clear": "Чистое", "Mist": "Туман", "Clouds": "Облачно", "Rain": "Дождь", "Snow": "Снег" }[sky] t_emoji = ( "🔥" if temperature > 0 else "❄️" ) v_emoji = ( "📉" if veter >= 15 else "🔼" ) r_emoji = random.choice([ "🌙", "🐾", "🍀", "🌈", "💤", "🌺" ]) sity_emoji = random.choice([ "", "🌐" ]) weather = ( f"{r_emoji} Погода в {city.title()}:\n\n" f"{sity_emoji} Город: {city.title()}\n" f"{t_emoji} Температура: {temperature}°C\n" f"💦 Влажность: {hum}%\n" f"{v_emoji} Скорость ветра: {veter}м/с\n" f"{moji} Небо: {sky}" ) return weather def __init__(self): self.config = loader.ModuleConfig( loader.ConfigValue( "api_key", None, lambda: "Api key. Получить можно по туториалу https://t.me/help_code/12", validator=loader.validators.Hidden() ) ) async def get_weather(self, city_id): with contextlib.suppress(Exception): api_key = self.config["api_key"] result = requests.get("http://api.openweathermap.org/data/2.5/weather", params={"q": city_id, "units": "metric", "APPID": api_key}) result_json = result.json() if result_json["cod"] != 200: return weather = {} weather["temp"] = round(result_json["main"]["temp"]) weather["hum"] = result_json["main"]["humidity"] weather["wind_speed"] = result_json["wind"]["speed"] weather["sky"] = result_json["weather"][0]["main"] if weather["sky"] == "Clouds": weather["sky_emoji"] = "☁️" if weather["sky"] == "Rain": weather["sky_emoji"] = "🌧️" if weather["sky"] == "Clear": weather["sky_emoji"] = "☀️" if weather["sky"] == "Mist": weather["sky_emoji"] = "🌫️" if weather["sky"] == "Snow": weather["sky_emoji"] = "🌨️" return weather @loader.command() async def aw(self, message): """<город> - узнать погоду в указанном городе""" search_moji = random.choice([ "💬", "🔎" ]) city = utils.get_args_raw(message) city = city.title() getting = await utils.answer(message, self.strings("search").format(search_moji, city)) if self.config["api_key"] is None: await utils.answer(getting, self.strings("api_error")) msg = await self.client.send_message(message.chat.id, "Открываю конфиг...") await self.allmodules.commands["config"]( await utils.answer(msg, f"{self.get_prefix()}config AstroWeather") ) return try: dict_wea = await self.get_weather(city) temp = dict_wea["temp"] hum = dict_wea["hum"] speed = dict_wea["wind_speed"] sky = dict_wea["sky"] moji = dict_wea["sky_emoji"] text = await self.text(temp, speed, sky, hum, city, moji) await utils.answer(getting, text) except Exception: await utils.answer(getting, self.strings("error"))