Убраны приватные атрибуты с объекта discord.py Bot: START_TIME вынесен на уровень модуля, _scheduler удалён (не использовался)

This commit is contained in:
deadzilla 2026-07-14 22:46:57 +05:00
parent 5a65be97d9
commit bb9e50fb05
3 changed files with 15 additions and 11 deletions

6
bot.py
View File

@ -23,6 +23,9 @@ if TYPE_CHECKING:
logger = logging.getLogger(__name__)
# Время запуска бота (на уровне модуля, чтобы не хранить на объекте discord.py Bot)
START_TIME: float = time.time()
class TextHelpCommand(commands.HelpCommand):
"""Выводит справку по командам простым текстом вместо embed."""
@ -104,7 +107,7 @@ class BotRunner:
intents=intents,
help_command=TextHelpCommand(),
)
self.bot._start_time = time.time()
self.stop_event = threading.Event()
self.bot_ready = threading.Event()
self.scheduler: SchedulerType | None = None
@ -142,7 +145,6 @@ class BotRunner:
morning_time = os.getenv("MORNING_TIME", "07:00")
self.scheduler = Scheduler(self.bot, morning_time)
self.bot._scheduler = self.scheduler
await self.scheduler.start()
logger.info(
"Планировщик запущен (время: %s, сервер: %s)", morning_time, guild.name

View File

@ -13,9 +13,11 @@ class Status(commands.Cog):
@commands.command(name="status")
async def status(self, ctx: commands.Context) -> None:
"""Статус бота: пинг к Discord gateway и время работы"""
# Lazy import чтобы избежать циклического импорта (bot -> commands -> bot)
from bot import START_TIME # noqa: F401
latency_ms = round(ctx.bot.latency * 1000, 1)
start_time = getattr(ctx.bot, "_start_time", time.time())
uptime_seconds = time.time() - start_time
uptime_seconds = time.time() - START_TIME
uptime_str = self._format_uptime(uptime_seconds)
embed = discord.Embed(

View File

@ -2,7 +2,7 @@
import time
from unittest.mock import AsyncMock, MagicMock
from unittest.mock import AsyncMock, MagicMock, patch
from commands.status import Status
@ -14,9 +14,9 @@ class TestStatusCommand:
"""Команда status отправляет embed-сообщение."""
mock_ctx = MagicMock()
mock_ctx.bot.latency = 0.042
mock_ctx.bot._start_time = time.time()
mock_ctx.send = AsyncMock(return_value=None)
with patch("bot.START_TIME", time.time()):
cog = Status()
await cog.status(cog, mock_ctx)
@ -30,9 +30,9 @@ class TestStatusCommand:
"""Uptime форматируется корректно."""
mock_ctx = MagicMock()
mock_ctx.bot.latency = 0.050
mock_ctx.bot._start_time = time.time() - 90061 # 1д 1ч 1м 1с
mock_ctx.send = AsyncMock(return_value=None)
with patch("bot.START_TIME", time.time() - 90061): # 1д 1ч 1м 1с
cog = Status()
await cog.status(cog, mock_ctx)