From 7cef202c8f83730a7288cc34b96dd8a3fd9e005d Mon Sep 17 00:00:00 2001 From: deadzilla Date: Thu, 9 Jul 2026 12:32:15 +0500 Subject: [PATCH] =?UTF-8?q?refactor(news):=20Embed=20=E2=86=92=20plain=20t?= =?UTF-8?q?ext=20=D0=B4=D0=BB=D1=8F=20=D0=BA=D0=BE=D0=BC=D0=B0=D0=BD=D0=B4?= =?UTF-8?q?=D1=8B=20!nw?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- commands/news.py | 35 +++++++---------------------------- utils/news.py | 7 +++++++ 2 files changed, 14 insertions(+), 28 deletions(-) diff --git a/commands/news.py b/commands/news.py index 4d87582..de64aeb 100644 --- a/commands/news.py +++ b/commands/news.py @@ -1,12 +1,11 @@ import logging -import discord from discord.ext import commands from utils.news import ( fetch_rss, format_articles, RSS_URL_ARTICLES, RSS_URL_POSTS, - truncate_embed_field, + truncate_message, ) logger = logging.getLogger(__name__) @@ -39,46 +38,26 @@ class News(commands.Cog): posts = await fetch_rss(RSS_URL_POSTS) - embed = discord.Embed( - title="Новости AI с Habr", - colour=discord.Color.orange(), - ) - - embed.add_field( - name="Статьи", - value=truncate_embed_field("\n".join(articles_text)), - inline=False, - ) + parts = ["\n".join(articles_text)] if posts is None: logger.warning( "%s: !nw — не удалось получить посты (API вернул None)", ctx.author ) - embed.add_field( - name="Новости", - value="Не удалось получить новости.", - inline=False, - ) + parts.append("\nНе удалось получить новости.") elif posts: posts_text = format_articles( posts, "Лучшие новости за сутки / Искусственный интеллект / Хабr", "https://habr.com/ru/hubs/artificial_intelligence/news/top/daily/", ) - embed.add_field( - name="Новости", - value=truncate_embed_field("\n".join(posts_text)), - inline=False, - ) + parts.append("\n" + "\n".join(posts_text)) else: logger.info("%s: !nw — постов нет в RSS", ctx.author) - embed.add_field( - name="Новости", - value="Новостей пока нет.", - inline=False, - ) + parts.append("\nНовостей пока нет.") - await ctx.send(embed=embed) + message = truncate_message("\n".join(parts)) + await ctx.send(message) logger.info( "%s: !nw выполнена (статей: %d, постов: %d)", ctx.author, diff --git a/utils/news.py b/utils/news.py index 8177d43..31480b1 100644 --- a/utils/news.py +++ b/utils/news.py @@ -114,6 +114,13 @@ def truncate_embed_field(text: str, max_len: int = 1024) -> str: return text[: max_len - 3] + "..." +def truncate_message(text: str, max_len: int = 2000) -> str: + """Обрезать текст для plain text сообщения Discord (лимит: 2000 символов).""" + if len(text) <= max_len: + return text + return text[: max_len - 3] + "..." + + def format_articles(articles: list[dict], title: str, link: str) -> list[str]: """Сформировать список строк для вывода статей/постов.""" lines = [f"**{title}**\n<{link}>"]