Мой первый коммерческий Telegram-бот, разработанный для автоматизации процесса сбора заявок на участие в промоакции, их модерации и массовых рассылок. Вот ссылка на него если он еще работает: @beegeemotk_bot.
Данный проект воплощает в себе следующие ключевые возможности и улучшения, разработанные на основе требований заказчика:
-
Множественная Загрузка Фотографий:
- Пользователи теперь могут отправлять несколько фотографий для своей коллекции игрушек (пункт 1) и несколько фото чеков (пункт 2) в рамках одной заявки.
- Реализован механизм FSM, который ожидает дополнительные фото до тех пор, пока пользователь не нажмет специальную кнопку "✅ Готово, отправить фото".
- Все
file_idзагруженных фотографий хранятся в базе данных SQLite в виде JSON-строк (TEXT), что позволяет гибко масштабировать количество фото. - При отправке заявки админам на email, все прикрепленные фото из списка загружаются и отправляются.
- При экспорте данных в CSV (
/get_users_db), ссылки на все загруженные фотографии также корректно генерируются и отображаются в соответствующей колонке.
-
user_idв Уведомлениях и Экспорте:user_idпользователя теперь явно включается в тему email-уведомлений для администраторов для более легкой идентификации заявки.- При экспорте базы данных в CSV,
user_idприсутствует как отдельный столбец, упрощая анализ данных.
-
Модерация с Указанием Причины Отклонения:
- Администраторы имеют возможность указать конкретную причину при отклонении заявки.
- После нажатия кнопки "❌ Отклонить", бот переходит в новое FSM-состояние (
AdminStates.waiting_for_rejection_reason), ожидая текстовый ввод от админа. - Указанная причина включается в сообщение, отправляемое пользователю, объясняя, почему его заявка была отклонена и предлагая попробовать снова.
-
Упрощенная Функция "Бонусного Приза":
- Механизм выдачи бонусного приза был оптимизирован. Теперь при выборе "🎁 С доп. призом" администратору не требуется собирать дополнительные данные от пользователя.
- Пользователю автоматически отправляется сообщение с поздравлением и прямым контактом менеджера, который будет заниматься организацией выдачи приза. Это снижает избыточность процесса для единичного пользователя.
-
Единая Команда Рассылки с Дифференцированными Сообщениями (Пункт 9):
- Реализована единая административная команда
/send_raffle_reminder, которая инициирует рассылку сразу для двух категорий пользователей:- Подтвержденным участникам (
approved,bonus): Отправляется напоминание о скором розыгрыше с ссылкой на основной Telegram-канал. - Отклоненным участникам (
rejected): Отправляется мотивирующее сообщение с предложением попробовать отправить заявку снова, так как розыгрыш состоится сегодня, также с ссылкой на Telegram-канал.
- Подтвержденным участникам (
- Это позволяет эффективно коммуницировать с разными группами пользователей одной командой.
- Реализована единая административная команда
-
Оповещение о Завершении Розыгрыша:
- Добавлена административная команда
/send_results, предназначенная для оповещения всех участников о завершении розыгрыша. - Команда отправляет сообщение всем подтвержденным участникам (статус
approvedиbonus) с ссылкой на страницу или канал, где будут опубликованы итоги.
- Добавлена административная команда
- Python: Язык программирования
- Aiogram: Асинхронный фреймворк для разработки Telegram ботов.
- Aiosqlite: Асинхронный драйвер для работы с SQLite базой данных.
- python-dotenv: Для управления переменными окружения.
- SMTP: Для отправки email-уведомлений.
Проект конфигурируется через файл .env. Важные переменные включают BOT_TOKEN, ADMIN_IDS, настройки SMTP для email, а также ссылки на Telegram-каналы и контакт менеджера.
# Установка зависимостей (пример)
pip install aiogram aiosqlite python-dotenv
# Создание .env файла с необходимыми переменными
# (см. детали в комментариях к config.py или в предыдущих инструкциях)
# Запуск бота
python main.py