Добавить MORNING_CHANNEL_ID для утреннего дайджеста
This commit is contained in:
parent
0d605eea5a
commit
1a7f2d75b8
@ -1,2 +1,3 @@
|
|||||||
DISCORD_TOKEN=your_bot_token_here
|
DISCORD_TOKEN=your_bot_token_here
|
||||||
MORNING_TIME=07:00
|
MORNING_TIME=07:00
|
||||||
|
MORNING_CHANNEL_ID=channel_id
|
||||||
|
|||||||
@ -80,6 +80,7 @@ python bot.py
|
|||||||
|------------|----------|-----------|
|
|------------|----------|-----------|
|
||||||
| `DISCORD_TOKEN` | Токен бота | Discord Developer Portal |
|
| `DISCORD_TOKEN` | Токен бота | Discord Developer Portal |
|
||||||
| `MORNING_TIME` | Время запуска утреннего дайджеста | `.env` (формат `ЧЧ:ММ`, по умолчанию `07:00`) |
|
| `MORNING_TIME` | Время запуска утреннего дайджеста | `.env` (формат `ЧЧ:ММ`, по умолчанию `07:00`) |
|
||||||
|
| `MORNING_CHANNEL_ID` | ID канала для утреннего дайджеста | Правый клик по каналу → Копировать ID |
|
||||||
|
|
||||||
## Зависимости
|
## Зависимости
|
||||||
```txt
|
```txt
|
||||||
|
|||||||
@ -159,6 +159,8 @@ python -m pytest tests/ -v
|
|||||||
| Переменная | Описание | Где взять |
|
| Переменная | Описание | Где взять |
|
||||||
|------------|----------|-----------|
|
|------------|----------|-----------|
|
||||||
| `DISCORD_TOKEN` | Токен бота | [Discord Developer Portal](https://discord.com/developers/applications) |
|
| `DISCORD_TOKEN` | Токен бота | [Discord Developer Portal](https://discord.com/developers/applications) |
|
||||||
|
| `MORNING_TIME` | Время запуска утреннего дайджеста | `.env` (формат `ЧЧ:ММ`, по умолчанию `07:00`) |
|
||||||
|
| `MORNING_CHANNEL_ID` | ID канала для утреннего дайджеста | Правый клик по каналу → Копировать ID |
|
||||||
|
|
||||||
## Зависимости
|
## Зависимости
|
||||||
|
|
||||||
|
|||||||
@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
import asyncio
|
import asyncio
|
||||||
import logging
|
import logging
|
||||||
|
import os
|
||||||
from datetime import datetime, timedelta
|
from datetime import datetime, timedelta
|
||||||
|
|
||||||
import discord
|
import discord
|
||||||
@ -113,6 +114,14 @@ class Scheduler:
|
|||||||
self.bot = bot
|
self.bot = bot
|
||||||
self.morning_time = morning_time
|
self.morning_time = morning_time
|
||||||
self._last_run_date = None
|
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.morning_loop = tasks.loop(seconds=1.0)(self._check_and_run_morning)
|
||||||
self._start_scheduler()
|
self._start_scheduler()
|
||||||
|
|
||||||
@ -150,6 +159,22 @@ class Scheduler:
|
|||||||
async def _run_morning(self):
|
async def _run_morning(self):
|
||||||
logger.info(f"Выполняю morning в {self.morning_time}")
|
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():
|
for channel in self.bot.get_all_channels():
|
||||||
if isinstance(channel, discord.TextChannel):
|
if isinstance(channel, discord.TextChannel):
|
||||||
if channel.permissions_for(channel.guild.me).send_messages:
|
if channel.permissions_for(channel.guild.me).send_messages:
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user