Skip to content

KeyC-code/EducationalBot

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

EducationalBot

Вот готовый README.md для вашего GitHub-репозитория на основе анализа предоставленного кода:


🧠 Telegram-бот для обучения

Этот бот предназначен для предоставления статей по любой определенной теме. Пользователи могут просматривать структурированные темы, искать конкретные подтемы, а также оформлять подписку для получения расширенного доступа. Администратор может управлять контентом, пользователями и рассылками.


📌 Основные возможности

Для пользователей:

  • 🔍 Поиск по темам: ввод названия — бот предложит подходящие варианты.
  • 📚 Навигация по иерархии тем: древовидная структура тем.
  • 💬 Просмотр контента: название, описание (в формате Telegraph-ссылки), медиафайлы и дополнительные ссылки.
  • Подписка: оплата через Telegram Stars (1 месяц — 65 ⭐️, 3 месяца — 110 ⭐️).
  • 📅 Автоматическое обновление подписки: ежедневная проверка срока действия подписки.
  • 🔒 Блокировка: заблокированные пользователи не могут взаимодействовать с ботом.

Для администратора (только один, задаётся в .env):

  • Добавление новых тем и подтем.
  • ✏️ Редактирование существующих тем: название, текст, ссылка, медиа.
  • 🗑️ Удаление тем.
  • 📰 Создание и рассылка новостей всем подписчикам.
  • 🚫 Блокировка/разблокировка пользователей.

🗃️ Хранение данных

Бот использует SQLite (database.db) с двумя основными таблицами:

Таблица users

Хранит информацию о пользователях:

  • user_id — уникальный ID Telegram.
  • step — текущий этап взаимодействия (для FSM).
  • news — номер последней прочитанной новости.
  • sub — дата окончания подписки в формате "YYYY,MM,DD".
  • subed — флаг активной подписки (1 — активна, 0 — нет).
  • blocked — флаг блокировки (1 — заблокирован).
  • free_search — количество бесплатных поисковых запросов.
  • mail — email (если используется).
  • path — текущий путь в иерархии тем (в формате JSON-строки).
  • name — имя пользователя (если задано).

Таблица items

Хранит темы и подтемы:

  • id — уникальный ID темы.
  • name — название темы.
  • text — описание (обычно ссылка на статью в Telegraph).
  • url — дополнительная ссылка.
  • media — ID медиафайла в Telegram (фото/видео).
  • step — статус редактирования ('done' — завершено, иначе — в работе).

Таблица news

Хранит ID сообщений с новостями для рассылки:

  • id — автоинкрементный ID.
  • message_id — ID сообщения в Telegram.

🌐 Структура тем

Иерархия тем задаётся в файле topics.json в формате вложенных словарей, где ключи — это ID тем из таблицы items. Пример:

{
  "1": {
    "3": {}
  },
  "2": {}
}

Это означает:

  • Тема с ID 1 содержит подтему с ID 3.
  • Тема с ID 2 — корневая и не имеет подтем.

При навигации бот использует эту структуру для построения клавиатур.


⏰ Планировщик задач

Бот использует APScheduler для ежедневной проверки подписок в заданное время (config.TIME, по умолчанию — 16:00 по UTC+3).

Функция new_day():

  • Проверяет у каждого пользователя дату окончания подписки.
  • Если подписка истекла — деактивирует её (subed = 0).
  • Если до окончания остался ровно 1 месяц — продлевает автоматически (на 3 дня вперёд от текущей даты).

⚠️ На данный момент автоматическое продление реализовано как техническая заглушка и требует доработки для реального использования.


💳 Оплата

Оплата осуществляется через Telegram Stars (встроенные в Telegram платежи). Доступны два тарифа:

  • 1 месяц — 65 ⭐️
  • 3 месяца — 110 ⭐️

После оплаты бот устанавливает дату окончания подписки и активирует доступ.


🛠️ Установка и запуск

  1. Клонируйте репозиторий:

    git clone https://github.com/KeyC-code/EducationalBot.git
    cd edu-bot
  2. Установите зависимости:

    pip install -r requirements.txt
  3. Создайте файл .env в корне проекта:

    BOT_TOKEN=your_telegram_bot_token
    ADMIN_ID=your_telegram_user_id
  4. Убедитесь, что файл database.db существует (или запустите миграцию, если она предусмотрена — в текущей версии таблицы должны быть созданы вручную).

  5. Запустите бота:

    python bot.py

📁 Структура проекта

.
├── bot.py                 # Точка входа, инициализация бота и планировщика
├── config.py              # Настройки (токен, ID админа, цены и т.д.)
├── db.py                  # Работа с SQLite-базой
├── topics.json            # Иерархия тем
├── .env                   # Переменные окружения (не включён в Git)
└── app/
    └── handlers.py         # Обработчики команд и callback-ов (не показаны, но подключены через router)
    └── keyboards.py       # Генерация клавиатур
    └── utils/
        └── scheduler_utils.py     # Логика ежедневной проверки подписок
        └── message_utils.py       # Мини утилитки для чистки предыдущих сообщений

📝 Примечания

  • Бот написан с использованием aiogram 3.x.
  • Все текстовые материалы хранятся внешне (например, на Telegraph), в базе — только ссылки.
  • Админка доступна только одному пользователю (указанному в ADMIN_ID).
  • Функционал оплаты и автоматического продления требует тестирования в реальных условиях.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages