# Sex Bomba TG Bot Телеграм‑бот, который: - вписывает текст шрифтом Impact (белый с чёрной обводкой) в макеты (`/maket`); - делает мемы из присланных фото (`/gen_mem Up:... Down:...`); - подсказывает, сколько минут до перекура по заданному расписанию (`/break`); - показывает расписание, текущую и следующую пару (`/schedule`, можно с днём недели); - умеет базарить (`/talk`) с контекстом 100 сообщений; - авто-ответы в чате (10% шанс + триггер-слова); - миниигра `/penis` + `/top_penis`; - казино на размер (`/penis_casino`); - гадание на фене с мемом (`/gadanie`); - ставки на матчи CS2, Dota 2, футбол с реальными коэффициентами (`/matches`, `/bet`). ## Запуск ```bash docker compose up --build -d ``` Логи: ```bash docker compose logs -f bot ``` Остановка: ```bash docker compose down ``` Переменные окружения: задайте `BOT_TOKEN` в `.env`. Для ИИ-фич нужен `LLAMA_API_URL`. Для ставок нужен `ODDS_API_KEY` (бесплатно на https://the-odds-api.com). Контейнер хранит состояние в `./db`: - `penis_stats.sqlite3` - `chat_history.sqlite3` - `polychaetsi_stats.json` - `bets.sqlite3` ## Команды - `/start` — отвечает кратко. - `/help` — выводит подсказки и список макетов. - `/maket <текст>` — вписать текст в макет. Доступные: `1 — Владимир Владимирович Путин самый лучший президент` (737x414, точка 104,240). - `/gen_mem Up:верх Down:низ` — прислать с фото (подпись) или ответом на фото. Можно указывать только Up или только Down. - `/break` — показывает, сколько минут до ближайшего перекура/идёт ли перекур. - `/schedule [пн|mon]` — показывает расписание на ближайший указанный день недели; без аргумента показывает сегодня, текущую и следующую пару. - `/talk <сообщение>` — побазарить с ИИ (контекст 100 сообщений). - `/penis` — миниигра, 1 раз в 24 часа. - `/top_penis` — топ по длине. - `/polychaetsi` — топ по слову «получается». - `/penis_casino <ставка>` — казино на размер (макс 1 см, казино всегда в выигрыше). - `/gadanie <тема>` — ИИ-гадание на фене + авто-мем. - `/ebalnik` — вкл/выкл авто-ответы бота в чате. - `/matches [cs|dota|football]` — ближайшие матчи с коэффициентами. - `/bet [спорт] <номер> <исход> <ставка>` — поставить см на матч. - `/mybets` — мои активные ставки. - `/svodka` — сводка СВО. - `/uwu [теги]` — поиск случайной пикчи/гифки на e621 (по умолчанию sfw, можно указать свои теги). ## Макеты и шрифт - Шрифт `impact.ttf` лежит в корне. - Макеты в `maket/`, сейчас есть `1.png`. Добавляйте новые, прописав их в словаре `TEMPLATES` в `main.py`. ## Технологии - Python 3.11, aiogram 3, Pillow. - llama.cpp для ИИ-фич. - Dockerfile + docker-compose для развёртывания. ## Docker Notes - Образ ставит `tzdata`, поэтому `ZoneInfo("Europe/Moscow")` нормально работает в контейнере. - В образ копируется весь проект, а runtime-данные исключены через `.dockerignore`. - Если меняешь код или картинки, достаточно пересобрать: `docker compose up --build -d`. ## Кратко о логике - `/maket` подбирает размер текста, чтобы уместить его в область макета. - `/gen_mem` центрирует текст по ширине, масштабирует под изображение, рисует белый текст с чёрной обводкой. - `/break` считает по расписанию в `config.py` и показывает следующую пару. - Названия пар и верхняя/нижняя неделя лежат в `config.py` в `LESSON_SCHEDULE`. - `/talk` шлёт запрос к llama.cpp серверу с контекстом 100 сообщений (хранятся в SQLite). - `/penis_casino` — слоты с множителем x1.2–x3 (`games/casino.py`). - `/gadanie` — ИИ-гадание + авто-мем через `generate_meme` (`games/fortune.py`). - `/matches` + `/bet` — ставки на реальные матчи, коэффициенты через The-Odds-API (`games/betting.py`). После `/matches cs|dota|football` можно короче: `/bet <номер> <исход> <ставка>`. ## ИИ-модуль (`AI/talk_handler.py`) Подключается к llama.cpp серверу через OpenAI-совместимый API (`/v1/chat/completions`). Хранит контекст 100 сообщений в SQLite. Настройка сервера: 1. Скачать модель: `wget https://huggingface.co/Qwen/Qwen2.5-1.5B-Instruct-GGUF/resolve/main/qwen2.5-1.5b-instruct-q4_k_m.gguf` 2. Запустить: `./llama-server -m model.gguf --host 0.0.0.0 --port 8080 -c 2048` 3. Прописать URL в `.env`: `LLAMA_API_URL=http://адрес:8080`