From 1a7f2d75b8a6fc70fac9c76c804f433e2ee28a5c Mon Sep 17 00:00:00 2001 From: deadzilla Date: Sun, 31 May 2026 23:42:03 +0500 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D1=82?= =?UTF-8?q?=D1=8C=20MORNING=5FCHANNEL=5FID=20=D0=B4=D0=BB=D1=8F=20=D1=83?= =?UTF-8?q?=D1=82=D1=80=D0=B5=D0=BD=D0=BD=D0=B5=D0=B3=D0=BE=20=D0=B4=D0=B0?= =?UTF-8?q?=D0=B9=D0=B4=D0=B6=D0=B5=D1=81=D1=82=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .env.example | 1 + AGENTS.md | 1 + README.md | 2 ++ utils/morning_runner.py | 25 +++++++++++++++++++++++++ 4 files changed, 29 insertions(+) diff --git a/.env.example b/.env.example index ddcce96..d6927de 100644 --- a/.env.example +++ b/.env.example @@ -1,2 +1,3 @@ DISCORD_TOKEN=your_bot_token_here MORNING_TIME=07:00 +MORNING_CHANNEL_ID=channel_id diff --git a/AGENTS.md b/AGENTS.md index 3174f01..24f7261 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -80,6 +80,7 @@ python bot.py |------------|----------|-----------| | `DISCORD_TOKEN` | Токен бота | Discord Developer Portal | | `MORNING_TIME` | Время запуска утреннего дайджеста | `.env` (формат `ЧЧ:ММ`, по умолчанию `07:00`) | +| `MORNING_CHANNEL_ID` | ID канала для утреннего дайджеста | Правый клик по каналу → Копировать ID | ## Зависимости ```txt diff --git a/README.md b/README.md index 7af4940..4d4741c 100644 --- a/README.md +++ b/README.md @@ -159,6 +159,8 @@ python -m pytest tests/ -v | Переменная | Описание | Где взять | |------------|----------|-----------| | `DISCORD_TOKEN` | Токен бота | [Discord Developer Portal](https://discord.com/developers/applications) | +| `MORNING_TIME` | Время запуска утреннего дайджеста | `.env` (формат `ЧЧ:ММ`, по умолчанию `07:00`) | +| `MORNING_CHANNEL_ID` | ID канала для утреннего дайджеста | Правый клик по каналу → Копировать ID | ## Зависимости diff --git a/utils/morning_runner.py b/utils/morning_runner.py index 1859462..bc6af1c 100644 --- a/utils/morning_runner.py +++ b/utils/morning_runner.py @@ -2,6 +2,7 @@ import asyncio import logging +import os from datetime import datetime, timedelta import discord @@ -113,6 +114,14 @@ class Scheduler: self.bot = bot self.morning_time = morning_time self._last_run_date = None + # Канал для утреннего дайджеста (по умолчанию None — первый попавшийся) + self._target_channel_id: int | None = None + channel_id_str = os.getenv("MORNING_CHANNEL_ID") + if channel_id_str: + try: + self._target_channel_id = int(channel_id_str) + except ValueError: + logger.warning("Неверное значение MORNING_CHANNEL_ID: %s", channel_id_str) self.morning_loop = tasks.loop(seconds=1.0)(self._check_and_run_morning) self._start_scheduler() @@ -150,6 +159,22 @@ class Scheduler: async def _run_morning(self): logger.info(f"Выполняю morning в {self.morning_time}") + # Если задан конкретный канал — отправляем туда + if self._target_channel_id: + channel = self.bot.get_channel(self._target_channel_id) + if isinstance(channel, discord.TextChannel): + if channel.permissions_for(channel.guild.me).send_messages: + try: + await channel.send("🌅 Утренний дайджест!") + await run_morning(self.bot, channel) + return + except Exception as e: + logger.error("Ошибка отправки в канал %s: %s", self._target_channel_id, e) + return + else: + logger.warning("Канал с ID %s не найден или не текстовый — fallback", self._target_channel_id) + + # Fallback: первый канал с правами send_messages for channel in self.bot.get_all_channels(): if isinstance(channel, discord.TextChannel): if channel.permissions_for(channel.guild.me).send_messages: