From 27eaa677fd1cab483fd2e65930eef0ed04833868 Mon Sep 17 00:00:00 2001 From: deadzilla Date: Sat, 11 Jul 2026 23:45:25 +0500 Subject: [PATCH] =?UTF-8?q?fix:=20fallback=20morning-=D0=B4=D0=B0=D0=B9?= =?UTF-8?q?=D0=B4=D0=B6=D0=B5=D1=81=D1=82=D0=B0=20=D0=BF=D0=B5=D1=80=D0=B5?= =?UTF-8?q?=D0=B1=D0=B8=D1=80=D0=B0=D0=B5=D1=82=20=D0=BA=D0=B0=D0=BD=D0=B0?= =?UTF-8?q?=D0=BB=D1=8B=20=D1=86=D0=B5=D0=BB=D0=B5=D0=B2=D0=BE=D0=B3=D0=BE?= =?UTF-8?q?=20=D1=81=D0=B5=D1=80=D0=B2=D0=B5=D1=80=D0=B0=20=D0=B2=D0=BC?= =?UTF-8?q?=D0=B5=D1=81=D1=82=D0=BE=20=D0=B2=D1=81=D0=B5=D1=85=20=D1=81?= =?UTF-8?q?=D0=B5=D1=80=D0=B2=D0=B5=D1=80=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- utils/morning_runner.py | 29 ++++++++++++++++++++++++----- 1 file changed, 24 insertions(+), 5 deletions(-) diff --git a/utils/morning_runner.py b/utils/morning_runner.py index fa7fac0..255d3e4 100644 --- a/utils/morning_runner.py +++ b/utils/morning_runner.py @@ -223,6 +223,15 @@ class Scheduler: async def _run_morning(self): logger.info("Выполняю morning в %s", self.morning_time) + # Определяем целевой сервер для fallback + target_guild: discord.Guild | None = None + if self._target_channel_id: + guild = self.bot.get_guild( + (await self.bot.fetch_channel(self._target_channel_id)).guild.id + ) + if guild: + target_guild = guild + # Если задан конкретный канал — отправляем туда if self._target_channel_id: # fetch_channel — API-запрос, не зависит от кэша @@ -242,17 +251,27 @@ class Scheduler: "Канал с ID %s не текстовый — fallback", self._target_channel_id ) - # Fallback: первый канал с правами send_messages + # Fallback: первый текстовый канал целевого сервера с правами send_messages + guilds_to_check: list[discord.Guild] = [] + if target_guild: + guilds_to_check.append(target_guild) + guilds_to_check.extend(self.bot.guilds) + sent = False - for channel in self.bot.get_all_channels(): - if isinstance(channel, discord.TextChannel): - if channel.permissions_for(channel.guild.me).send_messages: + for guild in guilds_to_check: + for channel in guild.text_channels: + if channel.permissions_for(guild.me).send_messages: try: await run_morning(self.bot, channel) sent = True return except Exception as e: - logger.error("Ошибка отправки в #%s: %s", channel.name, e) + logger.error( + "Ошибка отправки в #%s (%s): %s", + channel.name, + guild.name, + e, + ) continue if not sent: logger.error("Не удалось найти канал для отправки morning-дайджеста")