fix: fallback morning-дайджеста перебирает каналы целевого сервера вместо всех серверов
This commit is contained in:
parent
e2289e5092
commit
27eaa677fd
@ -223,6 +223,15 @@ class Scheduler:
|
|||||||
async def _run_morning(self):
|
async def _run_morning(self):
|
||||||
logger.info("Выполняю morning в %s", self.morning_time)
|
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:
|
if self._target_channel_id:
|
||||||
# fetch_channel — API-запрос, не зависит от кэша
|
# fetch_channel — API-запрос, не зависит от кэша
|
||||||
@ -242,17 +251,27 @@ class Scheduler:
|
|||||||
"Канал с ID %s не текстовый — fallback", self._target_channel_id
|
"Канал с 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
|
sent = False
|
||||||
for channel in self.bot.get_all_channels():
|
for guild in guilds_to_check:
|
||||||
if isinstance(channel, discord.TextChannel):
|
for channel in guild.text_channels:
|
||||||
if channel.permissions_for(channel.guild.me).send_messages:
|
if channel.permissions_for(guild.me).send_messages:
|
||||||
try:
|
try:
|
||||||
await run_morning(self.bot, channel)
|
await run_morning(self.bot, channel)
|
||||||
sent = True
|
sent = True
|
||||||
return
|
return
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.error("Ошибка отправки в #%s: %s", channel.name, e)
|
logger.error(
|
||||||
|
"Ошибка отправки в #%s (%s): %s",
|
||||||
|
channel.name,
|
||||||
|
guild.name,
|
||||||
|
e,
|
||||||
|
)
|
||||||
continue
|
continue
|
||||||
if not sent:
|
if not sent:
|
||||||
logger.error("Не удалось найти канал для отправки morning-дайджеста")
|
logger.error("Не удалось найти канал для отправки morning-дайджеста")
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user