import discord from discord.ext import commands import requests class Pogoda(commands.Cog): """Команда !pogoda — прогноз погоды для Магнитогорска""" def __init__(self): self.api_url = "https://wttr.in/Magnitogorsk?format=j1&lang=ru" @commands.command(name="pogoda") async def pogoda(self, ctx): try: response = requests.get(self.api_url, timeout=10) response.raise_for_status() data = response.json() except requests.RequestException as e: await ctx.send(f"Ошибка при получении данных: {e}") return current = data.get("current_condition", [{}])[0] if not current: await ctx.send("Не удалось получить данные о погоде.") return temp = current.get("temp_C", "—") feels_like = current.get("FeelsLikeC", "—") description = self._translate_weather(current.get("weatherDesc", [{}])[0].get("value", "—")) humidity = current.get("humidity", "—") wind_kmh = current.get("windspeedKmph", "—") wind = round(int(wind_kmh) / 3.6, 1) if wind_kmh != "—" else "—" pressure_mb = current.get("pressure", "—") pressure_mm = self._pressure_to_mmhg(pressure_mb) await ctx.send( f"[TEMP] Температура: {temp}°C (ощущается как {feels_like}°C)\n" f"[DESC] Описание: {description}\n" f"[HUMID] Влажность: {humidity}%\n" f"[WIND] Ветер: {wind} м/с\n" f"[PRESS] Давление: {pressure_mm} мм рт. ст." ) def _translate_weather(self, en): mapping = { "Sunny": "Ясно", "Clear": "Ясно", "Partly cloudy": "Переменная облачность", "Cloudy": "Облачно", "Overcast": "Пасмурно", "Mist": "Туман", "Fog": "Туман", "Patchy rain nearby": "Местами дождь", "Light rain": "Небольшой дождь", "Moderate rain": "Умеренный дождь", "Heavy rain": "Сильный дождь", "Patchy snow nearby": "Местами снег", "Light snow": "Небольшой снег", "Heavy snow": "Сильный снег", "Patchy sleet nearby": "Местами слякоть", "Blowing snow": "Метель", "Thundery outbreaks in nearby": "Гроза вблизи", "Moderate or heavy snow in area": "Снег", "Moderate or heavy rain in area": "Дождь", "Moderate or heavy freezing rain in area": "Ледяной дождь", "Moderate or heavy sleet in area": "Слякоть", "Ice pellets": "Ледяные кристаллы", "Haze": "Дымка", "Foggy": "Туманно", } for key, value in mapping.items(): if key.lower() in en.lower(): return value return en def _pressure_to_mmhg(self, mb): if mb == "—": return "—" return round(int(mb) * 0.750062, 1)