__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"))