{ Telegram-бот для управления публикациями в каналах: кросс-постинг и автоматическая отчетность }

О проекте
Этот проект представляет собой многофункционального бота для администрирования Telegram-каналов. Он позволяет пользователям публиковать контент (текст, фото, видео, аудио) в выбранные каналы через интерактивное меню, а также автоматически формирует отчеты о публикациях. Решение идеально для SMM-специалистов, медиа-агентств и комьюнити-менеджеров.
Основные функции
-
Гибкий выбор каналов
-
Поддержка 4 каналов: "Должники", "Суперконцентраты...", "Отходы полимеров", "Вторичные полимеры".
-
2 типа интерфейса: Inline-кнопки и Reply-клавиатура.
-
-
Публикация контента
-
Поддержка форматов: текст, фото (с подписью), видео, аудио.
-
Отправка медиагрупп (например, несколько изображений).
-
-
Автоматическая отчетность
-
Уведомления в отчетный чат со ссылкой на сообщение.
-
Превью контента (первые 100 символов).
-
Технические особенности
-
Finite State Machine (FSM)
Управление диалогом: выбор канала → ввод сообщения → публикация. -
Динамические клавиатуры
-
InlineKeyboardMarkup для выбора каналов.
-
ReplyKeyboardMarkup с кнопками-названиями каналов.
-
-
Работа с медиа
Использование InputMediaPhoto/Video/Audio для формирования медиагрупп. -
Ссылки на сообщения
Генерация прямых ссылок на опубликованные посты вида:
https://t.me/c/канал/id_сообщения
.
Пример отчета
markdown
Сообщение в канал 'Должники' опубликовано: **Содержание**: Уведомление для должников №45... **Ссылка на сообщение**: [Ссылка](https://t.me/c/.../123)
Инструкция для пользователя
-
/start
→ активация бота. -
/choose
→ выбор типа интерфейса (Inline/Reply). -
Выбор канала из списка.
-
Отправка контента → автоматическая публикация.
Архитектура решения
-
Хранение данных
-
ID каналов в словаре
channels
. -
Состояния FSM в оперативной памяти (
MemoryStorage
).
-
-
Безопасность
-
Работа только в личных сообщениях (
message.chat.type == 'private'
).
-
-
Логирование
-
Запись событий уровня INFO и выше.
-
Расширение функционала
-
Добавьте проверку прав
python
-
async def is_user_admin(user_id: int, channel_id: int) -> bool: member = await bot.get_chat_member(channel_id, user_id) return member.is_chat_admin()
-
Поддержка документов
Добавьте обработчик дляcontent_type='document'
. -
Планирование публикаций
Интегрируйтеaiogram.utils.helper import DelayedMessage
.
Технологический стек: Python 3.8+, aiogram 2.x, FSM, Telegram Bot API.
Рекомендации:
-
Используйте Redis вместо MemoryStorage для сохранения состояния при перезапуске.
-
Добавьте кэширование списка каналов из БД.
Проект значительно упрощает кросс-постинг в несколько каналов, экономя до 80% времени на рутинных операциях. Для запуска замените API_TOKEN
и REPORT_CHAT_ID
на реальные значения!