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-дайджеста")