From f4d267d254241a3e4c32e9e3fb63696fb8fe1548 Mon Sep 17 00:00:00 2001 From: deadzilla Date: Fri, 12 Jun 2026 17:01:53 +0500 Subject: [PATCH] =?UTF-8?q?fix:=20!stats=20=D0=B8=D1=81=D0=BA=D0=BB=D1=8E?= =?UTF-8?q?=D1=87=D0=B0=D0=B5=D1=82=20CategoryChannel=20=D0=B8=D0=B7=20?= =?UTF-8?q?=D0=BF=D0=BE=D0=B4=D1=81=D1=87=D1=91=D1=82=D0=B0=20=D0=BA=D0=B0?= =?UTF-8?q?=D0=BD=D0=B0=D0=BB=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit guild.channels содержит все типы включая CategoryChannel. Категории — это контейнеры для группировки, а не каналы. Изменено: - commands/stats.py: filter по isinstance(CategoryChannel) - console_commands/stats.py: аналогичный фильтр - test_commands_stats.py: тест test_stats_excludes_categories - Итого: 234 теста --- commands/stats.py | 5 ++++- console_commands/stats.py | 8 +++++++- tests/test_commands_stats.py | 25 +++++++++++++++++++++++++ 3 files changed, 36 insertions(+), 2 deletions(-) diff --git a/commands/stats.py b/commands/stats.py index 5a0a3d5..1de03ce 100644 --- a/commands/stats.py +++ b/commands/stats.py @@ -10,7 +10,10 @@ class Stats(commands.Cog): """Количество серверов, каналов и пользователей""" guilds = ctx.bot.guilds total_guilds = len(guilds) - total_channels = sum(guild.channels.__len__() for guild in guilds) + total_channels = sum( + len([ch for ch in guild.channels if not isinstance(ch, discord.CategoryChannel)]) + for guild in guilds + ) total_members = sum(guild.member_count or 0 for guild in guilds) latency_ms = round(ctx.bot.latency * 1000, 1) diff --git a/console_commands/stats.py b/console_commands/stats.py index 10a47b8..724b4f0 100644 --- a/console_commands/stats.py +++ b/console_commands/stats.py @@ -1,3 +1,6 @@ +import discord + + def stats(stop_event, bot): """Показать статистику серверов: серверы, каналы, пользователи""" if stop_event.is_set(): @@ -5,7 +8,10 @@ def stats(stop_event, bot): guilds = bot.guilds total_guilds = len(guilds) - total_channels = sum(len(guild.channels) for guild in guilds) + total_channels = sum( + len([ch for ch in guild.channels if not isinstance(ch, discord.CategoryChannel)]) + for guild in guilds + ) total_members = sum(guild.member_count or 0 for guild in guilds) latency_ms = round(bot.latency * 1000, 1) diff --git a/tests/test_commands_stats.py b/tests/test_commands_stats.py index 595941e..ca5dd92 100644 --- a/tests/test_commands_stats.py +++ b/tests/test_commands_stats.py @@ -91,3 +91,28 @@ class TestStatsCommand: embed = call_args[1]["embed"] if call_args[1] else call_args[0][0] fields = {f.name: f.value for f in embed.fields} assert fields["Пользователей"] == "0" + + async def test_stats_excludes_categories(self): + """Категории не входят в счётчик каналов.""" + import discord + from commands.stats import Stats + + guild = MagicMock() + text_ch = MagicMock() + voice_ch = MagicMock() + category_ch = MagicMock(spec=discord.CategoryChannel) + guild.channels = [text_ch, voice_ch, category_ch] + guild.member_count = 50 + + mock_ctx = MagicMock() + mock_ctx.bot.latency = 0.040 + mock_ctx.bot.guilds = [guild] + mock_ctx.send = AsyncMock(return_value=None) + + cog = Stats() + await cog.stats(cog, mock_ctx) + + call_args = mock_ctx.send.call_args + embed = call_args[1]["embed"] if call_args[1] else call_args[0][0] + fields = {f.name: f.value for f in embed.fields} + assert fields["Каналов"] == "2" # text + voice, категория исключена