Телеграм-бот, разработанный на Node.js, который помогает студентам организовывать учебный процесс, следить за расписанием и узнавать о мероприятиях университета. Проект включает в себя полноценную панель администратора для управления контентом.
- Регистрация и выбор группы: Выбор учебной группы из списка или подача заявки на создание новой.
- 📅 Расписание: Просмотр расписания занятий на неделю (с указанием аудиторий и предметов).
- 📝 Задачи (To-Do): Создание личных задач с дедлайнами.
- Уведомления: Бот автоматически напоминает о дедлайне за 1 день.
- Формат: Удобный ввод даты (ДД.ММ.ГГГГ).
- Валидация: Нельзя создать задачу с датой в прошлом.
- 🎉 Мероприятия: Просмотр списка ближайших университетских событий.
- Модерация групп: Одобрение или отклонение заявок на создание новых учебных групп.
- Управление расписанием: Удобное заполнение расписания (просто отправьте список предметов, бот сам их пронумерует).
- Управление мероприятиями: Добавление и удаление анонсов событий.
- 📢 Рассылка: Отправка уведомлений всем пользователям бота.
- Оповещения: Автоматическое уведомление студентов при изменении расписания их группы.
- Платформа: Node.js
- База данных: MySQL (используется драйвер
mysql2с защитой от SQL-инъекций). - Telegram API: Библиотека
node-telegram-bot-api. - Планировщик: Библиотека
node-schedule(Cron-задачи для уведомлений). - Безопасность: Переменные окружения (
dotenv).
git https://github.com/termertop1gg/octagon-task.git
cd octagon-tasknpm install- Откройте phpMyAdmin или консоль MySQL.
- Создайте базу данных
student_assistant. - Выполните следующий SQL-скрипт для создания таблиц:
CREATE DATABASE IF NOT EXISTS student_assistant;
USE student_assistant;
-- Таблица групп
CREATE TABLE IF NOT EXISTS `groups` (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50) NOT NULL UNIQUE,
is_approved BOOLEAN DEFAULT FALSE
);
-- Таблица пользователей
CREATE TABLE IF NOT EXISTS users (
telegram_id BIGINT PRIMARY KEY,
username VARCHAR(255),
role ENUM('student', 'admin') DEFAULT 'student',
group_id INT,
FOREIGN KEY (group_id) REFERENCES `groups`(id) ON DELETE SET NULL
);
-- Таблица задач
CREATE TABLE IF NOT EXISTS tasks (
id INT AUTO_INCREMENT PRIMARY KEY,
user_id BIGINT,
title VARCHAR(255) NOT NULL,
deadline DATETIME,
is_notified BOOLEAN DEFAULT FALSE,
FOREIGN KEY (user_id) REFERENCES users(telegram_id)
);
-- Таблица мероприятий
CREATE TABLE IF NOT EXISTS events (
id INT AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(255) NOT NULL,
description TEXT,
event_date DATETIME,
location VARCHAR(255)
);
-- Таблица расписания
CREATE TABLE IF NOT EXISTS schedule (
id INT AUTO_INCREMENT PRIMARY KEY,
group_id INT NOT NULL,
day_of_week ENUM('Понедельник', 'Вторник', 'Среда', 'Четверг', 'Пятница', 'Суббота') NOT NULL,
lesson_number INT NOT NULL,
subject VARCHAR(255) NOT NULL,
location VARCHAR(100),
FOREIGN KEY (group_id) REFERENCES `groups`(id) ON DELETE CASCADE
);Создайте файл .env в корне проекта и заполните его своими данными:
BOT_TOKEN=ВАШ_ТОКЕН_ОТ_BOTFATHER
DB_HOST=localhost
DB_USER=root
DB_PASSWORD=
DB_NAME=student_assistantnode index.jsПо умолчанию все новые пользователи получают роль student. Чтобы выдать себе права администратора:
- Запустите бота и нажмите
/start. - Зайдите в базу данных (phpMyAdmin).
- Найдите свой
telegram_idв таблицеusers. - Выполните SQL-запрос:
UPDATE users SET role = 'admin' WHERE telegram_id = ВАШ_ID;- Перезапустите бота или напишите команду
/admin.
student-bot/
├── node_modules/ # Библиотеки
├── .env # Конфигурация (не публикуется в Git)
├── .gitignore # Исключения для Git
├── index.js # Основной код бота
├── package.json # Описание проекта и зависимостей
└── README.md # Документация
- Токены и пароли скрыты в
.env. - Используются Prepared Statements для защиты от SQL Injection.
- Реализована проверка прав доступа (Admin Middleware).
- Обработка
polling_errorдля предотвращения падения бота.