Добавить MORNING_CHANNEL_ID для утреннего дайджеста

This commit is contained in:
deadzilla 2026-05-31 23:42:03 +05:00
parent 0d605eea5a
commit 1a7f2d75b8
4 changed files with 29 additions and 0 deletions

View File

@ -1,2 +1,3 @@
DISCORD_TOKEN=your_bot_token_here
MORNING_TIME=07:00
MORNING_CHANNEL_ID=channel_id

View File

@ -80,6 +80,7 @@ python bot.py
|------------|----------|-----------|
| `DISCORD_TOKEN` | Токен бота | Discord Developer Portal |
| `MORNING_TIME` | Время запуска утреннего дайджеста | `.env` (формат `ЧЧ:ММ`, по умолчанию `07:00`) |
| `MORNING_CHANNEL_ID` | ID канала для утреннего дайджеста | Правый клик по каналу → Копировать ID |
## Зависимости
```txt

View File

@ -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 |
## Зависимости

View File

@ -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: