Регулярная публикация — ключ к росту канала. Бот публикует посты автоматически по расписанию, даже когда вы не онлайн.
1import asyncio
2from datetime import datetime, time
3from aiogram import Bot
4from database import Database
5
6SCHEDULE = {
7 "monday": [time(9, 0), time(13, 0), time(18, 0)],
8 "tuesday": [time(9, 0), time(13, 0), time(18, 0)],
9 "wednesday": [time(9, 0), time(13, 0), time(18, 0)],
10 "thursday": [time(9, 0), time(13, 0), time(18, 0)],
11 "friday": [time(9, 0), time(13, 0), time(18, 0)],
12 "saturday": [time(11, 0), time(16, 0)],
13 "sunday": [time(11, 0), time(16, 0)],
14}
15
16async def auto_post_scheduler(bot: Bot, db: Database, channel_id: str):
17 """Публикация постов по расписанию"""
18 while True:
19 now = datetime.now()
20 day_name = now.strftime("%A").lower()
21 current_time = now.time()
22
23 # Проверяем, есть ли пост для публикации
24 scheduled_posts = await db.get_scheduled_posts(day_name, current_time)
25
26 for post in scheduled_posts:
27 if post.media_url:
28 await bot.send_photo(
29 chat_id=channel_id,
30 photo=post.media_url,
31 caption=post.text,
32 parse_mode="HTML"
33 )
34 else:
35 await bot.send_message(
36 chat_id=channel_id,
37 text=post.text,
38 parse_mode="HTML"
39 )
40
41 await db.mark_as_published(post.id)
42
43 await asyncio.sleep(60) # Проверяем каждую минуту