Переписанная версия чисто ИИ
- Rust 100%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
Critical: - download_mp3: URL validation (только YouTube), -- separator, max size 50MB - Ошибки yt-dlp/GPT не уходят пользователю (лог на сервере) - GPT URL из .env (GPT_API_URL) вместо хардкода IP Medium: - weather: sanitize_city — буквы/пробел/дефис, макс 100 символов - callback group: валидация против VALID_GROUPS - Mutex poisoning: unwrap_or_else(|e| e.into_inner()) - PDF download: max 50MB лимит, Content-Length проверка Low: - .env.example: добавлены ACCESS_TOKEN, DEEPGRAM_API_KEY, GPT_API_URL - dotenv: только dotenv::dotenv().ok() (без поиска по директориям) |
||
| src | ||
| .env.example | ||
| .gitignore | ||
| AGENTS.md | ||
| Cargo.lock | ||
| Cargo.toml | ||
| PLAN.md | ||
| README.md | ||
myfirstprogrammonrust
Telegram-бот для проверки и рассылки расписаний учебных групп. Портирован с Python (aiogram) на Rust (teloxide).
Возможности
- Расписание — получить расписание на день текстом (
/rasp) или картинкой (/prasp) - Слежка — автоматическая проверка Google Drive на появление нового расписания (
/power on) - Аддоны: погода, опросы, GPT-чат, todo-лист, генератор изображений, скачивание MP3 и другие
- Админка: логи, статус, аналитика, массовая рассылка, удаление сообщений
Быстрый старт
# 1. Скопировать .env
cp .env.example .env
# 2. Заполнить TELEGRAM_BOT_TOKEN и другие переменные
# 3. Запустить
cargo run --release
Переменные окружения
| Переменная | Описание |
|---|---|
TELEGRAM_BOT_TOKEN |
Токен бота от @BotFather |
ACCESS_TOKEN |
Токен для доступа к API |
DEEPGRAM_API_KEY |
Ключ Deepgram (для голосовых) |
DISABLE_PERSISTENCE |
Отключить логирование и хранение (1) |
DISABLE_LOGGING |
Отключить только логирование |
DISABLE_STORAGE |
Отключить только хранение сообщений |
SCHEDULE_DRIVE_FOLDER_ID |
ID папки Google Drive с расписаниями |
Команды
Расписание
/rasp <группа> [дни]— расписание текстом (по умолчанию на сегодня)/prasp <группа> [дни]— расписание картинкой/set— выбрать группу (inline-клавиатура)
Аддоны
/hello,/bye— приветствие/id— ID пользователя и чата/weather [город]— погода (wttr.in)/gpt <вопрос>— GPT-чат/poll Вопрос | вариант1 | вариант2— опрос/r34 <тег>— поиск изображений/xdays YYYY-MM-DD— дней до даты/draw [размер]— генератор градиента/todo_add,/todo_list,/todo_del— список задач/mp3 <URL>— скачать аудио с YouTube/apps— мини-приложения/mute [сек] [причина]— замутить пользователя (админ level 0)/send_all <текст>— массовая рассылка (админ level 0)
Администрирование
/log— получить лог-файл (level 3)/status— статус бота, CPU, RAM, батарея (level 3)/analytics— аналитика (level 1)/del— удалить все сообщения бота (level 1)/power on [дней]//power off— управление слежкой (level 2)
Аддоны: отключение
По умолчанию включены все. Чтобы собрать без ненужных:
# Без аддонов вообще
cargo build --release --no-default-features
# Только hello + id
cargo build --release --no-default-features \
--features "addon-hello,addon-id"
Список features: addon-hello, addon-id, addon-mute, addon-weather, addon-todo, addon-gpt, addon-poll, addon-rule34, addon-xdays, addon-draw, addon-sendmsg, addon-mp3, addon-miniapps.
Сборка
cargo build # debug
cargo build --release # release (LTO, stripped)
cargo test # тесты
cargo clippy # линтер
Структура проекта
src/
├── main.rs # точка входа, регистрация хендлеров
├── config.rs # переменные окружения, уровни админов
├── state.rs # in-memory состояние бота
├── handlers/
│ ├── admin.rs # /log, /status, /power, /del, /analytics
│ └── schedule.rs # /rasp, /prasp, /set, inline-клавиатура
├── services/
│ ├── drive_schedule_source.rs # парсинг Google Drive embed-страницы
│ ├── schedule_service.rs # извлечение текста из PDF, рендер PNG
│ └── watcher_service.rs # фоновая проверка расписания
├── storage/
│ ├── db.rs # SQLite (WAL mode, connection singleton)
│ ├── message_storage.rs # сохранение message_id для /del
│ └── users_storage.rs # привязка группы к пользователю
├── utils/
│ ├── antispam.rs # защита от спама
│ ├── logging_config.rs # tracing-subscriber
│ └── mac_metrics.rs # батарея, CPU, RAM (macOS)
└── addons/
├── hello.rs, id.rs, mute.rs, weather.rs
├── todo.rs, gpt.rs, poll.rs, rule34.rs
├── x_days_to.rs, draw.rs
├── send_message.rs, download_mp3.rs, miniapps.rs
└── mod.rs # pub mod с #[cfg(feature)]