import asyncio import discord from discord.ext import commands from utils.pogoda import fetch_weather, pressure_to_mmhg, translate_weather from utils.news import fetch_rss, format_articles, RSS_URL_ARTICLES class Morning(commands.Cog): """Команда !morning — погода и новости утром""" def __init__(self): self.api_url = "https://wttr.in/Magnitogorsk?format=j1&lang=ru" @commands.command(name="morning") async def morning(self, ctx): """Погода и лучшие статьи за сутки""" # Параллельный запрос погоды и новостей weather_data, articles = await asyncio.gather( fetch_weather(self.api_url), fetch_rss(RSS_URL_ARTICLES), ) parts = ["Доброе утро!\n"] # --- Погода --- if weather_data is not None: current = weather_data.get("current_condition", [{}])[0] if current: temp = current.get("temp_C", "\u2014") feels_like = current.get("FeelsLikeC", "\u2014") description = translate_weather(current.get("weatherDesc", [{}])[0].get("value", "\u2014")) humidity = current.get("humidity", "\u2014") wind_kmh = current.get("windspeedKmph", "\u2014") try: wind = round(int(wind_kmh) / 3.6, 1) if wind_kmh != "\u2014" else "\u2014" except (ValueError, TypeError): wind = "\u2014" pressure_mb = current.get("pressure", "\u2014") pressure_mm = pressure_to_mmhg(pressure_mb) parts.append( f"**Погода в Магнитогорске:**\n" f"Температура: {temp}\u00b0C (ощущается как {feels_like}\u00b0C)\n" f"Описание: {description}\n" f"Влажность: {humidity}%\n" f"Ветер: {wind} м/с\n" f"Давление: {pressure_mm} мм рт. ст.\n" ) else: parts.append("Не удалось получить данные о погоде.\n") else: parts.append("Не удалось получить данные о погоде.\n") # --- Новости --- if articles is not None: if articles: lines = format_articles(articles, "Лучшие статьи за сутки / Искусственный интеллект / Хабr", "https://habr.com/ru/hubs/artificial_intelligence/articles/top/daily/") parts.append("\n" + "\n".join(lines).rstrip()) else: parts.append("\nНовостей пока нет.") else: parts.append("\nНе удалось получить новости.") await ctx.send("\n".join(parts))